Index: trunk/src/org/openstreetmap/josm/gui/autofilter/AutoFilterButton.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/autofilter/AutoFilterButton.java	(revision 17157)
+++ trunk/src/org/openstreetmap/josm/gui/autofilter/AutoFilterButton.java	(revision 17159)
@@ -73,5 +73,5 @@
             @Override
             public void actionPerformed(ActionEvent e) {
-                PreferencesAction.forPreferenceSubTab("", "null", DrawingPreference.class).actionPerformed(e);
+                PreferencesAction.forPreferenceTab("", "null", DrawingPreference.class).actionPerformed(e);
             }
         });
Index: trunk/src/org/openstreetmap/josm/gui/preferences/DefaultTabPreferenceSetting.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/DefaultTabPreferenceSetting.java	(revision 17157)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/DefaultTabPreferenceSetting.java	(revision 17159)
@@ -91,9 +91,6 @@
         a.anchor = GBC.EAST;
 
-        JScrollPane scrollPane = new JScrollPane(panel);
-        scrollPane.setBorder(null);
-
-        JPanel tab = gui.createPreferenceTab(this);
-        tab.add(scrollPane, GBC.eol().fill(GBC.BOTH));
+        JPanel tab = gui.createPreferenceTab(this, true);
+        tab.add(panel, GBC.eol().fill(GBC.BOTH));
         tab.add(GBC.glue(0, 10), a);
     }
Index: trunk/src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java	(revision 17157)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java	(revision 17159)
@@ -162,5 +162,5 @@
                     }
                 }
-                // check if plugin dependences can also be loaded
+                // check if plugin dependencies can also be loaded
                 Collection<PluginInformation> allPlugins = new HashSet<>(toLoad);
                 allPlugins.addAll(PluginHandler.getPlugins());
@@ -253,4 +253,5 @@
         private PreferenceScrollPane(PreferencePanel preferencePanel) {
             this(preferencePanel.getComponent(), preferencePanel.getTabPreferenceSetting());
+            GuiHelper.setDefaultIncrement(this);
         }
 
@@ -500,6 +501,8 @@
         int position = index;
         for (PreferenceTab tab : tabs) {
-            if (tab.getTabPreferenceSetting().equals(tps)) {
+            if (tab.getTabPreferenceSetting().equals(tps) && tps.getIconName() != null) {
                 insertTab(null, icon, tab.getComponent(), tps.getTooltip(), position++);
+            } else if (tab.getTabPreferenceSetting().equals(tps)) {
+                insertTab(tps.getTitle(), null, tab.getComponent(), tps.getTooltip(), position++);
             }
         }
@@ -528,7 +531,9 @@
                         // If it has been initialized, add corresponding tab(s)
                         addGUITabsForSetting(icon, tps);
-                    } else {
+                    } else if (tps.getIconName() != null) {
                         // If it has not been initialized, create an empty tab with only icon and tooltip
                         addTab(null, icon, new PreferencePanel(tps), tps.getTooltip());
+                    } else {
+                        addTab(tps.getTitle(), null, new PreferencePanel(tps), tps.getTooltip());
                     }
                 }
Index: trunk/src/org/openstreetmap/josm/gui/preferences/display/ColorPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/display/ColorPreference.java	(revision 17157)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/display/ColorPreference.java	(revision 17159)
@@ -48,9 +48,8 @@
 import org.openstreetmap.josm.gui.layer.gpx.GpxDrawHelper;
 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.gui.preferences.advanced.PreferencesTable;
 import org.openstreetmap.josm.gui.util.GuiHelper;
@@ -69,5 +68,5 @@
  * @see NamedColorProperty
  */
