Index: trunk/src/org/openstreetmap/josm/gui/MainApplication.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MainApplication.java	(revision 17159)
+++ trunk/src/org/openstreetmap/josm/gui/MainApplication.java	(revision 17160)
@@ -1354,5 +1354,5 @@
 
                 if (ed.showDialog().getValue() == 1) {
-                    PreferencesAction.forPreferenceSubTab(null, null, ProxyPreference.class).run();
+                    PreferencesAction.forPreferenceTab(null, null, ProxyPreference.class).run();
                 }
             }
Index: trunk/src/org/openstreetmap/josm/gui/preferences/DefaultTabPreferenceSetting.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/DefaultTabPreferenceSetting.java	(revision 17159)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/DefaultTabPreferenceSetting.java	(revision 17160)
@@ -7,5 +7,4 @@
 
 import javax.swing.JPanel;
-import javax.swing.JScrollPane;
 import javax.swing.JTabbedPane;
 
Index: trunk/src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java	(revision 17159)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java	(revision 17160)
@@ -56,5 +56,5 @@
 import org.openstreetmap.josm.gui.preferences.projection.ProjectionPreference;
 import org.openstreetmap.josm.gui.preferences.remotecontrol.RemoteControlPreference;
-import org.openstreetmap.josm.gui.preferences.server.AuthenticationPreference;
+import org.openstreetmap.josm.gui.preferences.server.ConnectionPreference;
 import org.openstreetmap.josm.gui.preferences.server.OverpassServerPreference;
 import org.openstreetmap.josm.gui.preferences.server.ProxyPreference;
@@ -582,6 +582,7 @@
         SETTINGS_FACTORIES.add(new LafPreference.Factory());
         SETTINGS_FACTORIES.add(new LanguagePreference.Factory());
+
+        SETTINGS_FACTORIES.add(new ConnectionPreference.Factory());
         SETTINGS_FACTORIES.add(new ServerAccessPreference.Factory());
-        SETTINGS_FACTORIES.add(new AuthenticationPreference.Factory());
         SETTINGS_FACTORIES.add(new ProxyPreference.Factory());
         SETTINGS_FACTORIES.add(new OverpassServerPreference.Factory());
Index: trunk/src/org/openstreetmap/josm/gui/preferences/server/AuthenticationPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/server/AuthenticationPreference.java	(revision 17159)
+++ 	(revision )
@@ -1,58 +1,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.gui.preferences.server;
-
-import static org.openstreetmap.josm.tools.I18n.tr;
-
-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;
-
-/**
- * Authentication sub-preferences in server preferences.
- * @since 6523
- */
-public final class AuthenticationPreference implements SubPreferenceSetting {
-
-    /**
-     * Factory used to create a new {@code AuthenticationPreference}.
-     */
-    public static class Factory implements PreferenceSettingFactory {
-        @Override
-        public PreferenceSetting createPreferenceSetting() {
-            return new AuthenticationPreference();
-        }
-    }
-
-    private AuthenticationPreferencesPanel pnlAuthPreferences;
-
-    private AuthenticationPreference() {
-        super();
-    }
-
-    @Override
-    public void addGui(PreferenceTabbedPane gui) {
-        pnlAuthPreferences = new AuthenticationPreferencesPanel();
-        gui.getServerPreference().addApiUrlChangeListener(pnlAuthPreferences);
-        gui.getServerPreference().addSubTab(this, tr("Authentication"),
-                pnlAuthPreferences.getVerticalScrollPane(),
-                tr("Configure your identity and how to authenticate at the OSM server"));
-    }
-
-    @Override
-    public boolean ok() {
-        pnlAuthPreferences.saveToPreferences();
-        return false;
-    }
-
-    @Override
-    public boolean isExpert() {
-        return false;
-    }
-
-    @Override
-    public TabPreferenceSetting getTabPreferenceSetting(PreferenceTabbedPane gui) {
-        return gui.getServerPreference();
-    }
-}
Index: trunk/src/org/openstreetmap/josm/gui/preferences/server/AuthenticationPreferencesPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/server/AuthenticationPreferencesPanel.java	(revision 17159)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/server/AuthenticationPreferencesPanel.java	(revision 17160)
@@ -16,5 +16,4 @@
 import javax.swing.JPanel;
 import javax.swing.JRadioButton;
-import javax.swing.JSeparator;
 
 import org.openstreetmap.josm.data.oauth.OAuthAccessTokenHolder;
