Index: src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java
===================================================================
--- src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java	(revision 2161)
+++ src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java	(working copy)
@@ -96,8 +96,6 @@
      */
     private boolean isCollapsed;
 
-    /** the preferred width of all docked toggle dialogs */
-    final private int TOGGLE_DIALOG_WIDTH = 330;
     /** the preferred height if the toggle dialog is expanded */
     private int preferredHeight;
     /** the label in the title bar which shows whether the toggle dialog is expanded or collapsed */
@@ -130,7 +128,10 @@
      * @param preferredHeight
      */
     private void init(String name, String iconName, String tooltip, Shortcut shortcut, final int preferredHeight) {
-        setPreferredSize(new Dimension(TOGGLE_DIALOG_WIDTH, preferredHeight));
+        /** Use the full width of the parent element */
+        setPreferredSize(new Dimension(0, preferredHeight));
+        /** Override any minimum sizes of child elements so the user can resize freely */
+        setMinimumSize(new Dimension(0,0));
         this.preferredHeight = preferredHeight;
         toggleAction = new ToggleDialogAction(name, "dialogs/"+iconName, tooltip, shortcut, iconName);
         String helpId = "Dialog/"+getClass().getName().substring(getClass().getName().lastIndexOf('.')+1);
@@ -138,7 +139,7 @@
 
         setLayout(new BorderLayout());
 
-        // show the minimize button
+        /** show the minimize button */
         lblMinimized = new JLabel(ImageProvider.get("misc", "normal"));
         titleBar = new TitleBar(name, iconName);
         add(titleBar, BorderLayout.NORTH);
@@ -184,8 +185,8 @@
         setContentVisible(false);
         isCollapsed = true;
         Main.pref.put(preferencePrefix+".minimized", true);
-        setPreferredSize(new Dimension(TOGGLE_DIALOG_WIDTH,20));
-        setMaximumSize(new Dimension(TOGGLE_DIALOG_WIDTH,20));
+        setPreferredSize(new Dimension(0,20));
+        setMaximumSize(new Dimension(Integer.MAX_VALUE,20));
         lblMinimized.setIcon(ImageProvider.get("misc", "minimized"));
         refreshToggleDialogsView();
     }
@@ -197,8 +198,8 @@
         setContentVisible(true);
         isCollapsed = false;
         Main.pref.put(preferencePrefix+".minimized", false);
-        setPreferredSize(new Dimension(TOGGLE_DIALOG_WIDTH,preferredHeight));
-        setMaximumSize(new Dimension(Short.MAX_VALUE, Short.MAX_VALUE));
+        setPreferredSize(new Dimension(0,preferredHeight));
+        setMaximumSize(new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE));
         lblMinimized.setIcon(ImageProvider.get("misc", "normal"));
         refreshToggleDialogsView();
     }
@@ -521,6 +522,6 @@
      * Override this method to customize the initial dialog size.
      */
     protected Dimension getDefaultDetachedSize() {
-        return new Dimension(TOGGLE_DIALOG_WIDTH, preferredHeight);
+        return new Dimension(Main.map.DEF_TOGGLE_DLG_WIDTH, preferredHeight);
     }
 }
Index: src/org/openstreetmap/josm/gui/MapFrame.java
===================================================================
--- src/org/openstreetmap/josm/gui/MapFrame.java	(revision 2161)
+++ src/org/openstreetmap/josm/gui/MapFrame.java	(working copy)
@@ -5,14 +5,19 @@
 import java.awt.BorderLayout;
 import java.awt.Component;
 import java.awt.Container;
+import java.awt.Dimension;
 import java.util.ArrayList;
 
 import javax.swing.AbstractButton;
 import javax.swing.Action;
 import javax.swing.BoxLayout;
 import javax.swing.ButtonGroup;
+import javax.swing.JSplitPane;
 import javax.swing.JPanel;
 import javax.swing.JToolBar;
+import javax.swing.border.Border;
+import javax.swing.plaf.basic.BasicSplitPaneUI;
+import javax.swing.plaf.basic.BasicSplitPaneDivider;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.mapmode.DeleteAction;
@@ -23,12 +28,12 @@
 import org.openstreetmap.josm.actions.mapmode.ZoomAction;
 import org.openstreetmap.josm.gui.dialogs.CommandStackDialog;
 import org.openstreetmap.josm.gui.dialogs.ConflictDialog;
