Index: trunk/src/org/openstreetmap/josm/gui/MapFrame.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MapFrame.java	(revision 2628)
+++ trunk/src/org/openstreetmap/josm/gui/MapFrame.java	(revision 2629)
@@ -9,5 +9,7 @@
 import java.awt.event.MouseWheelListener;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
 
 import javax.swing.AbstractButton;
@@ -216,5 +218,5 @@
 
     /**
-     * 
+     *
      */
     public void tearDownDialogsPane() {
@@ -257,12 +259,14 @@
      * @param mapMode   The new mode to set.
      */
-    public void selectMapMode(MapMode mapMode) {
-        if (mapMode == this.mapMode)
+    public void selectMapMode(MapMode newMapMode) {
+        MapMode oldMapMode = this.mapMode;
+        if (newMapMode == oldMapMode)
             return;
-        if (this.mapMode != null) {
-            this.mapMode.exitMode();
-        }
-        this.mapMode = mapMode;
-        mapMode.enterMode();
+        if (oldMapMode != null) {
+            oldMapMode.exitMode();
+        }
+        this.mapMode = newMapMode;
+        newMapMode.enterMode();
+        fireMapModeChanged(oldMapMode, newMapMode);
     }
 
@@ -319,3 +323,41 @@
         return dialogsPanel.getWidth();
     }
+
+    /**
+     * Interface to notify listeners of the change of the mapMode.
+     */
+    public interface MapModeChangeListener {
+        void mapModeChange(MapMode oldMapMode, MapMode newMapMode);
+    }
+
+    /**
+     * the mapMode listeners
+     */
+    private static final Collection<MapModeChangeListener> mapModeChangeListeners = new CopyOnWriteArrayList<MapModeChangeListener>();
+     /**
+     * Adds a mapMode change listener
+     *
+     * @param listener the listener. Ignored if null or already registered.
+     */
+    public static void addMapModeChangeListener(MapModeChangeListener listener) {
+        if (listener != null && ! mapModeChangeListeners.contains(listener)) {
+            mapModeChangeListeners.add(listener);
+        }
+    }
+    /**
+     * Removes a mapMode change listener
+     *
+     * @param listener the listener. Ignored if null or already registered.
+     */
+    public static void removeMapModeChangeListener(MapModeChangeListener listener) {
+        if (listener != null && mapModeChangeListeners.contains(listener)) {
+            mapModeChangeListeners.remove(listener);
+        }
+    }
+
+    protected static void fireMapModeChanged(MapMode oldMapMode, MapMode newMapMode) {
+        for (MapModeChangeListener l : mapModeChangeListeners) {
+            l.mapModeChange(oldMapMode, newMapMode);
+        }
+    }
 }
Index: trunk/src/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayer.java	(revision 2628)
+++ trunk/src/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayer.java	(revision 2629)
@@ -46,4 +46,5 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.RenameLayerAction;
+import org.openstreetmap.josm.actions.mapmode.MapMode;
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.coor.CachedLatLon;
@@ -51,4 +52,6 @@
 import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
 import org.openstreetmap.josm.gui.ExtendedDialog;
+import org.openstreetmap.josm.gui.MapFrame;
+import org.openstreetmap.josm.gui.MapFrame.MapModeChangeListener;
 import org.openstreetmap.josm.gui.MapView;
 import org.openstreetmap.josm.gui.PleaseWaitRunnable;
@@ -646,4 +649,5 @@
 
     private MouseAdapter mouseAdapter = null;
+    private MapModeChangeListener mapModeListener = null;
 
     private void hook_up_mouse_events() {
@@ -689,10 +693,23 @@
             }
         };
-        Main.map.mapView.addMouseListener(mouseAdapter);
+
+        mapModeListener = new MapModeChangeListener() {
+            public void mapModeChange(MapMode oldMapMode, MapMode newMapMode) {
+                if (newMapMode instanceof org.openstreetmap.josm.actions.mapmode.SelectAction) {
+                    Main.map.mapView.addMouseListener(mouseAdapter);
+                } else {
+                    Main.map.mapView.removeMouseListener(mouseAdapter);
+                }
+            }
+        };
+
+        Main.map.addMapModeChangeListener(mapModeListener);
+        mapModeListener.mapModeChange(null, Main.map.mapMode);
+
         MapView.addLayerChangeListener(new LayerChangeListener() {
             public void activeLayerChange(Layer oldLayer, Layer newLayer) {
-                if (newLayer == GeoImageLayer.this && currentPhoto >= 0) {
-                    Main.main.map.repaint();
-                    ImageViewerDialog.showImage(GeoImageLayer.this, data.get(currentPhoto));
+                if (newLayer == GeoImageLayer.this) {
+                    // only in select mode it is possible to click the images
+                    Main.map.selectSelectTool(false);
                 }
             }
@@ -707,4 +724,5 @@
                     }
                     Main.map.mapView.removeMouseListener(mouseAdapter);
+                    Main.map.removeMapModeChangeListener(mapModeListener);
                     currentPhoto = -1;
                     data.clear();
