Index: trunk/src/org/openstreetmap/josm/command/ChangePropertyCommand.java
===================================================================
--- trunk/src/org/openstreetmap/josm/command/ChangePropertyCommand.java	(revision 674)
+++ trunk/src/org/openstreetmap/josm/command/ChangePropertyCommand.java	(revision 679)
@@ -41,13 +41,31 @@
 	
 	public ChangePropertyCommand(Collection<OsmPrimitive> objects, String key, String value) {
-		this.objects = new LinkedList<OsmPrimitive>(objects);
+		this.objects = new LinkedList<OsmPrimitive>();
 		this.key = key;
 		this.value = value;
+		if (value == null) {
+			for (OsmPrimitive osm : objects) {
+				if(osm.get(key) != null)
+					this.objects.add(osm);
+			}
+		} else {
+			for (OsmPrimitive osm : objects) {
+				String val = osm.get(key);
+				if(val == null || !value.equals(val))
+				{
+					this.objects.add(osm);
+				}
+			}
+		}
 	}
 
 	public ChangePropertyCommand(OsmPrimitive object, String key, String value) {
-		this.objects = new LinkedList<OsmPrimitive>(Collections.singleton(object));
+		this.objects = new LinkedList<OsmPrimitive>();
 		this.key = key;
 		this.value = value;
+		String val = object.get(key);
+		if ((value == null && val != null)
+		|| (value != null && (val == null || !value.equals(val))))
+			this.objects.add(object);
 	}
 	
Index: trunk/src/org/openstreetmap/josm/gui/GettingStarted.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/GettingStarted.java	(revision 674)
+++ trunk/src/org/openstreetmap/josm/gui/GettingStarted.java	(revision 679)
@@ -55,5 +55,5 @@
                 motdcontent = "<html><body>\n<h1>" +
                     tr("JOSM, the Java OpenStreetMap editor") +
-                    "</h1>\n<h2>(" +
+                    "</h1>\n<h2 align=\"center\">(" +
                     tr ("Message of the day not available") +
                     ")</h2>";
Index: trunk/src/org/openstreetmap/josm/gui/MapStatus.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MapStatus.java	(revision 674)
+++ trunk/src/org/openstreetmap/josm/gui/MapStatus.java	(revision 679)
@@ -157,5 +157,5 @@
 						nameText.setText(visitor.name);
 					} else
-						nameText.setText("(no object)");
+						nameText.setText(tr("(no object)"));
 
 					// Popup Information
@@ -334,6 +334,6 @@
 
 	public String helpTopic() {
-	    return "Statusline";
-    }
+		return tr("Statusline");
+	}
 	
 	public void setHelpText(String t) {
Index: trunk/src/org/openstreetmap/josm/gui/QuadStateCheckBox.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/QuadStateCheckBox.java	(revision 674)
+++ trunk/src/org/openstreetmap/josm/gui/QuadStateCheckBox.java	(revision 679)
@@ -89,5 +89,5 @@
 				setPressed(false);
 				setSelected(true);
-				setToolTipText(tr("true: the property is explicitly switched off"));
+				setToolTipText(tr("true: the property is explicitly switched on"));
 			} else if (state == State.PARTIAL) {
 				other.setArmed(true);
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java	(revision 674)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java	(revision 679)
@@ -234,5 +234,5 @@
 				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));
+			Main.main.undoRedo.add(new SequenceCommand(trn("Change properties of up to {0} object", "Change properties of up to {0} objects", sel.size(), sel.size()), commands));
 		}
 
@@ -279,5 +279,5 @@
 
 		JPanel p = new JPanel(new BorderLayout());
-		p.add(new JLabel("<html>"+trn("This will change {0} object.","This will change {0} objects.", sel.size(),sel.size())+"<br><br>"+tr("Please select a key")),
+		p.add(new JLabel("<html>"+trn("This will change up to {0} object.","This will change up to {0} objects.", sel.size(),sel.size())+"<br><br>"+tr("Please select a key")),
 				BorderLayout.NORTH);
 		final TreeMap<String, TreeSet<String>> allData = createAutoCompletionInfo(false);
Index: trunk/src/org/openstreetmap/josm/gui/download/BoundingBoxSelection.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/download/BoundingBoxSelection.java	(revision 674)
+++ trunk/src/org/openstreetmap/josm/gui/download/BoundingBoxSelection.java	(revision 679)
@@ -41,5 +41,5 @@
 			new JTextField(11) };
 	final JTextArea osmUrl = new JTextArea();
-	String oldUrl;
+	String oldUrl = "";
 	
 	final JLabel sizeCheck = new JLabel();
@@ -94,4 +94,5 @@
 						updateBboxFields(gui);
 						updateSizeCheck(gui);
+						oldUrl = osmUrl.getText();
 					}
 				}
Index: trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java	(revision 674)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java	(revision 679)
@@ -98,4 +98,5 @@
 		public String key;
 		public String text;
+		public String locale_text;
 		public String default_;
 		public String originalValue;
@@ -128,5 +129,7 @@
 	            originalValue = DIFFERENT;
 			}
-			p.add(new JLabel(tr(text)+":"), GBC.std().insets(0,0,10,0));
+			if(locale_text == null)
+				locale_text = tr(text);
+			p.add(new JLabel(locale_text+":"), GBC.std().insets(0,0,10,0));
 			p.add(value, GBC.eol().fill(GBC.HORIZONTAL));
 		}
@@ -153,4 +156,5 @@
 		public String key;
 		public String text;
+		public String locale_text;
 		public boolean default_ = false; // not used!
 		public boolean use_last_as_default = false;
