Index: /trunk/src/org/openstreetmap/josm/plugins/PluginClassLoader.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/plugins/PluginClassLoader.java	(revision 12322)
+++ /trunk/src/org/openstreetmap/josm/plugins/PluginClassLoader.java	(revision 12323)
@@ -50,5 +50,7 @@
                     return result;
                 }
-            } catch (ClassNotFoundException e) {}
+            } catch (ClassNotFoundException e) {
+                // do nothing
+            }
         }
         Class<?> result = super.loadClass(name, resolve);
Index: /trunk/src/org/openstreetmap/josm/plugins/PluginHandler.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/plugins/PluginHandler.java	(revision 12322)
+++ /trunk/src/org/openstreetmap/josm/plugins/PluginHandler.java	(revision 12323)
@@ -827,8 +827,10 @@
             Map<PluginInformation, PluginClassLoader> classLoaders = new HashMap<>();
             for (PluginInformation info : toLoad) {
-                classLoaders.put(info, new PluginClassLoader(
+                PluginClassLoader cl = AccessController.doPrivileged((PrivilegedAction<PluginClassLoader>)
+                    () -> new PluginClassLoader(
                         info.libraries.toArray(new URL[0]),
                         Main.class.getClassLoader(),
                         null));
+                classLoaders.put(info, cl);
             }
 
@@ -1213,4 +1215,19 @@
     }
 
+    /**
+     * Returns the plugin class loader for the plugin of the specified name.
+     * @param name The plugin name
+     * @return The plugin class loader for the plugin of the specified name, if
+     * installed and loaded, or {@code null} otherwise.
+     * @since 12323
+     */
+    public static PluginClassLoader getPluginClassLoader(String name) {
+        for (PluginProxy plugin : pluginList) {
+            if (plugin.getPluginInformation().name.equals(name))
+                return plugin.getClassLoader();
+        }
+        return null;
+    }
+
     public static void addDownloadSelection(List<DownloadSelection> downloadSelections) {
         for (PluginProxy p : pluginList) {
Index: /trunk/test/unit/org/openstreetmap/josm/plugins/PluginHandlerTestIT.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/plugins/PluginHandlerTestIT.java	(revision 12322)
+++ /trunk/test/unit/org/openstreetmap/josm/plugins/PluginHandlerTestIT.java	(revision 12323)
@@ -127,7 +127,7 @@
 
     private static String findFaultyPlugin(Collection<PluginInformation> plugins, Throwable root) {
-        DynamicURLClassLoader cl = PluginHandler.getPluginClassLoader();
         for (PluginInformation p : plugins) {
             try {
+                ClassLoader cl = PluginHandler.getPluginClassLoader(p.getName());
                 String pluginPackage = cl.loadClass(p.className).getPackage().getName();
                 for (StackTraceElement e : root.getStackTrace()) {
