Index: applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/KmlReader.java
===================================================================
--- applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/KmlReader.java	(revision 36185)
+++ applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/KmlReader.java	(revision 36186)
@@ -55,4 +55,5 @@
 
     public static final Pattern COLOR_PATTERN = Pattern.compile("\\p{XDigit}{8}");
+    private static final Pattern SPACE_PATTERN = Pattern.compile("\\s", Pattern.UNICODE_CHARACTER_CLASS);
 
     private final XMLStreamReader parser;
@@ -144,14 +145,15 @@
                     }
                 } else if (parser.getLocalName().equals(KML_LINE_STRING) || parser.getLocalName().equals(KML_EXT_TRACK)) {
-                    ds.addPrimitive(way = new Way());
+                    way = new Way();
+                    ds.addPrimitive(way);
                     wayNodes = new ArrayList<>();
                     list.add(way);
                 } else if (parser.getLocalName().equals(KML_COORDINATES)) {
-                    String[] tab = parser.getElementText().trim().split("\\s", Pattern.UNICODE_CHARACTER_CLASS);
+                    String[] tab = SPACE_PATTERN.split(parser.getElementText().trim());
                     for (String s : tab) {
                         node = parseNode(ds, wayNodes, node, s.split(","));
                     }
                 } else if (parser.getLocalName().equals(KML_EXT_COORD)) {
-                    node = parseNode(ds, wayNodes, node, parser.getElementText().trim().split("\\s", Pattern.UNICODE_CHARACTER_CLASS));
+                    node = parseNode(ds, wayNodes, node, SPACE_PATTERN.split(parser.getElementText().trim()));
                     if (node != null && when > 0) {
                         node.setRawTimestamp((int) when);
@@ -177,7 +179,9 @@
             }
         }
-        for (OsmPrimitive p : list) {
-            p.putAll(tags);
-        }
+        ds.update(() -> {
+            for (OsmPrimitive p : list) {
+                p.putAll(tags);
+            }
+        });
     }
 
