Index: trunk/src/org/openstreetmap/josm/data/validation/OsmValidator.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/OsmValidator.java	(revision 15602)
+++ trunk/src/org/openstreetmap/josm/data/validation/OsmValidator.java	(revision 15603)
@@ -166,4 +166,21 @@
     }
 
+    /**
+     * 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 15603
+     */
+    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) {
Index: trunk/test/unit/org/openstreetmap/josm/data/validation/OsmValidatorTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/data/validation/OsmValidatorTest.java	(revision 15602)
+++ trunk/test/unit/org/openstreetmap/josm/data/validation/OsmValidatorTest.java	(revision 15603)
@@ -3,4 +3,5 @@
 
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotEquals;
 import static org.junit.Assert.assertTrue;
 
@@ -8,4 +9,5 @@
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.josm.data.validation.tests.Addresses;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 
@@ -84,3 +86,22 @@
     }
 
+    /**
+     * 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));
+    }
+
 }
