Index: src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java
===================================================================
--- src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java	(revision 13322)
+++ src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java	(working copy)
@@ -13,6 +13,9 @@
 import java.util.Set;
 import java.util.concurrent.Future;
 
+import javax.swing.JOptionPane;
+
+import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.AutoScaleAction;
 import org.openstreetmap.josm.actions.downloadtasks.DownloadOsmTask;
 import org.openstreetmap.josm.actions.downloadtasks.DownloadTask;
@@ -171,12 +174,12 @@
             });
         }
 
-        final Collection<OsmPrimitive> forTagAdd = new HashSet<>();
+        final Collection<OsmPrimitive> forTagAdd = new HashSet<>(); // these objects will receive tags
         final Bounds bbox = new Bounds(minlat, minlon, maxlat, maxlon);
         if (args.containsKey("select") && PermissionPrefWithDefault.CHANGE_SELECTION.isAllowed()) {
             // select objects after downloading, zoom to selection.
             GuiHelper.executeByMainWorkerInEDT(() -> {
-                Set<OsmPrimitive> newSel = new HashSet<>();
+                Set<OsmPrimitive> newSel = new HashSet<>(); // these objects will be selected later on
                 DataSet ds = MainApplication.getLayerManager().getEditDataSet();
                 if (ds == null) // e.g. download failed
                     return;
@@ -193,7 +196,6 @@
                     forTagAdd.addAll(sel);
                 }
                 toSelect.clear();
-                isKeepingCurrentSelection = false;
                 ds.setSelected(newSel);
                 zoom(newSel, bbox);
                 MapFrame map = MainApplication.getMap();
@@ -236,7 +238,30 @@
             });
         }
 
-        AddTagsDialog.addTags(args, sender, forTagAdd);
+        // add tags to objects
+        if (args.containsKey("addtags")) {
+            // needs to run in EDT since forTagAdd is updated in EDT as well
+            GuiHelper.executeByMainWorkerInEDT(() -> {
+                if (!forTagAdd.isEmpty()) {
+                    AddTagsDialog.addTags(args, sender, forTagAdd);
+                } else { // something is wrong, forTagAdd should not be empty
+                    if (isKeepingCurrentSelection) {
+                        JOptionPane.showMessageDialog(Main.parent,
+                                tr("You clicked on a JOSM remotecontrol link that would apply tags onto selected objects.\n"
+                                        + "Since no objects have been selected before this click, no tags were added.\n"
+                                        + "Select one or more objects and click the link again."),
+                                tr("No object selected"), JOptionPane.ERROR_MESSAGE);
+                    } else { // !isKeepingCurrentSelection
+                        JOptionPane.showMessageDialog(Main.parent,
+                                tr("You clicked on a JOSM remotecontrol link that would apply tags onto objects.\n"
+                                        + "Unfortunately that link seems to be broken.\n"
+                                        + "Technical explanation: the URL query parameter ''select='' or ''search='' has an invalid value.\n"
+                                        + "Ask someone at the origin of the clicked link to fix this."),
+                                tr("Invalid query parameter"), JOptionPane.ERROR_MESSAGE);
+                    }
+                }
+            });
+        }
     }
 
     protected void zoom(Collection<OsmPrimitive> primitives, final Bounds bbox) {
