Index: trunk/src/org/openstreetmap/josm/io/remotecontrol/AddTagsDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/remotecontrol/AddTagsDialog.java	(revision 5843)
+++ trunk/src/org/openstreetmap/josm/io/remotecontrol/AddTagsDialog.java	(revision 5844)
@@ -13,9 +13,12 @@
 import java.util.Collection;
 import javax.swing.AbstractAction;
+import javax.swing.DefaultCellEditor;
 
 import javax.swing.JPanel;
 import javax.swing.JTable;
+import javax.swing.JTextField;
 import javax.swing.KeyStroke;
 import javax.swing.table.DefaultTableModel;
+import javax.swing.table.TableCellEditor;
 import javax.swing.table.TableCellRenderer;
 import javax.swing.table.TableModel;
@@ -27,4 +30,5 @@
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.gui.ExtendedDialog;
+import org.openstreetmap.josm.gui.util.TableCellEditorSupport;
 import org.openstreetmap.josm.gui.util.TableHelper;
 import org.openstreetmap.josm.tools.GBC;
@@ -67,7 +71,8 @@
 
         DefaultTableModel tm = new DefaultTableModel(new String[] {tr("Assume"), tr("Key"), tr("Value")}, tags.length) {
+            final Class<?> types[] = {Boolean.class, String.class, Object.class};
             @Override
             public Class getColumnClass(int c) {
-                return getValueAt(0, c).getClass();
+                return types[c];
             }
 
@@ -97,4 +102,5 @@
 
             private static final long serialVersionUID = 1L;
+            ///private final DefaultCellEditor textEditor = new DefaultCellEditor( new JTextField() );
 
             @Override
@@ -109,4 +115,12 @@
                 }
                 return c;
+            }
+
+            @Override
+            public TableCellEditor getCellEditor(int row, int column) {
+                Object value = getValueAt(row,column);
+                System.out.println(value);
+                if (value instanceof DeleteTagMarker) return null;
+                return getDefaultEditor(value.getClass());
             }
         };
Index: trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/AddNodeHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/AddNodeHandler.java	(revision 5843)
+++ trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/AddNodeHandler.java	(revision 5844)
@@ -10,4 +10,5 @@
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.Node;
+import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.io.remotecontrol.PermissionPrefWithDefault;
 import org.openstreetmap.josm.io.remotecontrol.handler.RequestHandler.RequestHandlerBadRequestException;
@@ -28,5 +29,9 @@
     @Override
     protected void handleRequest() {
-        addNode(args);
+        GuiHelper.runInEDTAndWait(new Runnable() {
+            @Override public void run() {
+                 addNode(args);
+            }
+        });
     }
 
Index: trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/AddWayHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/AddWayHandler.java	(revision 5843)
+++ trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/AddWayHandler.java	(revision 5844)
@@ -16,4 +16,5 @@
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.io.remotecontrol.PermissionPrefWithDefault;
 import org.openstreetmap.josm.io.remotecontrol.handler.RequestHandler.RequestHandlerBadRequestException;
@@ -38,21 +39,10 @@
     @Override
     protected void handleRequest() throws RequestHandlerErrorException, RequestHandlerBadRequestException {
-        Way way = new Way();
-        List<Command> commands = new LinkedList<Command>();
-        for (LatLon ll : allCoordinates) {
-            Node node = new Node(ll);
-            way.addNode(node);
-            commands.add(new AddCommand(node));
-        }
-        allCoordinates.clear();
-        commands.add(new AddCommand(way));
-        Main.main.undoRedo.add(new SequenceCommand(tr("Add way"), commands));
-        Main.main.getCurrentDataSet().setSelected(way);
-        if (PermissionPrefWithDefault.CHANGE_VIEWPORT.isAllowed()) {
-            AutoScaleAction.autoScale("selection");
-        } else {
-            Main.map.mapView.repaint();
-        }
-        // parse parameter addtags=tag1=value1|tag2=vlaue2
+        GuiHelper.runInEDTAndWait(new Runnable() {
+            @Override public void run() {
+                addWay();
+            }
+        });
+        // parse parameter addtags=tag1=value1|tag2=value2
         LoadAndZoomHandler.addTags(args);        
     }
