Index: /applications/editors/josm/plugins/photoadjust/src/org/openstreetmap/josm/plugins/photoadjust/PhotoAdjustMapMode.java
===================================================================
--- /applications/editors/josm/plugins/photoadjust/src/org/openstreetmap/josm/plugins/photoadjust/PhotoAdjustMapMode.java	(revision 32862)
+++ /applications/editors/josm/plugins/photoadjust/src/org/openstreetmap/josm/plugins/photoadjust/PhotoAdjustMapMode.java	(revision 32863)
@@ -43,4 +43,6 @@
     private IconToggleButton mmButton;
     private PhotoAdjustWorker worker;
+    /** True if one existing GeoImageLayer is to be ignored. */
+    private boolean ignoreOneGILayer = false;
 
     public PhotoAdjustMapMode(MapFrame mapFrame, PhotoAdjustWorker worker) {
@@ -55,4 +57,6 @@
         initAdapters();
         this.worker = worker;
+        Main.getLayerManager().addLayerChangeListener(this);
+        Main.getLayerManager().addActiveLayerChangeListener(this);
     }
 
@@ -133,6 +137,4 @@
         super.enterMode();
         modeSelected = true;
-        Main.getLayerManager().addLayerChangeListener(this);
-        Main.getLayerManager().addActiveLayerChangeListener(this);
         // Activate the mode only if the current layer is not a GeoImageLayer.
         // GeoImageLayer's are handled by the plug-in directly.
@@ -145,6 +147,4 @@
     public void exitMode() {
         super.exitMode();
-        Main.getLayerManager().removeActiveLayerChangeListener(this);
-        Main.getLayerManager().removeLayerChangeListener(this);
         deactivateMode();
         modeSelected = false;
@@ -168,7 +168,14 @@
 
     @Override
-    public void layerRemoving(LayerRemoveEvent e) {
+    public void layerRemoving(LayerRemoveEvent lre) {
+        if (lre.getRemovedLayer() instanceof GeoImageLayer) {
+            // A GeoImageLayer is about to be removed.  We ignore this layer
+            // in the following update methods to get the correct number of
+            // future GeoImageLayers.
+            ignoreOneGILayer = true;
+        }
         if (modeActive) updateStatusLine();
         updateButtonState();
+        ignoreOneGILayer = false;
     }
 
@@ -213,5 +220,9 @@
     private boolean hasLayersToAdjust() {
         if (Main.map == null || Main.map.mapView == null) return false;
-        return ! Main.getLayerManager().getLayersOfType(GeoImageLayer.class).isEmpty();
+        int giLayerNum = Main.getLayerManager().getLayersOfType(GeoImageLayer.class).size();
+        if (ignoreOneGILayer) {
+            giLayerNum--;
+        }
+        return giLayerNum > 0;
     }
 
@@ -229,3 +240,12 @@
         return all;
     }
+
+ 
+    @Override 
+    public void destroy() { 
+        super.destroy(); 
+        Main.getLayerManager().removeActiveLayerChangeListener(this);
+        Main.getLayerManager().removeLayerChangeListener(this);
+    } 
+
 }
