Index: trunk/src/org/openstreetmap/josm/data/ImageData.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/ImageData.java	(revision 17578)
+++ trunk/src/org/openstreetmap/josm/data/ImageData.java	(revision 17579)
@@ -60,9 +60,9 @@
             Collections.sort(data);
             this.data = data;
+            this.data.forEach(image -> image.setDataSet(this));
         } else {
             this.data = new ArrayList<>();
         }
         this.geoImages.addAll(this.data);
-        data.forEach(image -> image.setDataSet(this));
         selectedImagesIndex.add(-1);
     }
Index: trunk/src/org/openstreetmap/josm/data/gpx/GpxImageCorrelation.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/gpx/GpxImageCorrelation.java	(revision 17578)
+++ trunk/src/org/openstreetmap/josm/data/gpx/GpxImageCorrelation.java	(revision 17579)
@@ -241,4 +241,6 @@
                     curTmp.setGpsTime(new Date(curImg.getExifTime().getTime() - offset));
                     curTmp.flagNewGpsData();
+                    curImg.tmpUpdated();
+
                     ret++;
                 }
@@ -265,4 +267,5 @@
                     curTmp.setGpsTime(new Date(curImg.getExifTime().getTime() - offset));
                     curTmp.flagNewGpsData();
+                    curImg.tmpUpdated();
 
                     ret++;
Index: trunk/src/org/openstreetmap/josm/data/gpx/GpxImageEntry.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/gpx/GpxImageEntry.java	(revision 17578)
+++ trunk/src/org/openstreetmap/josm/data/gpx/GpxImageEntry.java	(revision 17579)
@@ -509,4 +509,5 @@
             tmp = null;
         }
+        tmpUpdated();
     }
 
@@ -517,4 +518,5 @@
     public void discardTmp() {
         tmp = null;
+        tmpUpdated();
     }
 
@@ -548,4 +550,13 @@
         isNewGpsData = true;
    }
+
+    /**
+     * Indicate that the temporary copy has been updated. Mostly used to prevent UI issues.
+     * By default, this is a no-op. Override when needed in subclasses.
+     * @since 17579
+     */
+    protected void tmpUpdated() {
+        // No-op by default
+    }
 
     @Override
Index: trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageEntry.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageEntry.java	(revision 17578)
+++ trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageEntry.java	(revision 17579)
@@ -33,4 +33,5 @@
         super(other);
         thumbnail = other.thumbnail;
+        dataSet = other.dataSet;
     }
 
@@ -78,14 +79,6 @@
 
     @Override
-    public void applyTmp() {
-        super.applyTmp();
-        if (this.dataSet != null) {
-            this.dataSet.fireNodeMoved(this);
-        }
-    }
-
-    @Override
-    public void discardTmp() {
-        super.discardTmp();
+    protected void tmpUpdated() {
+        super.tmpUpdated();
         if (this.dataSet != null) {
             this.dataSet.fireNodeMoved(this);
@@ -123,5 +116,5 @@
             return false;
         ImageEntry other = (ImageEntry) obj;
-        return Objects.equals(thumbnail, other.thumbnail);
+        return Objects.equals(thumbnail, other.thumbnail) && Objects.equals(dataSet, other.dataSet);
     }
 }
