Index: trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageDisplay.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageDisplay.java	(revision 18946)
+++ trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageDisplay.java	(revision 18947)
@@ -117,4 +117,6 @@
     private UpdateImageThread updateImageThreadInstance;
 
+    private boolean destroyed;
+
     private class UpdateImageThread extends Thread {
         private boolean restart;
@@ -620,11 +622,14 @@
     @Override
     public void destroy() {
-        removeMouseListener(imgMouseListener);
-        removeMouseWheelListener(imgMouseListener);
-        removeMouseMotionListener(imgMouseListener);
-        Config.getPref().removePreferenceChangeListener(this);
-        if (imageProcessor instanceof ImageryFilterSettings) {
-            ((ImageryFilterSettings) imageProcessor).removeFilterChangeListener(this);
-        }
+        if (!destroyed) {
+            removeMouseListener(imgMouseListener);
+            removeMouseWheelListener(imgMouseListener);
+            removeMouseMotionListener(imgMouseListener);
+            Config.getPref().removePreferenceChangeListener(this);
+            if (imageProcessor instanceof ImageryFilterSettings) {
+                ((ImageryFilterSettings) imageProcessor).removeFilterChangeListener(this);
+            }
+        }
+        destroyed = true;
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java	(revision 18946)
+++ trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java	(revision 18947)
@@ -411,4 +411,6 @@
         cancelLoadingImage();
         super.destroy();
+        // make sure that Image Display is destroyed here, it might not be a component
+        imgDisplay.destroy();
         // Ensure that this dialog is removed from memory
         destroyInstance();
