Index: trunk/.classpath
===================================================================
--- trunk/.classpath	(revision 14781)
+++ trunk/.classpath	(revision 14782)
@@ -43,15 +43,10 @@
 		</attributes>
 	</classpathentry>
-	<classpathentry kind="lib" path="test/lib/reflections/reflections-0.9.11.jar">
+	<classpathentry kind="lib" path="test/lib/classgraph-4.6.32.jar" sourcepath="C:/Users/vippy/.m2/repository/io/github/classgraph/classgraph/4.6.32/classgraph-4.6.32-sources.jar">
 		<attributes>
 			<attribute name="test" value="true"/>
 		</attributes>
 	</classpathentry>
-	<classpathentry kind="lib" path="test/lib/reflections/guava-21.0.jar">
-		<attributes>
-			<attribute name="test" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="lib" path="test/lib/reflections/javassist-3.21.0-GA.jar">
+	<classpathentry kind="lib" path="tools/guava.jar">
 		<attributes>
 			<attribute name="test" value="true"/>
Index: trunk/build.xml
===================================================================
--- trunk/build.xml	(revision 14781)
+++ trunk/build.xml	(revision 14782)
@@ -43,4 +43,6 @@
         <property name="error_prone_core.jar" location="${tools.dir}/error_prone_core.jar"/>
         <property name="error_prone_javac.jar" location="${tools.dir}/error_prone_javac.jar"/>
+        <property name="failureaccess.jar" location="${tools.dir}/failureaccess.jar"/>
+        <property name="guava.jar" location="${tools.dir}/guava.jar"/>
         <property name="jformatstring.jar" location="${spotbugs.dir}/jFormatString-3.0.0.jar"/>
         <property name="dist.jar" location="${dist.dir}/josm-custom.jar"/>
@@ -93,4 +95,6 @@
         <path id="processor.path">
             <pathelement location="${error_prone_core.jar}"/>
+            <pathelement location="${failureaccess.jar}"/>
+            <pathelement location="${guava.jar}"/>
             <pathelement location="${jformatstring.jar}"/>
         </path>