-public class ColorPreference implements SubPreferenceSetting, ListSelectionListener, TableModelListener {
+public class ColorPreference extends DefaultTabPreferenceSetting implements ListSelectionListener, TableModelListener {
 
     /**
@@ -79,4 +78,8 @@
             return new ColorPreference();
         }
+    }
+
+    ColorPreference() {
+        super(null, tr("Colors"), tr("Change colors used in program dialogs and in map paint styles."));
     }
 
@@ -377,5 +380,6 @@
         buttonPanel.add(defaultAll, GBC.std().insets(0, 5, 0, 0));
         buttonPanel.add(remove, GBC.std().insets(0, 5, 0, 0));
-        gui.getDisplayPreference().addSubTab(this, tr("Colors"), panel);
+
+        createPreferenceTabWithScrollPane(gui, panel);
     }
 
@@ -423,9 +427,4 @@
 
     @Override
-    public TabPreferenceSetting getTabPreferenceSetting(final PreferenceTabbedPane gui) {
-        return gui.getDisplayPreference();
-    }
-
-    @Override
     public void valueChanged(ListSelectionEvent e) {
         updateEnabledState();
Index: trunk/src/org/openstreetmap/josm/gui/preferences/display/DrawingPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/display/DrawingPreference.java	(revision 17157)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/display/DrawingPreference.java	(revision 17159)
@@ -11,5 +11,4 @@
 import javax.swing.JLabel;
 import javax.swing.JPanel;
-import javax.swing.JScrollPane;
 
 import org.openstreetmap.josm.actions.ExpertToggleAction;
@@ -18,10 +17,8 @@
 import org.openstreetmap.josm.gui.autofilter.AutoFilterRule;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
+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.util.GuiHelper;
 import org.openstreetmap.josm.gui.widgets.JosmComboBox;
 import org.openstreetmap.josm.spi.preferences.Config;
@@ -31,5 +28,5 @@
  * "OSM Data" drawing preferences.
  */
-public class DrawingPreference implements SubPreferenceSetting {
+public class DrawingPreference extends DefaultTabPreferenceSetting {
 
     /**
@@ -71,4 +68,8 @@
     private final JCheckBox hideLabelsWhileDragging = new JCheckBox(tr("Hide labels while dragging the map"));
 
+    DrawingPreference() {
+        super(null, tr("OSM Data"), tr("Settings that control the drawing of OSM data."));
+    }
+
     @Override
     public void addGui(PreferenceTabbedPane gui) {
@@ -192,8 +193,5 @@
 
         panel.add(Box.createVerticalGlue(), GBC.eol().fill(GBC.BOTH));
-        JScrollPane scrollpane = new JScrollPane(panel);
-        scrollpane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
-        GuiHelper.setDefaultIncrement(scrollpane);
-        gui.getDisplayPreference().addSubTab(this, tr("OSM Data"), scrollpane);
+        createPreferenceTabWithScrollPane(gui, panel);
     }
 
@@ -233,7 +231,3 @@
     }
 
-    @Override
-    public TabPreferenceSetting getTabPreferenceSetting(final PreferenceTabbedPane gui) {
-        return gui.getDisplayPreference();
-    }
 }
Index: trunk/src/org/openstreetmap/josm/gui/preferences/display/GPXPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/display/GPXPreference.java	(revision 17157)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/display/GPXPreference.java	(revision 17159)
@@ -4,19 +4,13 @@
 import static org.openstreetmap.josm.tools.I18n.tr;
 
-import javax.swing.BorderFactory;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-
+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.util.GuiHelper;
 
 /**
  * "GPS Points" drawing preferences.
  */
-public class GPXPreference implements SubPreferenceSetting {
+public class GPXPreference extends DefaultTabPreferenceSetting {
 
     /**
@@ -30,4 +24,8 @@
     }
 
+    GPXPreference() {
+        super(null, tr("GPS Points"), tr("Settings that control the drawing of GPS tracks."));
+    }
+
     private GPXSettingsPanel gpxPanel;
 
@@ -36,10 +34,5 @@
         gpxPanel = new GPXSettingsPanel();
         gui.addValidationListener(gpxPanel);
-        JPanel panel = gpxPanel;
-
-        JScrollPane scrollpane = new JScrollPane(panel);
-        scrollpane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
-        GuiHelper.setDefaultIncrement(scrollpane);
-        gui.getDisplayPreference().addSubTab(this, tr("GPS Points"), scrollpane);
+        createPreferenceTabWithScrollPane(gui, gpxPanel);
     }
 
@@ -54,7 +47,3 @@
     }
 
-    @Override
-    public TabPreferenceSetting getTabPreferenceSetting(final PreferenceTabbedPane gui) {
-        return gui.getDisplayPreference();
-    }
 }
Index: trunk/src/org/openstreetmap/josm/gui/preferences/display/LafPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/display/LafPreference.java	(revision 17157)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/display/LafPreference.java	(revision 17159)
@@ -16,5 +16,4 @@
 import javax.swing.JLabel;
 import javax.swing.JList;
-import javax.swing.JScrollPane;
 import javax.swing.JSpinner;
 import javax.swing.ListCellRenderer;
@@ -30,9 +29,8 @@
 import org.openstreetmap.josm.gui.NavigatableComponent;
 import org.openstreetmap.josm.gui.dialogs.ToggleDialog;
+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.FileChooserManager;
 import org.openstreetmap.josm.gui.widgets.JosmComboBox;
@@ -47,5 +45,5 @@
  * Look-and-feel preferences.
  */
-public class LafPreference implements SubPreferenceSetting {
+public class LafPreference extends DefaultTabPreferenceSetting {
 
     /**
@@ -73,4 +71,8 @@
             return new LafPreference();
         }
+    }
+
+    LafPreference() {
+        super(null, tr("Look and Feel"), tr("Change the Look and Feel of the program"));
     }
 
@@ -212,8 +214,7 @@
         panel.add(GBC.glue(5, 0), GBC.std().fill(GBC.HORIZONTAL));
         panel.add(lafCombo, GBC.eol().fill(GBC.HORIZONTAL));
-
-        JScrollPane scrollpane = panel.getVerticalScrollPane();
-        scrollpane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
-        gui.getDisplayPreference().addSubTab(this, tr("Look and Feel"), scrollpane);
+        panel.add(Box.createVerticalGlue(), GBC.eol().fill(GBC.BOTH));
+
+        createPreferenceTabWithScrollPane(gui, panel);
     }
 
@@ -243,7 +244,3 @@
     }
 
-    @Override
-    public TabPreferenceSetting getTabPreferenceSetting(final PreferenceTabbedPane gui) {
-        return gui.getDisplayPreference();
-    }
 }
Index: trunk/src/org/openstreetmap/josm/gui/preferences/display/LanguagePreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/display/LanguagePreference.java	(revision 17157)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/display/LanguagePreference.java	(revision 17159)
@@ -5,4 +5,5 @@
 
 import java.awt.Component;
+import java.awt.GridBagLayout;
 import java.util.ArrayList;
 import java.util.Comparator;
@@ -18,9 +19,8 @@
 import javax.swing.ListCellRenderer;
 
+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.spi.preferences.Config;
@@ -33,5 +33,5 @@
  * @since 1065
  */
-public class LanguagePreference implements SubPreferenceSetting {
+public class LanguagePreference extends DefaultTabPreferenceSetting {
 
     private static final String LANGUAGE = "language";
@@ -45,4 +45,8 @@
             return new LanguagePreference();
         }
+    }
+
+    LanguagePreference() {
+        super(null, tr("Language"), tr("Change the language of JOSM."));
     }
 
@@ -59,6 +63,5 @@
         langCombo.setRenderer(new LanguageCellRenderer());
 
-        LafPreference lafPreference = gui.getSetting(LafPreference.class);
-        final JPanel panel = lafPreference.panel;
+        final JPanel panel = new JPanel(new GridBagLayout());
         panel.add(new JLabel(tr("Language")), GBC.std().insets(20, 0, 0, 0));
         panel.add(GBC.glue(5, 0), GBC.std().fill(GBC.HORIZONTAL));
@@ -66,6 +69,5 @@
         panel.add(Box.createVerticalGlue(), GBC.eol().fill(GBC.BOTH));
 
-        TabPreferenceSetting tabPref = lafPreference.getTabPreferenceSetting(gui);
-        tabPref.registerSubTab(this, tabPref.getSubTab(lafPreference));
+        createPreferenceTabWithScrollPane(gui, panel);
     }
 
@@ -137,7 +139,3 @@
     }
 
-    @Override
-    public TabPreferenceSetting getTabPreferenceSetting(final PreferenceTabbedPane gui) {
-        return gui.getSetting(LafPreference.class).getTabPreferenceSetting(gui);
-    }
 }
