Index: src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java
===================================================================
--- src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java	(revision 18934)
+++ src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java	(working copy)
@@ -146,8 +146,11 @@
     private static void destroyInstance() {
         MapFrame map = MainApplication.getMap();
         synchronized (ImageViewerDialog.class) {
-            if (dialog != null && map != null && map.getToggleDialog(ImageViewerDialog.class) != null) {
-                map.removeToggleDialog(dialog);
+            if (dialog != null) {
+                if (map != null && map.getToggleDialog(ImageViewerDialog.class) != null) {
+                    map.removeToggleDialog(dialog);
+                }
+                dialog.destroy();
             }
         }
         dialog = null;
@@ -302,6 +305,9 @@
                 .filter(IGeoImageLayer.class::isInstance).map(IGeoImageLayer.class::cast).collect(Collectors.toList());
         if (geoImageLayers.isEmpty()) {
             this.layers.setVisible(false);
+            hideNotify();
+            if (hasInstance())
+                destroyInstance();
         } else {
             this.layers.setVisible(true);
             if (changed) {
@@ -416,9 +422,9 @@
         imageRemoveAction.destroy();
         imageRemoveFromDiskAction.destroy();
         imageZoomAction.destroy();
+        toggleAction.destroy();
         cancelLoadingImage();
         super.destroy();
-        destroyInstance();
     }
 
     /**
