Index: trunk/src/org/openstreetmap/josm/io/remotecontrol/AddTagsDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/remotecontrol/AddTagsDialog.java	(revision 5705)
+++ trunk/src/org/openstreetmap/josm/io/remotecontrol/AddTagsDialog.java	(revision 5706)
@@ -10,8 +10,11 @@
 import java.awt.GridBagLayout;
 import java.awt.event.ActionEvent;
+import java.awt.event.KeyEvent;
 import java.util.Collection;
+import javax.swing.AbstractAction;
 
 import javax.swing.JPanel;
 import javax.swing.JTable;
+import javax.swing.KeyStroke;
 import javax.swing.table.DefaultTableModel;
 import javax.swing.table.TableCellRenderer;
@@ -40,11 +43,23 @@
     private final JTable propertyTable;
     private Collection<? extends OsmPrimitive> sel;
-    boolean[] existing;
+    int[] count;
 
+    static class DeleteTagMarker {
+        int num;
+        public DeleteTagMarker(int num) {
+            this.num = num;
+        }
+        public String toString() {
+            return tr("<delete from {0} objects>", num);
+        }
+    }
+    
+            
     public AddTagsDialog(String[][] tags) {
-        super(Main.parent, tr("Add tags to selected objects"), new String[] { tr("Add tags"), tr("Cancel")},
+        super(Main.parent, tr("Add tags to selected objects"), new String[] { tr("Add selected tags"), tr("Add all tags"),  tr("Cancel")},
                 false,
                 true);
-
+        setToolTipTexts(new String[]{tr("Add checked tags to selected objects"), tr("Shift+Enter: Add all tags to selected objects"), ""});
+     
         DataSet.addSelectionListener(this);
 
@@ -59,8 +74,8 @@
 
         sel = Main.main.getCurrentDataSet().getSelected();
-        existing = new boolean[tags.length];
-
+        count = new int[tags.length];
+        
         for (int i = 0; i<tags.length; i++) {
-            existing[i] = false;
+            count[i] = 0;
             String key = tags[i][0];
             Boolean b = Boolean.TRUE;
@@ -68,5 +83,5 @@
                 if (osm.keySet().contains(key)) {
                     b = Boolean.FALSE;
-                    existing[i]=true;
+                    count[i]++;
                     break;
                 }
@@ -74,5 +89,5 @@
             tm.setValueAt(b, i, 0);
             tm.setValueAt(tags[i][0], i, 1);
-            tm.setValueAt(tags[i][1], i, 2);
+            tm.setValueAt(tags[i][1].isEmpty() ? new DeleteTagMarker(count[i]) : tags[i][1], i, 2);
         }
 
@@ -84,5 +99,5 @@
             public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
                 Component c = super.prepareRenderer(renderer, row, column);
-                if (existing[row]) {
+                if (count[row]>0) {
                     c.setFont(c.getFont().deriveFont(Font.ITALIC));
                     c.setForeground(new Color(100, 100, 100));
@@ -94,9 +109,15 @@
             }
         };
-
+        
         // a checkbox has a size of 15 px
         propertyTable.getColumnModel().getColumn(0).setMaxWidth(15);
         // get edit results if the table looses the focus, for example if a user clicks "add tags"
         propertyTable.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
+        propertyTable.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, KeyEvent.SHIFT_MASK), "shiftenter");
+        propertyTable.getActionMap().put("shiftenter", new AbstractAction() {
+            @Override  public void actionPerformed(ActionEvent e) { 
+                buttonAction(1, e); // add all tags on Shift-Enter
+            }
+        });
 
         // set the content of this AddTagsDialog consisting of the tableHeader and the table itself.
@@ -106,5 +127,5 @@
         tablePanel.add(propertyTable, GBC.eol().fill(GBC.BOTH));
         setContent(tablePanel);
-
+        setDefaultButton(2);
         // set the default Dimensions and show the dialog
         setPreferredSize(new Dimension(400,tablePanel.getPreferredSize().height+100));
@@ -119,8 +140,8 @@
         for (int i=0; i<tm.getRowCount(); i++) {
             String key = (String)tm.getValueAt(i, 1);
-            existing[i] = false;
+            count[i] = 0;
             for (OsmPrimitive osm : sel) {
                 if (osm.keySet().contains(key)) {
-                    existing[i] = true;
+                    count[i]++;
                     break;
                 }
@@ -136,9 +157,12 @@
     @Override
     protected void buttonAction(int buttonIndex, ActionEvent evt) {
-        if (buttonIndex == 0) {
+        if (buttonIndex != 2) {
             TableModel tm = propertyTable.getModel();
             for (int i=0; i<tm.getRowCount(); i++) {
-                if ((Boolean)tm.getValueAt(i, 0)) {
-                    Main.main.undoRedo.add(new ChangePropertyCommand(sel, (String)tm.getValueAt(i, 1), (String)tm.getValueAt(i, 2)));
+                if (buttonIndex==1 || (Boolean)tm.getValueAt(i, 0)) {
+                    String key =(String)tm.getValueAt(i, 1);
+                    Object value = tm.getValueAt(i, 2);
+                    Main.main.undoRedo.add(new ChangePropertyCommand(sel,
+                            key, value instanceof String ? (String) value : ""));
                 }
             }
Index: trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java	(revision 5705)
+++ trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java	(revision 5706)
@@ -218,5 +218,9 @@
                         int i = 0;
                         for (String tag : tagSet) {
-                            keyValue[i++] = tag.split("=");
+                            // support a  =   b===c as "a"="b===c"
+                            String [] pair = tag.split("\\s*=\\s*",2); 
+                            keyValue[i][0] = pair[0];
+                            keyValue[i][1] = pair.length<2 ? "": pair[1];
+                            i++;
                         }
     
