diff --git a/src/org/openstreetmap/josm/gui/dialogs/MapPaintDialog.java b/src/org/openstreetmap/josm/gui/dialogs/MapPaintDialog.java
index 238daac..cb8d8e8 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/MapPaintDialog.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/MapPaintDialog.java
@@ -69,6 +69,7 @@ import org.openstreetmap.josm.gui.mappaint.MapPaintStyles.MapPaintSylesUpdateLis
 import org.openstreetmap.josm.gui.mappaint.StyleSource;
 import org.openstreetmap.josm.gui.preferences.PreferenceDialog;
 import org.openstreetmap.josm.gui.preferences.SourceEntry;
+import org.openstreetmap.josm.gui.preferences.map.MapPaintPreference;
 import org.openstreetmap.josm.gui.widgets.HtmlPanel;
 import org.openstreetmap.josm.gui.widgets.PopupMenuLauncher;
 import org.openstreetmap.josm.tools.GBC;
@@ -452,7 +453,7 @@ public class MapPaintDialog extends ToggleDialog {
         @Override
         public void actionPerformed(ActionEvent e) {
             final PreferenceDialog p =new PreferenceDialog(Main.parent);
-            p.selectMapPaintPreferenceTab();
+            p.selectPreferencesTabByClass(MapPaintPreference.class);
             p.setVisible(true);
         }
     }
diff --git a/src/org/openstreetmap/josm/gui/preferences/DefaultTabPreferenceSetting.java b/src/org/openstreetmap/josm/gui/preferences/DefaultTabPreferenceSetting.java
index b296159..17fc08e 100644
--- a/src/org/openstreetmap/josm/gui/preferences/DefaultTabPreferenceSetting.java
+++ b/src/org/openstreetmap/josm/gui/preferences/DefaultTabPreferenceSetting.java
@@ -1,65 +1,66 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.gui.preferences;
-
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-
-import org.openstreetmap.josm.tools.GBC;
-
-public abstract class DefaultTabPreferenceSetting extends DefaultPreferenceSetting implements TabPreferenceSetting {
-
-    private final String iconName;
-    private final String description;
-    private final String title;
-    
-    public DefaultTabPreferenceSetting() {
-        this(null, null, null);
-    }
-
-    public DefaultTabPreferenceSetting(String iconName, String title, String description) {
-        this(iconName, title, description, false);
-    }
-
-    public DefaultTabPreferenceSetting(String iconName, String title, String description, boolean isExpert) {
-        super(isExpert);
-        this.iconName = iconName;
-        this.description = description;
-        this.title = title;
-    }
-
-    @Override
-    public String getIconName() {
-        return iconName;
-    }
-
-    @Override
-    public String getTooltip() {
-        if (getDescription() != null) {
-            return "<html>"+getDescription()+"</html>";
-        } else {
-            return null;
-        }
-    }
-
-    @Override
-    public String getDescription() {
-        return description;
-    }
-
-    @Override
-    public String getTitle() {
-        return title;
-    }
-    
-    protected final void createPreferenceTabWithScrollPane(PreferenceTabbedPane gui, JPanel panel) {
-        GBC a = GBC.eol().insets(-5,0,0,0);
-        a.anchor = GBC.EAST;
-        
-        JScrollPane scrollPane = new JScrollPane(panel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
-        scrollPane.setBorder(null);
-
-        JPanel tab = gui.createPreferenceTab(this);
-        tab.add(scrollPane, GBC.eol().fill(GBC.BOTH));
-        tab.add(GBC.glue(0,10), a);
-    }
-}
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.preferences;
+
+import javax.swing.JComponent;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+
+import org.openstreetmap.josm.tools.GBC;
+
+public abstract class DefaultTabPreferenceSetting extends DefaultPreferenceSetting implements TabPreferenceSetting {
+
+    private final String iconName;
+    private final String description;
+    private final String title;
+    
+    public DefaultTabPreferenceSetting() {
+        this(null, null, null);
+    }
+
+    public DefaultTabPreferenceSetting(String iconName, String title, String description) {
+        this(iconName, title, description, false);
+    }
+
+    public DefaultTabPreferenceSetting(String iconName, String title, String description, boolean isExpert) {
+        super(isExpert);
+        this.iconName = iconName;
+        this.description = description;
+        this.title = title;
+    }
+
+    @Override
+    public String getIconName() {
+        return iconName;
+    }
+
+    @Override
+    public String getTooltip() {
+        if (getDescription() != null) {
+            return "<html>"+getDescription()+"</html>";
+        } else {
+            return null;
+        }
+    }
+
+    @Override
+    public String getDescription() {
+        return description;
+    }
+
+    @Override
+    public String getTitle() {
+        return title;
+    }
+    
+    protected final void createPreferenceTabWithScrollPane(PreferenceTabbedPane gui, JComponent panel) {
+        GBC a = GBC.eol().insets(-5,0,0,0);
+        a.anchor = GBC.EAST;
+        
+        JScrollPane scrollPane = new JScrollPane(panel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+        scrollPane.setBorder(null);
+
+        JPanel tab = gui.createPreferenceTab(this);
+        tab.add(scrollPane, GBC.eol().fill(GBC.BOTH));
+        tab.add(GBC.glue(0,10), a);
+    }
+}
diff --git a/src/org/openstreetmap/josm/gui/preferences/PreferenceDialog.java b/src/org/openstreetmap/josm/gui/preferences/PreferenceDialog.java
index f6f9f14..f871802 100644
--- a/src/org/openstreetmap/josm/gui/preferences/PreferenceDialog.java
+++ b/src/org/openstreetmap/josm/gui/preferences/PreferenceDialog.java
@@ -169,9 +169,4 @@ public class PreferenceDialog extends JDialog {
             new CancelAction().cancel();
         }
     }
-
-    public void selectMapPaintPreferenceTab() {
-        tpPreferences.selectTabByPref(MapPreference.class);
-        tpPreferences.getMapPreference().mapcontent.setSelectedIndex(1);
-    }
 }
