Index: trunk/src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java	(revision 351)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java	(revision 352)
@@ -136,5 +136,5 @@
 		p.add(keyField, GBC.eol().fill(GBC.HORIZONTAL));
 				
-		final JTextField valueField = new JTextField((String)propertyData.getValueAt(row, 1));
+		final JComboBox valueField = (JComboBox) propertyData.getValueAt(row, 1);
 		p.add(new JLabel(tr("Value")), GBC.std());
 		p.add(Box.createHorizontalStrut(10), GBC.std());
@@ -144,5 +144,5 @@
 			@Override public void selectInitialValue() {
 				valueField.requestFocusInWindow();
-				valueField.selectAll();
+				valueField.getEditor().selectAll();
 			}
 		};
@@ -154,4 +154,5 @@
 			}
 		});
+		String oldValue = valueField.getEditor().getItem().toString();
 		dlg.setVisible(true);
 
@@ -159,8 +160,9 @@
 		if (answer == null || answer == JOptionPane.UNINITIALIZED_VALUE ||
 				(answer instanceof Integer && (Integer)answer != JOptionPane.OK_OPTION)) {
-			return;
-		}
-
-		String value = valueField.getText();
+			valueField.getEditor().setItem(oldValue);
+			return;
+		}
+
+		String value = valueField.getEditor().getItem().toString();
 		if (value.equals(tr("<different>")))
 			return;
@@ -288,5 +290,5 @@
 		}
 		@Override public Class<?> getColumnClass(int columnIndex) {
-			return String.class;
+			return columnIndex == 1 ? Relation.class : String.class;
 		}
 	};
@@ -300,5 +302,5 @@
 		}
 		@Override public Class<?> getColumnClass(int columnIndex) {
-			return columnIndex == 1 ? Relation.class : String.class;
+			return String.class;
 		}
 	};
@@ -349,5 +351,5 @@
 				Component c = super.getTableCellRendererComponent(table, value, isSelected, false, row, column);
 				if (c instanceof JLabel) {
-					String str = (String) value;
+					String str = ((JComboBox) value).getEditor().getItem().toString();
 					((JLabel)c).setText(str);
 					if (str.equals(tr("<different>")))
@@ -459,6 +461,8 @@
 		}
 		for (Entry<String, Collection<String>> e : props.entrySet()) {
-			String value=(e.getValue().size() > 1 || valueCount.get(e.getKey()) != newSelection.size() ? tr("<different>") : e.getValue().iterator().next());
-			propertyData.addRow(new Object[]{e.getKey(), value});
+            JComboBox value = new JComboBox(e.getValue().toArray());
+            value.setEditable(true);
+            value.getEditor().setItem(e.getValue().size() > 1 || valueCount.get(e.getKey()) != newSelection.size() ? tr("<different>") : e.getValue().iterator().next());
+            propertyData.addRow(new Object[]{e.getKey(), value});
 		}
 		
