Index: src/org/openstreetmap/josm/actions/DialogsToggleAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/DialogsToggleAction.java	(revision 0)
+++ src/org/openstreetmap/josm/actions/DialogsToggleAction.java	(revision 0)
@@ -0,0 +1,80 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.actions;
+
+import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.KeyEvent;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.ButtonModel;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.tools.Shortcut;
+
+public class DialogsToggleAction extends JosmAction {
+    private final List<ButtonModel> buttonModels = new ArrayList<ButtonModel>();
+    private boolean selected;
+
+    public DialogsToggleAction() {
+        super(
+                tr("Toggle dialogs panel"),
+                null, /* no icon */
+                tr("Toggle dialogs panel, maximize mapview"),
+                Shortcut.registerShortcut("menu:view:dialogspanel", tr("Toggle dialogs panel"),KeyEvent.VK_TAB, Shortcut.DIRECT),
+                false /* register */
+        );
+        putValue("help", ht("/Action/ToggleDialogsPanel"));
+        //putValue("toolbar", "dialogspanel");
+        //Main.toolbar.register(this);
+        selected = Main.pref.getBoolean("draw.dialogspanel", true);
+        notifySelectedState();
+    }
+
+    public void addButtonModel(ButtonModel model) {
+        if (model != null && !buttonModels.contains(model)) {
+            buttonModels.add(model);
+        }
+    }
+
+    public void removeButtonModel(ButtonModel model) {
+        if (model != null && buttonModels.contains(model)) {
+            buttonModels.remove(model);
+        }
+    }
+
+    protected void notifySelectedState() {
+        for (ButtonModel model: buttonModels) {
+            if (model.isSelected() != selected) {
+                model.setSelected(selected);
+            }
+        }
+    }
+
+    protected void toggleSelectedState() {
+        selected = !selected;
+        Main.pref.put("draw.dialogspanel", selected);
+        notifySelectedState();
+        setMode();
+    }
+
+    public void initial() {
+        if(selected) {
+            setMode();
+        }
+    }
+
+    protected void setMode() {
+        if (Main.isDisplayingMapView()) {
+            Main.map.setDialogsPanelVisible(selected);
+            Main.toolbar.control.setVisible(selected);
+            Main.main.menu.setVisible(selected);
+        }
+    }
+
+    public void actionPerformed(ActionEvent e) {
+        toggleSelectedState();
+    }
+}
Index: src/org/openstreetmap/josm/gui/MainMenu.java
===================================================================
--- src/org/openstreetmap/josm/gui/MainMenu.java	(revision 5916)
+++ src/org/openstreetmap/josm/gui/MainMenu.java	(working copy)
@@ -33,6 +33,7 @@
 import org.openstreetmap.josm.actions.CreateCircleAction;
 import org.openstreetmap.josm.actions.CreateMultipolygonAction;
 import org.openstreetmap.josm.actions.DeleteAction;
+import org.openstreetmap.josm.actions.DialogsToggleAction;
 import org.openstreetmap.josm.actions.DistributeAction;
 import org.openstreetmap.josm.actions.DownloadAction;
 import org.openstreetmap.josm.actions.DownloadPrimitiveAction;
@@ -62,8 +63,10 @@
 import org.openstreetmap.josm.actions.OpenFileAction;
 import org.openstreetmap.josm.actions.OpenLocationAction;
 import org.openstreetmap.josm.actions.OrthogonalizeAction;
+import org.openstreetmap.josm.actions.OrthogonalizeAction.Undo;
 import org.openstreetmap.josm.actions.PasteAction;
 import org.openstreetmap.josm.actions.PasteTagsAction;
+import org.openstreetmap.josm.actions.PreferenceToggleAction;
 import org.openstreetmap.josm.actions.PreferencesAction;
 import org.openstreetmap.josm.actions.PurgeAction;
 import org.openstreetmap.josm.actions.RedoAction;
@@ -90,8 +93,6 @@
 import org.openstreetmap.josm.actions.WireframeToggleAction;
 import org.openstreetmap.josm.actions.ZoomInAction;
 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;
 import org.openstreetmap.josm.actions.audio.AudioFwdAction;
