Index: src/org/openstreetmap/josm/Main.java
===================================================================
--- src/org/openstreetmap/josm/Main.java	(revision 120)
+++ src/org/openstreetmap/josm/Main.java	(revision 123)
@@ -147,5 +147,10 @@
 		final Action annotationTesterAction = new AbstractAction(){
 			public void actionPerformed(ActionEvent e) {
-				String[] args = pref.get("annotation.sources").split(";");
+				String annotationSources = pref.get("annotation.sources");
+				if (annotationSources.equals("")) {
+					JOptionPane.showMessageDialog(Main.parent, "You have to specify annotation sources in the preferences first.");
+					return;
+				}
+				String[] args = annotationSources.split(";");
 				new AnnotationTester(args);
 			}
Index: src/org/openstreetmap/josm/gui/PreferenceDialog.java
===================================================================
--- src/org/openstreetmap/josm/gui/PreferenceDialog.java	(revision 120)
+++ src/org/openstreetmap/josm/gui/PreferenceDialog.java	(revision 123)
@@ -132,5 +132,5 @@
 	 */
 	private JComboBox lafCombo = new JComboBox(UIManager.getInstalledLookAndFeels());
-	private JComboBox languages = new JComboBox(new Locale[]{Locale.ENGLISH, Locale.GERMAN, Locale.FRENCH});
+	private JComboBox languages = new JComboBox(new Locale[]{new Locale("en", "US"), new Locale("en", "GB"), Locale.GERMAN, Locale.FRENCH});
 	/**
 	 * The main tab panel.
Index: src/org/openstreetmap/josm/gui/dialogs/AnnotationPreset.java
===================================================================
--- src/org/openstreetmap/josm/gui/dialogs/AnnotationPreset.java	(revision 120)
+++ src/org/openstreetmap/josm/gui/dialogs/AnnotationPreset.java	(revision 123)
@@ -2,4 +2,5 @@
 
 import static org.openstreetmap.josm.tools.I18n.tr;
+import static org.openstreetmap.josm.tools.I18n.trn;
 
 import java.awt.GridBagLayout;
@@ -84,4 +85,5 @@
 		String label;
 		JComboBox combo;
+		private final String[] values;
 
 		public void addToPanel(JPanel p) {
@@ -89,13 +91,15 @@
 			p.add(combo, GBC.eol().fill(GBC.HORIZONTAL));
 		}
-		public Combo(String key, String label, String def, String[] values, boolean editable) {
+		public Combo(String key, String label, String def, String[] values, String[] displayedValues, boolean editable) {
 			this.key = key;
 			this.label = label;
-			combo = new JComboBox(values);
+			this.values = values;
+			combo = new JComboBox(displayedValues);
 			combo.setEditable(editable);
 			combo.setSelectedItem(def);
 		}
 		public void addCommands(Collection<OsmPrimitive> sel, List<Command> cmds) {
-			String str = combo.isEditable()?combo.getEditor().getItem().toString() : combo.getSelectedItem().toString();
+			String v = combo.getSelectedIndex() == -1 ? null : values[combo.getSelectedIndex()];
+			String str = combo.isEditable()?combo.getEditor().getItem().toString() : v;
 			cmds.add(new ChangePropertyCommand(sel, key, str));
 		}
@@ -164,6 +168,17 @@
 				String[] values = a.getValue("values").split(",");
 				String s = a.getValue("readonly");
-				boolean editable = s == null || s.equals("0") || s.startsWith("off") || s.startsWith("false") || s.startsWith("no");
-				current.add(new Combo(a.getValue("key"), a.getValue("text"), a.getValue("default"), values, editable));
+				String dvstr = a.getValue("display_values");
+				boolean editable = s == null  || s.equals("0") || s.startsWith("off") || s.startsWith("false") || s.startsWith("no");
+				if (dvstr != null) {
+					if (editable && s != null)
+						throw new SAXException(tr("Cannot have a writable combobox with default values (line {0})", getLineNumber()));
+					editable = false; // for combos with display_value readonly default to false
+				}
+				String[] displayValues = dvstr == null ? values : dvstr.split(",");
+				if (displayValues.length != values.length)
+					throw new SAXException(tr("display_values ({0}) and values ({1}) must be of same number of elements.",
+							displayValues.length+" "+trn("element", "elements", displayValues.length),
+							values.length+" "+trn("element", "elements", values.length)));
+				current.add(new Combo(a.getValue("key"), a.getValue("text"), a.getValue("default"), values, displayValues, editable));
 			} else if (qname.equals("key"))
 				current.add(new Key(a.getValue("key"), a.getValue("value")));
Index: src/org/openstreetmap/josm/gui/dialogs/AnnotationTester.java
===================================================================
--- src/org/openstreetmap/josm/gui/dialogs/AnnotationTester.java	(revision 120)
+++ src/org/openstreetmap/josm/gui/dialogs/AnnotationTester.java	(revision 123)
@@ -59,4 +59,6 @@
 		annotationPanel.removeAll();
 		AnnotationPreset preset = (AnnotationPreset)annotationPresets.getSelectedItem();
+		if (preset == null)
+			return;
 		JPanel p = preset.createPanel();
 		p.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
