Index: src/org/openstreetmap/josm/plugins/PluginHandler.java
===================================================================
--- src/org/openstreetmap/josm/plugins/PluginHandler.java	(revision 17085)
+++ src/org/openstreetmap/josm/plugins/PluginHandler.java	(working copy)
@@ -1109,24 +1109,24 @@
      */
     public static Collection<PluginInformation> updatePlugins(Component parent,
             Collection<PluginInformation> pluginsWanted, ProgressMonitor monitor, boolean displayErrMsg) {
-        Collection<PluginInformation> plugins = null;
-        pluginDownloadTask = null;
         if (monitor == null) {
             monitor = NullProgressMonitor.INSTANCE;
         }
-        try {
-            monitor.beginTask("");
+        final ProgressMonitor myMonitor = monitor;
 
-            // try to download the plugin lists
-            ReadRemotePluginInformationTask task1 = new ReadRemotePluginInformationTask(
-                    monitor.createSubTaskMonitor(1, false),
-                    Preferences.main().getOnlinePluginSites(), displayErrMsg
-            );
-            task1.run();
+        // try to download the plugin lists
+        ReadRemotePluginInformationTask task1 = new ReadRemotePluginInformationTask(
+                monitor.createSubTaskMonitor(1, false),
+                Preferences.main().getOnlinePluginSites(), displayErrMsg
+                );
+        MainApplication.worker.submit(task1);
+        MainApplication.worker.submit(() -> {
             List<PluginInformation> allPlugins = task1.getAvailablePlugins();
+            Collection<PluginInformation> plugins = null;
+            pluginDownloadTask = null;
 
             try {
-                plugins = buildListOfPluginsToLoad(parent, monitor.createSubTaskMonitor(1, false));
+                plugins = buildListOfPluginsToLoad(parent, myMonitor.createSubTaskMonitor(1, false));
                 // If only some plugins have to be updated, filter the list
                 if (pluginsWanted != null && !pluginsWanted.isEmpty()) {
                     final Collection<String> pluginsWantedName = Utils.transform(pluginsWanted, piw -> piw.name);
@@ -1141,7 +1141,7 @@
             // filter plugins which actually have to be updated
             Collection<PluginInformation> pluginsToUpdate = new ArrayList<>();
             if (plugins != null) {
-                for (PluginInformation pi: plugins) {
+                for (PluginInformation pi : plugins) {
                     if (pi.isUpdateRequired()) {
                         pluginsToUpdate.add(pi);
                     }
@@ -1155,7 +1155,8 @@
                 if (allPlugins != null) {
                     // Updated plugins may need additional plugin dependencies currently not installed
                     //
-                    Set<PluginInformation> additionalPlugins = findRequiredPluginsToDownload(pluginsToUpdate, allPlugins, pluginsToDownload);
+                    Set<PluginInformation> additionalPlugins = findRequiredPluginsToDownload(pluginsToUpdate,
+                            allPlugins, pluginsToDownload);
                     pluginsToDownload.addAll(additionalPlugins);
 
                     // Iterate on required plugins, if they need themselves another plugins (i.e A needs B, but B needs C)
@@ -1163,7 +1164,8 @@
                         // Install the additional plugins to load them later
                         if (plugins != null)
                             plugins.addAll(additionalPlugins);
-                        additionalPlugins = findRequiredPluginsToDownload(additionalPlugins, allPlugins, pluginsToDownload);
+                        additionalPlugins = findRequiredPluginsToDownload(additionalPlugins, allPlugins,
+                                pluginsToDownload);
                         pluginsToDownload.addAll(additionalPlugins);
                     }
                 }
@@ -1170,10 +1172,10 @@
 
                 // try to update the locally installed plugins
                 pluginDownloadTask = new PluginDownloadTask(
-                        monitor.createSubTaskMonitor(1, false),
+                        myMonitor.createSubTaskMonitor(1, false),
                         pluginsToDownload,
                         tr("Update plugins")
-                );
+                        );
                 try {
                     pluginDownloadTask.run();
                 } catch (RuntimeException e) { // NOPMD
@@ -1191,15 +1193,15 @@
                     return plugins;
                 }
             }
-        } finally {
-            monitor.finishTask();
-        }
-        if (pluginsWanted == null) {
-            // if all plugins updated, remember the update because it was successful
-            Config.getPref().putInt("pluginmanager.version", Version.getInstance().getVersion());
-            Config.getPref().put("pluginmanager.lastupdate", Long.toString(System.currentTimeMillis()));
-        }
-        return plugins;
+            if (pluginsWanted == null) {
+                // if all plugins updated, remember the update because it was successful
+                Config.getPref().putInt("pluginmanager.version", Version.getInstance().getVersion());
+                Config.getPref().put("pluginmanager.lastupdate", Long.toString(System.currentTimeMillis()));
+            }
+            return plugins;
+
+        });
+        return Collections.emptyList();
     }
 
     /**
