Index: /trunk/src/org/openstreetmap/josm/gui/util/GuiHelper.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/util/GuiHelper.java	(revision 5789)
+++ /trunk/src/org/openstreetmap/josm/gui/util/GuiHelper.java	(revision 5790)
@@ -47,4 +47,12 @@
             }
         }
+    }
+    
+    public static void executeByMainWorkerInEDT(final Runnable task) {
+        Main.worker.submit(new Runnable() {
+            public void run() {
+                runInEDTAndWait(task); 
+            }
+        });
     }
 
Index: /trunk/src/org/openstreetmap/josm/io/remotecontrol/AddTagsDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/remotecontrol/AddTagsDialog.java	(revision 5789)
+++ /trunk/src/org/openstreetmap/josm/io/remotecontrol/AddTagsDialog.java	(revision 5790)
@@ -80,7 +80,8 @@
             count[i] = 0;
             String key = tags[i][0];
+            String value = tags[i][1];
             Boolean b = Boolean.TRUE;
             for (OsmPrimitive osm : sel) {
-                if (osm.keySet().contains(key)) {
+                if (osm.keySet().contains(key) && !osm.get(key).equals(value)) {
                     b = Boolean.FALSE;
                     count[i]++;
@@ -141,7 +142,8 @@
         for (int i=0; i<tm.getRowCount(); i++) {
             String key = (String)tm.getValueAt(i, 1);
+            String value = (String)tm.getValueAt(i, 1);
             count[i] = 0;
             for (OsmPrimitive osm : sel) {
-                if (osm.keySet().contains(key)) {
+                if (osm.keySet().contains(key) && !osm.get(key).equals(value)) {
                     count[i]++;
                     break;
@@ -158,5 +160,6 @@
     @Override
     protected void buttonAction(int buttonIndex, ActionEvent evt) {
-        if (buttonIndex != 2) {
+        // if layer all layers were closed, ignore all actions
+        if (Main.main.getCurrentDataSet() != null  && buttonIndex != 2) {
             TableModel tm = propertyTable.getModel();
             for (int i=0; i<tm.getRowCount(); i++) {
Index: /trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java	(revision 5789)
+++ /trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java	(revision 5790)
@@ -27,4 +27,5 @@
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
+import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.io.remotecontrol.AddTagsDialog;
 import org.openstreetmap.josm.io.remotecontrol.PermissionPrefWithDefault;
@@ -132,5 +133,5 @@
          */
         if (args.containsKey("addtags")) {
-            Main.worker.execute(new Runnable() {
+            GuiHelper.executeByMainWorkerInEDT(new Runnable() {
                 public void run() {
                     DataSet ds = Main.main.getCurrentDataSet();
@@ -145,5 +146,5 @@
         if (args.containsKey("select") && PermissionPrefWithDefault.CHANGE_SELECTION.isAllowed()) {
             // select objects after downloading, zoom to selection.
-            Main.worker.execute(new Runnable() {
+            GuiHelper.executeByMainWorkerInEDT(new Runnable() {
                 public void run() {
                     HashSet<OsmPrimitive> newSel = new HashSet<OsmPrimitive>();
@@ -199,5 +200,5 @@
     static void addTags(final Map<String, String> args) {
         if (args.containsKey("addtags")) {
-            Main.worker.execute(new Runnable() {
+            GuiHelper.executeByMainWorkerInEDT(new Runnable() {
 
                 public void run() {
@@ -235,5 +236,5 @@
         // make sure this isn't called unless there *is* a MapView
         if (Main.isDisplayingMapView()) {
-            Main.worker.execute(new Runnable() {
+            GuiHelper.executeByMainWorkerInEDT(new Runnable() {
                 public void run() {
                     BoundingXYVisitor bbox = new BoundingXYVisitor();
