Index: trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java	(revision 18007)
+++ trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java	(revision 18008)
@@ -1,4 +1,26 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.layer;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+import static org.openstreetmap.josm.tools.I18n.trn;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Graphics2D;
+import java.awt.event.ActionEvent;
+import java.io.File;
+import java.time.Instant;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.NoSuchElementException;
+import java.util.stream.Collectors;
+
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.Icon;
+import javax.swing.JScrollPane;
+import javax.swing.SwingUtilities;
 
 import org.openstreetmap.josm.actions.AutoScaleAction;
@@ -42,25 +64,4 @@
 import org.openstreetmap.josm.tools.date.Interval;
 
-import javax.swing.AbstractAction;
-import javax.swing.Action;
-import javax.swing.Icon;
-import javax.swing.JScrollPane;
-import javax.swing.SwingUtilities;
-import java.awt.Color;
-import java.awt.Dimension;
-import java.awt.Graphics2D;
-import java.awt.event.ActionEvent;
-import java.io.File;
-import java.time.Instant;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.NoSuchElementException;
-import java.util.stream.Collectors;
-
-import static org.openstreetmap.josm.tools.I18n.tr;
-import static org.openstreetmap.josm.tools.I18n.trn;
-
 /**
  * A layer that displays data from a Gpx file / the OSM gpx downloads.
@@ -130,4 +131,6 @@
     @Override
     public Color getColor() {
+        if (data == null)
+            return null;
         Color[] c = data.getTracks().stream().map(t -> t.getColor()).distinct().toArray(Color[]::new);
         return c.length == 1 ? c[0] : null; //only return if exactly one distinct color present
@@ -146,5 +149,5 @@
     @Override
     public boolean hasColor() {
-        return true;
+        return data != null;
     }
 
@@ -168,4 +171,17 @@
                 .append("<html><head><style>td { padding: 4px 16px; }</style></head><body>");
 
+        if (data != null) {
+            fillDataInfoComponent(info);
+        }
+
+        info.append("<br></body></html>");
+
+        final JScrollPane sp = new JScrollPane(new HtmlPanel(info.toString()));
+        sp.setPreferredSize(new Dimension(sp.getPreferredSize().width+20, 370));
+        SwingUtilities.invokeLater(() -> sp.getVerticalScrollBar().setValue(0));
+        return sp;
+    }
+
+    private void fillDataInfoComponent(StringBuilder info) {
         if (data.attr.containsKey("name")) {
             info.append(tr("Name: {0}", data.get(GpxConstants.META_NAME))).append("<br>");
@@ -215,11 +231,5 @@
         info.append(tr("Length: {0}", SystemOfMeasurement.getSystemOfMeasurement().getDistText(data.length()))).append("<br>")
             .append(trn("{0} route, ", "{0} routes, ", data.getRoutes().size(), data.getRoutes().size()))
-            .append(trn("{0} waypoint", "{0} waypoints", data.getWaypoints().size(), data.getWaypoints().size()))
-            .append("<br></body></html>");
-
-        final JScrollPane sp = new JScrollPane(new HtmlPanel(info.toString()));
-        sp.setPreferredSize(new Dimension(sp.getPreferredSize().width+20, 370));
-        SwingUtilities.invokeLater(() -> sp.getVerticalScrollBar().setValue(0));
-        return sp;
+            .append(trn("{0} waypoint", "{0} waypoints", data.getWaypoints().size(), data.getWaypoints().size()));
     }
 
@@ -284,4 +294,14 @@
         StringBuilder info = new StringBuilder(48).append("<html>");
 
+        if (data != null) {
+            fillDataToolTipText(info);
+        }
+
+        info.append("<br></html>");
+
+        return info.toString();
+    }
+
+    private void fillDataToolTipText(StringBuilder info) {
         if (data.attr.containsKey(GpxConstants.META_NAME)) {
             info.append(tr("Name: {0}", data.get(GpxConstants.META_NAME))).append("<br>");
@@ -305,13 +325,9 @@
                         .collect(Collectors.joining("<br>")));
         }
-
-        info.append("<br></html>");
-
-        return info.toString();
     }
 
     @Override
     public boolean isMergable(Layer other) {
-        return other instanceof GpxLayer;
+        return data != null && other instanceof GpxLayer;
     }
 
@@ -323,4 +339,6 @@
      */
     public void filterTracksByDate(Instant fromDate, Instant toDate, boolean showWithoutDate) {
+        if (data == null)
+            return;
         int i = 0;
         long from = fromDate.toEpochMilli();
@@ -358,10 +376,12 @@
     @Override
     public void visitBoundingBox(BoundingXYVisitor v) {
-        v.visit(data.recalculateBounds());
+        if (data != null) {
+            v.visit(data.recalculateBounds());
+        }
     }
 
     @Override
     public File getAssociatedFile() {
-        return data.storageFile;
+        return data != null ? data.storageFile : null;
     }
 
@@ -391,5 +411,5 @@
     @Override
     public void projectionChanged(Projection oldValue, Projection newValue) {
-        if (newValue == null) return;
+        if (newValue == null || data == null) return;
         data.resetEastNorthCache();
     }
@@ -397,5 +417,5 @@
     @Override
     public boolean isSavable() {
-        return true; // With GpxExporter
+        return data != null; // With GpxExporter
     }
 
@@ -560,6 +580,7 @@
     @Override
     public void jumpToNextMarker() {
-        List<IGpxTrackSegment> segments = data.getTrackSegmentsStream().collect(Collectors.toList());
-        jumpToNext(segments);
+        if (data != null) {
+            jumpToNext(data.getTrackSegmentsStream().collect(Collectors.toList()));
+        }
     }
 
@@ -569,7 +590,9 @@
     @Override
     public void jumpToPreviousMarker() {
-        List<IGpxTrackSegment> segments = data.getTrackSegmentsStream().collect(Collectors.toList());
-        Collections.reverse(segments);
-        jumpToNext(segments);
+        if (data != null) {
+            List<IGpxTrackSegment> segments = data.getTrackSegmentsStream().collect(Collectors.toList());
+            Collections.reverse(segments);
+            jumpToNext(segments);
+        }
     }
 
