Index: trunk/src/org/openstreetmap/josm/gui/dialogs/MapPaintDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/MapPaintDialog.java	(revision 17160)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/MapPaintDialog.java	(revision 17161)
@@ -105,5 +105,5 @@
      * Action that opens the map paint preferences.
      */
-    public static final JosmAction PREFERENCE_ACTION = PreferencesAction.forPreferenceSubTab(
+    public static final JosmAction PREFERENCE_ACTION = PreferencesAction.forPreferenceTab(
             tr("Map paint preferences..."), null, MapPaintPreference.class, /* ICON */ "dialogs/mappaintpreference");
 
Index: trunk/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java	(revision 17160)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java	(revision 17161)
@@ -54,4 +54,5 @@
 import javax.swing.JScrollPane;
 import javax.swing.JSeparator;
+import javax.swing.JTabbedPane;
 import javax.swing.JTable;
 import javax.swing.JToolBar;
@@ -1658,6 +1659,16 @@
      */
     public final void deferLoading(final DefaultTabPreferenceSetting tab, final Component component) {
-        tab.getTabPane().addChangeListener(e -> {
-            if (tab.getTabPane().getSelectedComponent() == component) {
+        deferLoading(tab.getTabPane(), component);
+    }
+
+    /**
+     * Defers loading of sources to the first time the adequate tab is selected.
+     * @param tab The tabbed pane
+     * @param component The tab component
+     * @since 17161
+     */
+    public final void deferLoading(final JTabbedPane tab, final Component component) {
+        tab.addChangeListener(e -> {
+            if (tab.getSelectedComponent() == component) {
                 initiallyLoadAvailableSources();
             }
Index: trunk/src/org/openstreetmap/josm/gui/preferences/map/BackupPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/map/BackupPreference.java	(revision 17160)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/map/BackupPreference.java	(revision 17161)
@@ -12,14 +12,11 @@
 import javax.swing.JLabel;
 import javax.swing.JPanel;
-import javax.swing.JScrollPane;
 import javax.swing.JSeparator;
 
 import org.openstreetmap.josm.data.preferences.BooleanProperty;
 import org.openstreetmap.josm.gui.layer.AutosaveTask;
+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.util.GuiHelper;
 import org.openstreetmap.josm.gui.widgets.HtmlPanel;
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
@@ -30,5 +27,5 @@
  * Preference settings for data layer autosave.
  */
-public class BackupPreference implements SubPreferenceSetting {
+public class BackupPreference extends DefaultTabPreferenceSetting {
 
     /**
@@ -48,4 +45,8 @@
     private final JosmTextField autosaveInterval = new JosmTextField(8);
     private final JosmTextField backupPerLayer = new JosmTextField(8);
+
+    BackupPreference() {
+        super(null, tr("File backup"), tr("Configure whether to create backup files"));
+    }
 
     @Override
@@ -111,7 +112,5 @@
 
         panel.add(Box.createVerticalGlue(), GBC.eol().fill(GBC.BOTH));
-        JScrollPane sp = GuiHelper.embedInVerticalScrollPane(panel);
-
-        gui.getMapPreference().addSubTab(this, tr("File backup"), sp, tr("Configure whether to create backup files"));
+        gui.createPreferenceTab(this).add(panel, GBC.eol().fill(GBC.BOTH));
     }
 
@@ -133,7 +132,3 @@
     }
 
-    @Override
-    public TabPreferenceSetting getTabPreferenceSetting(final PreferenceTabbedPane gui) {
-        return gui.getMapPreference();
-    }
 }
Index: trunk/src/org/openstreetmap/josm/gui/preferences/map/MapPaintPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/map/MapPaintPreference.java	(revision 17160)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/map/MapPaintPreference.java	(revision 17161)
@@ -22,10 +22,10 @@
 import org.openstreetmap.josm.gui.mappaint.MapPaintStyles;
 import org.openstreetmap.josm.gui.mappaint.mapcss.MapCSSStyleSource;
+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.PreferencePanel;
 import org.openstreetmap.josm.gui.preferences.SourceEditor;
-import org.openstreetmap.josm.gui.preferences.SubPreferenceSetting;
-import org.openstreetmap.josm.gui.preferences.TabPreferenceSetting;
 import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.GBC;
@@ -35,7 +35,11 @@
  * Preference settings for map paint styles.
  */
-public class MapPaintPreference implements SubPreferenceSetting {
+public class MapPaintPreference extends DefaultTabPreferenceSetting {
     private SourceEditor sources;
     private JCheckBox enableIconDefault;
+
+    MapPaintPreference() {
+        super(null, tr("Map Paint Styles"), tr("Map Paint Styles"));
+    }
 
     private static final List<SourceProvider> styleSourceProviders = new ArrayList<>();
@@ -75,7 +79,7 @@
         panel.add(enableIconDefault, GBC.eol().insets(11, 2, 5, 0));
 
-        final MapPreference mapPref = gui.getMapPreference();
-        mapPref.addSubTab(this, tr("Map Paint Styles"), panel);
-        sources.deferLoading(mapPref, panel);
+        PreferencePanel preferencePanel = gui.createPreferenceTab(this);
+        preferencePanel.add(panel, GBC.std().fill());
+        sources.deferLoading(gui, preferencePanel);
     }
 
@@ -193,7 +197,3 @@
     }
 
-    @Override
-    public TabPreferenceSetting getTabPreferenceSetting(final PreferenceTabbedPane gui) {
-        return gui.getMapPreference();
-    }
 }
Index: trunk/src/org/openstreetmap/josm/gui/preferences/map/TaggingPresetPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/map/TaggingPresetPreference.java	(revision 17160)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/map/TaggingPresetPreference.java	(revision 17161)
@@ -24,11 +24,11 @@
 import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.gui.MainApplication;
+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.PreferencePanel;
 import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane.ValidationListener;
 import org.openstreetmap.josm.gui.preferences.SourceEditor;
-import org.openstreetmap.josm.gui.preferences.SubPreferenceSetting;
-import org.openstreetmap.josm.gui.preferences.TabPreferenceSetting;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetReader;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresets;
@@ -43,5 +43,5 @@
  * Preference settings for tagging presets.
  */
-public final class TaggingPresetPreference implements SubPreferenceSetting {
+public final class TaggingPresetPreference extends DefaultTabPreferenceSetting {
 
     private final class TaggingPresetValidationListener implements ValidationListener {
@@ -146,5 +146,5 @@
 
     private TaggingPresetPreference() {
-        super();
+        super(null, tr("Tagging Presets"), tr("Tagging Presets"));
     }
 
@@ -177,7 +177,7 @@
         sources = new TaggingPresetSourceEditor();
         panel.add(sources, GBC.eol().fill(GBC.BOTH));
-        final MapPreference mapPref = gui.getMapPreference();
-        mapPref.addSubTab(this, tr("Tagging Presets"), panel);
-        sources.deferLoading(mapPref, panel);
+        PreferencePanel preferencePanel = gui.createPreferenceTab(this);
+        preferencePanel.add(panel, GBC.eol().fill(GBC.BOTH));
+        sources.deferLoading(gui, preferencePanel);
         gui.addValidationListener(validationListener);
     }
@@ -262,7 +262,3 @@
     }
 
-    @Override
-    public TabPreferenceSetting getTabPreferenceSetting(final PreferenceTabbedPane gui) {
-        return gui.getMapPreference();
-    }
 }
Index: trunk/src/org/openstreetmap/josm/gui/preferences/projection/ProjectionPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/projection/ProjectionPreference.java	(revision 17160)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/projection/ProjectionPreference.java	(revision 17161)
@@ -36,9 +36,8 @@
 import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.gui.MainApplication;
+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.JosmComboBox;
 import org.openstreetmap.josm.gui.widgets.VerticallyScrollablePanel;
@@ -64,5 +63,5 @@
  *    if possible.
  */
-public class ProjectionPreference implements SubPreferenceSetting {
+public class ProjectionPreference extends DefaultTabPreferenceSetting {
 
     /**
@@ -344,4 +343,5 @@
 
     public ProjectionPreference() {
+        super(null, tr("Map Projection"), tr("Map Projection"));
         this.projectionCombo = new JosmComboBox<>(
             projectionChoices.toArray(new ProjectionChoice[0]));
@@ -404,5 +404,5 @@
         projPanel.add(GBC.glue(1, 1), GBC.std().fill(GBC.HORIZONTAL).weight(1.0, 1.0));
 
-        gui.getMapPreference().addSubTab(this, tr("Map Projection"), projPanel.getVerticalScrollPane());
+        gui.createPreferenceTab(this).add(projPanel.getVerticalScrollPane(), GBC.std().fill());
 
         selectedProjectionChanged(pc);
@@ -562,9 +562,4 @@
     }
 
-    @Override
-    public TabPreferenceSetting getTabPreferenceSetting(final PreferenceTabbedPane gui) {
-        return gui.getMapPreference();
-    }
-
     /**
      * Selects the given projection.
Index: trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresets.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresets.java	(revision 17160)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresets.java	(revision 17161)
@@ -71,5 +71,5 @@
             MainMenu.add(presetsMenu, mainMenu.presetSearchAction);
             MainMenu.add(presetsMenu, mainMenu.presetSearchPrimitiveAction);
-            MainMenu.add(presetsMenu, PreferencesAction.forPreferenceSubTab(tr("Preset preferences..."),
+            MainMenu.add(presetsMenu, PreferencesAction.forPreferenceTab(tr("Preset preferences..."),
                     tr("Click to open the tagging presets tab in the preferences"), TaggingPresetPreference.class));
             presetsMenu.addSeparator();
