Index: trunk/src/org/openstreetmap/josm/gui/MapFrame.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MapFrame.java	(revision 5034)
+++ trunk/src/org/openstreetmap/josm/gui/MapFrame.java	(revision 5035)
@@ -95,4 +95,5 @@
     public MapStatus statusLine;
 
+    // Toggle dialogs
     public ConflictDialog conflictDialog;
     public FilterDialog filterDialog;
@@ -101,4 +102,9 @@
     public SelectionListDialog selectionListDialog;
     public PropertiesDialog propertiesDialog;
+
+    // Map modes
+    private final MapMode mapModeSelect;
+    private final MapMode mapModeDraw;
+    private final MapMode mapModeZoom;
 
     /**
@@ -140,7 +146,7 @@
         // toolbar
         toolBarActions.setFloatable(false);
-        addMapMode(new IconToggleButton(new SelectAction(this)));
-        addMapMode(new IconToggleButton(new DrawAction(this)));
-        addMapMode(new IconToggleButton(new ZoomAction(this)));
+        addMapMode(new IconToggleButton(mapModeSelect = new SelectAction(this)));
+        addMapMode(new IconToggleButton(mapModeDraw = new DrawAction(this)));
+        addMapMode(new IconToggleButton(mapModeZoom = new ZoomAction(this)));
         addMapMode(new IconToggleButton(new DeleteAction(this), true));
         addMapMode(new IconToggleButton(new ParallelWayAction(this), true));
@@ -208,9 +214,9 @@
     }
 
-    public void selectSelectTool(boolean onlyIfModeless) {
+    public boolean selectSelectTool(boolean onlyIfModeless) {
         if(onlyIfModeless && !Main.pref.getBoolean("modeless", false))
-            return;
-
-        selectMapMode((MapMode)getDefaultButtonAction());
+            return false;
+
+        return selectMapMode(mapModeSelect);
     }
 
@@ -219,6 +225,12 @@
             return;
 
-        Action drawAction = ((AbstractButton)toolBarActions.getComponent(1)).getAction();
-        selectMapMode((MapMode)drawAction);
+        selectMapMode(mapModeDraw);
+    }
+
+    public boolean selectZoomTool(boolean onlyIfModeless) {
+        if(onlyIfModeless && !Main.pref.getBoolean("modeless", false))
+            return false;
+
+        return selectMapMode(mapModeZoom);
     }
 
@@ -318,7 +330,8 @@
      * in such cases.
      * @param mapMode   The new mode to set.
-     */
-    public void selectMapMode(MapMode newMapMode) {
-        selectMapMode(newMapMode, mapView.getActiveLayer());
+     * @return
+     */
+    public boolean selectMapMode(MapMode newMapMode) {
+        return selectMapMode(newMapMode, mapView.getActiveLayer());
     }
 
@@ -328,12 +341,13 @@
      * @param newMapMode
      * @param newLayer
-     */
-    public void selectMapMode(MapMode newMapMode, Layer newLayer) {
+     * @return True if mode is really selected
+     */
+    public boolean selectMapMode(MapMode newMapMode, Layer newLayer) {
         if (newMapMode == null || !newMapMode.layerIsSupported(newLayer))
-            return;
+            return false;
 
         MapMode oldMapMode = this.mapMode;
         if (newMapMode == oldMapMode)
-            return;
+            return true;
         if (oldMapMode != null) {
             oldMapMode.exitMode();
@@ -343,4 +357,5 @@
         lastMapMode.put(newLayer, newMapMode);
         fireMapModeChanged(oldMapMode, newMapMode);
+        return true;
     }
 