diff --git a/src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java b/src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java
index 9c8bc7e..367a00c 100644
--- a/src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java
+++ b/src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java
@@ -32,6 +32,7 @@ import org.openstreetmap.josm.gui.preferences.advanced.AdvancedPreference;
 import org.openstreetmap.josm.gui.preferences.display.ColorPreference;
 import org.openstreetmap.josm.gui.preferences.display.DisplayPreference;
 import org.openstreetmap.josm.gui.preferences.display.DrawingPreference;
+import org.openstreetmap.josm.gui.preferences.display.GPXSettingsPanel;
 import org.openstreetmap.josm.gui.preferences.display.LafPreference;
 import org.openstreetmap.josm.gui.preferences.display.LanguagePreference;
 import org.openstreetmap.josm.gui.preferences.imagery.ImageryPreference;
@@ -40,6 +41,7 @@ import org.openstreetmap.josm.gui.preferences.map.MapPaintPreference;
 import org.openstreetmap.josm.gui.preferences.map.MapPreference;
 import org.openstreetmap.josm.gui.preferences.map.TaggingPresetPreference;
 import org.openstreetmap.josm.gui.preferences.projection.ProjectionPreference;
+import org.openstreetmap.josm.gui.preferences.server.ProxyPreferencesPanel;
 import org.openstreetmap.josm.gui.preferences.shortcut.ShortcutPreference;
 import org.openstreetmap.josm.plugins.PluginDownloadTask;
 import org.openstreetmap.josm.plugins.PluginHandler;
@@ -337,7 +339,11 @@ public class PreferenceTabbedPane extends JTabbedPane implements MouseWheelListe
         int position = index;
         for (PreferenceTab tab : tabs) {
             if (tab.getTabPreferenceSetting().equals(tps)) {
-                insertTab(null, icon, tab.getComponent(), tps.getTooltip(), position++);
+                if (tps instanceof IconPreferenceSetting) {
+                    insertTab(null, icon, tab.getComponent(), tps.getTooltip(), position++);
+                } else {
+                    insertTab(tps.getTitle(), null, tab.getComponent(), tps.getTooltip(), position++);
+                }
             }
         }
     }
@@ -361,7 +367,11 @@ public class PreferenceTabbedPane extends JTabbedPane implements MouseWheelListe
                         addGUITabsForSetting(icon, tps);
                     } else {
                         // If it has not been initialized, create an empty tab with only icon and tooltip
-                        addTab(null, icon, new PreferencePanel(tps), tps.getTooltip());
+                        if (tps instanceof IconPreferenceSetting) {
+                            addTab(null, icon, new PreferencePanel(tps), tps.getTooltip());
+                        } else {
+                            addTab(tps.getTitle(), null, new PreferencePanel(tps), tps.getTooltip());
+                        }
                     }
                 }
             }
@@ -391,33 +401,74 @@ public class PreferenceTabbedPane extends JTabbedPane implements MouseWheelListe
         return null;
     }
 
+    static class IconPreferenceSetting extends DefaultTabPreferenceSetting {
+
+        public static class Factory implements PreferenceSettingFactory {
+
+            private final String iconName, title, description;
+
+            public Factory(String iconName, String title, String description) {
+                this.iconName = iconName;
+                this.title = title;
+                this.description = description;
+            }
+
+            @Override
+            public PreferenceSetting createPreferenceSetting() {
+                return new IconPreferenceSetting(iconName, title, description);
+            }
+        }
+
+        public IconPreferenceSetting(String iconName, String title, String description) {
+            super(iconName, title, description);
+        }
+
+        @Override
+        public void addGui(PreferenceTabbedPane gui) {
+            createPreferenceTabWithScrollPane(gui, new JPanel());
+        }
+
+        @Override
+        public boolean ok() {
+            return false;
+        }
+    }
+
     static {
+
         // order is important!
-        settingsFactory.add(new DisplayPreference.Factory());
+        settingsFactory.add(new IconPreferenceSetting.Factory("map", tr("Mapping"), ""));
         settingsFactory.add(new DrawingPreference.Factory());
-        settingsFactory.add(new ColorPreference.Factory());
-        settingsFactory.add(new LafPreference.Factory());
-        settingsFactory.add(new LanguagePreference.Factory());
-        settingsFactory.add(new ServerAccessPreference.Factory());
-        settingsFactory.add(new MapPreference.Factory());
+        settingsFactory.add(new GPXSettingsPanel.Factory());
         settingsFactory.add(new ProjectionPreference.Factory());
         settingsFactory.add(new MapPaintPreference.Factory());
         settingsFactory.add(new TaggingPresetPreference.Factory());
+        settingsFactory.add(new ImageryPreference.Factory());
+
+        settingsFactory.add(new IconPreferenceSetting.Factory("connection", tr("Server"), tr("Connection Settings for the OSM server.")));
+        settingsFactory.add(new ServerAccessPreference.Factory());
+        settingsFactory.add(new ProxyPreferencesPanel.Factory());
+
+        settingsFactory.add(new IconPreferenceSetting.Factory("display", tr("User Interface"), tr("Various settings that influence the visual representation of the whole program.")));
+        settingsFactory.add(new ColorPreference.Factory());
+        settingsFactory.add(new LafPreference.Factory());
+        settingsFactory.add(new LanguagePreference.Factory());
         settingsFactory.add(new BackupPreference.Factory());
-        if(!Main.applet) {
-            settingsFactory.add(new PluginPreference.Factory());
-        }
         settingsFactory.add(Main.toolbar);
-        settingsFactory.add(new AudioPreference.Factory());
         settingsFactory.add(new ShortcutPreference.Factory());
+
+        settingsFactory.add(new IconPreferenceSetting.Factory("advanced", tr("Advanced Preferences"), ""));
+        settingsFactory.add(new AudioPreference.Factory());
         settingsFactory.add(new ValidatorPreference.Factory());
         settingsFactory.add(new RemoteControlPreference.Factory());
-        settingsFactory.add(new ImageryPreference.Factory());
+        settingsFactory.add(new AdvancedPreference.Factory());
 
+        settingsFactory.add(new IconPreferenceSetting.Factory("plugin", tr("Plugins"), tr("Install new plugins or configure installed plugins.")));
+        if(!Main.applet) {
+            settingsFactory.add(new PluginPreference.Factory());
+        }
         PluginHandler.getPreferenceSetting(settingsFactory);
 
-        // always the last: advanced tab
-        settingsFactory.add(new AdvancedPreference.Factory());
     }
 
     /**
diff --git a/src/org/openstreetmap/josm/gui/preferences/RemoteControlPreference.java b/src/org/openstreetmap/josm/gui/preferences/RemoteControlPreference.java
index ef636b0..01674f9 100644
--- a/src/org/openstreetmap/josm/gui/preferences/RemoteControlPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/RemoteControlPreference.java
@@ -105,7 +105,8 @@ public class RemoteControlPreference extends DefaultTabPreferenceSetting {
         };
         enableRemoteControl.addActionListener(remoteControlEnabled);
         remoteControlEnabled.actionPerformed(null);
-        createPreferenceTabWithScrollPane(gui, remote);
+        //createPreferenceTabWithScrollPane(gui, remote);
+        gui.createPreferenceTab(this).add(remote, GBC.eol().fill(GBC.BOTH));
     }
 
     @Override
diff --git a/src/org/openstreetmap/josm/gui/preferences/ServerAccessPreference.java b/src/org/openstreetmap/josm/gui/preferences/ServerAccessPreference.java
index 5a13619..4c7753d 100644
--- a/src/org/openstreetmap/josm/gui/preferences/ServerAccessPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/ServerAccessPreference.java
@@ -3,20 +3,13 @@ package org.openstreetmap.josm.gui.preferences;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
 
-import java.awt.BorderLayout;
-import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
-import java.awt.Insets;
-
+import org.openstreetmap.josm.tools.GBC;
+import sun.awt.VerticalBagLayout;
 import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.JTabbedPane;
-
 import org.openstreetmap.josm.gui.help.HelpUtil;
 import org.openstreetmap.josm.gui.preferences.server.AuthenticationPreferencesPanel;
 import org.openstreetmap.josm.gui.preferences.server.OsmApiUrlInputPanel;
-import org.openstreetmap.josm.gui.preferences.server.ProxyPreferencesPanel;
-import org.openstreetmap.josm.gui.widgets.VerticallyScrollablePanel;
+
 public class ServerAccessPreference extends DefaultTabPreferenceSetting {
 
     public static class Factory implements PreferenceSettingFactory {
@@ -26,53 +19,15 @@ public class ServerAccessPreference extends DefaultTabPreferenceSetting {
     }
     
     private ServerAccessPreference() {
-        super("connection", tr("Connection Settings"), tr("Connection Settings for the OSM server."));
+        super("connection", tr("Connection Settings"),
+                tr("Connection Settings for the OSM server as well as your identity and how to authenticate at the OSM server."));
     }
 
     private OsmApiUrlInputPanel pnlApiUrlPreferences;
 
-    private JTabbedPane tpServerPreferences;
     /** indicates whether to use the default OSM URL or not */
     /** panel for configuring authentication preferences */
     private AuthenticationPreferencesPanel pnlAuthPreferences;