@@ -94,3 +84,25 @@
         }
     }
+
+    /*
+     * This function creates the way with given coordinates of nodes
+     */
+    private void addWay() {
+        Way way = new Way();
+        List<Command> commands = new LinkedList<Command>();
+        for (LatLon ll : allCoordinates) {
+            Node node = new Node(ll);
+            way.addNode(node);
+            commands.add(new AddCommand(node));
+        }
+        allCoordinates.clear();
+        commands.add(new AddCommand(way));
+        Main.main.undoRedo.add(new SequenceCommand(tr("Add way"), commands));
+        Main.main.getCurrentDataSet().setSelected(way);
+        if (PermissionPrefWithDefault.CHANGE_VIEWPORT.isAllowed()) {
+            AutoScaleAction.autoScale("selection");
+        } else {
+            Main.map.mapView.repaint();
+        }
+    }
 }
Index: trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/ImageryHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/ImageryHandler.java	(revision 5843)
+++ trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/ImageryHandler.java	(revision 5844)
@@ -9,4 +9,5 @@
 import org.openstreetmap.josm.data.imagery.ImageryInfo;
 import org.openstreetmap.josm.gui.layer.ImageryLayer;
+import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.io.remotecontrol.PermissionPrefWithDefault;
 
@@ -47,5 +48,5 @@
         }
         String cookies = args.get("cookies");
-        ImageryInfo imgInfo = new ImageryInfo(title, url, type, null, cookies);
+        final ImageryInfo imgInfo = new ImageryInfo(title, url, type, null, cookies);
         String min_zoom = args.get("min_zoom");
         if (min_zoom != null && !min_zoom.isEmpty()) {
@@ -64,5 +65,9 @@
             }
         }
-        Main.main.addLayer(ImageryLayer.create(imgInfo));
+        GuiHelper.runInEDT(new Runnable() {
+            @Override public void run() {
+                Main.main.addLayer(ImageryLayer.create(imgInfo));
+            }
+        });
     }
 
Index: trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadObjectHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadObjectHandler.java	(revision 5843)
+++ trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadObjectHandler.java	(revision 5844)
@@ -9,4 +9,5 @@
 import org.openstreetmap.josm.data.osm.PrimitiveId;
 import org.openstreetmap.josm.data.osm.SimplePrimitiveId;
+import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.io.remotecontrol.PermissionPrefWithDefault;
 
@@ -36,9 +37,12 @@
         }
         if (!ps.isEmpty()) {
-            boolean newLayer = isLoadInNewLayer();
-            boolean relationMembers = Boolean.parseBoolean(args.get("relation_members"));
-            DownloadPrimitiveAction.processItems(newLayer, ps, true, relationMembers);
-            Main.worker.submit(new Runnable() {
-    
+            final boolean newLayer = isLoadInNewLayer();
+            final boolean relationMembers = Boolean.parseBoolean(args.get("relation_members"));
+            GuiHelper.runInEDTAndWait(new Runnable() {
+                @Override public void run() {
+                    DownloadPrimitiveAction.processItems(newLayer, ps, true, relationMembers);
+                }
+            });
+            GuiHelper.executeByMainWorkerInEDT(new Runnable() {
                 @Override
                 public void run() {
Index: trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/OpenFileHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/OpenFileHandler.java	(revision 5843)
+++ trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/OpenFileHandler.java	(revision 5844)
@@ -4,4 +4,5 @@
 import java.util.Arrays;
 import org.openstreetmap.josm.actions.OpenFileAction;
+import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.io.remotecontrol.PermissionPrefWithDefault;
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -29,5 +30,9 @@
     @Override
     protected void handleRequest() throws RequestHandlerErrorException, RequestHandlerBadRequestException {
-        OpenFileAction.openFiles(Arrays.asList(new File(args.get("filename"))));
+        GuiHelper.runInEDTAndWait(new Runnable() {
+            @Override public void run() {
+                OpenFileAction.openFiles(Arrays.asList(new File(args.get("filename"))));
+            }
+        });
     }
 
