Index: trunk/src/org/openstreetmap/josm/gui/MapStatus.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MapStatus.java	(revision 6665)
+++ trunk/src/org/openstreetmap/josm/gui/MapStatus.java	(revision 6666)
@@ -366,8 +366,6 @@
             Dimension scrn = Toolkit.getDefaultToolkit().getScreenSize();
 
-            // Create a JScrollPane around the content, in case there's not
-            // enough space
-            JScrollPane sp = new JScrollPane(content);
-            sp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
+            // Create a JScrollPane around the content, in case there's not enough space
+            JScrollPane sp = GuiHelper.embedInVerticalScrollPane(content);
             sp.setBorder(BorderFactory.createRaisedBevelBorder());
             // Implement max-size content-independent
Index: trunk/src/org/openstreetmap/josm/gui/conflict/pair/ListMerger.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/pair/ListMerger.java	(revision 6665)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/pair/ListMerger.java	(revision 6666)
@@ -15,5 +15,4 @@
 import java.beans.PropertyChangeListener;
 import java.util.Collection;
-import java.util.List;
 import java.util.Observable;
 import java.util.Observer;
@@ -87,6 +86,4 @@
     protected JScrollPane embeddInScrollPane(JTable table) {
         JScrollPane pane = new JScrollPane(table);
-        pane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
-        pane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
         if (adjustmentSynchronizer == null) {
             adjustmentSynchronizer = new AdjustmentSynchronizer();
@@ -480,5 +477,5 @@
 
         public CopyBeforeCurrentLeftAction() {
-            super("copybeforecurrentleft", tr("> before"), 
+            super("copybeforecurrentleft", tr("> before"),
                     tr("Copy my selected elements before the first selected element in the list of merged elements."));
         }
@@ -510,5 +507,5 @@
 
         public CopyAfterCurrentLeftAction() {
-            super("copyaftercurrentleft", tr("> after"), 
+            super("copyaftercurrentleft", tr("> after"),
                     tr("Copy my selected elements after the first selected element in the list of merged elements."));
         }
@@ -570,5 +567,5 @@
 
         public CopyBeforeCurrentRightAction() {
-            super("copybeforecurrentright", tr("< before"), 
+            super("copybeforecurrentright", tr("< before"),
                     tr("Copy their selected elements before the first selected element in the list of merged elements."));
         }
@@ -596,5 +593,5 @@
 
         public CopyAfterCurrentRightAction() {
-            super("copyaftercurrentright", tr("< after"), 
+            super("copyaftercurrentright", tr("< after"),
                     tr("Copy their selected element after the first selected element in the list of merged elements"));
         }
Index: trunk/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMerger.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMerger.java	(revision 6665)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/pair/tags/TagMerger.java	(revision 6666)
@@ -52,7 +52,4 @@
     protected JScrollPane embeddInScrollPane(JTable table) {
         JScrollPane pane = new JScrollPane(table);
-        pane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
-        pane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
-
         adjustmentSynchronizer.synchronizeAdjustment(pane.getVerticalScrollBar());
         return pane;
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/query/AdvancedChangesetQueryPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/query/AdvancedChangesetQueryPanel.java	(revision 6665)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/query/AdvancedChangesetQueryPanel.java	(revision 6666)
@@ -31,12 +31,13 @@
 import org.openstreetmap.josm.gui.JosmUserIdentityManager;
 import org.openstreetmap.josm.gui.help.HelpUtil;
+import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.widgets.AbstractTextComponentValidator;
 import org.openstreetmap.josm.gui.widgets.BoundingBoxSelectionPanel;
 import org.openstreetmap.josm.gui.widgets.JMultilineLabel;
+import org.openstreetmap.josm.gui.widgets.JosmTextField;
 import org.openstreetmap.josm.gui.widgets.SelectAllOnFocusGainedDecorator;
 import org.openstreetmap.josm.gui.widgets.VerticallyScrollablePanel;
 import org.openstreetmap.josm.io.ChangesetQuery;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
-import org.openstreetmap.josm.gui.widgets.JosmTextField;
 
 
@@ -152,11 +153,11 @@
     protected void build() {
         setLayout(new BorderLayout());
-        JScrollPane spQueryPanel = new JScrollPane(buildQueryPanel());
+        JScrollPane spQueryPanel = GuiHelper.embedInVerticalScrollPane(buildQueryPanel());
         add(spQueryPanel, BorderLayout.CENTER);
-        spQueryPanel.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
-        spQueryPanel.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
-
-    }
-
+    }
+
+    /**
+     * Constructs a new {@code AdvancedChangesetQueryPanel}.
+     */
     public AdvancedChangesetQueryPanel() {
         build();
Index: trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowser.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowser.java	(revision 6665)
+++ trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowser.java	(revision 6666)
@@ -11,5 +11,4 @@
 import javax.swing.JSplitPane;
 import javax.swing.JTabbedPane;
-import javax.swing.JTable;
 
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -33,17 +32,4 @@
 
     /**
-     * embedds table in a {@link JScrollPane}
-     *
-     * @param table the table
-     * @return the {@link JScrollPane} with the embedded table
-     */
-    protected JScrollPane embeddInScrollPane(JTable table) {
-        JScrollPane pane = new JScrollPane(table);
-        pane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
-        pane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
-        return pane;
-    }
-
-    /**
      * creates the table which shows the list of versions
      *
@@ -55,5 +41,5 @@
 
         VersionTable versionTable = new VersionTable(model);
-        pnl.add(embeddInScrollPane(versionTable), BorderLayout.CENTER);
+        pnl.add(new JScrollPane(versionTable), BorderLayout.CENTER);
         return pnl;
     }
Index: trunk/src/org/openstreetmap/josm/gui/history/HistoryViewerPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/history/HistoryViewerPanel.java	(revision 6665)
+++ trunk/src/org/openstreetmap/josm/gui/history/HistoryViewerPanel.java	(revision 6666)
@@ -31,6 +31,4 @@
     private JScrollPane embedInScrollPane(JTable table) {
         JScrollPane pane = new JScrollPane(table);
-        pane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
-        pane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
         adjustmentSynchronizer.participateInSynchronizedScrolling(pane.getVerticalScrollBar());
         return pane;
Index: trunk/src/org/openstreetmap/josm/gui/history/NodeListViewer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/history/NodeListViewer.java	(revision 6665)
+++ trunk/src/org/openstreetmap/josm/gui/history/NodeListViewer.java	(revision 6666)
@@ -55,6 +55,4 @@
     protected JScrollPane embeddInScrollPane(JTable table) {
         JScrollPane pane = new JScrollPane(table);
-        pane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
-        pane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
         adjustmentSynchronizer.participateInSynchronizedScrolling(pane.getVerticalScrollBar());
         return pane;
Index: trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java	(revision 6665)
+++ trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java	(revision 6666)
@@ -220,5 +220,5 @@
                 trn("{0} waypoint", "{0} waypoints", data.waypoints.size(), data.waypoints.size())).append("<br>");
 
-        final JScrollPane sp = new JScrollPane(new HtmlPanel(info.toString()), JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+        final JScrollPane sp = new JScrollPane(new HtmlPanel(info.toString()));
         sp.setPreferredSize(new Dimension(sp.getPreferredSize().width, 350));
         SwingUtilities.invokeLater(new Runnable() {
Index: trunk/src/org/openstreetmap/josm/gui/layer/gpx/CustomizeDrawingAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/gpx/CustomizeDrawingAction.java	(revision 6665)
+++ trunk/src/org/openstreetmap/josm/gui/layer/gpx/CustomizeDrawingAction.java	(revision 6666)
@@ -25,4 +25,5 @@
 import org.openstreetmap.josm.gui.layer.Layer.MultiLayerAction;
 import org.openstreetmap.josm.gui.preferences.display.GPXSettingsPanel;
+import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.tools.ImageProvider;
 
@@ -80,5 +81,5 @@
         }
         GPXSettingsPanel panel = new GPXSettingsPanel(layers.get(0).getName(), hasLocal, hasNonlocal);
-        JScrollPane scrollpane = new JScrollPane(panel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
+        JScrollPane scrollpane = GuiHelper.embedInVerticalScrollPane(panel);
         scrollpane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
         int screenHeight = Toolkit.getDefaultToolkit().getScreenSize().height;
Index: trunk/src/org/openstreetmap/josm/gui/oauth/FullyAutomaticAuthorizationUI.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/oauth/FullyAutomaticAuthorizationUI.java	(revision 6665)
+++ trunk/src/org/openstreetmap/josm/gui/oauth/FullyAutomaticAuthorizationUI.java	(revision 6666)
@@ -167,7 +167,7 @@
 
         JTabbedPane tpProperties = new JTabbedPane();
-        tpProperties.add(VerticallyScrollablePanel.embed(buildUserNamePasswordPanel()));
-        tpProperties.add(VerticallyScrollablePanel.embed(buildGrantsPanel()));
-        tpProperties.add(VerticallyScrollablePanel.embed(getAdvancedPropertiesPanel()));
+        tpProperties.add(buildUserNamePasswordPanel().getVerticalScrollPane());
+        tpProperties.add(buildGrantsPanel().getVerticalScrollPane());
+        tpProperties.add(getAdvancedPropertiesPanel().getVerticalScrollPane());
         tpProperties.setTitleAt(0, tr("Basic"));
         tpProperties.setTitleAt(1, tr("Granted rights"));
Index: trunk/src/org/openstreetmap/josm/gui/oauth/OAuthAuthorizationWizard.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/oauth/OAuthAuthorizationWizard.java	(revision 6665)
+++ trunk/src/org/openstreetmap/josm/gui/oauth/OAuthAuthorizationWizard.java	(revision 6666)
@@ -44,4 +44,5 @@
 import org.openstreetmap.josm.gui.help.ContextSensitiveHelpAction;
 import org.openstreetmap.josm.gui.help.HelpUtil;
+import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.widgets.HtmlPanel;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
@@ -170,7 +171,5 @@
         pnlManualAuthorisationUI = new ManualAuthorizationUI(apiUrl);
 
-        spAuthorisationProcedureUI = new JScrollPane(new JPanel());
-        spAuthorisationProcedureUI.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
-        spAuthorisationProcedureUI.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+        spAuthorisationProcedureUI = GuiHelper.embedInVerticalScrollPane(new JPanel());
         spAuthorisationProcedureUI.getVerticalScrollBar().addComponentListener(
                 new ComponentListener() {
Index: trunk/src/org/openstreetmap/josm/gui/preferences/DefaultTabPreferenceSetting.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/DefaultTabPreferenceSetting.java	(revision 6665)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/DefaultTabPreferenceSetting.java	(revision 6666)
@@ -10,4 +10,5 @@
 import javax.swing.JTabbedPane;
 
+import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.tools.GBC;
 
@@ -20,4 +21,7 @@
     private final Map<SubPreferenceSetting, Component> subSettingMap;
     
+    /**
+     * Constructs a new {@code DefaultTabPreferenceSetting}.
+     */
     public DefaultTabPreferenceSetting() {
         this(null, null, null);
@@ -78,5 +82,5 @@
         a.anchor = GBC.EAST;
         
-        JScrollPane scrollPane = new JScrollPane(panel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+        JScrollPane scrollPane = new JScrollPane(panel);
         scrollPane.setBorder(null);
 
@@ -96,4 +100,5 @@
                 } catch (IllegalArgumentException e) {
                     // Ignore exception and return false below
+                    Main.debug(Main.getErrorMessage(e));
                 }
             }
Index: trunk/src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java	(revision 6665)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java	(revision 6666)
@@ -53,4 +53,5 @@
 import org.openstreetmap.josm.gui.preferences.shortcut.ShortcutPreference;
 import org.openstreetmap.josm.gui.preferences.validator.ValidatorPreference;
+import org.openstreetmap.josm.gui.preferences.validator.ValidatorTestsPreference;
 import org.openstreetmap.josm.plugins.PluginDownloadTask;
 import org.openstreetmap.josm.plugins.PluginHandler;
@@ -283,4 +284,13 @@
     public final ServerAccessPreference getServerPreference() {
         return getSetting(ServerAccessPreference.class);
+    }
+
+    /**
+     * Returns the {@code ValidatorPreference} object.
+     * @return the {@code ValidatorPreference} object.
+     * @since 6665
+     */
+    public final ValidatorPreference getValidatorPreference() {
+        return getSetting(ValidatorPreference.class);
     }
 
@@ -503,4 +513,5 @@
         settingsFactory.add(new ShortcutPreference.Factory());
         settingsFactory.add(new ValidatorPreference.Factory());
+        settingsFactory.add(new ValidatorTestsPreference.Factory());
         settingsFactory.add(new RemoteControlPreference.Factory());
         settingsFactory.add(new ImageryPreference.Factory());
Index: trunk/src/org/openstreetmap/josm/gui/preferences/map/BackupPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/map/BackupPreference.java	(revision 6665)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/map/BackupPreference.java	(revision 6666)
@@ -22,4 +22,5 @@
 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;
@@ -109,7 +110,5 @@
 
         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);
+        JScrollPane sp = GuiHelper.embedInVerticalScrollPane(panel);
 
         gui.getMapPreference().addSubTab(this, tr("File backup"), sp, tr("Configure whether to create backup files"));
Index: trunk/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreference.java	(revision 6665)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreference.java	(revision 6666)
@@ -161,7 +161,5 @@
         model  = new PluginPreferencesModel();
         pnlPluginPreferences = new PluginListPanel(model);
-        spPluginPreferences = new JScrollPane(pnlPluginPreferences);
-        spPluginPreferences.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
-        spPluginPreferences.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
+        spPluginPreferences = GuiHelper.embedInVerticalScrollPane(pnlPluginPreferences);
         spPluginPreferences.getVerticalScrollBar().addComponentListener(
                 new ComponentAdapter(){
Index: trunk/src/org/openstreetmap/josm/gui/preferences/server/AuthenticationPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/server/AuthenticationPreference.java	(revision 6665)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/server/AuthenticationPreference.java	(revision 6666)
@@ -37,5 +37,5 @@
         gui.getServerPreference().addApiUrlChangeListener(pnlAuthPreferences);
         gui.getServerPreference().addSubTab(this, tr("Authentication"),
-                ServerAccessPreference.wrapVerticallyScrollablePanel(pnlAuthPreferences),
+                pnlAuthPreferences.getVerticalScrollPane(),
                 tr("Configure your identity and how to authenticate at the OSM server"));
     }
Index: trunk/src/org/openstreetmap/josm/gui/preferences/server/ProxyPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/server/ProxyPreference.java	(revision 6665)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/server/ProxyPreference.java	(revision 6666)
@@ -41,5 +41,5 @@
         pnlProxyPreferences = new ProxyPreferencesPanel();
         gui.getServerPreference().addSubTab(this, tr("Proxy settings"),
-                ServerAccessPreference.wrapVerticallyScrollablePanel(pnlProxyPreferences),
+                pnlProxyPreferences.getVerticalScrollPane(),
                 tr("Configure whether to use a proxy server"));
     }
Index: trunk/src/org/openstreetmap/josm/gui/preferences/server/ServerAccessPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/server/ServerAccessPreference.java	(revision 6665)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/server/ServerAccessPreference.java	(revision 6666)
@@ -11,5 +11,4 @@
 
 import javax.swing.JPanel;
-import javax.swing.JScrollPane;
 import javax.swing.JTabbedPane;
 
@@ -19,5 +18,4 @@
 import org.openstreetmap.josm.gui.preferences.PreferenceSettingFactory;
 import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane;
-import org.openstreetmap.josm.gui.widgets.VerticallyScrollablePanel;
 
 /**
@@ -42,16 +40,4 @@
     /** indicates whether to use the default OSM URL or not */
     private OsmApiUrlInputPanel pnlApiUrlPreferences;
-
-    /**
-     * Embeds a vertically scrollable panel in a {@link JScrollPane}
-     * @param panel the panel
-     * @return the scroll pane
-     */
-    public static JScrollPane wrapVerticallyScrollablePanel(VerticallyScrollablePanel panel) {
-        JScrollPane sp = new JScrollPane(panel);
-        sp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
-        sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
-        return sp;
-    }
 
     /**
Index: trunk/src/org/openstreetmap/josm/gui/preferences/validator/ValidatorPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/validator/ValidatorPreference.java	(revision 6665)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/validator/ValidatorPreference.java	(revision 6666)
@@ -4,19 +4,7 @@
 import static org.openstreetmap.josm.tools.I18n.tr;
 
-import java.awt.GridBagLayout;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.util.Collection;
-import java.util.LinkedList;
+import javax.swing.JTabbedPane;
 
-import javax.swing.BorderFactory;
-import javax.swing.JCheckBox;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.preferences.BooleanProperty;
-import org.openstreetmap.josm.data.validation.OsmValidator;
-import org.openstreetmap.josm.data.validation.Test;
 import org.openstreetmap.josm.gui.preferences.DefaultTabPreferenceSetting;
 import org.openstreetmap.josm.gui.preferences.PreferenceSetting;
@@ -26,5 +14,5 @@
 
 /**
- * Preference settings for the validator
+ * Preference settings for the validator.
  *
  * @author frsantos
@@ -44,5 +32,6 @@
     private ValidatorPreference() {
         super("validator", tr("Data validator"),
-                tr("An OSM data validator that checks for common errors made by users and editor programs."));
+                tr("An OSM data validator that checks for common errors made by users and editor programs."),
+                false, new JTabbedPane());
     }
 
@@ -74,77 +63,11 @@
     public static final String PREF_FILTER_BY_SELECTION = PREFIX + ".selectionFilter";
 
-    private JCheckBox prefUseIgnore;
-    private JCheckBox prefUseLayer;
-    private JCheckBox prefOtherUpload;
-    private JCheckBox prefOther;
-
-    /** The list of all tests */
-    private Collection<Test> allTests;
-
     @Override
-    public void addGui(PreferenceTabbedPane gui)
-    {
-        JPanel testPanel = new JPanel(new GridBagLayout());
-        testPanel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-
-        prefUseIgnore = new JCheckBox(tr("Use ignore list."), Main.pref.getBoolean(PREF_USE_IGNORE, true));
-        prefUseIgnore.setToolTipText(tr("Use the ignore list to suppress warnings."));
-        testPanel.add(prefUseIgnore, GBC.eol());
-
-        prefUseLayer = new JCheckBox(tr("Use error layer."), Main.pref.getBoolean(PREF_LAYER, true));
-        prefUseLayer.setToolTipText(tr("Use the error layer to display problematic elements."));
-        testPanel.add(prefUseLayer, GBC.eol());
-
-        prefOther = new JCheckBox(tr("Show informational level."), PREF_OTHER.get());
-        prefOther.setToolTipText(tr("Show the informational tests."));
-        testPanel.add(prefOther, GBC.eol());
-
-        prefOtherUpload = new JCheckBox(tr("Show informational level on upload."), Main.pref.getBoolean(PREF_OTHER_UPLOAD, false));
-        prefOtherUpload.setToolTipText(tr("Show the informational tests in the upload check windows."));
-        testPanel.add(prefOtherUpload, GBC.eol());
-
-        ActionListener otherUploadEnabled = new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent e) {
-                prefOtherUpload.setEnabled(prefOther.isSelected());
-            }
-        };
-        prefOther.addActionListener(otherUploadEnabled);
-        otherUploadEnabled.actionPerformed(null);
-
-        GBC a = GBC.eol().insets(-5,0,0,0);
-        a.anchor = GBC.EAST;
-        testPanel.add( new JLabel(tr("On demand")), GBC.std() );
-        testPanel.add( new JLabel(tr("On upload")), a );
-
-        allTests = OsmValidator.getTests();
-        for (Test test: allTests) {
-            test.addGui(testPanel);
-        }
-
-        createPreferenceTabWithScrollPane(gui, testPanel);
+    public void addGui(PreferenceTabbedPane gui) {
+        gui.createPreferenceTab(this).add(getTabPane(), GBC.eol().fill(GBC.BOTH));
     }
 
     @Override
     public boolean ok() {
-        Collection<String> tests = new LinkedList<String>();
-        Collection<String> testsBeforeUpload = new LinkedList<String>();
-
-        for (Test test : allTests) {
-            test.ok();
-            String name = test.getClass().getSimpleName();
-            if(!test.enabled)
-                tests.add(name);
-            if(!test.testBeforeUpload)
-                testsBeforeUpload.add(name);
-        }
-        OsmValidator.initializeTests(allTests);
-
-        Main.pref.putCollection(PREF_SKIP_TESTS, tests);
-        Main.pref.putCollection(PREF_SKIP_TESTS_BEFORE_UPLOAD, testsBeforeUpload);
-        Main.pref.put(PREF_USE_IGNORE, prefUseIgnore.isSelected());
-        PREF_OTHER.put(prefOther.isSelected());
-        Main.pref.put(PREF_OTHER_UPLOAD, prefOtherUpload.isSelected());
-        Main.pref.put(PREF_LAYER, prefUseLayer.isSelected());
         return false;
     }
Index: trunk/src/org/openstreetmap/josm/gui/preferences/validator/ValidatorTestsPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/validator/ValidatorTestsPreference.java	(revision 6666)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/validator/ValidatorTestsPreference.java	(revision 6666)
@@ -0,0 +1,130 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.preferences.validator;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.awt.GridBagLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.Collection;
+import java.util.LinkedList;
+
+import javax.swing.BorderFactory;
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.validation.OsmValidator;
+import org.openstreetmap.josm.data.validation.Test;
+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.tools.GBC;
+
+/**
+ * The general validator preferences, allowing to enable/disable tests.
+ * @since 6666
+ */
+public class ValidatorTestsPreference implements SubPreferenceSetting {
+
+    /**
+     * Factory used to create a new {@code ValidatorTestsPreference}.
+     */
+    public static class Factory implements PreferenceSettingFactory {
+        @Override
+        public PreferenceSetting createPreferenceSetting() {
+            return new ValidatorTestsPreference();
+        }
+    }
+    
+    private JCheckBox prefUseIgnore;
+    private JCheckBox prefUseLayer;
+    private JCheckBox prefOtherUpload;
+    private JCheckBox prefOther;
+
+    /** The list of all tests */
+    private Collection<Test> allTests;
+
+    @Override
+    public void addGui(PreferenceTabbedPane gui) {
+        JPanel testPanel = new JPanel(new GridBagLayout());
+        testPanel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
+
+        prefUseIgnore = new JCheckBox(tr("Use ignore list."), Main.pref.getBoolean(ValidatorPreference.PREF_USE_IGNORE, true));
+        prefUseIgnore.setToolTipText(tr("Use the ignore list to suppress warnings."));
+        testPanel.add(prefUseIgnore, GBC.eol());
+
+        prefUseLayer = new JCheckBox(tr("Use error layer."), Main.pref.getBoolean(ValidatorPreference.PREF_LAYER, true));
+        prefUseLayer.setToolTipText(tr("Use the error layer to display problematic elements."));
+        testPanel.add(prefUseLayer, GBC.eol());
+
+        prefOther = new JCheckBox(tr("Show informational level."), ValidatorPreference.PREF_OTHER.get());
+        prefOther.setToolTipText(tr("Show the informational tests."));
+        testPanel.add(prefOther, GBC.eol());
+
+        prefOtherUpload = new JCheckBox(tr("Show informational level on upload."), Main.pref.getBoolean(ValidatorPreference.PREF_OTHER_UPLOAD, false));
+        prefOtherUpload.setToolTipText(tr("Show the informational tests in the upload check windows."));
+        testPanel.add(prefOtherUpload, GBC.eol());
+
+        ActionListener otherUploadEnabled = new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                prefOtherUpload.setEnabled(prefOther.isSelected());
+            }
+        };
+        prefOther.addActionListener(otherUploadEnabled);
+        otherUploadEnabled.actionPerformed(null);
+
+        GBC a = GBC.eol().insets(-5,0,0,0);
+        a.anchor = GBC.EAST;
+        testPanel.add( new JLabel(tr("On demand")), GBC.std() );
+        testPanel.add( new JLabel(tr("On upload")), a );
+
+        allTests = OsmValidator.getTests();
+        for (Test test: allTests) {
+            test.addGui(testPanel);
+        }
+        
+        gui.getValidatorPreference().addSubTab(this, tr("Tests"),
+                GuiHelper.embedInVerticalScrollPane(testPanel),
+                tr("Choose tests to enable"));
+    }
+
+    @Override
+    public boolean ok() {
+        Collection<String> tests = new LinkedList<String>();
+        Collection<String> testsBeforeUpload = new LinkedList<String>();
+
+        for (Test test : allTests) {
+            test.ok();
+            String name = test.getClass().getSimpleName();
+            if(!test.enabled)
+                tests.add(name);
+            if(!test.testBeforeUpload)
+                testsBeforeUpload.add(name);
+        }
+        OsmValidator.initializeTests(allTests);
+
+        Main.pref.putCollection(ValidatorPreference.PREF_SKIP_TESTS, tests);
+        Main.pref.putCollection(ValidatorPreference.PREF_SKIP_TESTS_BEFORE_UPLOAD, testsBeforeUpload);
+        Main.pref.put(ValidatorPreference.PREF_USE_IGNORE, prefUseIgnore.isSelected());
+        ValidatorPreference.PREF_OTHER.put(prefOther.isSelected());
+        Main.pref.put(ValidatorPreference.PREF_OTHER_UPLOAD, prefOtherUpload.isSelected());
+        Main.pref.put(ValidatorPreference.PREF_LAYER, prefUseLayer.isSelected());
+        return false;
+    }
+
+    @Override
+    public boolean isExpert() {
+        return false;
+    }
+
+    @Override
+    public TabPreferenceSetting getTabPreferenceSetting(PreferenceTabbedPane gui) {
+        return gui.getValidatorPreference();
+    }
+}
Index: trunk/src/org/openstreetmap/josm/gui/util/GuiHelper.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/util/GuiHelper.java	(revision 6665)
+++ trunk/src/org/openstreetmap/josm/gui/util/GuiHelper.java	(revision 6666)
@@ -27,4 +27,5 @@
 import javax.swing.ImageIcon;
 import javax.swing.JOptionPane;
+import javax.swing.JScrollPane;
 import javax.swing.SwingUtilities;
 import javax.swing.Timer;
@@ -247,3 +248,13 @@
         }
     }
+
+    /**
+     * Embeds the given component into a new vertical-only scrollable {@code JScrollPane}.
+     * @param panel The component to embed
+     * @return the vertical scrollable {@code JScrollPane}
+     * @since 6666
+     */
+    public static JScrollPane embedInVerticalScrollPane(Component panel) {
+        return new JScrollPane(panel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
+    }
 }
Index: trunk/src/org/openstreetmap/josm/gui/widgets/VerticallyScrollablePanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/widgets/VerticallyScrollablePanel.java	(revision 6665)
+++ trunk/src/org/openstreetmap/josm/gui/widgets/VerticallyScrollablePanel.java	(revision 6666)
@@ -10,13 +10,11 @@
 import javax.swing.Scrollable;
 
+import org.openstreetmap.josm.gui.util.GuiHelper;
+
 public class VerticallyScrollablePanel extends JPanel implements Scrollable {
 
-    static public JScrollPane embed(VerticallyScrollablePanel panel) {
-        JScrollPane sp = new JScrollPane(panel);
-        sp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
-        sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
-        return sp;
-    }
-
+    /**
+     * Constructs a new {@code VerticallyScrollablePanel}.
+     */
     public VerticallyScrollablePanel() {
         super();
@@ -33,4 +31,13 @@
     public VerticallyScrollablePanel(LayoutManager layout) {
         super(layout);
+    }
+
+    /**
+     * Returns a vertical scrollable {@code JScrollPane} containing this panel.
+     * @return the vertical scrollable {@code JScrollPane}
+     * @since 6666
+     */
+    public final JScrollPane getVerticalScrollPane() {
+        return GuiHelper.embedInVerticalScrollPane(this);
     }
 
