Index: trunk/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java	(revision 15497)
+++ trunk/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java	(revision 15498)
@@ -38,8 +38,10 @@
 import java.util.TimeZone;
 import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
 
 import javax.swing.AbstractAction;
 import javax.swing.AbstractListModel;
 import javax.swing.BorderFactory;
+import javax.swing.DefaultComboBoxModel;
 import javax.swing.JButton;
 import javax.swing.JCheckBox;
@@ -246,5 +248,5 @@
 
     private ExtendedDialog syncDialog;
-    private final transient List<GpxDataWrapper> gpxLst = new ArrayList<>();
+    private MutableComboBoxModel<GpxDataWrapper> gpxModel;
     private JPanel outerPanel;
     private JosmComboBox<GpxDataWrapper> cbGpx;
@@ -276,9 +278,8 @@
             try {
                 outerPanel.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
-
-                for (int i = gpxLst.size() - 1; i >= 0; i--) {
-                    GpxDataWrapper wrapper = gpxLst.get(i);
+                for (int i = gpxModel.getSize() - 1; i >= 0; i--) {
+                    GpxDataWrapper wrapper = gpxModel.getElementAt(i);
                     if (sel.equals(wrapper.file)) {
-                        cbGpx.setSelectedIndex(i);
+                        gpxModel.setSelectedItem(wrapper);
                         if (!sel.getName().equals(wrapper.name)) {
                             JOptionPane.showMessageDialog(
@@ -319,14 +320,11 @@
                 }
 
-                MutableComboBoxModel<GpxDataWrapper> model = (MutableComboBoxModel<GpxDataWrapper>) cbGpx.getModel();
                 loadedGpxData.add(data);
-                if (gpxLst.get(0).file == null) {
-                    gpxLst.remove(0);
-                    model.removeElementAt(0);
+                if (gpxModel.getElementAt(0).file == null) {
+                    gpxModel.removeElementAt(0);
                 }
                 GpxDataWrapper elem = new GpxDataWrapper(sel.getName(), data, sel);
-                gpxLst.add(elem);
-                model.addElement(elem);
-                cbGpx.setSelectedIndex(cbGpx.getItemCount() - 1);
+                gpxModel.addElement(elem);
+                gpxModel.setSelectedItem(elem);
             } finally {
                 outerPanel.setCursor(Cursor.getDefaultCursor());
@@ -795,11 +793,8 @@
                     GpxLayer gpx = (GpxLayer) layer;
                     GpxDataWrapper gdw = new GpxDataWrapper(gpx.getName(), gpx.data, gpx.data.storageFile);
-                    gpxLst.add(gdw);
-                    MutableComboBoxModel<GpxDataWrapper> model = (MutableComboBoxModel<GpxDataWrapper>) cbGpx.getModel();
-                    if (gpxLst.get(0).file == null) {
-                        gpxLst.remove(0);
-                        model.removeElementAt(0);
+                    if (gpxModel.getElementAt(0).file == null) {
+                        gpxModel.removeElementAt(0);
                     }
-                    model.addElement(gdw);
+                    gpxModel.addElement(gdw);
                 }
             }
@@ -820,21 +815,26 @@
     public void actionPerformed(ActionEvent ae) {
         // Construct the list of loaded GPX tracks
-        gpxLst.clear();
+        gpxModel = new DefaultComboBoxModel<>();
         GpxDataWrapper defaultItem = null;
-        for (GpxLayer cur : MainApplication.getLayerManager().getLayersOfType(GpxLayer.class)) {
+        for (GpxLayer cur : MainApplication.getLayerManager().getLayersOfType(GpxLayer.class).stream().filter(GpxLayer::isLocalFile).collect(Collectors.toList())) {
             GpxDataWrapper gdw = new GpxDataWrapper(cur.getName(), cur.data, cur.data.storageFile);
-            gpxLst.add(gdw);
-            if (cur == yLayer.gpxLayer) {
+            gpxModel.addElement(gdw);
+            if (cur == yLayer.gpxLayer || (defaultItem == null && gdw.file != null)) {
                 defaultItem = gdw;
             }
         }
         for (GpxData data : loadedGpxData) {
-            gpxLst.add(new GpxDataWrapper(data.storageFile.getName(),
-                    data,
-                    data.storageFile));
-        }
-
-        if (gpxLst.isEmpty()) {
-            gpxLst.add(new GpxDataWrapper(tr("<No GPX track loaded yet>"), null, null));
+            GpxDataWrapper gdw = new GpxDataWrapper(data.storageFile.getName(), data, data.storageFile);
+            gpxModel.addElement(gdw);
+            if (defaultItem == null && gdw.file != null) { // select first GPX track associated to a file
+                defaultItem = gdw;
+            }
+        }
+
+        GpxDataWrapper nogdw = new GpxDataWrapper(tr("<No GPX track loaded yet>"), null, null);
+        if (gpxModel.getSize() == 0) {
+            gpxModel.addElement(nogdw);
+        } else if (defaultItem != null) {
+            gpxModel.setSelectedItem(defaultItem);
         }
 
@@ -843,11 +843,6 @@
         panelCb.add(new JLabel(tr("GPX track: ")));
 
-        cbGpx = new JosmComboBox<>(gpxLst.toArray(new GpxDataWrapper[0]));
-        if (defaultItem != null) {
-            cbGpx.setSelectedItem(defaultItem);
-        } else {
-            // select first GPX track associated to a file
-            gpxLst.stream().filter(i -> i.file != null).findFirst().ifPresent(cbGpx::setSelectedItem);
-        }
+        cbGpx = new JosmComboBox<>(gpxModel);
+        cbGpx.setPrototypeDisplayValue(nogdw);
         cbGpx.addActionListener(statusBarUpdaterWithRepaint);
         panelCb.add(cbGpx);
@@ -1365,5 +1360,5 @@
 
     private GpxDataWrapper selectedGPX(boolean complain) {
-        Object item = cbGpx.getSelectedItem();
+        Object item = gpxModel.getSelectedItem();
 
         if (item == null || ((GpxDataWrapper) item).file == null) {
