Index: trunk/src/org/openstreetmap/josm/Main.java
===================================================================
--- trunk/src/org/openstreetmap/josm/Main.java	(revision 2161)
+++ trunk/src/org/openstreetmap/josm/Main.java	(revision 2162)
@@ -575,6 +575,7 @@
 
     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) {
@@ -599,4 +600,9 @@
                 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) {
@@ -604,4 +610,5 @@
         }
         pref.put("gui.geometry", newGeometry);
+        pref.put("toggleDialogs.width", newToggleDlgWidth);
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/MapFrame.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MapFrame.java	(revision 2161)
+++ trunk/src/org/openstreetmap/josm/gui/MapFrame.java	(revision 2162)
@@ -6,4 +6,5 @@
 import java.awt.Component;
 import java.awt.Container;
+import java.awt.Dimension;
 import java.util.ArrayList;
 
@@ -12,6 +13,10 @@
 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;
@@ -24,4 +29,5 @@
 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;
@@ -29,5 +35,4 @@
 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;
@@ -74,4 +79,9 @@
 
     public final ButtonGroup toolGroup = new ButtonGroup();
+    
+    /**
+     * Default width of the toggle dialog area.
+     */
+    public final int DEF_TOGGLE_DLG_WIDTH = 330;
 
     public MapFrame() {
@@ -79,5 +89,5 @@
         setLayout(new BorderLayout());
 
-        add(mapView = new MapView(), BorderLayout.CENTER);
+        mapView = new MapView();
 
         new FileDrop(mapView);
@@ -96,6 +106,33 @@
         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);
@@ -268,3 +305,10 @@
         return null;
     }
+
+    /**
+     * Returns the current width of the (possibly resized) toggle dialog area
+     */
+    public int getToggleDlgWidth() {
+        return toggleDialogs.getWidth();
+    }
 }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java	(revision 2161)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java	(revision 2162)
@@ -97,6 +97,4 @@
     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;
@@ -131,5 +129,8 @@
      */
     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);
@@ -139,5 +140,5 @@
         setLayout(new BorderLayout());
 
-        // show the minimize button
+        /** show the minimize button */
         lblMinimized = new JLabel(ImageProvider.get("misc", "normal"));
         titleBar = new TitleBar(name, iconName);
@@ -185,6 +186,6 @@
         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();
@@ -198,6 +199,6 @@
         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();
@@ -522,5 +523,5 @@
      */
     protected Dimension getDefaultDetachedSize() {
-        return new Dimension(TOGGLE_DIALOG_WIDTH, preferredHeight);
+        return new Dimension(Main.map.DEF_TOGGLE_DLG_WIDTH, preferredHeight);
     }
 }