@@ -42,6 +41,4 @@
     /** the panel for the OAuth authentication parameters */
     private OAuthAuthenticationPreferencesPanel pnlOAuthPreferences;
-    /** the panel for messages notifier preferences */
-    private FeaturesPanel pnlFeaturesPreferences;
 
     /**
@@ -102,13 +99,4 @@
         rbBasicAuthentication.setSelected(true);
         pnlAuthenticationParameteters.add(pnlBasicAuthPreferences, BorderLayout.CENTER);
-
-        gc.gridy = 2;
-        add(new JSeparator(), gc);
-
-        //-- the panel for API feature preferences
-        gc.gridy = 3;
-        gc.fill = GridBagConstraints.NONE;
-        pnlFeaturesPreferences = new FeaturesPanel();
-        add(pnlFeaturesPreferences, gc);
     }
 
@@ -129,5 +117,4 @@
         pnlBasicAuthPreferences.initFromPreferences();
         pnlOAuthPreferences.initFromPreferences();
-        pnlFeaturesPreferences.initFromPreferences();
     }
 
@@ -155,6 +142,4 @@
             pnlOAuthPreferences.saveToPreferences();
         }
-        // save message notifications preferences. To be done after authentication preferences.
-        pnlFeaturesPreferences.saveToPreferences();
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/preferences/server/ConnectionPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/server/ConnectionPreference.java	(revision 17160)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/server/ConnectionPreference.java	(revision 17160)
@@ -0,0 +1,50 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.preferences.server;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import javax.swing.JTabbedPane;
+
+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.tools.GBC;
+
+/**
+ * Connection preferences.
+ * @since 17160
+ */
+public final class ConnectionPreference extends DefaultTabPreferenceSetting {
+
+    /**
+     * Factory used to create a new {@code AuthenticationPreference}.
+     */
+    public static class Factory implements PreferenceSettingFactory {
+        @Override
+        public PreferenceSetting createPreferenceSetting() {
+            return new ConnectionPreference();
+        }
+    }
+
+    private ConnectionPreference() {
+        super(/* ICON(preferences/) */ "connection", tr("Connection Settings"),
+                tr("Connection Settings for the OSM server."), false, new JTabbedPane());
+    }
+
+    @Override
+    public void addGui(PreferenceTabbedPane gui) {
+        gui.createPreferenceTab(this).add(getTabPane(), GBC.eol().fill(GBC.BOTH));
+    }
+
+    @Override
+    public boolean ok() {
+        return false;
+    }
+
+    @Override
+    public boolean isExpert() {
+        return false;
+    }
+
+}
Index: trunk/src/org/openstreetmap/josm/gui/preferences/server/FeaturesPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/server/FeaturesPanel.java	(revision 17159)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/server/FeaturesPanel.java	(revision 17160)
@@ -41,22 +41,22 @@
 
         notifier = new JCheckBox(tr("Periodically check for new messages"));
-        add(notifier, GBC.eol());
+        add(notifier, GBC.std(0, 0).span(2).fill(GBC.HORIZONTAL));
         notifier.addChangeListener(e -> updateEnabledState());
 
         intervalLabel = new JLabel(tr("Check interval (minutes):"));
         intervalLabel.setLabelFor(notifierInterval);
-        add(intervalLabel, GBC.std().insets(25, 0, 0, 0));
+        add(intervalLabel, GBC.std(0, 1));
 
         notifierInterval.setToolTipText(tr("Default value: {0}", MessageNotifier.PROP_INTERVAL.getDefaultValue()));
         notifierInterval.setMinimumSize(notifierInterval.getPreferredSize());
-        add(notifierInterval, GBC.eol().insets(5, 0, 0, 0));
+        add(notifierInterval, GBC.std(1, 1).insets(5, 0, 0, 0));
 
         final JLabel notesDaysClosedLabel = new JLabel(tr("Max age for closed notes (days):"));
         notesDaysClosedLabel.setLabelFor(notesDaysClosed);
         notesDaysClosedLabel.setToolTipText(tr("Specifies the number of days a note needs to be closed to no longer be downloaded"));
-        add(notesDaysClosedLabel, GBC.std().insets(0, 20, 0, 0));
+        add(notesDaysClosedLabel, GBC.std(0, 2).insets(0, 20, 0, 0));
         notesDaysClosed.setToolTipText(tr("Default value: {0}", DownloadNotesTask.DAYS_CLOSED.getDefaultValue()));
         notesDaysClosed.setMinimumSize(notesDaysClosed.getPreferredSize());
