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 33790)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/KmlReader.java	(revision 33791)
@@ -30,4 +30,5 @@
 import org.openstreetmap.josm.plugins.opendata.core.OdConstants;
 import org.openstreetmap.josm.plugins.opendata.core.io.ProjectionPatterns;
+import org.openstreetmap.josm.tools.date.DateUtils;
 
 public class KmlReader extends AbstractReader {
@@ -45,4 +46,8 @@
     public static final String KML_LINEAR_RING = "LinearRing";
     public static final String KML_COORDINATES = "coordinates";
+    public static final String KML_WHEN = "when";
+
+    public static final String KML_EXT_TRACK = "Track";
+    public static final String KML_EXT_COORD = "coord";
     // CHECKSTYLE.ON: SingleSpaceSeparator
 
@@ -93,4 +98,5 @@
     private void parsePlaceMark(DataSet ds) throws XMLStreamException {
         List<OsmPrimitive> list = new ArrayList<>();
+        long when = 0;
         Way way = null;
         Node node = null;
@@ -127,5 +133,5 @@
                         relation.addMember(new RelationMember(role, way));
                     }
-                } else if (parser.getLocalName().equals(KML_LINE_STRING)) {
+                } else if (parser.getLocalName().equals(KML_LINE_STRING) || parser.getLocalName().equals(KML_EXT_TRACK)) {
                     ds.addPrimitive(way = new Way());
                     list.add(way);
@@ -133,20 +139,13 @@
                     String[] tab = parser.getElementText().trim().split("\\s");
                     for (int i = 0; i < tab.length; i++) {
-                        String[] values = tab[i].split(",");
-                        if (values.length >= 2) {
-                            LatLon ll = new LatLon(Double.valueOf(values[1]), Double.valueOf(values[0])).getRoundedToOsmPrecision();
-                            node = nodes.get(ll);
-                            if (node == null) {
-                                ds.addPrimitive(node = new Node(ll));
-                                nodes.put(ll, node);
-                                if (values.length > 2 && !values[2].equals("0")) {
-                                    node.put("ele", values[2]);
-                                }
-                            }
-                            if (way != null) {
-                                way.addNode(node);
-                            }
-                        }
+                        node = parseNode(ds, way, node, tab[i].split(","));
                     }
+                } else if (parser.getLocalName().equals(KML_EXT_COORD)) {
+                    node = parseNode(ds, way, node, parser.getElementText().trim().split("\\s"));
+                    if (node != null && when > 0) {
+                        node.setRawTimestamp((int) when);
+                    }
+                } else if (parser.getLocalName().equals(KML_WHEN)) {
+                    when = DateUtils.tsFromString(parser.getElementText().trim());
                 }
             } else if (event == XMLStreamConstants.END_ELEMENT) {
@@ -164,3 +163,21 @@
         }
     }
+
+    private Node parseNode(DataSet ds, Way way, Node node, String[] values) {
+        if (values.length >= 2) {
+            LatLon ll = new LatLon(Double.valueOf(values[1]), Double.valueOf(values[0])).getRoundedToOsmPrecision();
+            node = nodes.get(ll);
+            if (node == null) {
+                ds.addPrimitive(node = new Node(ll));
+                nodes.put(ll, node);
+                if (values.length > 2 && !values[2].equals("0")) {
+                    node.put("ele", values[2]);
+                }
+            }
+            if (way != null) {
+                way.addNode(node);
+            }
+        }
+        return node;
+    }
 }