+import org.openstreetmap.josm.gui.dialogs.FilterDialog;
 import org.openstreetmap.josm.gui.dialogs.HistoryDialog;
 import org.openstreetmap.josm.gui.dialogs.LayerListDialog;
 import org.openstreetmap.josm.gui.dialogs.PropertiesDialog;
 import org.openstreetmap.josm.gui.dialogs.RelationListDialog;
 import org.openstreetmap.josm.gui.dialogs.SelectionListDialog;
-import org.openstreetmap.josm.gui.dialogs.FilterDialog;
 import org.openstreetmap.josm.gui.dialogs.ToggleDialog;
 import org.openstreetmap.josm.gui.dialogs.UserListDialog;
 import org.openstreetmap.josm.tools.Destroyable;
@@ -73,12 +78,17 @@
     private ArrayList<ToggleDialog> allDialogs = new ArrayList<ToggleDialog>();
 
     public final ButtonGroup toolGroup = new ButtonGroup();
+    
+    /**
+     * Default width of the toggle dialog area.
+     */
+    public final int DEF_TOGGLE_DLG_WIDTH = 330;
 
     public MapFrame() {
         setSize(400,400);
         setLayout(new BorderLayout());
 
-        add(mapView = new MapView(), BorderLayout.CENTER);
+        mapView = new MapView();
 
         new FileDrop(mapView);
 
@@ -95,8 +105,35 @@
 
         toolGroup.setSelected(((AbstractButton)toolBarActions.getComponent(0)).getModel(), true);
 
-        add(toggleDialogs, BorderLayout.EAST);
+        JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true,
+                             mapView, toggleDialogs); 
+
+        /**
+         * All additional space goes to the mapView
+         */
+        splitPane.setResizeWeight(1.0);
+        
+        /**
+         * Some beautifications.
+         */
+        splitPane.setDividerSize(5);
+        splitPane.setBorder(null);
+        splitPane.setUI(new BasicSplitPaneUI() {
+            public BasicSplitPaneDivider createDefaultDivider() {
+                return new BasicSplitPaneDivider(this) {
+                    public void setBorder(Border b) {
+                    }
+                };
+            }
+        });
+        
+        add(splitPane, BorderLayout.CENTER);
+
         toggleDialogs.setLayout(new BoxLayout(toggleDialogs, BoxLayout.Y_AXIS));
+        toggleDialogs.setPreferredSize(new Dimension(Main.pref.getInteger("toggleDialogs.width",DEF_TOGGLE_DLG_WIDTH), 0));
+                                                                        
+        toggleDialogs.setMinimumSize(new Dimension(24, 0));
+        mapView.setMinimumSize(new Dimension(10,0));
 
         toolBarToggle.setFloatable(false);
         LayerListDialog.createInstance(this);
@@ -267,4 +304,11 @@
         }
         return null;
     }
+
+    /**
+     * Returns the current width of the (possibly resized) toggle dialog area
+     */
+    public int getToggleDlgWidth() {
+        return toggleDialogs.getWidth();
+    }
 }
Index: src/org/openstreetmap/josm/Main.java
===================================================================
--- src/org/openstreetmap/josm/Main.java	(revision 2161)
+++ src/org/openstreetmap/josm/Main.java	(working copy)
@@ -574,8 +574,9 @@
     }
 
     static public void saveGuiGeometry() {
-        // save the current window geometry
+        // save the current window geometry and the width of the toggle dialog area
         String newGeometry = "";
+        String newToggleDlgWidth = "";
         try {
             if (((JFrame)parent).getExtendedState() == JFrame.NORMAL) {
                 Dimension screenDimension = Toolkit.getDefaultToolkit().getScreenSize();
@@ -598,11 +599,17 @@
                 }
                 newGeometry = width + "x" + height + "+" + x + "+" + y;
             }
+            
+            newToggleDlgWidth = Integer.toString(map.getToggleDlgWidth());
+            if (newToggleDlgWidth.equals(Integer.toString(map.DEF_TOGGLE_DLG_WIDTH))) {
+                newToggleDlgWidth = "";
+            }
         }
         catch (Exception e) {
             System.out.println("Failed to save GUI geometry: " + e);
         }
         pref.put("gui.geometry", newGeometry);
+        pref.put("toggleDialogs.width", newToggleDlgWidth);
     }
 
 
