Index: trunk/src/org/openstreetmap/josm/Main.java
===================================================================
--- trunk/src/org/openstreetmap/josm/Main.java	(revision 4566)
+++ trunk/src/org/openstreetmap/josm/Main.java	(revision 4567)
@@ -278,5 +278,5 @@
             final MapFrame mapFrame = new MapFrame(contentPanePrivate);
             setMapFrame(mapFrame);
-            mapFrame.selectMapMode((MapMode)mapFrame.getDefaultButtonAction());
+            mapFrame.selectMapMode((MapMode)mapFrame.getDefaultButtonAction(), layer);
             mapFrame.setVisible(true);
             mapFrame.initializeDialogsPane();
Index: trunk/src/org/openstreetmap/josm/gui/MapFrame.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MapFrame.java	(revision 4566)
+++ trunk/src/org/openstreetmap/josm/gui/MapFrame.java	(revision 4567)
@@ -288,5 +288,5 @@
         return button;
     }
-    
+
     public void validateToolBarToggle() {
         toolBarToggle.removeAll();
@@ -320,8 +320,23 @@
     /**
      * Change the operating map mode for the view. Will call unregister on the
-     * old MapMode and register on the new one.
+     * old MapMode and register on the new one. Now this function also verifies
+     * if new map mode is correct mode for current layer and does not change mode
+     * in such cases.
      * @param mapMode   The new mode to set.
      */
     public void selectMapMode(MapMode newMapMode) {
+        selectMapMode(newMapMode, mapView.getActiveLayer());
+    }
+
+    /**
+     * Another version of the selectMapMode for changing layer action.
+     * Pass newly selected layer to this method.
+     * @param newMapMode
+     * @param newLayer
+     */
+    public void selectMapMode(MapMode newMapMode, Layer newLayer) {
+        if (newMapMode == null || !newMapMode.layerIsSupported(newLayer))
+            return;
+
         MapMode oldMapMode = this.mapMode;
         if (newMapMode == oldMapMode)
@@ -332,5 +347,5 @@
         this.mapMode = newMapMode;
         newMapMode.enterMode();
-        lastMapMode.put(mapView.getActiveLayer(), newMapMode);
+        lastMapMode.put(newLayer, newMapMode);
         fireMapModeChanged(oldMapMode, newMapMode);
     }
@@ -474,6 +489,8 @@
             modeChanged = newMapMode != mapMode;
             if (newMapMode != null) {
-                selectMapMode(newMapMode);
-            } // it would be nice to select first supported mode when layer is first selected, but it don't work well with for example editgpx layer
+                selectMapMode(newMapMode, newLayer); // it would be nice to select first supported mode when layer is first selected, but it don't work well with for example editgpx layer
+            } else {
+                mapMode.exitMode(); // if new mode is null - simply exit from previous mode
+            }
         }
         if (!modeChanged && mapMode != null) {
