Index: /trunk/src/org/openstreetmap/josm/plugins/PluginListParser.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/plugins/PluginListParser.java	(revision 10122)
+++ /trunk/src/org/openstreetmap/josm/plugins/PluginListParser.java	(revision 10123)
@@ -34,5 +34,5 @@
      * @throws PluginListParseException if plugin manifest cannot be parsed
      */
-    protected static PluginInformation createInfo(String name, String url, String manifest) throws PluginListParseException {
+    public static PluginInformation createInfo(String name, String url, String manifest) throws PluginListParseException {
         try {
             return new PluginInformation(
Index: /trunk/src/org/openstreetmap/josm/plugins/ReadLocalPluginInformationTask.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/plugins/ReadLocalPluginInformationTask.java	(revision 10122)
+++ /trunk/src/org/openstreetmap/josm/plugins/ReadLocalPluginInformationTask.java	(revision 10123)
@@ -16,4 +16,5 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.PleaseWaitRunnable;
+import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.io.OsmTransferException;
@@ -136,5 +137,8 @@
 
     protected void scanLocalPluginRepository(ProgressMonitor monitor, File pluginsDirectory) {
-        if (pluginsDirectory == null) return;
+        if (pluginsDirectory == null)
+            return;
+        if (monitor == null)
+            monitor = NullProgressMonitor.INSTANCE;
         try {
             monitor.beginTask("");
Index: /trunk/test/unit/org/openstreetmap/josm/gui/MainApplicationTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/gui/MainApplicationTest.java	(revision 10122)
+++ /trunk/test/unit/org/openstreetmap/josm/gui/MainApplicationTest.java	(revision 10123)
@@ -6,4 +6,5 @@
 import static org.junit.Assert.assertNull;
 
+import java.util.Arrays;
 import java.util.Collection;
 
@@ -16,5 +17,8 @@
 import org.openstreetmap.josm.gui.SplashScreen.SplashProgressMonitor;
 import org.openstreetmap.josm.plugins.PluginHandler;
+import org.openstreetmap.josm.plugins.PluginHandlerTestIT;
 import org.openstreetmap.josm.plugins.PluginInformation;
+import org.openstreetmap.josm.plugins.PluginListParseException;
+import org.openstreetmap.josm.plugins.PluginListParser;
 
 /**
@@ -33,7 +37,8 @@
     /**
      * Test of {@link MainApplication#updateAndLoadEarlyPlugins} and {@link MainApplication#loadLatePlugins} methods.
+     * @throws PluginListParseException if an error occurs
      */
     @Test
-    public void testUpdateAndLoadPlugins() {
+    public void testUpdateAndLoadPlugins() throws PluginListParseException {
         final String old = System.getProperty("josm.plugins");
         try {
@@ -46,4 +51,10 @@
             });
             Collection<PluginInformation> plugins = MainApplication.updateAndLoadEarlyPlugins(null, monitor);
+            if (plugins.isEmpty()) {
+                PluginHandlerTestIT.downloadPlugins(Arrays.asList(
+                        newPluginInformation("buildings_tools"),
+                        newPluginInformation("plastic_laf")));
+                plugins = MainApplication.updateAndLoadEarlyPlugins(null, monitor);
+            }
             assertEquals(2, plugins.size());
             assertNotNull(PluginHandler.getPlugin("plastic_laf"));
@@ -59,3 +70,9 @@
         }
     }
+
+    private static PluginInformation newPluginInformation(String plugin) throws PluginListParseException {
+        //return new PluginInformation(new File(TestUtils.getTestDataRoot()+File.separator+"plugin"+File.separator+plugin+".jar"));
+        return PluginListParser.createInfo(plugin+".jar", "https://svn.openstreetmap.org/applications/editors/josm/dist/"+plugin+".jar",
+                "");
+    }
 }
Index: /trunk/test/unit/org/openstreetmap/josm/plugins/PluginHandlerTestIT.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/plugins/PluginHandlerTestIT.java	(revision 10122)
+++ /trunk/test/unit/org/openstreetmap/josm/plugins/PluginHandlerTestIT.java	(revision 10123)
@@ -7,4 +7,5 @@
 
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
@@ -66,12 +67,6 @@
         System.out.println("Filtered plugin list contains " + plugins.size() + " plugins");
 
-        // Update the locally installed plugins
-        PluginDownloadTask pluginDownloadTask = new PluginDownloadTask(NullProgressMonitor.INSTANCE, plugins, null);
-        pluginDownloadTask.run();
-        assertTrue(pluginDownloadTask.getFailedPlugins().toString(), pluginDownloadTask.getFailedPlugins().isEmpty());
-        assertEquals(plugins.size(), pluginDownloadTask.getDownloadedPlugins().size());
-
-        // Update Plugin info for downloaded plugins
-        PluginHandler.refreshLocalUpdatedPluginInfo(pluginDownloadTask.getDownloadedPlugins());
+        // Download plugins
+        downloadPlugins(plugins);
 
         // Load early plugins
@@ -83,3 +78,18 @@
         assertTrue(PluginHandler.pluginLoadingExceptions.toString(), PluginHandler.pluginLoadingExceptions.isEmpty());
     }
+
+    /**
+     * Download plugins
+     * @param plugins plugins to download
+     */
+    public static void downloadPlugins(Collection<PluginInformation> plugins) {
+        // Update the locally installed plugins
+        PluginDownloadTask pluginDownloadTask = new PluginDownloadTask(NullProgressMonitor.INSTANCE, plugins, null);
+        pluginDownloadTask.run();
+        assertTrue(pluginDownloadTask.getFailedPlugins().toString(), pluginDownloadTask.getFailedPlugins().isEmpty());
+        assertEquals(plugins.size(), pluginDownloadTask.getDownloadedPlugins().size());
+
+        // Update Plugin info for downloaded plugins
+        PluginHandler.refreshLocalUpdatedPluginInfo(pluginDownloadTask.getDownloadedPlugins());
+    }
 }