@@ -229,6 +230,7 @@
     public final JumpToAction jumpToAct = new JumpToAction();
 
     public final TaggingPresetSearchAction presetSearchAction = new TaggingPresetSearchAction();
+    public final DialogsToggleAction dialogsToggleAction = new DialogsToggleAction();
     public FullscreenToggleAction fullscreenToggleAction = null;
 
     /** this menu listener hides unnecessary JSeparators in a menu list but does not remove them.
@@ -514,6 +516,13 @@
             fullscreen.setAccelerator(fullscreenToggleAction.getShortcut().getKeyStroke());
             fullscreenToggleAction.addButtonModel(fullscreen.getModel());
         }
+
+        // -- dialogs panel toggle action
+        final JCheckBoxMenuItem dialogspanel = new JCheckBoxMenuItem(dialogsToggleAction);
+        dialogspanel.setAccelerator(dialogsToggleAction.getShortcut().getKeyStroke());
+        dialogsToggleAction.addButtonModel(dialogspanel.getModel());
+        viewMenu.add(dialogspanel);
+
         viewMenu.addSeparator();
         add(viewMenu, info);
         add(viewMenu, infoweb);
Index: src/org/openstreetmap/josm/gui/MapFrame.java
===================================================================
--- src/org/openstreetmap/josm/gui/MapFrame.java	(revision 5916)
+++ src/org/openstreetmap/josm/gui/MapFrame.java	(working copy)
@@ -9,6 +9,7 @@
 import java.awt.Dimension;
 import java.awt.Font;
 import java.awt.GridBagLayout;
+import java.awt.KeyboardFocusManager;
 import java.awt.Rectangle;
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
@@ -17,6 +18,7 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.CopyOnWriteArrayList;
@@ -120,6 +122,7 @@
      * instead of adding directly to this list.
      */
     private List<ToggleDialog> allDialogs = new ArrayList<ToggleDialog>();
+    private final JSplitPane splitPane;
     private final JPanel leftPanel;
     private final DialogsPanel dialogsPanel;
 
@@ -177,7 +180,7 @@
 
         toolGroup.setSelected(((AbstractButton)toolBarActions.getComponent(0)).getModel(), true);
 
-        JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true);
+        splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true);
         dialogsPanel = new DialogsPanel(splitPane);
         splitPane.setLeftComponent(leftPanel);
         splitPane.setRightComponent(dialogsPanel);
@@ -233,6 +236,13 @@
         // status line below the map
         statusLine = new MapStatus(this);
         MapView.addLayerChangeListener(this);
+
+        // free tabulator key to toggle dialogsPanel
+        HashSet<KeyStroke> ks = new HashSet<KeyStroke>(1);
+        ks.add(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, KeyEvent.CTRL_DOWN_MASK));
+        KeyboardFocusManager kfm = KeyboardFocusManager.getCurrentKeyboardFocusManager();
+        kfm.setDefaultFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, ks);
+        splitPane.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, ks);
     }
 
     public boolean selectSelectTool(boolean onlyIfModeless) {
@@ -543,12 +553,21 @@
         return dialogsPanel.getToggleDialog(type);
     }
 
+    public void setDialogsPanelVisible(boolean visible) {
+        rememberToggleDialogWidth();
+        dialogsPanel.setVisible(visible);
+        splitPane.setDividerLocation(visible?splitPane.getWidth()-Main.pref.getInteger("toggleDialogs.width",DEF_TOGGLE_DLG_WIDTH):0);
+        splitPane.setDividerSize(visible?5:0);
+    }
+
     /**
      * Remember the current width of the (possibly resized) toggle dialog area
      */
     public void rememberToggleDialogWidth() {
-        Main.pref.putInteger("toggleDialogs.width", dialogsPanel.getWidth());
+        if (dialogsPanel.isVisible()) {
+            Main.pref.putInteger("toggleDialogs.width", splitPane.getWidth()-splitPane.getDividerLocation());
     }
+    }
 
     /*
      * Remove panel from top of MapView by class