Index: src/org/openstreetmap/josm/actions/AboutAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/AboutAction.java	(revision 116)
+++ src/org/openstreetmap/josm/actions/AboutAction.java	(revision 117)
@@ -38,5 +38,5 @@
 
 	public static final String version;
-	
+
 	private static JTextArea revision;
 	private static String time;
@@ -48,39 +48,41 @@
 		Matcher match = versionPattern.matcher(revision.getText());
 		version = match.matches() ? match.group(1) : "UNKNOWN";
-		
+
 		Pattern timePattern = Pattern.compile(".*?Last Changed Date: ([^\n]*).*", Pattern.CASE_INSENSITIVE|Pattern.DOTALL);
 		match = timePattern.matcher(revision.getText());
 		time = match.matches() ? match.group(1) : "UNKNOWN";
 	}
-	
+
 	public AboutAction() {
 		super(tr("About"), "about",tr("Display the about screen."), KeyEvent.VK_A);
 	}
-	
+
 	public void actionPerformed(ActionEvent e) {
 		JTabbedPane about = new JTabbedPane();
-		
+
 		JTextArea readme = loadFile(Main.class.getResource("/README"));
+		JTextArea contribution = loadFile(Main.class.getResource("/CONTRIBUTION"));
 
 		JPanel info = new JPanel(new GridBagLayout());
 		info.add(new JLabel(tr("Java OpenStreetMap Editor Version {0}",version)), GBC.eop());
 		info.add(new JLabel(tr("last change at {0}",time)), GBC.eop());
+		info.add(new JLabel(tr("Java Version {0}",System.getProperty("java.version"))), GBC.eop());
 		info.add(new JLabel(tr("Homepage")), GBC.std().insets(0,0,10,0));
 		info.add(new UrlLabel("http://wiki.eigenheimstrasse.de/wiki/JOSM"), GBC.eol());
 		info.add(new JLabel(tr("Bug Reports")), GBC.std().insets(0,0,10,0));
 		info.add(new UrlLabel("http://trac.openstreetmap.org"), GBC.eol());
-		
-		
-		
+
+
 		about.addTab(tr("Info"), info);
 		about.addTab(tr("Readme"), new JScrollPane(readme));
 		about.addTab(tr("Revision"), new JScrollPane(revision));
-		
+		about.addTab(tr("Contribution"), new JScrollPane(contribution));
+
 		about.setPreferredSize(new Dimension(500,300));
-		
+
 		JOptionPane.showMessageDialog(Main.parent, about, tr("About JOSM..."),
 				JOptionPane.INFORMATION_MESSAGE, ImageProvider.get("logo"));
 	}
