Index: trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/AddNodeHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/AddNodeHandler.java	(revision 18133)
+++ trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/AddNodeHandler.java	(revision 18134)
@@ -6,5 +6,4 @@
 import java.awt.Point;
 import java.util.Collections;
-import java.util.Map;
 
 import org.openstreetmap.josm.actions.AutoScaleAction;
@@ -39,5 +38,5 @@
     @Override
     protected void handleRequest() {
-        GuiHelper.runInEDTAndWait(() -> addNode(args));
+        GuiHelper.runInEDT(this::addNode);
     }
 
@@ -78,7 +77,6 @@
     /**
      * Adds a node, implements the GET /add_node?lon=...&amp;lat=... request.
-     * @param args request arguments
      */
-    private void addNode(Map<String, String> args) {
+    private void addNode() {
 
         // Parse the arguments
Index: trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/AddWayHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/AddWayHandler.java	(revision 18133)
+++ trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/AddWayHandler.java	(revision 18134)
@@ -44,6 +44,4 @@
     private final List<LatLon> allCoordinates = new ArrayList<>();
 
-    private Way way;
-
     /**
      * The place to remember already added nodes (they are reused if needed @since 5845
@@ -78,7 +76,5 @@
     @Override
     protected void handleRequest() throws RequestHandlerErrorException, RequestHandlerBadRequestException {
-        GuiHelper.runInEDTAndWait(() -> way = addWay());
-        // parse parameter addtags=tag1=value1|tag2=value2
-        AddTagsDialog.addTags(args, sender, Collections.singleton(way));
+        GuiHelper.runInEDT(this::addWay);
     }
 
@@ -158,8 +154,8 @@
     }
 
-    /*
+    /**
      * This function creates the way with given coordinates of nodes
      */
-    private Way addWay() {
+    private void addWay() {
         addedNodes = new HashMap<>();
         Way way = new Way();
@@ -179,5 +175,6 @@
             MainApplication.getMap().mapView.repaint();
         }
-        return way;
+        // parse parameter addtags=tag1=value1|tag2=value2
+        AddTagsDialog.addTags(args, sender, Collections.singleton(way));
     }
 }
Index: trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java	(revision 18133)
+++ trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java	(revision 18134)
@@ -34,4 +34,5 @@
 import org.openstreetmap.josm.data.osm.search.SearchParseError;
 import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
+import org.openstreetmap.josm.gui.ExceptionDialogUtil;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.MapFrame;
@@ -39,4 +40,5 @@
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.io.OsmApiException;
+import org.openstreetmap.josm.io.OsmTransferException;
 import org.openstreetmap.josm.io.remotecontrol.AddTagsDialog;
 import org.openstreetmap.josm.io.remotecontrol.PermissionPrefWithDefault;
@@ -155,18 +157,25 @@
                         Logging.info("RemoteControl: no download necessary");
                     } else {
-                        Future<?> future = osmTask.download(settings, new Bounds(minlat, minlon, maxlat, maxlon),
-                                null /* let the task manage the progress monitor */);
-                        MainApplication.worker.submit(new PostDownloadHandler(osmTask, future))
-                            .get(OSM_DOWNLOAD_TIMEOUT.get(), TimeUnit.SECONDS);
-                        if (osmTask.isFailed()) {
-                            Object error = osmTask.getErrorObjects().get(0);
-                            throw error instanceof OsmApiException
-                                ? new RequestHandlerOsmApiException((OsmApiException) error)
-                                : new RequestHandlerErrorException(String.join(", ", osmTask.getErrorMessages()));
-                        }
+                        Future<?> future = MainApplication.worker.submit(
+                                new PostDownloadHandler(osmTask, osmTask.download(settings, new Bounds(minlat, minlon, maxlat, maxlon),
+                                        null /* let the task manage the progress monitor */)));
+                        GuiHelper.executeByMainWorkerInEDT(() -> {
+                            try {
+                                future.get(OSM_DOWNLOAD_TIMEOUT.get(), TimeUnit.SECONDS);
+                                if (osmTask.isFailed()) {
+                                    Object error = osmTask.getErrorObjects().get(0);
+                                    throw error instanceof OsmApiException
+                                        ? (OsmApiException) error
+                                        : new OsmTransferException(String.join(", ", osmTask.getErrorMessages()));
+                                }
+                            } catch (InterruptedException | ExecutionException | TimeoutException |
+                                    OsmTransferException | RuntimeException ex) { // NOPMD
+                                ExceptionDialogUtil.explainException(ex);
+                            }
+                        });
                     }
                 }
             }
-        } catch (RuntimeException | InterruptedException | ExecutionException | TimeoutException ex) { // NOPMD
+        } catch (RuntimeException ex) { // NOPMD
             Logging.warn("RemoteControl: Error parsing load_and_zoom remote control request:");
             Logging.error(ex);
Index: trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/OpenFileHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/OpenFileHandler.java	(revision 18133)
+++ trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/OpenFileHandler.java	(revision 18134)
@@ -49,5 +49,5 @@
             options.add(Options.ALLOW_WEB_RESOURCES);
         }
-        GuiHelper.runInEDTAndWait(() ->
+        GuiHelper.runInEDT(() ->
             OpenFileAction.openFiles(Arrays.asList(new File(args.get("filename"))), options.toArray(new Options[0])));
     }
Index: trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/RequestHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/RequestHandler.java	(revision 18133)
+++ trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/RequestHandler.java	(revision 18134)
@@ -97,4 +97,5 @@
     /**
      * Handle a specific command sent as remote control.
+     * Any time-consuming operation must be performed asynchronously to avoid delaying the HTTP response.
      *
      * This method of the subclass will do the real work.