-    /** panel for configuring proxy preferences */
-    private ProxyPreferencesPanel pnlProxyPreferences;
-    /** panel for backup preferences */
-
-    /**
-     * Embeds a vertically scrollable panel in a {@link JScrollPane}
-     * @param panel the panel
-     * @return the scroll pane
-     */
-    protected JScrollPane wrapVerticallyScrollablePanel(VerticallyScrollablePanel panel) {
-        JScrollPane sp = new JScrollPane(panel);
-        sp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
-        sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
-        return sp;
-    }
-
-    /**
-     * Builds the tabbed pane with the server preferences
-     *
-     * @return
-     */
-    protected JPanel buildTabbedServerPreferences() {
-        JPanel pnl = new JPanel(new BorderLayout());
-
-        tpServerPreferences = new JTabbedPane();
-        pnlAuthPreferences = new AuthenticationPreferencesPanel();
-        tpServerPreferences.add(wrapVerticallyScrollablePanel(pnlAuthPreferences));
-        pnlProxyPreferences = new ProxyPreferencesPanel();
-        tpServerPreferences.add(wrapVerticallyScrollablePanel(pnlProxyPreferences));
-
-        tpServerPreferences.setTitleAt(0, tr("Authentication"));
-        tpServerPreferences.setTitleAt(1, tr("Proxy settings"));
-        tpServerPreferences.setToolTipTextAt(0, tr("Configure your identity and how to authenticate at the OSM server"));
-        tpServerPreferences.setToolTipTextAt(1, tr("Configure whether to use a proxy server"));
-
-        pnl.add(tpServerPreferences, BorderLayout.CENTER);
-        return pnl;
-    }
 
     /**
      * Builds the panel for entering the server access preferences
@@ -80,26 +35,12 @@ public class ServerAccessPreference extends DefaultTabPreferenceSetting {
      * @return
      */
     protected JPanel buildContentPanel() {
-        JPanel pnl = new JPanel(new GridBagLayout());
-        GridBagConstraints gc = new GridBagConstraints();
+        JPanel pnl = new JPanel(new VerticalBagLayout(20));
 
-        // the checkbox for the default UL
-        gc.fill = GridBagConstraints.HORIZONTAL;
-        gc.anchor = GridBagConstraints.NORTHWEST;
-        gc.weightx = 1.0;
-        gc.insets = new Insets(0,0,0,0);
-        pnl.add(pnlApiUrlPreferences = new OsmApiUrlInputPanel(), gc);
-
-        // the remaining access properties
-        gc.gridy = 1;
-        gc.fill = GridBagConstraints.BOTH;
-        gc.weightx = 1.0;
-        gc.weighty = 1.0;
-        gc.insets = new Insets(10,0,3,3);
-        pnl.add(buildTabbedServerPreferences(), gc);
+        pnl.add(pnlApiUrlPreferences = new OsmApiUrlInputPanel());
+        pnl.add(pnlAuthPreferences = new AuthenticationPreferencesPanel());
 
         // let the AuthPreferencesPanel know when the API URL changes
-        //
         pnlApiUrlPreferences.addPropertyChangeListener(pnlAuthPreferences);
 
         HelpUtil.setHelpContext(pnl, HelpUtil.ht("/Preferences/Connection"));
@@ -107,13 +48,8 @@ public class ServerAccessPreference extends DefaultTabPreferenceSetting {
     }
 
     public void addGui(PreferenceTabbedPane gui) {
-        GridBagConstraints gc = new GridBagConstraints();
-        gc.fill = GridBagConstraints.BOTH;
-        gc.weightx = 1.0;
-        gc.weighty = 1.0;
-        gc.anchor = GridBagConstraints.NORTHWEST;
-        gui.createPreferenceTab(this).add(buildContentPanel(), gc);
-
+        //createPreferenceTabWithScrollPane(gui, buildContentPanel());
+        gui.createPreferenceTab(this).add(buildContentPanel(), GBC.eol().fill(GBC.BOTH));
         initFromPreferences();
     }
 
@@ -123,7 +59,6 @@ public class ServerAccessPreference extends DefaultTabPreferenceSetting {
     public void initFromPreferences() {
         pnlApiUrlPreferences.initFromPreferences();
         pnlAuthPreferences.initFromPreferences();
-        pnlProxyPreferences.initFromPreferences();
     }
 
     /**
@@ -132,7 +67,6 @@ public class ServerAccessPreference extends DefaultTabPreferenceSetting {
     public boolean ok() {
         pnlApiUrlPreferences.saveToPreferences();
         pnlAuthPreferences.saveToPreferences();
-        pnlProxyPreferences.saveToPreferences();
         return false;
     }
 }
diff --git a/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java b/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java
index 3adeda9..652a76f 100644
--- a/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java
+++ b/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java
@@ -500,7 +500,7 @@ public class ToolbarPreferences implements PreferenceSettingFactory {
         private String movingComponent;
 
         public Settings(DefaultMutableTreeNode rootActionsNode) {
-            super("toolbar", tr("Toolbar customization"), tr("Customize the elements on the toolbar."));
+            super("toolbar", tr("Toolbar"), tr("Customize the elements on the toolbar."));
             actionsTreeModel = new DefaultTreeModel(rootActionsNode);
             actionsTree = new JTree(actionsTreeModel);
         }
diff --git a/src/org/openstreetmap/josm/gui/preferences/display/ColorPreference.java b/src/org/openstreetmap/josm/gui/preferences/display/ColorPreference.java
index 3ed2a58..0bd4bde 100644
--- a/src/org/openstreetmap/josm/gui/preferences/display/ColorPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/display/ColorPreference.java
@@ -40,15 +40,14 @@ import org.openstreetmap.josm.gui.layer.GpxLayer;
 import org.openstreetmap.josm.gui.layer.ImageryLayer;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer;
+import org.openstreetmap.josm.gui.preferences.DefaultTabPreferenceSetting;
 import org.openstreetmap.josm.gui.preferences.PreferenceSetting;
 import org.openstreetmap.josm.gui.preferences.PreferenceSettingFactory;
 import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane;
-import org.openstreetmap.josm.gui.preferences.SubPreferenceSetting;
-import org.openstreetmap.josm.gui.preferences.TabPreferenceSetting;
 import org.openstreetmap.josm.tools.ColorHelper;
 import org.openstreetmap.josm.tools.GBC;
 
-public class ColorPreference implements SubPreferenceSetting {
+public class ColorPreference extends DefaultTabPreferenceSetting {
 
     public static class Factory implements PreferenceSettingFactory {
         public PreferenceSetting createPreferenceSetting() {
@@ -64,6 +63,10 @@ public class ColorPreference implements SubPreferenceSetting {
     JButton defaultSet;
     JButton remove;
 
+    public ColorPreference() {
+        super(null, tr("Colors"), "");
+    }
+
     /**
      * Set the colors to be shown in the preference table. This method creates a table model if
      * none exists and overwrites all existing values.
@@ -238,7 +241,8 @@ public class ColorPreference implements SubPreferenceSetting {
         buttonPanel.add(defaultSet, GBC.std().insets(5,5,5,0));
         buttonPanel.add(defaultAll, GBC.std().insets(0,5,0,0));
         buttonPanel.add(remove, GBC.std().insets(0,5,0,0));
-        gui.getDisplayPreference().displaycontent.addTab(tr("Colors"), panel);
+
+        createPreferenceTabWithScrollPane(gui, panel);
     }
 
     Boolean isRemoveColor(int row)
@@ -283,9 +287,4 @@ public class ColorPreference implements SubPreferenceSetting {
     public boolean isExpert() {
         return false;
     }
-
-    @Override
-    public TabPreferenceSetting getTabPreferenceSetting(final PreferenceTabbedPane gui) {
-        return gui.getDisplayPreference();
-    }
 }
diff --git a/src/org/openstreetmap/josm/gui/preferences/display/DrawingPreference.java b/src/org/openstreetmap/josm/gui/preferences/display/DrawingPreference.java
index 0c33939..87f0dce 100644
--- a/src/org/openstreetmap/josm/gui/preferences/display/DrawingPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/display/DrawingPreference.java
@@ -12,18 +12,16 @@ import javax.swing.Box;
 import javax.swing.JCheckBox;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
-import javax.swing.JScrollPane;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.ExpertToggleAction;
+import org.openstreetmap.josm.gui.preferences.DefaultTabPreferenceSetting;
 import org.openstreetmap.josm.gui.preferences.PreferenceSetting;
 import org.openstreetmap.josm.gui.preferences.PreferenceSettingFactory;
 import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane;
-import org.openstreetmap.josm.gui.preferences.SubPreferenceSetting;
-import org.openstreetmap.josm.gui.preferences.TabPreferenceSetting;
 import org.openstreetmap.josm.tools.GBC;
 
-public class DrawingPreference implements SubPreferenceSetting {
+public class DrawingPreference extends DefaultTabPreferenceSetting {
 
     public static class Factory implements PreferenceSettingFactory {
         public PreferenceSetting createPreferenceSetting() {
@@ -31,7 +29,6 @@ public class DrawingPreference implements SubPreferenceSetting {
         }
     }
 
-    private GPXSettingsPanel gpxPanel;
     private JCheckBox directionHint = new JCheckBox(tr("Draw Direction Arrows"));
     private JCheckBox headArrow = new JCheckBox(tr("Only on the head of a way."));
     private JCheckBox onewayArrow = new JCheckBox(tr("Draw oneway arrows."));
@@ -46,16 +43,13 @@ public class DrawingPreference implements SubPreferenceSetting {
     private JCheckBox useAntialiasing = new JCheckBox(tr("Smooth map graphics (antialiasing)"));
     private JCheckBox outlineOnly = new JCheckBox(tr("Draw only outlines of areas"));
 
+    public DrawingPreference() {
+        super(null, tr("OSM Data"), "");
+    }
+
     public void addGui(PreferenceTabbedPane gui) {
-        //gui.display.setPreferredSize(new Dimension(400,600));
-        gpxPanel = new GPXSettingsPanel();
-        gui.addValidationListener(gpxPanel);
-        JPanel panel = gpxPanel;
-
-        JScrollPane scrollpane = new JScrollPane(panel);
-        scrollpane.setBorder(BorderFactory.createEmptyBorder( 0, 0, 0, 0 ));
-        gui.getDisplayPreference().displaycontent.addTab(tr("GPS Points"), scrollpane);
-        panel = new JPanel(new GridBagLayout());
+
+        JPanel panel = new JPanel(new GridBagLayout());
         panel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
 
         // directionHint
@@ -132,13 +126,11 @@ public class DrawingPreference implements SubPreferenceSetting {
         ExpertToggleAction.addVisibilitySwitcher(outlineOnly);
 
         panel.add(Box.createVerticalGlue(), GBC.eol().fill(GBC.BOTH));
-        scrollpane = new JScrollPane(panel);
-        scrollpane.setBorder(BorderFactory.createEmptyBorder( 0, 0, 0, 0 ));
-        gui.getDisplayPreference().displaycontent.addTab(tr("OSM Data"), scrollpane);
+
+        createPreferenceTabWithScrollPane(gui, panel);
     }
 
     public boolean ok() {
-        gpxPanel.savePreferences();
         Main.pref.put("draw.data.area_outline_only", outlineOnly.isSelected());
         Main.pref.put("draw.segment.direction", directionHint.isSelected());
         Main.pref.put("draw.segment.head_only", headArrow.isSelected());
@@ -166,9 +158,4 @@ public class DrawingPreference implements SubPreferenceSetting {
     public boolean isExpert() {
         return false;
     }
-
-    @Override
-    public TabPreferenceSetting getTabPreferenceSetting(final PreferenceTabbedPane gui) {
-        return gui.getDisplayPreference();
-    }
 }
diff --git a/src/org/openstreetmap/josm/gui/preferences/display/GPXSettingsPanel.java b/src/org/openstreetmap/josm/gui/preferences/display/GPXSettingsPanel.java
index dae0791..b26582e 100644
--- a/src/org/openstreetmap/josm/gui/preferences/display/GPXSettingsPanel.java
+++ b/src/org/openstreetmap/josm/gui/preferences/display/GPXSettingsPanel.java
@@ -25,12 +25,39 @@ import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.ExpertToggleAction;
 import org.openstreetmap.josm.gui.layer.markerlayer.Marker;
 import org.openstreetmap.josm.gui.layer.markerlayer.Marker.TemplateEntryProperty;
+import org.openstreetmap.josm.gui.preferences.DefaultTabPreferenceSetting;
+import org.openstreetmap.josm.gui.preferences.PreferenceSetting;
+import org.openstreetmap.josm.gui.preferences.PreferenceSettingFactory;
+import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane;
 import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane.ValidationListener;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.template_engine.ParseError;
 import org.openstreetmap.josm.tools.template_engine.TemplateParser;
 
 public class GPXSettingsPanel extends JPanel implements ValidationListener {
+    
+    public static class Factory implements PreferenceSettingFactory {
+
+        @Override
+        public PreferenceSetting createPreferenceSetting() {
+            return new DefaultTabPreferenceSetting(null, tr("GPS Points"), "") {
+
+                private GPXSettingsPanel gpx;
+
+                @Override
+                public void addGui(PreferenceTabbedPane gui) {
+                    createPreferenceTabWithScrollPane(gui, gpx = new GPXSettingsPanel());
+                    gui.addValidationListener(gpx);
+                }
+
+                @Override
+                public boolean ok() {
+                    gpx.savePreferences();
+                    return false;
+                }
+            };
+        }
+    }
 
     private static final int WAYPOINT_LABEL_CUSTOM = 6;
     private static final String[] LABEL_PATTERN_TEMPLATE = new String[] {Marker.LABEL_PATTERN_AUTO, Marker.LABEL_PATTERN_NAME,
diff --git a/src/org/openstreetmap/josm/gui/preferences/display/LafPreference.java b/src/org/openstreetmap/josm/gui/preferences/display/LafPreference.java
index bbdc128..ae95b7f 100644
--- a/src/org/openstreetmap/josm/gui/preferences/display/LafPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/display/LafPreference.java
@@ -14,21 +14,19 @@ import javax.swing.JComboBox;
 import javax.swing.JLabel;
 import javax.swing.JList;
 import javax.swing.JPanel;
-import javax.swing.JScrollPane;
 import javax.swing.ListCellRenderer;
 import javax.swing.UIManager;
 import javax.swing.UIManager.LookAndFeelInfo;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.ExpertToggleAction;
+import org.openstreetmap.josm.gui.preferences.DefaultTabPreferenceSetting;
 import org.openstreetmap.josm.gui.preferences.PreferenceSetting;
 import org.openstreetmap.josm.gui.preferences.PreferenceSettingFactory;
 import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane;
-import org.openstreetmap.josm.gui.preferences.SubPreferenceSetting;
-import org.openstreetmap.josm.gui.preferences.TabPreferenceSetting;
 import org.openstreetmap.josm.tools.GBC;
 
-public class LafPreference implements SubPreferenceSetting {
+public class LafPreference extends DefaultTabPreferenceSetting {
 
     public static class Factory implements PreferenceSettingFactory {
         public PreferenceSetting createPreferenceSetting() {
@@ -47,6 +45,10 @@ public class LafPreference implements SubPreferenceSetting {
     private JCheckBox modeless = new JCheckBox(tr("Modeless working (Potlatch style)"));
     private JCheckBox dynamicButtons = new JCheckBox(tr("Dynamic buttons in side menus"));
 
+    public LafPreference() {
+        super(null, tr("Look and Feel"), "");
+    }
+
     public void addGui(PreferenceTabbedPane gui) {
         lafCombo = new JComboBox(UIManager.getInstalledLookAndFeels());
 
@@ -113,9 +115,9 @@ public class LafPreference implements SubPreferenceSetting {
         panel.add(GBC.glue(5,0), GBC.std().fill(GBC.HORIZONTAL));
         panel.add(lafCombo, GBC.eol().fill(GBC.HORIZONTAL));
 
-        JScrollPane scrollpane = new JScrollPane(panel);
-        scrollpane.setBorder(BorderFactory.createEmptyBorder( 0, 0, 0, 0 ));
-        gui.getDisplayPreference().displaycontent.addTab(tr("Look and Feel"), scrollpane);
+        panel.add(Box.createVerticalGlue(), GBC.eol().fill(GBC.BOTH));
+
+        createPreferenceTabWithScrollPane(gui, panel);
     }
 
     public boolean ok() {
@@ -133,9 +135,4 @@ public class LafPreference implements SubPreferenceSetting {
     public boolean isExpert() {
         return false;
     }
-
-    @Override
-    public TabPreferenceSetting getTabPreferenceSetting(final PreferenceTabbedPane gui) {
-        return gui.getDisplayPreference();
-    }
 }
diff --git a/src/org/openstreetmap/josm/gui/preferences/display/LanguagePreference.java b/src/org/openstreetmap/josm/gui/preferences/display/LanguagePreference.java
index a4f52fa..b3443a0 100644
--- a/src/org/openstreetmap/josm/gui/preferences/display/LanguagePreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/display/LanguagePreference.java
@@ -19,15 +19,14 @@ import javax.swing.JPanel;
 import javax.swing.ListCellRenderer;
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.gui.preferences.DefaultTabPreferenceSetting;
 import org.openstreetmap.josm.gui.preferences.PreferenceSetting;
 import org.openstreetmap.josm.gui.preferences.PreferenceSettingFactory;
 import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane;
-import org.openstreetmap.josm.gui.preferences.SubPreferenceSetting;
-import org.openstreetmap.josm.gui.preferences.TabPreferenceSetting;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.I18n;
 
-public class LanguagePreference implements SubPreferenceSetting {
+public class LanguagePreference extends DefaultTabPreferenceSetting {
     public static class Factory implements PreferenceSettingFactory {
         public PreferenceSetting createPreferenceSetting() {
             return new LanguagePreference();
@@ -39,6 +38,10 @@ public class LanguagePreference implements SubPreferenceSetting {
     /** the model for the combo box */
     private LanguageComboBoxModel model;
 
+    public LanguagePreference() {
+        super(null, tr("Language"), "");
+    }
+
     public void addGui(final PreferenceTabbedPane gui) {
         model = new LanguageComboBoxModel();
         // Selecting the language BEFORE the JComboBox listens to model changes speed up initialization by ~35ms (see #7386)
@@ -47,12 +50,12 @@ public class LanguagePreference implements SubPreferenceSetting {
         langCombo = new JComboBox(model);
         langCombo.setRenderer(new LanguageCellRenderer(langCombo.getRenderer()));
 
-        LafPreference lafPreference = gui.getSetting(LafPreference.class);
-        final JPanel panel = lafPreference.panel;
+        final JPanel panel = new JPanel();
         panel.add(new JLabel(tr("Language")), GBC.std().insets(20, 0, 0, 0));
         panel.add(GBC.glue(5,0), GBC.std().fill(GBC.HORIZONTAL));
         panel.add(langCombo, GBC.eol().fill(GBC.HORIZONTAL));
-        panel.add(Box.createVerticalGlue(), GBC.eol().fill(GBC.BOTH));
+        //panel.add(Box.createVerticalGlue(), GBC.eol().fill(GBC.BOTH));
+        createPreferenceTabWithScrollPane(gui, panel);
     }
 
     public boolean ok() {
@@ -116,9 +119,4 @@ public class LanguagePreference implements SubPreferenceSetting {
     public boolean isExpert() {
         return false;
     }
-
-    @Override
-    public TabPreferenceSetting getTabPreferenceSetting(final PreferenceTabbedPane gui) {
-        return gui.getDisplayPreference();
-    }
 }
diff --git a/src/org/openstreetmap/josm/gui/preferences/map/BackupPreference.java b/src/org/openstreetmap/josm/gui/preferences/map/BackupPreference.java
index 9aeb86d..c80a1c4 100644
--- a/src/org/openstreetmap/josm/gui/preferences/map/BackupPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/map/BackupPreference.java
@@ -18,15 +18,14 @@ import javax.swing.JTextField;
 
 import org.openstreetmap.josm.data.AutosaveTask;
 import org.openstreetmap.josm.data.preferences.BooleanProperty;
+import org.openstreetmap.josm.gui.preferences.DefaultTabPreferenceSetting;
 import org.openstreetmap.josm.gui.preferences.PreferenceSettingFactory;
 import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane;
-import org.openstreetmap.josm.gui.preferences.SubPreferenceSetting;
-import org.openstreetmap.josm.gui.preferences.TabPreferenceSetting;
 import org.openstreetmap.josm.gui.widgets.HtmlPanel;
 import org.openstreetmap.josm.gui.widgets.VerticallyScrollablePanel;
 import org.openstreetmap.josm.tools.GBC;
 
-public class BackupPreference implements SubPreferenceSetting {
+public class BackupPreference extends DefaultTabPreferenceSetting {
 
     public static class Factory implements PreferenceSettingFactory {
         @Override
@@ -96,11 +95,23 @@ public class BackupPreference implements SubPreferenceSetting {
         autosaveEnabled.actionPerformed(null);
 
         panel.add(Box.createVerticalGlue(), GBC.eol().fill(GBC.BOTH));
-        JScrollPane sp = new JScrollPane(panel);
-        sp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
-        sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
 
-        gui.getMapPreference().mapcontent.addTab(tr("File backup"), null, sp, tr("Configure whether to create backup files"));
+        createPreferenceTabWithScrollPane(gui, panel);
+    }
+
+    @Override
+    public String getIconName() {
+        return null;
+    }
+
+    @Override
+    public String getTitle() {
+        return tr("File backup");
+    }
+
+    @Override
+    public String getTooltip() {
+        return tr("Configure whether to create backup files");
     }
 
     @Override
@@ -115,12 +126,12 @@ public class BackupPreference implements SubPreferenceSetting {
     }
 
     @Override
-    public boolean isExpert() {
-        return false;
+    public String getDescription() {
+        return getTooltip();
     }
 
     @Override
-    public TabPreferenceSetting getTabPreferenceSetting(final PreferenceTabbedPane gui) {
-        return gui.getMapPreference();
+    public boolean isExpert() {
+        return false;
     }
 }
diff --git a/src/org/openstreetmap/josm/gui/preferences/map/MapPaintPreference.java b/src/org/openstreetmap/josm/gui/preferences/map/MapPaintPreference.java
index 2240073..20536a7 100644
--- a/src/org/openstreetmap/josm/gui/preferences/map/MapPaintPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/map/MapPaintPreference.java
@@ -12,15 +12,12 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.TreeSet;
-
 import javax.swing.BorderFactory;
 import javax.swing.JCheckBox;
 import javax.swing.JPanel;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.mappaint.MapPaintStyles;
+import org.openstreetmap.josm.gui.preferences.DefaultTabPreferenceSetting;
 import org.openstreetmap.josm.gui.preferences.PreferenceSetting;
 import org.openstreetmap.josm.gui.preferences.PreferenceSettingFactory;
 import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane;
@@ -28,13 +25,11 @@ import org.openstreetmap.josm.gui.preferences.SourceEditor;
 import org.openstreetmap.josm.gui.preferences.SourceEditor.ExtendedSourceEntry;
 import org.openstreetmap.josm.gui.preferences.SourceEntry;
 import org.openstreetmap.josm.gui.preferences.SourceProvider;
-import org.openstreetmap.josm.gui.preferences.SubPreferenceSetting;
-import org.openstreetmap.josm.gui.preferences.TabPreferenceSetting;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.Predicate;
 import org.openstreetmap.josm.tools.Utils;
 
-public class MapPaintPreference implements SubPreferenceSetting {
+public class MapPaintPreference extends DefaultTabPreferenceSetting {
     private SourceEditor sources;
     private JCheckBox enableIconDefault;
 
@@ -52,6 +47,11 @@ public class MapPaintPreference implements SubPreferenceSetting {
         }
     }
 
+    public MapPaintPreference() {
+        super(null, tr("Map Paint Styles"), "");
+    }
+
+    @Override
     public void addGui(final PreferenceTabbedPane gui) {
         enableIconDefault = new JCheckBox(tr("Enable built-in icon defaults"),
                 Main.pref.getBoolean("mappaint.icon.enable-defaults", true));
@@ -64,20 +64,10 @@ public class MapPaintPreference implements SubPreferenceSetting {
         panel.add(sources, GBC.eol().fill(GBC.BOTH));
         panel.add(enableIconDefault, GBC.eol().insets(11,2,5,0));
 
-        gui.getMapPreference().mapcontent.addTab(tr("Map Paint Styles"), panel);
-
-        // this defers loading of style sources to the first time the tab
-        // with the map paint preferences is selected by the user
-        //
-        gui.getMapPreference().mapcontent.addChangeListener(
-                new ChangeListener() {
-                    public void stateChanged(ChangeEvent e) {
-                        if (gui.getMapPreference().mapcontent.getSelectedComponent() == panel) {
-                            sources.initiallyLoadAvailableSources();
-                        }
-                    }
-                }
-                );
+        //createPreferenceTabWithScrollPane(gui, panel);
+        gui.createPreferenceTab(this).add(panel, GBC.eol().fill(GBC.BOTH));
+
+        sources.initiallyLoadAvailableSources();
     }
 
     static class MapPaintSourceEditor extends SourceEditor {
@@ -286,9 +276,4 @@ public class MapPaintPreference implements SubPreferenceSetting {
     public boolean isExpert() {
         return false;
     }
-
-    @Override
-    public TabPreferenceSetting getTabPreferenceSetting(final PreferenceTabbedPane gui) {
-        return gui.getMapPreference();
-    }
 }
diff --git a/src/org/openstreetmap/josm/gui/preferences/map/TaggingPresetPreference.java b/src/org/openstreetmap/josm/gui/preferences/map/TaggingPresetPreference.java
index c12a232..2b63ef7 100644
--- a/src/org/openstreetmap/josm/gui/preferences/map/TaggingPresetPreference.java
+++ b/src/org/openstreetmap/josm/gui/preferences/map/TaggingPresetPreference.java
@@ -12,7 +12,6 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-
 import javax.swing.BorderFactory;
 import javax.swing.JCheckBox;
 import javax.swing.JLabel;
@@ -21,11 +20,9 @@ import javax.swing.JMenuItem;
 import javax.swing.JOptionPane;
 import javax.swing.JPanel;
 import javax.swing.JSeparator;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.ExtendedDialog;
+import org.openstreetmap.josm.gui.preferences.DefaultTabPreferenceSetting;
 import org.openstreetmap.josm.gui.preferences.PreferenceSetting;
 import org.openstreetmap.josm.gui.preferences.PreferenceSettingFactory;
 import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane;
@@ -34,8 +31,6 @@ import org.openstreetmap.josm.gui.preferences.SourceEditor;
 import org.openstreetmap.josm.gui.preferences.SourceEditor.ExtendedSourceEntry;
 import org.openstreetmap.josm.gui.preferences.SourceEntry;
 import org.openstreetmap.josm.gui.preferences.SourceProvider;
-import org.openstreetmap.josm.gui.preferences.SubPreferenceSetting;
-import org.openstreetmap.josm.gui.preferences.TabPreferenceSetting;
 import org.openstreetmap.josm.gui.tagging.TaggingPreset;
 import org.openstreetmap.josm.gui.tagging.TaggingPresetMenu;
 import org.openstreetmap.josm.gui.tagging.TaggingPresetSeparator;
@@ -44,7 +39,7 @@ import org.openstreetmap.josm.tools.GBC;
 import org.xml.sax.SAXException;
 import org.xml.sax.SAXParseException;
 
-public class TaggingPresetPreference implements SubPreferenceSetting {
+public class TaggingPresetPreference extends DefaultTabPreferenceSetting {
 
     public static class Factory implements PreferenceSettingFactory {
         public PreferenceSetting createPreferenceSetting() {
@@ -53,7 +48,7 @@ public class TaggingPresetPreference implements SubPreferenceSetting {
     }
 
     private TaggingPresetPreference() {
-        super();
+        super(null, tr("Tagging Presets"), "");
     }
 
     private static final List<SourceProvider> presetSourceProviders = new ArrayList<SourceProvider>();
@@ -153,6 +148,7 @@ public class TaggingPresetPreference implements SubPreferenceSetting {
         }
     };
 
+    @Override
     public void addGui(final PreferenceTabbedPane gui) {
         sortMenu = new JCheckBox(tr("Sort presets menu"),
                 Main.pref.getBoolean("taggingpreset.sortmenu", false));
@@ -162,21 +158,11 @@ public class TaggingPresetPreference implements SubPreferenceSetting {
         panel.add(sortMenu, GBC.eol().insets(5,5,5,0));
         sources = new TaggingPresetSourceEditor();
         panel.add(sources, GBC.eol().fill(GBC.BOTH));
-        gui.getMapPreference().mapcontent.addTab(tr("Tagging Presets"), panel);
-
-        // this defers loading of tagging preset sources to the first time the tab
-        // with the tagging presets is selected by the user
-        //
-        gui.getMapPreference().mapcontent.addChangeListener(
-                new ChangeListener() {
-                    public void stateChanged(ChangeEvent e) {
-                        if (gui.getMapPreference().mapcontent.getSelectedComponent() == panel) {
-                            sources.initiallyLoadAvailableSources();
-                        }
-                    }
-                }
-                );
-        gui.addValidationListener(validationListener);
+        
+        //createPreferenceTabWithScrollPane(gui, panel);
+        gui.createPreferenceTab(this).add(panel, GBC.eol().fill(GBC.BOTH));
+
+        sources.initiallyLoadAvailableSources();
     }
 
     static class TaggingPresetSourceEditor extends SourceEditor {
@@ -353,9 +339,4 @@ public class TaggingPresetPreference implements SubPreferenceSetting {
     public boolean isExpert() {
         return false;
     }
-
-    @Override
-    public TabPreferenceSetting getTabPreferenceSetting(final PreferenceTabbedPane gui) {
-        return gui.getMapPreference();
-    }
 }
diff --git a/src/org/openstreetmap/josm/gui/preferences/server/ProxyPreferencesPanel.java b/src/org/openstreetmap/josm/gui/preferences/server/ProxyPreferencesPanel.java
index 0199c4f..0e3c8a6 100644
--- a/src/org/openstreetmap/josm/gui/preferences/server/ProxyPreferencesPanel.java
+++ b/src/org/openstreetmap/josm/gui/preferences/server/ProxyPreferencesPanel.java
@@ -28,15 +28,45 @@ import javax.swing.JTextField;
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.JMultilineLabel;
 import org.openstreetmap.josm.gui.help.HelpUtil;
+import org.openstreetmap.josm.gui.preferences.DefaultTabPreferenceSetting;
+import org.openstreetmap.josm.gui.preferences.PreferenceSetting;
+import org.openstreetmap.josm.gui.preferences.PreferenceSettingFactory;
+import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane;
 import org.openstreetmap.josm.gui.widgets.VerticallyScrollablePanel;
 import org.openstreetmap.josm.io.DefaultProxySelector;
 import org.openstreetmap.josm.io.auth.CredentialsAgent;
 import org.openstreetmap.josm.io.auth.CredentialsAgentException;
 import org.openstreetmap.josm.io.auth.CredentialsManager;
 import org.openstreetmap.josm.tools.GBC;
+import sun.awt.VerticalBagLayout;
 
 public class ProxyPreferencesPanel extends VerticallyScrollablePanel {
 
+    public static class Factory implements PreferenceSettingFactory {
+
+        @Override
+        public PreferenceSetting createPreferenceSetting() {
+            return new DefaultTabPreferenceSetting(null, tr("Proxy settings"), tr("Configure whether to use a proxy server")) {
+
+                private ProxyPreferencesPanel pnlProxyPreferences;
+
+                @Override
+                public void addGui(PreferenceTabbedPane gui) {
+                    //createPreferenceTabWithScrollPane(gui, pnlProxyPreferences = new ProxyPreferencesPanel());
+                    pnlProxyPreferences = new ProxyPreferencesPanel();
+                    gui.createPreferenceTab(this).add(pnlProxyPreferences, GBC.eol().fill(GBC.BOTH));
+                    pnlProxyPreferences.initFromPreferences();
+                }
+
+                @Override
+                public boolean ok() {
+                    pnlProxyPreferences.saveToPreferences();
+                    return false;
+                }
+            };
+        }
+    }
+
     public enum ProxyPolicy {
         NO_PROXY("no-proxy"),
         USE_SYSTEM_SETTINGS("use-system-settings"),
@@ -361,9 +391,9 @@ public class ProxyPreferencesPanel extends VerticallyScrollablePanel {
     }
 
     public ProxyPreferencesPanel() {
-        setLayout(new GridBagLayout());
-        setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-        add(buildProxySettingsPanel(), GBC.eop().anchor(GridBagConstraints.NORTHWEST).fill(GridBagConstraints.BOTH));
+        setLayout(new VerticalBagLayout(20));
+
+        add(buildProxySettingsPanel());
 
         initFromPreferences();
         updateEnabledState();