-        add(notesDaysClosed, GBC.eol().insets(5, 20, 0, 0));
+        add(notesDaysClosed, GBC.std(1, 2).insets(5, 20, 0, 0));
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/preferences/server/OsmApiUrlInputPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/server/OsmApiUrlInputPanel.java	(revision 17159)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/server/OsmApiUrlInputPanel.java	(revision 17160)
@@ -5,7 +5,5 @@
 
 import java.awt.Font;
-import java.awt.GridBagConstraints;
 import java.awt.GridBagLayout;
-import java.awt.Insets;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
@@ -38,4 +36,5 @@
 import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.spi.preferences.IUrls;
+import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Logging;
@@ -82,26 +81,11 @@
     protected final void build() {
         setLayout(new GridBagLayout());
-        GridBagConstraints gc = new GridBagConstraints();
 
         // 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);
-        gc.gridwidth = 4;
-        add(buildDefaultServerUrlPanel(), gc);
-
+        add(buildDefaultServerUrlPanel(), GBC.eop().fill(GBC.HORIZONTAL));
 
         // the input field for the URL
-        gc.gridx = 0;
-        gc.gridy = 1;
-        gc.gridwidth = 1;
-        gc.weightx = 0.0;
-        gc.insets = new Insets(0, 0, 0, 3);
-        add(lblApiUrl, gc);
-
-        gc.gridx = 1;
-        gc.weightx = 1.0;
-        add(tfOsmServerUrl, gc);
+        add(lblApiUrl, GBC.std().insets(0, 0, 3, 0));
+        add(tfOsmServerUrl, GBC.std().fill(GBC.HORIZONTAL).insets(0, 0, 3, 0));
         lblApiUrl.setLabelFor(tfOsmServerUrl);
         SelectAllOnFocusGainedDecorator.decorate(tfOsmServerUrl.getEditorComponent());
@@ -112,14 +96,10 @@
         tfOsmServerUrl.addFocusListener(propagator);
 
-        gc.gridx = 2;
-        gc.weightx = 0.0;
-        add(lblValid, gc);
-
-        gc.gridx = 3;
-        gc.weightx = 0.0;
+        add(lblValid, GBC.std().insets(0, 0, 3, 0));
+
         ValidateApiUrlAction actTest = new ValidateApiUrlAction();
         tfOsmServerUrl.getEditorComponent().getDocument().addDocumentListener(actTest);
         btnTest = new JButton(actTest);
-        add(btnTest, gc);
+        add(btnTest, GBC.eop());
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/preferences/server/OverpassServerPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/server/OverpassServerPreference.java	(revision 17159)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/server/OverpassServerPreference.java	(revision 17160)
@@ -12,9 +12,8 @@
 import javax.swing.JPanel;
 
+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.gui.widgets.HistoryComboBox;
 import org.openstreetmap.josm.io.OverpassDownloadReader;
@@ -26,5 +25,5 @@
  * @since 9142
  */
-public class OverpassServerPreference implements SubPreferenceSetting {
+public class OverpassServerPreference extends DefaultTabPreferenceSetting {
 
     private final HistoryComboBox overpassServer = new HistoryComboBox();
@@ -41,7 +40,6 @@
     }
 
-    @Override
-    public TabPreferenceSetting getTabPreferenceSetting(PreferenceTabbedPane gui) {
-        return gui.getServerPreference();
+    OverpassServerPreference() {
+        super(null, tr("Overpass server"), tr("Configure Overpass server"));
     }
 
@@ -60,6 +58,5 @@
 
         panel.add(Box.createVerticalGlue(), GBC.eol().fill());
-
-        getTabPreferenceSetting(gui).addSubTab(this, tr("Overpass server"), panel);
+        gui.createPreferenceTab(this).add(panel, GBC.eol().fill());
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/preferences/server/ProxyPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/server/ProxyPreference.java	(revision 17159)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/server/ProxyPreference.java	(revision 17160)
@@ -7,9 +7,11 @@
 import java.util.Set;
 
+import javax.swing.Box;
+
+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;
 
 /**
@@ -17,5 +19,5 @@
  * @since 6523
  */
-public final class ProxyPreference implements SubPreferenceSetting {
+public final class ProxyPreference extends DefaultTabPreferenceSetting {
 
     /**
@@ -34,5 +36,5 @@
 
     private ProxyPreference() {
-        super();
+        super(null, tr("Proxy settings"), tr("Configure whether to use a proxy server"));
     }
 
@@ -40,7 +42,6 @@
     public void addGui(PreferenceTabbedPane gui) {
         pnlProxyPreferences = new ProxyPreferencesPanel();
-        gui.getServerPreference().addSubTab(this, tr("Proxy settings"),
-                pnlProxyPreferences.getVerticalScrollPane(),
-                tr("Configure whether to use a proxy server"));
+        pnlProxyPreferences.add(Box.createVerticalGlue(), GBC.eol().fill());
+        gui.createPreferenceTab(this).add(pnlProxyPreferences, GBC.eol().fill());
     }
 
@@ -57,9 +58,4 @@
     public boolean isExpert() {
         return false;
-    }
-
-    @Override
-    public TabPreferenceSetting getTabPreferenceSetting(PreferenceTabbedPane gui) {
-        return gui.getServerPreference();
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/preferences/server/ServerAccessPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/server/ServerAccessPreference.java	(revision 17159)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/server/ServerAccessPreference.java	(revision 17160)
@@ -4,11 +4,10 @@
 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 java.beans.PropertyChangeListener;
 
+import javax.swing.Box;
 import javax.swing.JPanel;
+import javax.swing.JSeparator;
 import javax.swing.JTabbedPane;
 
@@ -18,4 +17,5 @@
 import org.openstreetmap.josm.gui.preferences.PreferenceSettingFactory;
 import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane;
+import org.openstreetmap.josm.tools.GBC;
 
 /**
@@ -36,47 +36,10 @@
     /** indicates whether to use the default OSM URL or not */
     private final OsmApiUrlInputPanel pnlApiUrlPreferences = new OsmApiUrlInputPanel();
+    private final AuthenticationPreferencesPanel pnlAuthPreferences = new AuthenticationPreferencesPanel();
+    /** the panel for messages notifier preferences */
+    private final FeaturesPanel pnlFeaturesPreferences = new FeaturesPanel();
 
     private ServerAccessPreference() {
-        super(/* ICON(preferences/) */ "connection", tr("Connection Settings"),
-                tr("Connection Settings for the OSM server."), false, new JTabbedPane());
-    }
-
-    /**
-     * Builds the tabbed pane with the server preferences
-     *
-     * @return panel with server preferences tabs
-     */
-    private JPanel buildTabbedServerPreferences() {
-        JPanel pnl = new JPanel(new BorderLayout());
-        pnl.add(getTabPane(), BorderLayout.CENTER);
-        return pnl;
-    }
-
-    /**
-     * Builds the panel for entering the server access preferences
-     *
-     * @return preferences panel for server settings
-     */
-    private JPanel buildContentPanel() {
-        JPanel pnl = new JPanel(new GridBagLayout());
-        GridBagConstraints gc = new GridBagConstraints();
-
-        // 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, 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);
-
-        HelpUtil.setHelpContext(pnl, HelpUtil.ht("/Preferences/Connection"));
-        return pnl;
+        super(null, tr("OSM Server"), tr("Connection Settings for the OSM server."), false, new JTabbedPane());
     }
 
@@ -92,12 +55,19 @@
     @Override
     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);
+        JPanel panel = new JPanel(new GridBagLayout());
+        panel.add(pnlApiUrlPreferences, GBC.eop().fill(GBC.HORIZONTAL));
+        panel.add(new JSeparator(), GBC.eop().fill(GBC.HORIZONTAL));
+        panel.add(pnlAuthPreferences, GBC.eop().fill(GBC.HORIZONTAL));
+        panel.add(new JSeparator(), GBC.eop().fill(GBC.HORIZONTAL));
+        panel.add(pnlFeaturesPreferences, GBC.eop().fill(GBC.HORIZONTAL));
 
         pnlApiUrlPreferences.initFromPreferences();
+        pnlAuthPreferences.initFromPreferences();
+        pnlFeaturesPreferences.initFromPreferences();
+        addApiUrlChangeListener(pnlAuthPreferences);
+
+        HelpUtil.setHelpContext(panel, HelpUtil.ht("/Preferences/Connection"));
+        panel.add(Box.createVerticalGlue(), GBC.eol().fill());
+        gui.createPreferenceTab(this).add(panel, GBC.eol().fill());
     }
 
@@ -108,4 +78,7 @@
     public boolean ok() {
         pnlApiUrlPreferences.saveToPreferences();
+        pnlAuthPreferences.saveToPreferences();
+        // save message notifications preferences. To be done after authentication preferences.
+        pnlFeaturesPreferences.saveToPreferences();
         return false;
     }