@@ -163,4 +167,7 @@
 			// find out if our key is already used in the selection.
 			Usage usage = determineBooleanUsage(sel, key);
+
+			if(locale_text == null)
+				locale_text = tr(text);
 
 			String oneValue = null;
@@ -174,5 +181,5 @@
 							QuadStateCheckBox.State.NOT_SELECTED :
 							QuadStateCheckBox.State.UNSET;
-				check = new QuadStateCheckBox(tr(text), initialState, 
+				check = new QuadStateCheckBox(locale_text, initialState, 
 						new QuadStateCheckBox.State[] { 
 						QuadStateCheckBox.State.SELECTED,
@@ -184,5 +191,5 @@
 				// in "partial" state.
 				initialState = QuadStateCheckBox.State.PARTIAL;
-				check = new QuadStateCheckBox(tr(text), QuadStateCheckBox.State.PARTIAL, 
+				check = new QuadStateCheckBox(locale_text, QuadStateCheckBox.State.PARTIAL, 
 						new QuadStateCheckBox.State[] { 
 						QuadStateCheckBox.State.PARTIAL,
@@ -211,6 +218,8 @@
 		public String key;
 		public String text;
+		public String locale_text;
 		public String values;
 		public String display_values;
+		public String locale_display_values;
 		public String default_;
 		public boolean delete_if_empty = false;
@@ -229,5 +238,11 @@
 			
 			String[] value_array = values.split(",");
-			String[] display_array = (display_values == null) ? value_array : display_values.split(",");
+			String[] display_array;
+			if(locale_display_values != null)
+				display_array = locale_display_values.split(",");
+			else if(display_values != null)
+				display_array = display_values.split(",");
+			else
+				display_array = value_array;
 
 			lhm = new LinkedHashMap<String,String>();
@@ -236,5 +251,7 @@
 			}
 			for (int i=0; i<value_array.length; i++) {
-				lhm.put(value_array[i], tr(display_array[i]));
+				lhm.put(value_array[i],
+				(locale_display_values == null) ?
+				tr(display_array[i]) : display_array[i]);
 			}
 			for (String s : usage.values) {
@@ -250,5 +267,7 @@
 				combo.setSelectedItem(DIFFERENT); originalValue=DIFFERENT;
 			}
-			p.add(new JLabel(tr(text)+":"), GBC.std().insets(0,0,10,0));
+			if(locale_text == null)
+				locale_text = tr(text);
+			p.add(new JLabel(locale_text+":"), GBC.std().insets(0,0,10,0));
 			p.add(combo, GBC.eol().fill(GBC.HORIZONTAL));
 		}
@@ -275,7 +294,10 @@
 	public static class Label extends Item {
 		public String text;
+		public String locale_text;
 
 		@Override public void addToPanel(JPanel p, Collection<OsmPrimitive> sel) {
-			p.add(new JLabel(tr(text)), GBC.eol());
+			if(locale_text == null)
+				locale_text = tr(text);
+			p.add(new JLabel(locale_text), GBC.eol());
 		}
 		@Override public void addCommands(Collection<OsmPrimitive> sel, List<Command> cmds) {}
Index: trunk/src/org/openstreetmap/josm/io/OsmServerWriter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/OsmServerWriter.java	(revision 674)
+++ trunk/src/org/openstreetmap/josm/io/OsmServerWriter.java	(revision 679)
@@ -130,5 +130,5 @@
 			if( useChangesets ) stopChangeset(10);
 			e.printStackTrace();
-			throw new SAXException("An error occoured: "+e.getMessage());
+			throw new SAXException(tr("An error occoured: {0}",e.getMessage()));
 		}
 	}
Index: trunk/src/org/openstreetmap/josm/tools/XmlObjectParser.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/XmlObjectParser.java	(revision 674)
+++ trunk/src/org/openstreetmap/josm/tools/XmlObjectParser.java	(revision 679)
@@ -1,4 +1,6 @@
 // License: GPL. Copyright 2007 by Immanuel Scholz and others
 package org.openstreetmap.josm.tools;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.io.Reader;
@@ -28,4 +30,5 @@
 public class XmlObjectParser implements Iterable<Object> {
 
+	public static final String lang = tr("En:").toLowerCase();
 	public static class Uniform<T> implements Iterable<T>{
 		private Iterator<Object> iterator;
@@ -104,11 +107,28 @@
 				Field f = null;
 				try {
-	                f = c.getClass().getField(fieldName);
-                } catch (NoSuchFieldException e) {
-                }
+					f = c.getClass().getField(fieldName);
+				} catch (NoSuchFieldException e) {
+					if(fieldName.startsWith(lang))
+					{
+						String locfieldName = "locale_" +
+						fieldName.substring(lang.length());
+						try {
+							f = c.getClass().getField(locfieldName);
+						} catch (NoSuchFieldException ex) {
+						}
+					}
+				}
 				if (f != null && Modifier.isPublic(f.getModifiers()))
 					f.set(c, getValueForClass(f.getType(), value));
 				else {
-					fieldName = "set" + fieldName.substring(0,1).toUpperCase() + fieldName.substring(1);
+					if(fieldName.startsWith(lang))
+					{
+						int l = lang.length();
+						fieldName = "set" + fieldName.substring(l,l+1).toUpperCase() + fieldName.substring(l+1);
+					}
+					else
+					{
+						fieldName = "set" + fieldName.substring(0,1).toUpperCase() + fieldName.substring(1);
+					}
 					Method[] methods = c.getClass().getDeclaredMethods();
 					for (Method m : methods) {
