Index: /trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(revision 803)
+++ /trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(revision 804)
@@ -2,4 +2,5 @@
 package org.openstreetmap.josm.actions.mapmode;
 
+import static org.openstreetmap.josm.tools.I18n.marktr;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
@@ -81,5 +82,5 @@
 		
 		//putValue("help", "Action/AddNode/Autnode");
-		selectedColor = Preferences.getPreferencesColor("selected", Color.YELLOW);
+		selectedColor = Main.pref.getColor(marktr("selected"), Color.YELLOW);
 		
 		drawHelperLine = Main.pref.getBoolean("draw.helper-line", true);
Index: /trunk/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java	(revision 803)
+++ /trunk/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java	(revision 804)
@@ -2,4 +2,5 @@
 package org.openstreetmap.josm.actions.mapmode;
 
+import static org.openstreetmap.josm.tools.I18n.marktr;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
@@ -83,5 +84,5 @@
 		try { initialMoveDelay = Integer.parseInt(Main.pref.get("edit.initial-move-delay","200")); } catch (NumberFormatException x) {}
 		try { initialMoveThreshold = Integer.parseInt(Main.pref.get("edit.initial-move-threshold","5")); } catch (NumberFormatException x) {}
-		selectedColor = Preferences.getPreferencesColor("selected", Color.YELLOW);
+		selectedColor = Main.pref.getColor(marktr("selected"), Color.YELLOW);
 	}
 
Index: /trunk/src/org/openstreetmap/josm/data/Preferences.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/Preferences.java	(revision 803)
+++ /trunk/src/org/openstreetmap/josm/data/Preferences.java	(revision 804)
@@ -112,4 +112,5 @@
 	}
 	synchronized public String get(final String key) {
+		putDefault(key, null);
 		if (override.containsKey(key))
 			return override.get(key);
@@ -119,8 +120,5 @@
 	}
 	synchronized public String get(final String key, final String def) {
-		if(!defaults.containsKey(key))
-			defaults.put(key, def);
-		else if(!defaults.get(key).equals(def))
-			System.out.println("Defaults for " + key + " differ: " + def + " != " + defaults.get(key));
+		putDefault(key, def);
 		if (override.containsKey(key)) 
 			return override.get(key);
@@ -148,6 +146,13 @@
 		return defaults;
 	}
