Index: trunk/src/org/openstreetmap/josm/io/remotecontrol/AddTagsDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/remotecontrol/AddTagsDialog.java	(revision 7518)
+++ trunk/src/org/openstreetmap/josm/io/remotecontrol/AddTagsDialog.java	(revision 7521)
@@ -291,5 +291,5 @@
      * addtags=wikipedia:de%3DResidenzschloss Dresden|name:en%3DDresden Castle
      */
-    public static void addTags(final Map<String, String> args, final String sender) {
+    public static void addTags(final Map<String, String> args, final String sender, final Collection<? extends OsmPrimitive> primitives) {
         if (args.containsKey("addtags")) {
             GuiHelper.executeByMainWorkerInEDT(new Runnable() {
@@ -319,5 +319,5 @@
                             i++;
                         }
-                        addTags(keyValue, sender);
+                        addTags(keyValue, sender, primitives);
                     }
                 }
@@ -333,10 +333,9 @@
      * @param sender is a string for skipping confirmations. Use epmty string for always confirmed adding.
      */
-    public static void addTags(String[][] keyValue, String sender) {
+    public static void addTags(String[][] keyValue, String sender, Collection<? extends OsmPrimitive> primitives) {
         if (trustedSenders.contains(sender)) {
             if (Main.main.getCurrentDataSet() != null) {
-                Collection<OsmPrimitive> s = Main.main.getCurrentDataSet().getSelected();
                 for (String[] row : keyValue) {
-                    Main.main.undoRedo.add(new ChangePropertyCommand(s, row[0], row[1]));
+                    Main.main.undoRedo.add(new ChangePropertyCommand(primitives, row[0], row[1]));
                 }
             }
Index: trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/AddNodeHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/AddNodeHandler.java	(revision 7518)
+++ trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/AddNodeHandler.java	(revision 7521)
@@ -5,4 +5,5 @@
 
 import java.awt.Point;
+import java.util.Collections;
 import java.util.Map;
 
@@ -29,4 +30,6 @@
     private double lat;
     private double lon;
+    
+    private Node node;
 
     @Override
@@ -87,21 +90,21 @@
         LatLon ll = new LatLon(lat, lon);
 
-        Node nd = null;
+        node = null;
 
         if (Main.isDisplayingMapView()) {
             Point p = Main.map.mapView.getPoint(ll);
-            nd = Main.map.mapView.getNearestNode(p, OsmPrimitive.isUsablePredicate);
-            if (nd!=null && nd.getCoor().greatCircleDistance(ll) > Main.pref.getDouble("remotecontrol.tolerance", 0.1)) {
-                nd = null; // node is too far
+            node = Main.map.mapView.getNearestNode(p, OsmPrimitive.isUsablePredicate);
+            if (node!=null && node.getCoor().greatCircleDistance(ll) > Main.pref.getDouble("remotecontrol.tolerance", 0.1)) {
+                node = null; // node is too far
             }
         }
 
-        if (nd==null) {
-            nd = new Node(ll);
+        if (node==null) {
+            node = new Node(ll);
             // Now execute the commands to add this node.
-            Main.main.undoRedo.add(new AddCommand(nd));
+            Main.main.undoRedo.add(new AddCommand(node));
         }
 
-        Main.main.getCurrentDataSet().setSelected(nd);
+        Main.main.getCurrentDataSet().setSelected(node);
         if (PermissionPrefWithDefault.CHANGE_VIEWPORT.isAllowed()) {
             AutoScaleAction.autoScale("selection");
@@ -110,5 +113,5 @@
         }
         // parse parameter addtags=tag1=value1|tag2=vlaue2
-        AddTagsDialog.addTags(args, sender);
+        AddTagsDialog.addTags(args, sender, Collections.singleton(node));
     }
 
Index: trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/AddWayHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/AddWayHandler.java	(revision 7518)
+++ trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/AddWayHandler.java	(revision 7521)
@@ -7,4 +7,5 @@
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.LinkedList;
@@ -36,4 +37,6 @@
 
     private final List<LatLon> allCoordinates = new ArrayList<>();
+    
+    private Way way;
 
     /**
@@ -69,9 +72,9 @@
         GuiHelper.runInEDTAndWait(new Runnable() {
             @Override public void run() {
-                addWay();
+                way = addWay();
             }
         });
         // parse parameter addtags=tag1=value1|tag2=value2
-        AddTagsDialog.addTags(args, sender);
+        AddTagsDialog.addTags(args, sender, Collections.singleton(way));
     }
 
@@ -150,5 +153,5 @@
      * This function creates the way with given coordinates of nodes
      */
-    private void addWay() {
+    private Way addWay() {
         addedNodes = new HashMap<>();
         Way way = new Way();
@@ -167,4 +170,5 @@
             Main.map.mapView.repaint();
         }
+        return way;
     }
 }
Index: trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java	(revision 7518)
+++ trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java	(revision 7521)
@@ -160,4 +160,5 @@
         }
 
+        final Collection<OsmPrimitive> forTagAdd = new HashSet<>();
         final Bounds bbox = new Bounds(minlat, minlon, maxlat, maxlon);
         if (args.containsKey("select") && PermissionPrefWithDefault.CHANGE_SELECTION.isAllowed()) {
@@ -174,4 +175,5 @@
                         if (p != null) {
                             newSel.add(p);
+                            forTagAdd.add(p);
                         }
                     }
@@ -188,9 +190,15 @@
         } else if (args.containsKey("search") && PermissionPrefWithDefault.CHANGE_SELECTION.isAllowed()) {
             try {
-                final DataSet ds = Main.main.getCurrentDataSet();
                 final SearchCompiler.Match search = SearchCompiler.compile(args.get("search"), false, false);
-                final Collection<OsmPrimitive> filteredPrimitives = Utils.filter(ds.allPrimitives(), search);
-                ds.setSelected(filteredPrimitives);
-                zoom(filteredPrimitives, bbox);
+                Main.worker.submit(new Runnable() {
+                    @Override
+                    public void run() {
+                        final DataSet ds = Main.main.getCurrentDataSet();
+                        final Collection<OsmPrimitive> filteredPrimitives = Utils.filter(ds.allPrimitives(), search);
+                        ds.setSelected(filteredPrimitives);
+                        forTagAdd.addAll(filteredPrimitives);
+                        zoom(filteredPrimitives, bbox);
+                    }
+                });
             } catch (SearchCompiler.ParseError ex) {
                 Main.error(ex);
@@ -219,5 +227,5 @@
         }
 
-        AddTagsDialog.addTags(args, sender);
+        AddTagsDialog.addTags(args, sender, forTagAdd);
     }
 
Index: trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadObjectHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadObjectHandler.java	(revision 7518)
+++ trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadObjectHandler.java	(revision 7521)
@@ -2,4 +2,6 @@
 package org.openstreetmap.josm.io.remotecontrol.handler;
 
+import java.util.Collection;
+import java.util.HashSet;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
@@ -8,4 +10,6 @@
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.PrimitiveId;
 import org.openstreetmap.josm.data.osm.SimplePrimitiveId;
@@ -68,13 +72,18 @@
                 public void run() {
                     final List<PrimitiveId> downloaded = task.getDownloadedId();
+                    final DataSet ds = Main.main.getCurrentDataSet();
                     if(downloaded != null) {
                         GuiHelper.runInEDT(new Runnable() {
                             @Override
                             public void run() {
-                                Main.main.getCurrentDataSet().setSelected(downloaded);
+                                ds.setSelected(downloaded);
                             }
                         });
                     }
-                    AddTagsDialog.addTags(args, sender);
+                    Collection<OsmPrimitive> downlPrim = new HashSet<>();
+                    for (PrimitiveId id : downloaded) {
+                        downlPrim.add(ds.getPrimitiveById(id));
+                    }
+                    AddTagsDialog.addTags(args, sender, downlPrim);
                     ps.clear();
                 }
