Index: /trunk/src/org/openstreetmap/josm/actions/PreferenceToggleAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/PreferenceToggleAction.java	(revision 5092)
+++ /trunk/src/org/openstreetmap/josm/actions/PreferenceToggleAction.java	(revision 5092)
@@ -0,0 +1,40 @@
+package org.openstreetmap.josm.actions;
+
+import java.awt.event.ActionEvent;
+import javax.swing.JCheckBoxMenuItem;
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.Preferences;
+import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
+
+public class PreferenceToggleAction extends JosmAction implements PreferenceChangedListener {
+
+    private final JCheckBoxMenuItem checkbox;
+    private final String prefKey;
+    private final boolean prefDefault;
+
+    public PreferenceToggleAction(String name, String tooltip, String prefKey, boolean prefDefault) {
+        super(name, null, tooltip, null, false);
+        putValue("toolbar", "toggle-" + prefKey);
+        this.prefKey = prefKey;
+        this.prefDefault = prefDefault;
+        this.checkbox = new JCheckBoxMenuItem(this);
+        this.checkbox.setSelected(Main.pref.getBoolean(prefKey, prefDefault));
+        Main.pref.addPreferenceChangeListener(this);
+    }
+
+    @Override
+    public void actionPerformed(ActionEvent e) {
+        Main.pref.put(prefKey, checkbox.isSelected());
+    }
+
+    public JCheckBoxMenuItem getCheckbox() {
+        return checkbox;
+    }
+
+    @Override
+    public void preferenceChanged(Preferences.PreferenceChangeEvent e) {
+        if (prefKey.equals(e.getKey())) {
+            checkbox.setSelected(Main.pref.getBoolean(prefKey, prefDefault));
+        }
+    }
+}
Index: /trunk/src/org/openstreetmap/josm/gui/MainMenu.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/MainMenu.java	(revision 5091)
+++ /trunk/src/org/openstreetmap/josm/gui/MainMenu.java	(revision 5092)
@@ -91,4 +91,5 @@
 import org.openstreetmap.josm.actions.ZoomOutAction;
 import org.openstreetmap.josm.actions.OrthogonalizeAction.Undo;
+import org.openstreetmap.josm.actions.PreferenceToggleAction;
 import org.openstreetmap.josm.actions.audio.AudioBackAction;
 import org.openstreetmap.josm.actions.audio.AudioFasterAction;
@@ -515,4 +516,7 @@
         add(viewMenu, historyinfoweb);
         viewMenu.addSeparator();
+        viewMenu.add(new PreferenceToggleAction(tr("Edit toolbar"),
+                tr("Toggles the visibility of the edit toolbar (i.e., the vertical tool)"),
+                "sidetoolbar.visible", true).getCheckbox());
         // -- expert mode toggle action
         final JCheckBoxMenuItem expertItem = new JCheckBoxMenuItem(ExpertToggleAction.getInstance());
Index: /trunk/src/org/openstreetmap/josm/gui/MapFrame.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/MapFrame.java	(revision 5091)
+++ /trunk/src/org/openstreetmap/josm/gui/MapFrame.java	(revision 5092)
@@ -49,4 +49,6 @@
 import org.openstreetmap.josm.actions.mapmode.SelectAction;
 import org.openstreetmap.josm.actions.mapmode.ZoomAction;
+import org.openstreetmap.josm.data.Preferences;
+import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
 import org.openstreetmap.josm.gui.MapView.LayerChangeListener;
 import org.openstreetmap.josm.gui.dialogs.ChangesetDialog;
@@ -397,18 +399,44 @@
         }
 
-        if(Main.pref.getBoolean("sidetoolbar.visible", true))
-        {
-            if(Main.pref.getBoolean("sidetoolbar.scrollable", true)) {
-                final ScrollViewport svp = new ScrollViewport(jb, ScrollViewport.VERTICAL_DIRECTION);
-                panel.add(svp, BorderLayout.WEST);
-                jb.addMouseWheelListener(new MouseWheelListener() {
-                    public void mouseWheelMoved(MouseWheelEvent e) {
-                        svp.scroll(0,e.getUnitsToScroll() * 5);
+        final Component toToggle;
+        if (Main.pref.getBoolean("sidetoolbar.scrollable", true)) {
+            final ScrollViewport svp = new ScrollViewport(jb, ScrollViewport.VERTICAL_DIRECTION);
+            toToggle = svp;
+            panel.add(svp, BorderLayout.WEST);
+            jb.addMouseWheelListener(new MouseWheelListener() {
+
+                public void mouseWheelMoved(MouseWheelEvent e) {
+                    svp.scroll(0, e.getUnitsToScroll() * 5);
+                }
+            });
+        } else {
+            toToggle = jb;
+            panel.add(jb, BorderLayout.WEST);
+        }
+        toToggle.setVisible(Main.pref.getBoolean("sidetoolbar.visible", true));
+
+        jb.addMouseListener(new PopupMenuLauncher(new JPopupMenu() {
+
+            {
+                add(new AbstractAction(tr("Hide edit toolbar")) {
+
+                    @Override
+                    public void actionPerformed(ActionEvent e) {
+                        Main.pref.put("sidetoolbar.visible", false);
                     }
                 });
-            } else {
-                panel.add(jb, BorderLayout.WEST);
-            }
-        }
+            }
+        }));
+
+        Main.pref.addPreferenceChangeListener(new Preferences.PreferenceChangedListener() {
+
+            @Override
+            public void preferenceChanged(PreferenceChangeEvent e) {
+                if ("sidetoolbar.visible".equals(e.getKey())) {
+                    toToggle.setVisible(Main.pref.getBoolean("sidetoolbar.visible"));
+                }
+            }
+        });
+
         if (statusLine != null && Main.pref.getBoolean("statusline.visible", true)) {
             panel.add(statusLine, BorderLayout.SOUTH);
