Index: trunk/src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java	(revision 620)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java	(revision 621)
@@ -47,4 +47,5 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.command.ChangePropertyCommand;
+import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.command.SequenceCommand;
 import org.openstreetmap.josm.data.SelectionChangedListener;
@@ -203,6 +204,4 @@
 
 		String value = values.getEditor().getItem().toString();
-		if (value.equals(tr("<different>")))
-			return;
 		if (value.equals(""))
 			value = null; // delete the key
@@ -215,7 +214,25 @@
 			Main.main.undoRedo.add(new ChangePropertyCommand(sel, newkey, value));
 		else {
-			Main.main.undoRedo.add(new SequenceCommand(trn("Change properties of {0} object", "Change properties of {0} objects", sel.size(), sel.size()),
-					new ChangePropertyCommand(sel, key, null),
-					new ChangePropertyCommand(sel, newkey, value)));
+			Collection<Command> commands=new Vector<Command>();
+			commands.add(new ChangePropertyCommand(sel, key, null));
+			if (value.equals(tr("<different>"))) {
+				HashMap<String, Vector<OsmPrimitive>> map=new HashMap<String, Vector<OsmPrimitive>>();
+				for (OsmPrimitive osm: sel) {
+					String val=osm.keys.get(key);
+					if (map.containsKey(val)) {
+						map.get(val).add(osm);
+					} else {
+						Vector<OsmPrimitive> v = new Vector<OsmPrimitive>();
+						v.add(osm);
+						map.put(val, v);
+					}
+				}
+				for (Entry<String, Vector<OsmPrimitive>> e: map.entrySet()) {
+					commands.add(new ChangePropertyCommand(e.getValue(), newkey, e.getKey()));
+				}
+			} else {
+				commands.add(new ChangePropertyCommand(sel, newkey, value));
+			}
+			Main.main.undoRedo.add(new SequenceCommand(trn("Change properties of {0} objects", "Change properties of {0} objects", sel.size(), sel.size()), commands));
 		}
 
@@ -555,5 +572,4 @@
 			int count=0;
 			for (Entry<String, Integer> e1: e.getValue().entrySet()) {
-//				System.out.println(e.getKey()+" Entry "+e1.getKey()+" value "+e1.getValue());
 				count+=e1.getValue();
 			}