-	
+
 	/**
 	 * Load the specified ressource into an TextArea and return it.
Index: src/org/openstreetmap/josm/data/Preferences.java
===================================================================
--- src/org/openstreetmap/josm/data/Preferences.java	(revision 116)
+++ src/org/openstreetmap/josm/data/Preferences.java	(revision 117)
@@ -142,5 +142,5 @@
 
 	public final void upgrade(int oldVersion) {
-		if (oldVersion > 115) return;
+		if (oldVersion > 117) return;
 		properties.put("color.scale", ColorHelper.color2html(Color.white));
 	}
Index: src/org/openstreetmap/josm/gui/PreferenceDialog.java
===================================================================
--- src/org/openstreetmap/josm/gui/PreferenceDialog.java	(revision 116)
+++ src/org/openstreetmap/josm/gui/PreferenceDialog.java	(revision 117)
@@ -292,5 +292,4 @@
 
 		// Annotation source panels
-		JPanel annoButton = new JPanel(new GridBagLayout());
 		JButton addAnno = new JButton(tr("Add"));
 		addAnno.addActionListener(new ActionListener(){
@@ -303,7 +302,4 @@
 			}
 		});
-		GBC g = GBC.eol().fill(GBC.HORIZONTAL);
-		g.weightx = 0;
-		annoButton.add(addAnno,g);
 
 		JButton editAnno = new JButton(tr("Edit"));
@@ -321,6 +317,4 @@
 			}
 		});
-		annoButton.add(GBC.glue(0, 2), GBC.eol());
-		annoButton.add(editAnno,g);
 
 		JButton deleteAnno = new JButton(tr("Delete"));
@@ -335,7 +329,5 @@
 			}
 		});
-		annoButton.add(GBC.glue(0, 2), GBC.eol());
-		annoButton.add(deleteAnno,g);
-		annotationSources.setVisibleRowCount(5);
+		annotationSources.setVisibleRowCount(3);
 
 
@@ -402,8 +394,16 @@
 		map.add(GBC.glue(5,0), GBC.std().fill(GBC.HORIZONTAL));
 		map.add(projectionCombo, GBC.eop().fill(GBC.HORIZONTAL).insets(0,0,0,5));
-		map.add(new JLabel(tr("Annotation preset sources")), GBC.eol());
-		map.add(new JScrollPane(annotationSources), GBC.std().fill(GBC.HORIZONTAL).insets(10,0,10,0));
-		map.add(annoButton, GBC.eol());
-
+		map.add(new JLabel(tr("Annotation preset sources")), GBC.eol().insets(0,5,0,0));
+		map.add(new JScrollPane(annotationSources), GBC.eol().fill(GBC.BOTH));
+		map.add(GBC.glue(5, 0), GBC.std().fill(GBC.HORIZONTAL));
+		map.add(addAnno, GBC.std());
+		map.add(editAnno, GBC.std().insets(5,0,5,0));
+		map.add(deleteAnno, GBC.std());
+
+		// I HATE SWING!
+		map.add(Box.createVerticalGlue(), GBC.eol().fill(GBC.VERTICAL));
+		map.add(Box.createVerticalGlue(), GBC.eol().fill(GBC.VERTICAL));
+		map.add(Box.createVerticalGlue(), GBC.eol().fill(GBC.VERTICAL));
+		map.add(Box.createVerticalGlue(), GBC.eol().fill(GBC.VERTICAL));
 		map.add(Box.createVerticalGlue(), GBC.eol().fill(GBC.VERTICAL));
 
Index: src/org/openstreetmap/josm/gui/dialogs/AnnotationPreset.java
===================================================================
--- src/org/openstreetmap/josm/gui/dialogs/AnnotationPreset.java	(revision 116)
+++ src/org/openstreetmap/josm/gui/dialogs/AnnotationPreset.java	(revision 117)
@@ -14,4 +14,5 @@
 
 import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
@@ -76,4 +77,26 @@
 		public void addCommands(Collection<OsmPrimitive> sel, List<Command> cmds) {
 			cmds.add(new ChangePropertyCommand(sel, key, check.isSelected() ? "true" : null));
+		}
+	}
+
+	public static class Combo implements Item {
+		String key;
+		String label;
+		JComboBox combo;
+
+		public void addToPanel(JPanel p) {
+			p.add(new JLabel(label), GBC.std().insets(0,0,10,0));
+			p.add(combo, GBC.eol().fill(GBC.HORIZONTAL));
+		}
+		public Combo(String key, String label, String def, String[] values, boolean editable) {
+			this.key = key;
+			this.label = label;
+			combo = new JComboBox(values);
+			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();
+			cmds.add(new ChangePropertyCommand(sel, key, str));
 		}
 	}
@@ -120,12 +143,17 @@
 					currentName = "Unnamed Preset #"+(unknownCounter++);
 			} else if (qname.equals("text"))
-				current.add(new Text(a.getValue("key"), a.getValue("label"), a.getValue("default")));
+				current.add(new Text(a.getValue("key"), a.getValue("text"), a.getValue("default")));
 			else if (qname.equals("check")) {
 				String s = a.getValue("default");
-				boolean check = s == null || s.equals("0") || s.startsWith("off") || s.startsWith("false") || s.startsWith("no");
-				current.add(new Check(a.getValue("key"), a.getValue("label"), check));
+				boolean clear = s == null || s.equals("0") || s.startsWith("off") || s.startsWith("false") || s.startsWith("no");
+				current.add(new Check(a.getValue("key"), a.getValue("text"), !clear));
 			} else if (qname.equals("label"))
-				current.add(new Label(a.getValue("label")));
-			else if (qname.equals("key"))
+				current.add(new Label(a.getValue("text")));
+			else if (qname.equals("combo")) {
+				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));
+			} else if (qname.equals("key"))
 				current.add(new Key(a.getValue("key"), a.getValue("value")));
 			else
@@ -176,5 +204,5 @@
 		return p;
 	}
-	
+
 	@Override public String toString() {
 		return name;
@@ -191,4 +219,4 @@
 		else
 			return new SequenceCommand(tr("Change Properties"), cmds);
-    }
+	}
 }
Index: src/org/openstreetmap/josm/tools/GBC.java
===================================================================
--- src/org/openstreetmap/josm/tools/GBC.java	(revision 116)
+++ src/org/openstreetmap/josm/tools/GBC.java	(revision 117)
@@ -20,5 +20,5 @@
 	 */
 	private GBC() {}
-	
+
 	/**
 	 * Create a standard constraint (which is not the last).
@@ -30,5 +30,5 @@
 		return c;
 	}
-	
+
 	/**
 	 * Create the constraint for the last elements on a line.
@@ -40,5 +40,5 @@
 		return c;
 	}
-	
+
 	/**
 	 * Create the constraint for the last elements on a line and on a paragraph.
@@ -71,5 +71,5 @@
 		return this;
 	}
-	
+
 	/**
 	 * Set the anchor of this GBC to a.
@@ -94,5 +94,5 @@
 		return this;
 	}
-	
+
 	/**
 	 * This is a helper to easily create a glue with a minimum default value.
