Index: /trunk/src/org/openstreetmap/josm/gui/preferences/PluginPreference.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/preferences/PluginPreference.java	(revision 3085)
+++ /trunk/src/org/openstreetmap/josm/gui/preferences/PluginPreference.java	(revision 3086)
@@ -313,5 +313,5 @@
             sb.append(buildDownloadSummary(task));
             if (!downloaded.isEmpty()) {
-                sb.append("Please restart JOSM to activate the downloaded plugins.");
+                sb.append(tr("Please restart JOSM to activate the downloaded plugins."));
             }
             sb.append("</html>");
@@ -333,7 +333,10 @@
                     tr("Update plugins")
             );
-            Runnable r = new Runnable() {
+
+            final ReadRemotePluginInformationTask task2 = new ReadRemotePluginInformationTask(Main.pref.getPluginSites());
+
+            final Runnable r2 = new Runnable() {
                 public void run() {
-                    if (task.isCanceled())
+                    if (task2.isCanceled())
                         return;
                     notifyDownloadResults(task);
@@ -342,6 +345,16 @@
                 }
             };
+
+            final Runnable r1 = new Runnable() {
+                public void run() {
+                    if (task.isCanceled())
+                        return;
+                    Main.worker.submit(task2);
+                    Main.worker.submit(r2);
+                }
+            };
+
             Main.worker.submit(task);
-            Main.worker.submit(r);
+            Main.worker.submit(r1);
         }
     }
Index: /trunk/src/org/openstreetmap/josm/plugins/PluginHandler.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/plugins/PluginHandler.java	(revision 3085)
+++ /trunk/src/org/openstreetmap/josm/plugins/PluginHandler.java	(revision 3086)
@@ -606,4 +606,5 @@
      * Updates the plugins in <code>plugins</code>.
      * 
+     * @param parent the parent window for message boxes
      * @param plugins the collection of plugins to update. Must not be null.
      * @param monitor the progress monitor. Defaults to {@see NullProgressMonitor#INSTANCE} if null.
@@ -616,20 +617,50 @@
         }
         try {
-            PluginDownloadTask task = new PluginDownloadTask(
-                    monitor,
+            monitor.beginTask("");
+            ExecutorService service = Executors.newSingleThreadExecutor();
+
+            // try to download the plugin lists
+            //
+            ReadRemotePluginInformationTask task1 = new ReadRemotePluginInformationTask(
+                    monitor.createSubTaskMonitor(1,false),
+                    Main.pref.getPluginSites()
+            );
+            Future<?> future = service.submit(task1);
+            try {
+                future.get();
+            } catch(ExecutionException e) {
+                System.out.println(tr("Warning: failed to download plugin information list"));
+                e.printStackTrace();
+                // don't abort in case of error, continue with downloading plugins below
+            } catch(InterruptedException e) {
+                System.out.println(tr("Warning: failed to download plugin information list"));
+                e.printStackTrace();
+                // don't abort in case of error, continue with downloading plugins below
+            }
+
+            // try to update the locally installed plugins
+            //
+            PluginDownloadTask task2 = new PluginDownloadTask(
+                    monitor.createSubTaskMonitor(1,false),
                     plugins,
                     tr("Update plugins")
             );
-            ExecutorService service = Executors.newSingleThreadExecutor();
-            Future<?> future = service.submit(task);
+
+            future = service.submit(task2);
             try {
                 future.get();
             } catch(ExecutionException e) {
                 e.printStackTrace();
+                alertFailedPluginUpdate(parent, plugins);
+                return;
             } catch(InterruptedException e) {
                 e.printStackTrace();
-            }
-            if (! task.getFailedPlugins().isEmpty()) {
-                alertFailedPluginUpdate(parent, task.getFailedPlugins());
+                alertFailedPluginUpdate(parent, plugins);
+                return;
+            }
+            // notify user if downloading a locally installed plugin failed
+            //
+            if (! task2.getFailedPlugins().isEmpty()) {
+                alertFailedPluginUpdate(parent, task2.getFailedPlugins());
                 return;
             }
Index: /trunk/src/org/openstreetmap/josm/plugins/ReadRemotePluginInformationTask.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/plugins/ReadRemotePluginInformationTask.java	(revision 3085)
+++ /trunk/src/org/openstreetmap/josm/plugins/ReadRemotePluginInformationTask.java	(revision 3086)
@@ -28,4 +28,5 @@
 import org.openstreetmap.josm.data.Version;
 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;
@@ -44,11 +45,5 @@
     private List<PluginInformation> availabePlugins;
 
-    /**
-     * Creates the task
-     * 
-     * @param sites the collection of download sites. Defaults to the empty collection if null.
-     */
-    public ReadRemotePluginInformationTask(Collection<String> sites) {
-        super(tr("Download plugin list..."), false /* don't ignore exceptions */);
+    protected void init(Collection<String> sites){
         this.sites = sites;
         if (sites == null) {
@@ -56,5 +51,27 @@
         }
         availabePlugins = new LinkedList<PluginInformation>();
-    }
+
+    }
+    /**
+     * Creates the task
+     * 
+     * @param sites the collection of download sites. Defaults to the empty collection if null.
+     */
+    public ReadRemotePluginInformationTask(Collection<String> sites) {
+        super(tr("Download plugin list..."), false /* don't ignore exceptions */);
+        init(sites);
+    }
+
+    /**
+     * Creates the task
+     * 
+     * @param monitor the progress monitor. Defaults to {@see NullProgressMonitor#INSTANCE} if null
+     * @param sites the collection of download sites. Defaults to the empty collection if null.
+     */
+    public ReadRemotePluginInformationTask(ProgressMonitor monitor, Collection<String> sites) {
+        super(tr("Download plugin list..."), monitor == null ? NullProgressMonitor.INSTANCE: monitor, false /* don't ignore exceptions */);
+        init(sites);
+    }
+
 
     @Override
