Index: trunk/src/org/openstreetmap/josm/data/Preferences.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/Preferences.java	(revision 6592)
+++ trunk/src/org/openstreetmap/josm/data/Preferences.java	(revision 6593)
@@ -1490,4 +1490,7 @@
         @Override
         public void visit(ListSetting setting) {
+            /* don't save default values */
+            if (setting.equals(defaultsMap.get(key)))
+                return;
             b.append("  <list key='").append(XmlWriter.encode(key)).append("'>\n");
             for (String s : setting.getValue()) {
@@ -1499,4 +1502,7 @@
         @Override
         public void visit(ListListSetting setting) {
+            /* don't save default values */
+            if (setting.equals(defaultsMap.get(key)))
+                return;
             b.append("  <lists key='").append(XmlWriter.encode(key)).append("'>\n");
             for (List<String> list : setting.getValue()) {
@@ -1558,4 +1564,10 @@
                 "gpxLayer.downloadAlongTrack.area",            // 07/2013 - can be removed mid-2014. Replaced by downloadAlongTrack.area
                 "gpxLayer.downloadAlongTrack.near",            // 07/2013 - can be removed mid-2014. Replaced by downloadAlongTrack.near
+                "validator.tests",                             // 01/2014 - can be removed mid-2014. Replaced by validator.skip
+                "validator.testsBeforeUpload",                 // 01/2014 - can be removed mid-2014. Replaced by validator.skipBeforeUpload
+                "validator.TagChecker.sources",                // 01/2014 - can be removed mid-2014. Replaced by validator.TagChecker.source
+                "validator.TagChecker.usedatafile",            // 01/2014 - can be removed mid-2014. Replaced by validator.TagChecker.source
+                "validator.TagChecker.useignorefile",          // 01/2014 - can be removed mid-2014. Replaced by validator.TagChecker.source
+                "validator.TagChecker.usespellfile",           // 01/2014 - can be removed mid-2014. Replaced by validator.TagChecker.source
         };
         for (String key : obsolete) {
Index: trunk/src/org/openstreetmap/josm/data/validation/OsmValidator.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/OsmValidator.java	(revision 6592)
+++ trunk/src/org/openstreetmap/josm/data/validation/OsmValidator.java	(revision 6593)
@@ -85,4 +85,5 @@
     @SuppressWarnings("unchecked")
     private static final Class<Test>[] allAvailableTests = new Class[] {
+        /* FIXME - unique error numbers for tests aren't properly unique - ignoring will not work as expected */
         DuplicateNode.class, // ID    1 ..   99
         OverlappingWays.class, // ID  101 ..  199
@@ -231,20 +232,14 @@
 
     private static void applyPrefs(Map<String, Test> tests, boolean beforeUpload) {
-        Pattern regexp = Pattern.compile("(\\w+)=(true|false),?");
-        Matcher m = regexp.matcher(Main.pref.get(beforeUpload ? ValidatorPreference.PREF_TESTS_BEFORE_UPLOAD
-                : ValidatorPreference.PREF_TESTS));
-        int pos = 0;
-        while (m.find(pos)) {
-            String testName = m.group(1);
+        for(String testName : Main.pref.getCollection(beforeUpload
+        ? ValidatorPreference.PREF_SKIP_TESTS_BEFORE_UPLOAD : ValidatorPreference.PREF_SKIP_TESTS)) {
             Test test = tests.get(testName);
             if (test != null) {
-                boolean enabled = Boolean.valueOf(m.group(2));
                 if (beforeUpload) {
-                    test.testBeforeUpload = enabled;
+                    test.testBeforeUpload = false;
                 } else {
-                    test.enabled = enabled;
+                    test.enabled = false;
                 }
             }
-            pos = m.end();
         }
     }
Index: trunk/src/org/openstreetmap/josm/data/validation/tests/TagChecker.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/tests/TagChecker.java	(revision 6592)
+++ trunk/src/org/openstreetmap/josm/data/validation/tests/TagChecker.java	(revision 6593)
@@ -94,8 +94,5 @@
     public static final String PREF_CHECK_FIXMES = PREFIX + ".checkFixmes";
 
-    public static final String PREF_SOURCES = PREFIX + ".sources";
-    public static final String PREF_USE_DATA_FILE = PREFIX + ".usedatafile";
-    public static final String PREF_USE_IGNORE_FILE = PREFIX + ".useignorefile";
-    public static final String PREF_USE_SPELL_FILE = PREFIX + ".usespellfile";
+    public static final String PREF_SOURCES = PREFIX + ".source";
 
     public static final String PREF_CHECK_KEYS_BEFORE_UPLOAD = PREF_CHECK_KEYS + "BeforeUpload";
@@ -120,8 +117,4 @@
     protected JCheckBox prefCheckFixmesBeforeUpload;
     protected JCheckBox prefCheckPaintBeforeUpload;
-
-    protected JCheckBox prefUseDataFile;
-    protected JCheckBox prefUseIgnoreFile;
-    protected JCheckBox prefUseSpellFile;
 
     protected static final int EMPTY_VALUES      = 1200;
@@ -172,31 +165,7 @@
 
         spellCheckKeyData = new HashMap<String, String>();
-        String sources = Main.pref.get( PREF_SOURCES, "");
-        if (Main.pref.getBoolean(PREF_USE_DATA_FILE, true)) {
-            if (sources == null || sources.length() == 0) {
-                sources = DATA_FILE;
-            } else {
-                sources = DATA_FILE + ";" + sources;
-            }
-        }
-        if (Main.pref.getBoolean(PREF_USE_IGNORE_FILE, true)) {
-            if (sources == null || sources.length() == 0) {
-                sources = IGNORE_FILE;
-            } else {
-                sources = IGNORE_FILE + ";" + sources;
-            }
-        }
-        if (Main.pref.getBoolean(PREF_USE_SPELL_FILE, true)) {
-            if( sources == null || sources.length() == 0) {
-                sources = SPELL_FILE;
-            } else {
-                sources = SPELL_FILE + ";" + sources;
-            }
-        }
-
+        
         String errorSources = "";
-        if (sources.length() == 0)
-            return;
-        for (String source : sources.split(";")) {
+        for (String source : Main.pref.getCollection(PREF_SOURCES, Arrays.asList(DATA_FILE, IGNORE_FILE, SPELL_FILE))) {
             BufferedReader reader = null;
             try {
@@ -511,7 +480,7 @@
         testPanel.add(prefCheckComplexBeforeUpload, a);
 
-        final String sources = Main.pref.get(PREF_SOURCES);
+        final Collection<String> sources = Main.pref.getCollection(PREF_SOURCES, Arrays.asList(DATA_FILE, IGNORE_FILE, SPELL_FILE));
         sourcesList = new EditableList(tr("TagChecker source"));
-        sourcesList.setItems(sources != null ? Arrays.asList(sources.split(";")) : Collections.<String>emptyList());
+        sourcesList.setItems(sources);
         testPanel.add(new JLabel(tr("Data sources ({0})", "*.cfg")), GBC.eol().insets(23, 0, 0, 0));
         testPanel.add(sourcesList, GBC.eol().fill(GridBagConstraints.HORIZONTAL).insets(23, 0, 0, 0));
@@ -545,16 +514,4 @@
         prefCheckFixmesBeforeUpload.setSelected(Main.pref.getBoolean(PREF_CHECK_FIXMES_BEFORE_UPLOAD, true));
         testPanel.add(prefCheckFixmesBeforeUpload, a);
-
-        prefUseDataFile = new JCheckBox(tr("Use default data file."), Main.pref.getBoolean(PREF_USE_DATA_FILE, true));
-        prefUseDataFile.setToolTipText(tr("Use the default data file (recommended)."));
-        testPanel.add(prefUseDataFile, GBC.eol().insets(20,0,0,0));
-
-        prefUseIgnoreFile = new JCheckBox(tr("Use default tag ignore file."), Main.pref.getBoolean(PREF_USE_IGNORE_FILE, true));
-        prefUseIgnoreFile.setToolTipText(tr("Use the default tag ignore file (recommended)."));
-        testPanel.add(prefUseIgnoreFile, GBC.eol().insets(20,0,0,0));
-
-        prefUseSpellFile = new JCheckBox(tr("Use default spellcheck file."), Main.pref.getBoolean(PREF_USE_SPELL_FILE, true));
-        prefUseSpellFile.setToolTipText(tr("Use the default spellcheck file (recommended)."));
-        testPanel.add(prefUseSpellFile, GBC.eol().insets(20,0,0,0));
     }
 
@@ -579,14 +536,9 @@
         Main.pref.put(PREF_CHECK_KEYS_BEFORE_UPLOAD, prefCheckKeysBeforeUpload.isSelected());
         Main.pref.put(PREF_CHECK_FIXMES_BEFORE_UPLOAD, prefCheckFixmesBeforeUpload.isSelected());
-        Main.pref.put(PREF_USE_DATA_FILE, prefUseDataFile.isSelected());
-        Main.pref.put(PREF_USE_IGNORE_FILE, prefUseIgnoreFile.isSelected());
-        Main.pref.put(PREF_USE_SPELL_FILE, prefUseSpellFile.isSelected());
-        final List<String> sources = sourcesList.getItems();
-        return Main.pref.put(PREF_SOURCES, sources.isEmpty() ? null : Utils.join(";", sources));
+        return Main.pref.putCollection(PREF_SOURCES, sourcesList.getItems());
     }
 
     @Override
     public Command fixError(TestError testError) {
-
         List<Command> commands = new ArrayList<Command>(50);
 
@@ -631,5 +583,4 @@
     @Override
     public boolean isFixable(TestError testError) {
-
         if (testError.getTester() instanceof TagChecker) {
             int code = testError.getCode();
Index: trunk/src/org/openstreetmap/josm/gui/preferences/validator/ValidatorPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/validator/ValidatorPreference.java	(revision 6592)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/validator/ValidatorPreference.java	(revision 6593)
@@ -8,4 +8,5 @@
 import java.awt.event.ActionListener;
 import java.util.Collection;
+import java.util.LinkedList;
 
 import javax.swing.BorderFactory;
@@ -52,5 +53,5 @@
 
     /** The preferences key for enabled tests */
-    public static final String PREF_TESTS = PREFIX + ".tests";
+    public static final String PREF_SKIP_TESTS = PREFIX + ".skip";
 
     /** The preferences key for enabled tests */
@@ -58,5 +59,5 @@
 
     /** The preferences key for enabled tests before upload*/
-    public static final String PREF_TESTS_BEFORE_UPLOAD = PREFIX + ".testsBeforeUpload";
+    public static final String PREF_SKIP_TESTS_BEFORE_UPLOAD = PREFIX + ".skipBeforeUpload";
 
     /** The preferences key for ignored severity other on upload */
@@ -126,25 +127,19 @@
     @Override
     public boolean ok() {
-        StringBuilder tests = new StringBuilder();
-        StringBuilder testsBeforeUpload = new StringBuilder();
+        Collection<String> tests = new LinkedList<String>();
+        Collection<String> testsBeforeUpload = new LinkedList<String>();
 
         for (Test test : allTests) {
             test.ok();
             String name = test.getClass().getSimpleName();
-            tests.append(',').append(name).append('=').append(test.enabled);
-            testsBeforeUpload.append(',').append(name).append('=').append(test.testBeforeUpload);
+            if(!test.enabled)
+                tests.add(name);
+            if(!test.testBeforeUpload)
+                testsBeforeUpload.add(name);
         }
-
-        if (tests.length() > 0) {
-            tests = tests.deleteCharAt(0);
-        }
-        if (testsBeforeUpload.length() > 0) {
-            testsBeforeUpload = testsBeforeUpload.deleteCharAt(0);
-        }
-
         OsmValidator.initializeTests(allTests);
 
-        Main.pref.put(PREF_TESTS, tests.toString());
-        Main.pref.put(PREF_TESTS_BEFORE_UPLOAD, testsBeforeUpload.toString());
+        Main.pref.putCollection(PREF_SKIP_TESTS, tests);
+        Main.pref.putCollection(PREF_SKIP_TESTS_BEFORE_UPLOAD, testsBeforeUpload);
         Main.pref.put(PREF_USE_IGNORE, prefUseIgnore.isSelected());
         Main.pref.put(PREF_OTHER, prefOther.isSelected());
