Index: /applications/editors/josm/plugins/colorscheme/build.xml
===================================================================
--- /applications/editors/josm/plugins/colorscheme/build.xml	(revision 27862)
+++ /applications/editors/josm/plugins/colorscheme/build.xml	(revision 27863)
@@ -18,5 +18,5 @@
 **
 ** To build against the core in ../../core, create a correct manifest and deploy to
-** SVN, 
+** SVN,
 **    set the properties commit.message and plugin.main.version
 ** and run
@@ -27,5 +27,5 @@
 <project name="colorscheme" default="dist" basedir=".">
     <property name="commit.message" value="Uses new constructor for Plugin"/>
-    <property name="plugin.main.version" value="4394"/>
+    <property name="plugin.main.version" value="4968"/>
     <property name="josm" location="../../core/dist/josm-custom.jar"/>
     <property name="plugin.dist.dir" value="../../dist"/>
@@ -87,8 +87,8 @@
     </target>
     <!--
-     ************************** Publishing the plugin *********************************** 
+     ************************** Publishing the plugin ***********************************
     -->
     <!--
-    ** extracts the JOSM release for the JOSM version in ../core and saves it in the 
+    ** extracts the JOSM release for the JOSM version in ../core and saves it in the
     ** property ${coreversion.info.entry.revision}
     **
@@ -136,15 +136,15 @@
     </target>
     <!--
-    ** commits the plugin.jar 
+    ** commits the plugin.jar
     -->
     <target name="commit-dist">
         <echo>
 ***** Properties of published ${plugin.jar} *****
-Commit message    : '${commit.message}'                 
+Commit message    : '${commit.message}'
 Plugin-Mainversion: ${plugin.main.version}
 JOSM build version: ${coreversion.info.entry.revision}
 Plugin-Version    : ${version.entry.commit.revision}
-***** / Properties of published ${plugin.jar} *****                 
-                    
+***** / Properties of published ${plugin.jar} *****
+
 Now commiting ${plugin.jar} ...
 </echo>
