Index: trunk/src/org/openstreetmap/josm/actions/DialogsToggleAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/DialogsToggleAction.java	(revision 9005)
+++ trunk/src/org/openstreetmap/josm/actions/DialogsToggleAction.java	(revision 9006)
@@ -57,7 +57,9 @@
             Main.map.setDialogsPanelVisible(selected);
             Main.map.statusLine.setVisible(selected || Main.pref.getBoolean("statusbar.always-visible", true));
-            Main.toolbar.control.setVisible(selected || Main.pref.getBoolean("toolbar.always-visible", true));
             Main.main.menu.setVisible(selected || Main.pref.getBoolean("menu.always-visible", true));
-            // sideToolBar listens to preference changes, use it here
+            // Toolbars listen to preference changes, use it here
+            if (!Main.pref.getBoolean("toolbar.always-visible", true)) {
+                Main.pref.put("toolbar.visible", selected);
+            }
             if (!Main.pref.getBoolean("sidetoolbar.always-visible", true)) {
                 Main.pref.put("sidetoolbar.visible", selected);
Index: trunk/src/org/openstreetmap/josm/gui/MainMenu.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MainMenu.java	(revision 9005)
+++ trunk/src/org/openstreetmap/josm/gui/MainMenu.java	(revision 9006)
@@ -741,4 +741,7 @@
         add(viewMenu, historyinfoweb);
         viewMenu.addSeparator();
+        viewMenu.add(new PreferenceToggleAction(tr("Main toolbar"),
+                tr("Toggles the visibility of the main toolbar (i.e., the horizontal toolbar)"),
+                "toolbar.visible", true).getCheckbox());
         viewMenu.add(new PreferenceToggleAction(tr("Edit toolbar"),
                 tr("Toggles the visibility of the edit toolbar (i.e., the vertical tool)"),
Index: trunk/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java	(revision 9005)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java	(revision 9006)
@@ -69,4 +69,6 @@
 import org.openstreetmap.josm.actions.ParameterizedAction;
 import org.openstreetmap.josm.actions.ParameterizedActionDecorator;
+import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
+import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPreset;
 import org.openstreetmap.josm.tools.GBC;
@@ -483,5 +485,5 @@
     private final DefaultMutableTreeNode rootActionsNode = new DefaultMutableTreeNode(tr("Actions"));
 
-    public JToolBar control = new JToolBar();
+    public final JToolBar control = new JToolBar();
     private final Map<Object, ActionDefinition> buttonActions = new ConcurrentHashMap<>(30);
 
@@ -900,4 +902,12 @@
         control.setFloatable(false);
         control.setComponentPopupMenu(popupMenu);
+        Main.pref.addPreferenceChangeListener(new PreferenceChangedListener() {
+            @Override
+            public void preferenceChanged(PreferenceChangeEvent e) {
+                if ("toolbar.visible".equals(e.getKey())) {
+                    refreshToolbarControl();
+                }
+            }
+        });
     }
 
@@ -1065,6 +1075,9 @@
             }
         }
+
+        boolean visible = Main.pref.getBoolean("toolbar.visible", true);
+
         control.setFocusTraversalKeysEnabled(!unregisterTab);
-        control.setVisible(control.getComponentCount() != 0);
+        control.setVisible(visible && control.getComponentCount() != 0);
         control.repaint();
     }