+	synchronized public void putDefault(final String key, final String def) {
+		if(!defaults.containsKey(key) || defaults.get(key) == null)
+			defaults.put(key, def);
+		else if(def != null && !defaults.get(key).equals(def))
+			System.out.println("Defaults for " + key + " differ: " + def + " != " + defaults.get(key));
+	}
 	
 	synchronized public boolean getBoolean(final String key) {
+		putDefault(key, null);
 		if (override.containsKey(key))
 			return override.get(key) == null ? false : Boolean.parseBoolean(override.get(key));
@@ -155,8 +160,5 @@
 	}
 	synchronized public boolean getBoolean(final String key, final boolean def) {
-		if(!defaults.containsKey(key))
-			defaults.put(key, Boolean.toString(def));
-		else if(!defaults.get(key).equals(Boolean.toString(def)))
-			System.out.println("Defaults for " + key + " differ: " + def + " != " + defaults.get(key));
+		putDefault(key, Boolean.toString(def));
 		if (override.containsKey(key))
 			return override.get(key) == null ? def : Boolean.parseBoolean(override.get(key));
@@ -285,11 +287,41 @@
 	 * @return a Color object for the configured colour, or the default value if none configured.
 	 */
-	public static Color getPreferencesColor(String colName, Color def) {
-		String colStr = Main.pref.get("color."+colName);
+	synchronized public Color getColor(String colName, Color def) {
+		String colStr = get("color."+colName);
 		if (colStr.equals("")) {
-			Main.pref.put("color."+colName, ColorHelper.color2html(def));
+			put("color."+colName, ColorHelper.color2html(def));
 			return def;
 		}
 		return ColorHelper.html2color(colStr);
+	}
+	// only for compatibility. Don't use any more.
+	public static Color getPreferencesColor(String colName, Color def)
+	{
+		return Main.pref.getColor(colName, def);
+	}
+
+	/**
+	 * Convenience method for accessing colour preferences.
+	 *
+	 * @param colName name of the colour
+	 * @param specName name of the special colour settings
+	 * @param def default value
+	 * @return a Color object for the configured colour, or the default value if none configured.
+	 */
+	synchronized public Color getColor(String colName, String specName, Color def) {
+		String colStr = get("color."+specName);
+		if(colStr.equals(""))
+		{
+			colStr = get("color."+colName);
+			if (colStr.equals("")) {
+				put("color."+colName, ColorHelper.color2html(def));
+				return def;
+			}
+		}
+		putDefault("color."+colName, ColorHelper.color2html(def));
+		return ColorHelper.html2color(colStr);
+	}
+	synchronized public void putColor(String colName, Color val) {
+		put("color."+colName, ColorHelper.color2html(val));
 	}
 
Index: /trunk/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java	(revision 803)
+++ /trunk/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java	(revision 804)
@@ -370,12 +370,12 @@
     // Shows areas before non-areas
     public void visitAll(DataSet data) {
-        inactiveColor = Preferences.getPreferencesColor(marktr("inactive"), Color.DARK_GRAY);
-        selectedColor = Preferences.getPreferencesColor(marktr("selected"), Color.YELLOW);
-        nodeColor = Preferences.getPreferencesColor(marktr("node"), Color.RED);
-        dfltWayColor = Preferences.getPreferencesColor(marktr("way"), darkblue);
-        incompleteColor = Preferences.getPreferencesColor(marktr("incomplete way"), darkerblue);
-        backgroundColor = Preferences.getPreferencesColor(marktr("background"), Color.BLACK);
-        untaggedColor = Preferences.getPreferencesColor(marktr("untagged"),Color.GRAY);
-        textColor = Preferences.getPreferencesColor (marktr("text"), Color.WHITE);
+        inactiveColor = Main.pref.getColor(marktr("inactive"), Color.DARK_GRAY);
+        selectedColor = Main.pref.getColor(marktr("selected"), Color.YELLOW);
+        nodeColor = Main.pref.getColor(marktr("node"), Color.RED);
+        dfltWayColor = Main.pref.getColor(marktr("way"), darkblue);
+        incompleteColor = Main.pref.getColor(marktr("incomplete way"), darkerblue);
+        backgroundColor = Main.pref.getColor(marktr("background"), Color.BLACK);
+        untaggedColor = Main.pref.getColor(marktr("untagged"),Color.GRAY);
+        textColor = Main.pref.getColor (marktr("text"), Color.WHITE);
         showDirectionArrow = Main.pref.getBoolean("draw.segment.direction");
         showRelevantDirectionsOnly = Main.pref.getBoolean("draw.segment.relevant_directions_only");
Index: /trunk/src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java	(revision 803)
+++ /trunk/src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java	(revision 804)
@@ -92,12 +92,12 @@
 
 	public void visitAll(DataSet data) {
-		inactiveColor = Preferences.getPreferencesColor(marktr("inactive"), Color.DARK_GRAY);
-		selectedColor = Preferences.getPreferencesColor(marktr("selected"), Color.WHITE);
-		nodeColor = Preferences.getPreferencesColor(marktr("node"), Color.RED);
-		dfltWayColor = Preferences.getPreferencesColor(marktr("way"), darkblue);
-		relationColor = Preferences.getPreferencesColor(marktr("relation"), teal);
-		untaggedWayColor = Preferences.getPreferencesColor(marktr("untagged way"), darkgreen);
-		incompleteColor = Preferences.getPreferencesColor(marktr("incomplete way"), darkerblue);
-		backgroundColor = Preferences.getPreferencesColor(marktr("background"), Color.BLACK);
+		inactiveColor = Main.pref.getColor(marktr("inactive"), Color.DARK_GRAY);
+		selectedColor = Main.pref.getColor(marktr("selected"), Color.WHITE);
+		nodeColor = Main.pref.getColor(marktr("node"), Color.RED);
+		dfltWayColor = Main.pref.getColor(marktr("way"), darkblue);
+		relationColor = Main.pref.getColor(marktr("relation"), teal);
+		untaggedWayColor = Main.pref.getColor(marktr("untagged way"), darkgreen);
+		incompleteColor = Main.pref.getColor(marktr("incomplete way"), darkerblue);
+		backgroundColor = Main.pref.getColor(marktr("background"), Color.BLACK);
 		showDirectionArrow = Main.pref.getBoolean("draw.segment.direction");
 		showRelevantDirectionsOnly = Main.pref.getBoolean("draw.segment.relevant_directions_only");
@@ -344,5 +344,5 @@
 	 */
 	public static Color getPreferencesColor(String name, Color dflt) {
-		return Preferences.getPreferencesColor(name, dflt);
+		return Main.pref.getColor(name, dflt);
 	}
 }
Index: /trunk/src/org/openstreetmap/josm/gui/MapScaler.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/MapScaler.java	(revision 803)
+++ /trunk/src/org/openstreetmap/josm/gui/MapScaler.java	(revision 804)
@@ -3,4 +3,7 @@
 package org.openstreetmap.josm.gui;
 
+import static org.openstreetmap.josm.tools.I18n.marktr;
+
+import java.awt.Color;
 import java.awt.Graphics;
 import java.awt.geom.Rectangle2D;
@@ -32,5 +35,5 @@
 		String text = dist > 1000 ? (Math.round(dist/100)/10.0)+"km" : Math.round(dist*10)/10+"m";
 		Rectangle2D bound = g.getFontMetrics().getStringBounds(text, g);
-		g.setColor(ColorHelper.html2color(Main.pref.get("color.scale", "#ffffff")));
+		g.setColor(Main.pref.getColor(marktr("scale"), Color.white));
 		g.drawLine(0, 5, 99, 5);
 		g.drawLine(0, 0, 0, 10);
Index: /trunk/src/org/openstreetmap/josm/gui/MapView.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/MapView.java	(revision 803)
+++ /trunk/src/org/openstreetmap/josm/gui/MapView.java	(revision 804)
@@ -215,5 +215,5 @@
 
 		Graphics2D tempG = offscreenBuffer.createGraphics();
-		tempG.setColor(Preferences.getPreferencesColor("background", Color.BLACK));
+		tempG.setColor(Main.pref.getColor("background", Color.BLACK));
 		tempG.fillRect(0, 0, getWidth(), getHeight());
 
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java	(revision 803)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java	(revision 804)
@@ -137,5 +137,5 @@
 	 */
 	public void paintConflicts(final Graphics g, final NavigatableComponent nc) {
-		Color preferencesColor = Preferences.getPreferencesColor("conflict", Color.gray);
+		Color preferencesColor = Main.pref.getColor("conflict", Color.gray);
 		if (preferencesColor.equals(Color.BLACK))
 			return;
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/RelationEditor.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/RelationEditor.java	(revision 803)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/RelationEditor.java	(revision 804)
@@ -135,4 +135,8 @@
 			}
 		}
+		if(s1.length() == 0 && s2.length() != 0)
+			return 1;
+		else if(s2.length() == 0 && s1.length() != 0)
+			return -1;
 
 		// Default handling if the role name is nothing like "stop_xx"
@@ -152,7 +156,6 @@
 			int roleResult = compareRole(r1.role, r2.role);
 
-			if (roleResult == 0) {
-				return compareMemebers(r1.member, r2.member);
-			}
+			if (roleResult == 0)
+				roleResult = compareMemebers(r1.member, r2.member);
 
 			return roleResult;
Index: /trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java	(revision 803)
+++ /trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java	(revision 804)
@@ -3,4 +3,5 @@
 package org.openstreetmap.josm.gui.layer;
 
+import static org.openstreetmap.josm.tools.I18n.marktr;
 import static org.openstreetmap.josm.tools.I18n.tr;
 import static org.openstreetmap.josm.tools.I18n.trn;
@@ -135,16 +136,16 @@
 		color.addActionListener(new ActionListener() {
 			public void actionPerformed(ActionEvent e) {
-				String col = Main.pref.get("color.layer "+name, Main.pref.get("color.gps point", ColorHelper.color2html(Color.gray)));
-				JColorChooser c = new JColorChooser(ColorHelper.html2color(col));
+				JColorChooser c = new JColorChooser(Main.pref.getColor(marktr("gps point"), "layer "+name, Color.gray));
 				Object[] options = new Object[]{tr("OK"), tr("Cancel"), tr("Default")};
-				int answer = JOptionPane.showOptionDialog(Main.parent, c, tr("Choose a color"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, null, options, options[0]);
+				int answer = JOptionPane.showOptionDialog(Main.parent, c, tr("Choose a color"), JOptionPane.OK_CANCEL_OPTION,
+				JOptionPane.PLAIN_MESSAGE, null, options, options[0]);
 				switch (answer) {
 				case 0:
-					Main.pref.put("color.layer "+name, ColorHelper.color2html(c.getColor()));
+					Main.pref.putColor("layer "+name, c.getColor());
 					break;
 				case 1:
 					return;
 				case 2:
-					Main.pref.put("color.layer "+name, null);
+					Main.pref.putColor("layer "+name, null);
 					break;
 				}
@@ -367,14 +368,5 @@
 		 ****************************************************************/
 		Long startTime = System.currentTimeMillis();
-		String gpsCol = Main.pref.get("color.gps point");
-		String gpsColSpecial = Main.pref.get("color.layer "+name);
-		Color neutralColor;
-		if (!gpsColSpecial.equals("")) {
-			neutralColor = ColorHelper.html2color(gpsColSpecial);
-		} else if (!gpsCol.equals("")) {
-			neutralColor = ColorHelper.html2color(gpsCol);
-		} else{
-			neutralColor = Color.GRAY;
-		}
+		Color neutralColor = Main.pref.getColor(marktr("gps point"), "layer "+name, Color.GRAY);
 		boolean forceLines = Main.pref.getBoolean("draw.rawgps.lines.force");                     // also draw lines between points belonging to different segments
 		boolean direction = Main.pref.getBoolean("draw.rawgps.direction");                        // draw direction arrows on the lines
@@ -399,5 +391,5 @@
 		                           (!neutralColor.equals(computeCacheColorUsed)) ||
 		                           (computeCacheColored != colored))) {
-			System.out.println("(re-)computing gpx line styles, reason: CCIS=" + computeCacheInSync + " CCMLLU=" + (computeCacheMaxLineLengthUsed != maxLineLength) + " CCCU=" +  (!neutralColor.equals(computeCacheColorUsed)) + " CCC=" + (computeCacheColored != colored));
+//			System.out.println("(re-)computing gpx line styles, reason: CCIS=" + computeCacheInSync + " CCMLLU=" + (computeCacheMaxLineLengthUsed != maxLineLength) + " CCCU=" +  (!neutralColor.equals(computeCacheColorUsed)) + " CCC=" + (computeCacheColored != colored));
 			computeCacheMaxLineLengthUsed = maxLineLength;
 			computeCacheInSync = false;
@@ -524,5 +516,5 @@
 		 ********** STEP 3d - DRAW LARGE POINTS *************************
 		 ****************************************************************/
-						if (large) {
+		if (large) {
 			g.setColor(neutralColor);
 			for (GpxTrack trk : data.tracks) {
Index: /trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java	(revision 803)
+++ /trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java	(revision 804)
@@ -157,6 +157,6 @@
 					Point p1 = mv.getPoint(en1);
 					Point p2 = mv.getPoint(en2);
-					Color color = inactive ? Preferences.getPreferencesColor(marktr("inactive"), Color.DARK_GRAY) :
-							Preferences.getPreferencesColor(marktr("downloaded Area"), Color.YELLOW);
+					Color color = inactive ? Main.pref.getColor(marktr("inactive"), Color.DARK_GRAY) :
+							Main.pref.getColor(marktr("downloaded Area"), Color.YELLOW);
 					g.setColor(color);
 					g.drawRect(Math.min(p1.x,p2.x), Math.min(p1.y, p2.y), Math.abs(p2.x-p1.x), Math.abs(p2.y-p1.y));
Index: /trunk/src/org/openstreetmap/josm/gui/layer/RawGpsLayer.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/layer/RawGpsLayer.java	(revision 803)
+++ /trunk/src/org/openstreetmap/josm/gui/layer/RawGpsLayer.java	(revision 804)
@@ -2,4 +2,5 @@
 package org.openstreetmap.josm.gui.layer;
 
+import static org.openstreetmap.josm.tools.I18n.marktr;
 import static org.openstreetmap.josm.tools.I18n.tr;
 import static org.openstreetmap.josm.tools.I18n.trn;
@@ -227,12 +228,5 @@
 
 	@Override public void paint(Graphics g, MapView mv) {
-		String gpsCol = Main.pref.get("color.gps point");
-		String gpsColSpecial = Main.pref.get("color.layer "+name);
-		if (!gpsColSpecial.equals(""))
-			g.setColor(ColorHelper.html2color(gpsColSpecial));
-		else if (!gpsCol.equals(""))
-			g.setColor(ColorHelper.html2color(gpsCol));
-		else
-			g.setColor(Color.GRAY);
+		g.setColor(Main.pref.getColor(marktr("gps point"), "layer "+name, Color.gray));
 		Point old = null;
 
@@ -329,16 +323,16 @@
 		color.addActionListener(new ActionListener(){
 			public void actionPerformed(ActionEvent e) {
-				String col = Main.pref.get("color.layer "+name, Main.pref.get("color.gps point", ColorHelper.color2html(Color.gray)));
-				JColorChooser c = new JColorChooser(ColorHelper.html2color(col));
+				JColorChooser c = new JColorChooser(Main.pref.getColor(marktr("gps point"), "layer "+name, Color.gray));
 				Object[] options = new Object[]{tr("OK"), tr("Cancel"), tr("Default")};
-				int answer = JOptionPane.showOptionDialog(Main.parent, c, tr("Choose a color"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, null, options, options[0]);
+				int answer = JOptionPane.showOptionDialog(Main.parent, c, tr("Choose a color"), JOptionPane.OK_CANCEL_OPTION,
+				JOptionPane.PLAIN_MESSAGE, null, options, options[0]);
 				switch (answer) {
 				case 0:
-					Main.pref.put("color.layer "+name, ColorHelper.color2html(c.getColor()));
+					Main.pref.putColor("layer "+name, c.getColor());
 					break;
 				case 1:
 					return;
 				case 2:
-					Main.pref.put("color.layer "+name, null);
+					Main.pref.putColor("layer "+name, null);
 					break;
 				}
Index: /trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java	(revision 803)
+++ /trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java	(revision 804)
@@ -2,4 +2,5 @@
 package org.openstreetmap.josm.gui.layer.markerlayer;
 
+import static org.openstreetmap.josm.tools.I18n.marktr;
 import static org.openstreetmap.josm.tools.I18n.tr;
 import static org.openstreetmap.josm.tools.I18n.trn;
@@ -135,14 +136,7 @@
 		boolean mousePressedTmp = mousePressed;
 		Point mousePos = mv.getMousePosition();
-		String mkrCol = Main.pref.get("color.gps marker");
-		String mkrColSpecial = Main.pref.get("color.layer "+name);
-        String mkrTextShow = Main.pref.get("marker.show "+name, "show");
-
-		if (!mkrColSpecial.equals(""))
-			g.setColor(ColorHelper.html2color(mkrColSpecial));
-		else if (!mkrCol.equals(""))
-			g.setColor(ColorHelper.html2color(mkrCol));
-		else
-			g.setColor(Color.GRAY);
+		String mkrTextShow = Main.pref.get("marker.show "+name, "show");
+
+		g.setColor(Main.pref.getColor(marktr("gps marker"), "layer "+name, Color.gray));
 		
 		for (Marker mkr : data) {
@@ -183,16 +177,16 @@
 		color.addActionListener(new ActionListener(){
 			public void actionPerformed(ActionEvent e) {
-				String col = Main.pref.get("color.layer "+name, Main.pref.get("color.gps marker", ColorHelper.color2html(Color.gray)));
-				JColorChooser c = new JColorChooser(ColorHelper.html2color(col));
+				JColorChooser c = new JColorChooser(Main.pref.getColor(marktr("gps marker"), "layer "+name, Color.gray));
 				Object[] options = new Object[]{tr("OK"), tr("Cancel"), tr("Default")};
-				int answer = JOptionPane.showOptionDialog(Main.parent, c, tr("Choose a color"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, null, options, options[0]);
+				int answer = JOptionPane.showOptionDialog(Main.parent, c, tr("Choose a color"), JOptionPane.OK_CANCEL_OPTION,
+				JOptionPane.PLAIN_MESSAGE, null, options, options[0]);
 				switch (answer) {
 				case 0:
-					Main.pref.put("color.layer "+name, ColorHelper.color2html(c.getColor()));
+					Main.pref.putColor("layer "+name, c.getColor());
 					break;
 				case 1:
 					return;
 				case 2:
-					Main.pref.put("color.layer "+name, null);
+					Main.pref.putColor("layer "+name, null);
 					break;
 				}
Index: /trunk/src/org/openstreetmap/josm/gui/preferences/ColorPreference.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/preferences/ColorPreference.java	(revision 803)
+++ /trunk/src/org/openstreetmap/josm/gui/preferences/ColorPreference.java	(revision 804)
@@ -151,4 +151,5 @@
 			marktr("relation"), ColorHelper.color2html(SimplePaintVisitor.teal),
 			marktr("selected"), ColorHelper.color2html(Color.white),
+			marktr("gps marker"), ColorHelper.color2html(Color.gray),
 			marktr("gps point"), ColorHelper.color2html(Color.gray),
 			marktr("conflict"), ColorHelper.color2html(Color.gray),
@@ -157,6 +158,9 @@
 		};
 		for (int i = 0; i < cp.length/2; ++i)
+		{
 			if (!Main.pref.hasKey("color."+cp[i*2]))
 				Main.pref.put("color."+cp[i*2], cp[i*2+1]);
+			Main.pref.putDefault("color."+cp[i*2], cp[i*2+1]);
+		}
     }
 
Index: /trunk/src/org/openstreetmap/josm/gui/preferences/PreferenceDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/preferences/PreferenceDialog.java	(revision 803)
+++ /trunk/src/org/openstreetmap/josm/gui/preferences/PreferenceDialog.java	(revision 804)
@@ -61,5 +61,5 @@
 
 		addTab(null, ImageProvider.get("preferences", icon), p);
-		setToolTipTextAt(getTabCount()-1, desc);
+		setToolTipTextAt(getTabCount()-1, "<html>"+desc+"</html>");
 		return p;
 	}
