Index: src/org/openstreetmap/josm/gui/IconToggleButton.java
===================================================================
--- src/org/openstreetmap/josm/gui/IconToggleButton.java	(revision 4667)
+++ src/org/openstreetmap/josm/gui/IconToggleButton.java	(working copy)
@@ -65,21 +65,28 @@
         }
     }
     
+    String getPreferenceKey() {
+        String s = (String) getSafeActionValue("toolbar");
+        if (s==null) {
+            if (getAction()!=null) s=getAction().getClass().getName();
+        }
+        return "sidetoolbar.hidden."+s;
+        
+    }
+    
     @Override
     public void applyButtonHiddenPreferences() {
-        String actionName = (String) getSafeActionValue(AbstractAction.NAME);
-        boolean hiddenFlag = Main.pref.getBoolean(actionName + ".itbutton_hidden", false);
+        boolean hiddenFlag = Main.pref.getBoolean(getPreferenceKey(), false);
         setVisible(!hiddenFlag);   
     }
 
     @Override
     public void setButtonHidden(boolean b) {
-        String actionName = (String) getSafeActionValue(AbstractAction.NAME);
         setVisible(!b);
         if (listener!=null) { // if someone wants to know about changes of visibility
             if (!b) listener.buttonShown(); else listener.buttonHidden();
         }
-        Main.pref.put(actionName + ".itbutton_hidden", b);
+        Main.pref.put(getPreferenceKey(), b);
     }
     
     @Override
Index: src/org/openstreetmap/josm/gui/MapFrame.java
===================================================================
--- src/org/openstreetmap/josm/gui/MapFrame.java	(revision 4667)
+++ src/org/openstreetmap/josm/gui/MapFrame.java	(working copy)
@@ -407,7 +407,7 @@
             }
         }));
     }
-   
+
         class ListAllButtonsAction extends AbstractAction {
 
         private JButton button;
@@ -453,11 +453,17 @@
         }
         toolBarToggle.repaint();
         for (IconToggleButton b : allMapModeButtons) {
-            b.applyButtonHiddenPreferences();
+            Action a=b.getAction();
+            boolean hideAnyway=false;
+            if (a instanceof MapMode) {
+                hideAnyway = !((MapMode)a).layerIsSupported(Main.main.getActiveLayer());
+            }
+            if (hideAnyway) b.setVisible(false); else  
+                b.applyButtonHiddenPreferences();
         }
         toolBarActions.repaint();
     }
-
+    
     /**
      * Replies the instance of a toggle dialog of type <code>type</code> managed by this
      * map frame
@@ -532,6 +538,7 @@
             mapMode.exitMode();
             mapMode.enterMode();
         }
+        validateToolBarsVisibility();
         // invalidate repaint cache
         Main.map.mapView.preferenceChanged(null);
     }
