Index: src/org/openstreetmap/josm/data/validation/OsmValidator.java
===================================================================
--- src/org/openstreetmap/josm/data/validation/OsmValidator.java	(revision 15602)
+++ src/org/openstreetmap/josm/data/validation/OsmValidator.java	(working copy)
@@ -165,6 +165,23 @@
         }
     }
 
+    /**
+     * Removes a test from the list of available tests. This will not remove
+     * core tests.
+     *
+     * @param testClass The test class
+     * @return {@code true} if the test was removed (see {@link Collection#remove})
+     * @since xxx
+     */
+    public static boolean removeTest(Class<? extends Test> testClass) {
+        boolean removed = false;
+        if (!Arrays.asList(CORE_TEST_CLASSES).contains(testClass)) {
+            removed = allTests.remove(testClass);
+            allTestsMap.remove(testClass.getName());
+        }
+        return removed;
+    }
+
     static {
         for (Class<? extends Test> testClass : CORE_TEST_CLASSES) {
             addTest(testClass);
Index: test/unit/org/openstreetmap/josm/data/validation/OsmValidatorTest.java
===================================================================
--- test/unit/org/openstreetmap/josm/data/validation/OsmValidatorTest.java	(revision 15602)
+++ test/unit/org/openstreetmap/josm/data/validation/OsmValidatorTest.java	(working copy)
@@ -2,11 +2,13 @@
 package org.openstreetmap.josm.data.validation;
 
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotEquals;
 import static org.junit.Assert.assertTrue;
 
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.data.validation.tests.Addresses;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
@@ -83,4 +85,23 @@
         assertTrue(OsmValidator.hasIgnoredError("1351:n_6871910559:w_733713588"));
     }
 
+    /**
+     * Test that tests are really removed, and that core tests cannot be removed
+     */
+    @Test
+    public void testRemoveTests() {
+        org.openstreetmap.josm.data.validation.Test test = new org.openstreetmap.josm.data.validation.Test("test") {
+        };
+        assertNotEquals(org.openstreetmap.josm.data.validation.Test.class, test.getClass());
+        OsmValidator.addTest(test.getClass());
+        assertTrue(OsmValidator.getAllAvailableTestClasses().contains(test.getClass()));
+        assertTrue(OsmValidator.removeTest(test.getClass()));
+        assertFalse(OsmValidator.removeTest(test.getClass()));
+        assertFalse(OsmValidator.getAllAvailableTestClasses().contains(test.getClass()));
+
+        assertTrue(OsmValidator.getAllAvailableTestClasses().contains(Addresses.class));
+        assertFalse(OsmValidator.removeTest(Addresses.class));
+        assertTrue(OsmValidator.getAllAvailableTestClasses().contains(Addresses.class));
+    }
+
 }