Index: trunk/netbeans/nbproject/project.properties
===================================================================
--- trunk/netbeans/nbproject/project.properties	(revision 14781)
+++ trunk/netbeans/nbproject/project.properties	(revision 14782)
@@ -32,22 +32,21 @@
 endorsed.classpath=
 excludes=org/apache/commons/compress/compressors/CompressorException.java,org/apache/commons/compress/compressors/CompressorStreamFactory.java,org/apache/commons/compress/compressors/CompressorStreamProvider.java,org/apache/commons/compress/compressors/FileNameUtil.java,org/apache/commons/compress/compressors/brotli/**,org/apache/commons/compress/compressors/bzip2/BZip2Utils.java,org/apache/commons/compress/compressors/deflate/**,org/apache/commons/compress/compressors/gzip/**,org/apache/commons/compress/compressors/lz4/**,org/apache/commons/compress/compressors/lz77support/**,org/apache/commons/compress/compressors/lzma/**,org/apache/commons/compress/compressors/pack200/**,org/apache/commons/compress/compressors/snappy/**,org/apache/commons/compress/compressors/xz/XZUtils.java,org/apache/commons/compress/compressors/z/**,org/apache/commons/compress/compressors/zstandard/**,org/apache/commons/compress/utils/ArchiveUtils.java,org/apache/commons/jcs/JCS.java,org/apache/commons/jcs/access/GroupCacheAccess.java,org/apache/commons/jcs/access/PartitionedCacheAccess.java,org/apache/commons/jcs/access/behavior/IGroupCacheAccess.java,org/apache/commons/jcs/access/exception/InvalidGroupException.java,org/apache/commons/jcs/admin/servlet/**,org/apache/commons/jcs/auxiliary/AbstractAuxiliaryCacheMonitor.java,org/apache/commons/jcs/auxiliary/disk/jdbc/**,org/apache/commons/jcs/auxiliary/lateral/**,org/apache/commons/jcs/auxiliary/remote/AbstractRemoteAuxiliaryCache.java,org/apache/commons/jcs/auxiliary/remote/AbstractRemoteCacheListener.java,org/apache/commons/jcs/auxiliary/remote/AbstractRemoteCacheNoWaitFacade.java,org/apache/commons/jcs/auxiliary/remote/RemoteCache.java,org/apache/commons/jcs/auxiliary/remote/RemoteCacheFactory.java,org/apache/commons/jcs/auxiliary/remote/RemoteCacheFailoverRunner.java,org/apache/commons/jcs/auxiliary/remote/RemoteCacheListener.java,org/apache/commons/jcs/auxiliary/remote/RemoteCacheManager.java,org/apache/commons/jcs/auxiliary/remote/RemoteCacheMonitor.java,org/apache/commons/jcs/auxiliary/remote/RemoteCacheNoWait.java,org/apache/commons/jcs/auxiliary/remote/RemoteCacheNoWaitFacade.java,org/apache/commons/jcs/auxiliary/remote/RemoteCacheRestore.java,org/apache/commons/jcs/auxiliary/remote/http/**,org/apache/commons/jcs/auxiliary/remote/server/RemoteCacheStartupServlet.java,org/apache/commons/jcs/auxiliary/remote/server/TimeoutConfigurableRMISocketFactory.java,org/apache/commons/jcs/engine/CacheAdaptor.java,org/apache/commons/jcs/engine/CacheGroup.java,org/apache/commons/jcs/engine/CacheWatchRepairable.java,org/apache/commons/jcs/engine/ZombieCacheService.java,org/apache/commons/jcs/engine/ZombieCacheServiceNonLocal.java,org/apache/commons/jcs/engine/ZombieCacheWatch.java,org/apache/commons/jcs/engine/logging/CacheEventLoggerDebugLogger.java,org/apache/commons/jcs/utils/access/**,org/apache/commons/jcs/utils/discovery/**,org/apache/commons/jcs/utils/net/**,org/apache/commons/jcs/utils/props/**,org/apache/commons/jcs/utils/servlet/**,org/apache/commons/logging/impl/AvalonLogger.java,org/apache/commons/logging/impl/Jdk13LumberjackLogger.java,org/apache/commons/logging/impl/Log4JLogger.java,org/apache/commons/logging/impl/LogKitLogger.java,org/apache/commons/logging/impl/ServletContextCleaner.java,org/openstreetmap/gui/jmapviewer/Demo.java,org/openstreetmap/gui/jmapviewer/JMapViewerTree.java,org/openstreetmap/gui/jmapviewer/checkBoxTree/**,org/apache/commons/compress/archivers/**,org/apache/commons/compress/changes/**,org/apache/commons/compress/parallel/**,org/apache/commons/compress/PasswordRequiredException.java
-file.reference.commons-lang-3.7.jar=../tools/pmd/commons-lang-3.7.jar
+file.reference.commons-lang-3.8.1.jar=../tools/pmd/commons-lang-3.8.1.jar
 file.reference.commons-testing-2.1.0.jar=../test/lib/commons-testing/commons-testing-2.1.0.jar
 file.reference.core-src=../src
-file.reference.equalsverifier-2.5.1.jar=../test/lib/equalsverifier-2.5.1.jar
+file.reference.equalsverifier-3.1.2.jar=../test/lib/equalsverifier-3.1.2.jar
 file.reference.spotbugs.jar=../tools/spotbugs/spotbugs.jar
-file.reference.guava-21.0.jar=../test/lib/reflections/guava-21.0.jar
+file.reference.guava.jar=../tools/guava.jar
 file.reference.hamcrest-core-1.3.jar=../test/lib/junit/hamcrest-core-1.3.jar
-file.reference.javassist-3.21.0-GA.jar=../test/lib/reflections/javassist-3.21.0-GA.jar
 file.reference.jfcunit.jar=../test/lib/jfcunit.jar
-file.reference.jmockit-1.41.jar=../test/lib/jmockit-1.41.jar
+file.reference.jmockit.jar=../test/lib/jmockit.jar
 file.reference.junit-4.12.jar=../test/lib/junit/junit-4.12.jar
-file.reference.reflections-0.9.10.jar=../test/lib/reflections/reflections-0.9.10.jar
+file.reference.classgraph.jar=../test/lib/classgraph-4.6.32.jar
 file.reference.test-functional=../test/functional
 file.reference.test-performance=../test/performance
 file.reference.test-unit=../test/unit
-file.reference.system-rules-1.16.1.jar=../test/lib/system-rules-1.16.1.jar
-file.reference.wiremock-standalone-2.18.0.jar=../test/lib/wiremock-standalone-2.18.0.jar
-file.reference.awaitility-3.1.2.jar=../test/lib/awaitility-3.1.2.jar
+file.reference.system-rules-1.19.0.jar=../test/lib/system-rules-1.19.0.jar
+file.reference.wiremock-standalone-2.20.0.jar=../test/lib/wiremock-standalone-2.20.0.jar
+file.reference.awaitility-3.1.5.jar=../test/lib/awaitility-3.1.5.jar
 includes=**/*.java
 jar.compress=false