Index: /applications/editors/josm/plugins/colorscheme/src/at/dallermassl/josm/plugin/colorscheme/ColorSchemePreference.java
===================================================================
--- /applications/editors/josm/plugins/colorscheme/src/at/dallermassl/josm/plugin/colorscheme/ColorSchemePreference.java	(revision 27862)
+++ /applications/editors/josm/plugins/colorscheme/src/at/dallermassl/josm/plugin/colorscheme/ColorSchemePreference.java	(revision 27863)
@@ -28,11 +28,13 @@
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.gui.preferences.ColorPreference;
+import org.openstreetmap.josm.gui.preferences.display.ColorPreference;
 import org.openstreetmap.josm.gui.preferences.PreferenceDialog;
 import org.openstreetmap.josm.gui.preferences.PreferenceSetting;
 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 ColorSchemePreference implements PreferenceSetting {
+public class ColorSchemePreference implements SubPreferenceSetting {
     private static final String PREF_KEY_SCHEMES_PREFIX = "colorschemes.";
     private static final String PREF_KEY_SCHEMES_NAMES = PREF_KEY_SCHEMES_PREFIX + "names";
@@ -53,4 +55,5 @@
      * @see org.openstreetmap.josm.gui.preferences.PreferenceSetting#addGui(org.openstreetmap.josm.gui.preferences.PreferenceDialog)
      */
+    @Override
     public void addGui(final PreferenceTabbedPane gui) {
         JPanel panel = new JPanel(new GridBagLayout());
@@ -125,5 +128,10 @@
         JScrollPane scrollpane = new JScrollPane(panel);
         scrollpane.setBorder(BorderFactory.createEmptyBorder( 0, 0, 0, 0 ));
-        gui.displaycontent.addTab(tr("Color Schemes"), scrollpane);
+        gui.getDisplayPreference().displaycontent.addTab(tr("Color Schemes"), scrollpane);
+    }
+
+    @Override
+    public TabPreferenceSetting getTabPreferenceSetting(final PreferenceTabbedPane gui) {
+        return gui.getDisplayPreference();
     }
 
@@ -141,6 +149,12 @@
     }
 
+    @Override
     public boolean ok() {
         return false;// nothing to do
+    }
+
+    @Override
+    public boolean isExpert() {
+        return false;
     }
 
Index: /applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/Preferences.java
===================================================================
--- /applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/Preferences.java	(revision 27862)
+++ /applications/editors/josm/plugins/czechaddress/src/org/openstreetmap/josm/plugins/czechaddress/Preferences.java	(revision 27863)
@@ -5,5 +5,5 @@
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.gui.preferences.PreferenceSetting;
+import org.openstreetmap.josm.gui.preferences.DefaultTabPreferenceSetting;
 import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane;
 /**
@@ -11,5 +11,7 @@
  * @author radek
  */
-public class Preferences extends javax.swing.JPanel implements PreferenceSetting {
+public class Preferences extends DefaultTabPreferenceSetting {
+
+    public JPanel thisPanel;
 
     public int optimize;
@@ -38,4 +40,8 @@
     /** Creates new form Preferences */
     private Preferences() {
+        super("czech_flag",
+                "Nastavení CzechAddressPlugin",
+                "Nastavení pluginu pro úpravu a zadávání adres na území ČR.");
+        thisPanel = new JPanel();
         initComponents();
         addBuildingTag = Main.pref.getBoolean(KEY_BUILDINGTAG,    buildingCheckBox.isSelected());
@@ -73,5 +79,5 @@
         buildingCheckBox = new javax.swing.JCheckBox();
 
-        setLayout(new java.awt.GridLayout(1, 0));
+        thisPanel.setLayout(new java.awt.GridLayout(1, 0));
 
         addNewTagCheckBox.setText("Novým primitivám přidávat tag:");
@@ -153,5 +159,5 @@
         );
 
-        add(mainPanel);
+        thisPanel.add(mainPanel);
     }// </editor-fold>//GEN-END:initComponents
 
@@ -174,7 +180,5 @@
 
     public void addGui(PreferenceTabbedPane gui) {
-        JPanel p = gui.createPreferenceTab("czech_flag",
-                "Nastavení CzechAddressPlugin",
-                "Nastavení pluginu pro úpravu a zadávání adres na území ČR.");
+        JPanel p = gui.createPreferenceTab(this);
         p.add(mainPanel);
         reloadSettings();
Index: /applications/editors/josm/plugins/ext_tools/src/ext_tools/preferences/ExtToolsPreference.java
===================================================================
--- /applications/editors/josm/plugins/ext_tools/src/ext_tools/preferences/ExtToolsPreference.java	(revision 27862)
+++ /applications/editors/josm/plugins/ext_tools/src/ext_tools/preferences/ExtToolsPreference.java	(revision 27863)
@@ -8,5 +8,5 @@
 import javax.swing.JScrollPane;
 
-import org.openstreetmap.josm.gui.preferences.PreferenceSetting;
+import org.openstreetmap.josm.gui.preferences.DefaultTabPreferenceSetting;
 import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane;
 import org.openstreetmap.josm.tools.GBC;
@@ -14,9 +14,10 @@
 import ext_tools.ExtToolsPlugin;
 
-public class ExtToolsPreference implements PreferenceSetting {
+public class ExtToolsPreference extends DefaultTabPreferenceSetting {
 
     ExtToolsPlugin plugin;
 
     public ExtToolsPreference(ExtToolsPlugin plugin) {
+        super("ext", tr("External tools"), tr("Use external scripts in JOSM"));
         this.plugin = plugin;
     }
@@ -24,6 +25,5 @@
     @Override
     public void addGui(PreferenceTabbedPane gui) {
-        JPanel p = gui.createPreferenceTab("ext", tr("External tools"),
-                tr("Use external scripts in JOSM"));
+        JPanel p = gui.createPreferenceTab(this);
         MyToolsPanel tp = new MyToolsPanel(plugin.myTools);
         tp.refresh();
Index: /applications/editors/josm/plugins/graphview/build.xml
===================================================================
--- /applications/editors/josm/plugins/graphview/build.xml	(revision 27862)
+++ /applications/editors/josm/plugins/graphview/build.xml	(revision 27863)
@@ -27,5 +27,5 @@
 <project name="graphview" default="dist" basedir=".">
     <property name="commit.message" value="option to change graph colors; closes ticket 5523 in JOSM Trac"/>
-    <property name="plugin.main.version" value="4549"/>
+    <property name="plugin.main.version" value="4968"/>
     <property name="josm" location="../../core/dist/josm-custom.jar"/>
     <property name="plugin.build.dir" value="build"/>
Index: /applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/plugin/dialogs/GraphViewPreferenceEditor.java
===================================================================
--- /applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/plugin/dialogs/GraphViewPreferenceEditor.java	(revision 27862)
+++ /applications/editors/josm/plugins/graphview/src/org/openstreetmap/josm/plugins/graphview/plugin/dialogs/GraphViewPreferenceEditor.java	(revision 27863)
@@ -36,5 +36,5 @@
 import javax.swing.event.ChangeListener;
 
-import org.openstreetmap.josm.gui.preferences.PreferenceSetting;
+import org.openstreetmap.josm.gui.preferences.DefaultTabPreferenceSetting;
 import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane;
 import org.openstreetmap.josm.plugins.graphview.plugin.dialogs.AccessParameterDialog.BookmarkAction;
@@ -45,5 +45,5 @@
 import org.openstreetmap.josm.tools.GBC;
 
-public class GraphViewPreferenceEditor implements PreferenceSetting {
+public class GraphViewPreferenceEditor extends DefaultTabPreferenceSetting {
 
     private File rulesetFolder;
@@ -71,10 +71,14 @@
     private JPanel arrowPreviewPanel;
 
+    public GraphViewPreferenceEditor() {
+        super("graphview", tr("Graphview"),
+                tr("Settings for the Graphview plugin that visualizes routing graphs."));
+    }
+
     public void addGui(PreferenceTabbedPane gui) {
 
         readPreferences();
 
-        preferencePanel = gui.createPreferenceTab("graphview", tr("Graphview"),
-        tr("Settings for the Graphview plugin that visualizes routing graphs."));
+        preferencePanel = gui.createPreferenceTab(this);
 
         JPanel mainPanel = createMainPanel();
Index: /applications/editors/josm/plugins/imagery-xml-bounds/build.xml
===================================================================
--- /applications/editors/josm/plugins/imagery-xml-bounds/build.xml	(revision 27862)
+++ /applications/editors/josm/plugins/imagery-xml-bounds/build.xml	(revision 27863)
@@ -32,5 +32,5 @@
     <property name="commit.message" value="Commit message"/>
     <!-- enter the *lowest* JOSM version this plugin is currently compatible with -->
-    <property name="plugin.main.version" value="4577"/>
+    <property name="plugin.main.version" value="4987"/>
     <!-- should not be necessary to change the following properties -->
     <property name="josm" location="../../core/dist/josm-custom.jar"/>
@@ -150,8 +150,8 @@
     </target>
     <!--
-    ************************** Publishing the plugin *********************************** 
-    -->
-    <!--
-    ** extracts the JOSM release for the JOSM version in ../core and saves it in the 
+    ************************** Publishing the plugin ***********************************
+    -->
+    <!--
+    ** extracts the JOSM release for the JOSM version in ../core and saves it in the
     ** property ${coreversion.info.entry.revision}
     -->
@@ -197,10 +197,10 @@
         <echo>
     ***** Properties of published ${plugin.jar} *****
-    Commit message    : '${commit.message}'                    
+    Commit message    : '${commit.message}'
     Plugin-Mainversion: ${plugin.main.version}
     JOSM build version: ${coreversion.info.entry.revision}
     Plugin-Version    : ${version.entry.commit.revision}
-    ***** / Properties of published ${plugin.jar} *****                    
-                        
+    ***** / Properties of published ${plugin.jar} *****
+
     Now commiting ${plugin.jar} ...
     </echo>
Index: /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/XmlBoundsPreferenceSetting.java
===================================================================
--- /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/XmlBoundsPreferenceSetting.java	(revision 27862)
+++ /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/XmlBoundsPreferenceSetting.java	(revision 27863)
@@ -18,33 +18,38 @@
 import javax.swing.JButton;
 
-import org.openstreetmap.josm.gui.preferences.ImageryPreference;
-import org.openstreetmap.josm.gui.preferences.ImageryPreference.ImageryProvidersPanel;
-import org.openstreetmap.josm.gui.preferences.PreferenceSetting;
+import org.openstreetmap.josm.gui.preferences.imagery.ImageryPreference;
+import org.openstreetmap.josm.gui.preferences.imagery.ImageryPreference.ImageryProvidersPanel;
+import org.openstreetmap.josm.gui.preferences.SubPreferenceSetting;
+import org.openstreetmap.josm.gui.preferences.TabPreferenceSetting;
 import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane;
 import org.openstreetmap.josm.plugins.imageryxmlbounds.actions.EditEntriesAction;
 
 /**
- * 
+ *
  * @author Don-vip
  *
  */
-public class XmlBoundsPreferenceSetting implements PreferenceSetting {
+public class XmlBoundsPreferenceSetting implements SubPreferenceSetting {
 
-	@Override
-	public void addGui(PreferenceTabbedPane gui) {
-		for (PreferenceSetting ps : gui.getSettings()) {
-			if (ps instanceof ImageryPreference) {
-				ImageryProvidersPanel ipp = ((ImageryPreference) ps).getProvidersPanel();
-				EditEntriesAction action = new EditEntriesAction(ipp.defaultTable, ipp.defaultModel);
-				ipp.middleToolbar.add(new JButton(action));
-				// TODO
-				break;
-			}
-		}
-	}
+    @Override
+    public void addGui(PreferenceTabbedPane gui) {
+        ImageryProvidersPanel ipp = gui.getImageryPreference().getProvidersPanel();
+        EditEntriesAction action = new EditEntriesAction(ipp.defaultTable, ipp.defaultModel);
+        ipp.middleToolbar.add(new JButton(action));
+    }
 
-	@Override
-	public boolean ok() {
-		return false;
-	}
+    @Override
+    public boolean ok() {
+        return false;
+    }
+
+    @Override
+    public boolean isExpert() {
+        return false;
+    }
+
+    public TabPreferenceSetting getTabPreferenceSetting(final PreferenceTabbedPane gui) {
+        return gui.getImageryPreference();
+    }
+
 }
Index: /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/actions/EditEntriesAction.java
===================================================================
--- /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/actions/EditEntriesAction.java	(revision 27862)
+++ /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/actions/EditEntriesAction.java	(revision 27863)
@@ -30,5 +30,5 @@
 import org.openstreetmap.josm.actions.JosmAction;
 import org.openstreetmap.josm.data.imagery.ImageryInfo;
-import org.openstreetmap.josm.gui.preferences.ImageryPreference.ImageryProvidersPanel.ImageryDefaultLayerTableModel;
+import org.openstreetmap.josm.gui.preferences.imagery.ImageryPreference.ImageryProvidersPanel.ImageryDefaultLayerTableModel;
 import org.openstreetmap.josm.plugins.imageryxmlbounds.XmlBoundsConstants;
 import org.openstreetmap.josm.plugins.imageryxmlbounds.XmlBoundsLayer;
@@ -39,10 +39,10 @@
 
 	protected static final String ACTION_NAME = tr("Edit");
-	
+
 	private final JTable defaultTable;
 	private final ImageryDefaultLayerTableModel defaultModel;
-	
+
 	private final List<ImageryInfo> entries;
-	
+
 	public EditEntriesAction(JTable defaultTable, ImageryDefaultLayerTableModel defaultModel) {
         putValue(SHORT_DESCRIPTION, tr("edit bounds for selected defaults"));
@@ -59,5 +59,5 @@
     	setEnabled(false);
 	}
-	
+
 	@Override
 	public void actionPerformed(ActionEvent e) {
@@ -83,5 +83,5 @@
 			entries.clear();
 			for (int row : defaultTable.getSelectedRows()) {
-				ImageryInfo info = defaultModel.getRow(row); 
+				ImageryInfo info = defaultModel.getRow(row);
 				if (info != null && info.getBounds() != null) {
 					entries.add(info);
Index: /applications/editors/josm/plugins/lakewalker/src/org/openstreetmap/josm/plugins/lakewalker/LakewalkerPreferences.java
===================================================================
--- /applications/editors/josm/plugins/lakewalker/src/org/openstreetmap/josm/plugins/lakewalker/LakewalkerPreferences.java	(revision 27862)
+++ /applications/editors/josm/plugins/lakewalker/src/org/openstreetmap/josm/plugins/lakewalker/LakewalkerPreferences.java	(revision 27863)
@@ -11,10 +11,10 @@
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.gui.preferences.PreferenceSetting;
+import org.openstreetmap.josm.gui.preferences.DefaultTabPreferenceSetting;
 import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.I18n;
 
-public class LakewalkerPreferences implements PreferenceSetting {
+public class LakewalkerPreferences extends DefaultTabPreferenceSetting {
     public static final String[] DIRECTIONS = new String[]
     {marktr("east"), marktr("northeast"), marktr("north"), marktr("northwest"),
@@ -68,4 +68,8 @@
     protected JLabel sourceLabel = new JLabel(tr("Source text"));
 
+    public LakewalkerPreferences() {
+        super("lakewalker.png", I18n.tr("Lakewalker Plugin Preferences"), tr("A plugin to trace water bodies on Landsat imagery."));
+    }
+
     public void addGui(PreferenceTabbedPane gui) {
         maxSegsConfig.setToolTipText(tr("Maximum number of segments allowed in each generated way. Default 250."));
@@ -85,5 +89,5 @@
 
         String description = tr("A plugin to trace water bodies on Landsat imagery.");
-        JPanel prefPanel = gui.createPreferenceTab("lakewalker.png", I18n.tr("Lakewalker Plugin Preferences"), description);
+        JPanel prefPanel = gui.createPreferenceTab(this);
         buildPreferences(prefPanel);
 