@@ -65,15 +64,14 @@
     ${build.classes.dir}:\
     ${file.reference.junit-4.12.jar}:\
-    ${file.reference.jmockit-1.41.jar}:\
+    ${file.reference.jmockit.jar}:\
     ${file.reference.jfcunit.jar}:\
-    ${file.reference.equalsverifier-2.5.1.jar}:\
+    ${file.reference.equalsverifier-3.1.2.jar}:\
     ${file.reference.hamcrest-core-1.3.jar}:\
-    ${file.reference.guava-21.0.jar}:\
-    ${file.reference.javassist-3.21.0-GA.jar}:\
-    ${file.reference.reflections-0.9.11.jar}:\
-    ${file.reference.commons-lang-3.7.jar}:\
-    ${file.reference.system-rules-1.16.1.jar}:\
-    ${file.reference.wiremock-standalone-2.18.0.jar}:\
-    ${file.reference.awaitility-3.1.2.jar}:\
+    ${file.reference.guava.jar}:\
+    ${file.reference.classgraph.jar}:\
+    ${file.reference.commons-lang-3.8.1.jar}:\
+    ${file.reference.system-rules-1.19.0.jar}:\
+    ${file.reference.wiremock-standalone-2.20.0.jar}:\
+    ${file.reference.awaitility-3.1.5.jar}:\
     ${file.reference.spotbugs.jar}:\
     ${file.reference.commons-testing-2.1.0.jar}
Index: trunk/test/unit/org/openstreetmap/josm/TestUtils.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/TestUtils.java	(revision 14781)
+++ trunk/test/unit/org/openstreetmap/josm/TestUtils.java	(revision 14782)
@@ -30,4 +30,5 @@
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ThreadPoolExecutor;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
@@ -55,5 +56,4 @@
 import org.openstreetmap.josm.tools.Utils;
 import org.openstreetmap.josm.tools.WikiReader;
-import org.reflections.Reflections;
 
 import com.github.tomakehurst.wiremock.WireMockServer;
@@ -62,4 +62,7 @@
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+import io.github.classgraph.ClassGraph;
+import io.github.classgraph.ClassInfoList;
+import io.github.classgraph.ScanResult;
 import mockit.integration.TestRunnerDecorator;
 
@@ -571,5 +574,9 @@
      */
     public static <T> Set<Class<? extends T>> getJosmSubtypes(Class<T> superClass) {
-        return new Reflections("org.openstreetmap.josm").getSubTypesOf(superClass);
+        try (ScanResult scan = new ClassGraph().whitelistPackages("org.openstreetmap.josm").ignoreClassVisibility().scan()) {
+            Function<String, ClassInfoList> lambda = superClass.isInterface() ? scan::getClassesImplementing : scan::getSubclasses;
+            return lambda.apply(superClass.getName())
+                    .asMap().values().stream().map(x -> x.loadClass(superClass)).collect(Collectors.toSet());
+        }
     }
 
