Index: trunk/src/org/openstreetmap/josm/actions/audio/AudioBackAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/audio/AudioBackAction.java	(revision 1221)
+++ trunk/src/org/openstreetmap/josm/actions/audio/AudioBackAction.java	(revision 1222)
@@ -20,5 +20,5 @@
         super(tr("Back"), "audio-back", tr("Jump back."),
         Shortcut.registerShortcut("audio:back", tr("Audio: {0}", tr("Back")), KeyEvent.VK_F6, Shortcut.GROUP_DIRECT), true);
-        amount = -Main.pref.getDouble("audio.forwardbackamount",10.0);
+        amount = -Main.pref.getDouble("audio.forwardbackamount","10.0");
         this.putValue("help", "Action/Back");
     }
Index: trunk/src/org/openstreetmap/josm/actions/audio/AudioFwdAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/audio/AudioFwdAction.java	(revision 1221)
+++ trunk/src/org/openstreetmap/josm/actions/audio/AudioFwdAction.java	(revision 1222)
@@ -20,5 +20,5 @@
         super(tr("Forward"), "audio-fwd", tr("Jump forward"),
         Shortcut.registerShortcut("audio:forward", tr("Audio: {0}", tr("Forward")), KeyEvent.VK_F7, Shortcut.GROUP_DIRECT), true);
-        amount = Main.pref.getDouble("audio.forwardbackamount",10.0);
+        amount = Main.pref.getDouble("audio.forwardbackamount","10.0");
     }
 
Index: trunk/src/org/openstreetmap/josm/data/Preferences.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/Preferences.java	(revision 1221)
+++ trunk/src/org/openstreetmap/josm/data/Preferences.java	(revision 1222)
@@ -23,4 +23,5 @@
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.actions.AboutAction;
 import org.openstreetmap.josm.gui.preferences.ProxyPreferences;
 import org.openstreetmap.josm.tools.ColorHelper;
@@ -236,5 +237,7 @@
             else
                 properties.put(key, value);
-            save();
+            String s = defaults.get(key);
+            if(s == null || !s.equals(value))
+                save();
             firePreferenceChanged(key, value);
             return true;
@@ -265,9 +268,14 @@
      */
     public void save() {
+        /* currently unused, but may help to fix configuration issues in future */
+        properties.put("josm.version", AboutAction.getVersionString());
         try {
             setSystemProperties();
             final PrintWriter out = new PrintWriter(new FileWriter(getPreferencesDir() + "preferences"), false);
             for (final Entry<String, String> e : properties.entrySet()) {
-                out.println(e.getKey() + "=" + e.getValue());
+                String s = defaults.get(e.getKey());
+                /* don't save default values */
+                if(s == null || !s.equals(e.getValue()))
+                    out.println(e.getKey() + "=" + e.getValue());
             }
             out.close();
@@ -300,16 +308,13 @@
     public final void resetToDefault() {
         properties.clear();
-        properties.put("projection", "org.openstreetmap.josm.data.projection.Epsg4326");
-        properties.put("draw.segment.direction", "true");
-        properties.put("draw.wireframe", "false");
-        properties.put("layerlist.visible", "true");
-        properties.put("propertiesdialog.visible", "true");
-        properties.put("selectionlist.visible", "true");
-        properties.put("commandstack.visible", "true");
-        properties.put("osm-server.url", "http://www.openstreetmap.org/api");
+        put("layerlist.visible", true);
+        put("propertiesdialog.visible", true);
+        put("selectionlist.visible", true);
+        put("commandstack.visible", true);
+        put("osm-server.url", "http://www.openstreetmap.org/api");
         if (System.getProperty("os.name").toUpperCase().indexOf("WINDOWS") == -1) {
-            properties.put("laf", "javax.swing.plaf.metal.MetalLookAndFeel");
+            put("laf", "javax.swing.plaf.metal.MetalLookAndFeel");
         } else {
-            properties.put("laf", "com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
+            put("laf", "com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
         }
         save();
@@ -425,4 +430,15 @@
         }
         return def;
+    }
+
+    synchronized public double getDouble(String key, String def) {
+        putDefault(key, def);
+        String v = get(key);
+        try {
+            return Double.parseDouble(v == null ? def : v);
+        } catch(NumberFormatException e) {
+            // fall out
+        }
+        return 0.0;
     }
 
Index: trunk/src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java	(revision 1221)
+++ trunk/src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java	(revision 1222)
@@ -98,7 +98,7 @@
 
     protected void getSettings(Boolean virtual) {
-        showDirectionArrow = Main.pref.getBoolean("draw.segment.direction");
+        showDirectionArrow = Main.pref.getBoolean("draw.segment.direction", true);
         showRelevantDirectionsOnly = Main.pref.getBoolean("draw.segment.relevant_directions_only", true);
-        showOrderNumber = Main.pref.getBoolean("draw.segment.order_number");
+        showOrderNumber = Main.pref.getBoolean("draw.segment.order_number", false);
         selectedNodeRadius = Main.pref.getInteger("mappaint.node.selected-size", 5) / 2;
         selectedNodeSize = selectedNodeRadius * 2;
Index: trunk/src/org/openstreetmap/josm/gui/MainMenu.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MainMenu.java	(revision 1221)
+++ trunk/src/org/openstreetmap/josm/gui/MainMenu.java	(revision 1222)
@@ -246,5 +246,5 @@
         add(presetsMenu, KeyEvent.VK_P, "presets");
 
-        if (!Main.pref.getBoolean("audio.menuinvisible")) {
+        if (!Main.pref.getBoolean("audio.menuinvisible", false)) {
             add(audioMenu, audioPlayPause);
             add(audioMenu, audioNext);
Index: trunk/src/org/openstreetmap/josm/gui/mappaint/ElemStyleHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/ElemStyleHandler.java	(revision 1221)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/ElemStyleHandler.java	(revision 1222)
@@ -49,12 +49,13 @@
     {
         int i = colString.indexOf("#");
-        String colorString;
+        Color ret;
         if(i < 0) // name only
-            colorString = Main.pref.get("color.mappaint."+styleName+"."+colString);
+            ret = Main.pref.getColor("mappaint."+styleName+"."+colString, Color.red);
         else if(i == 0) // value only
-            colorString = colString;
+            ret = ColorHelper.html2color(colString);
         else // value and name
-            colorString = Main.pref.get("color.mappaint."+styleName+"."+colString.substring(0,i), colString.substring(i));
-        return ColorHelper.html2color(colorString);
+            ret = Main.pref.getColor("mappaint."+styleName+"."+colString.substring(0,i),
+            ColorHelper.html2color(colString.substring(i)));
+        return ret;
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/preferences/DrawingPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/DrawingPreference.java	(revision 1221)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/DrawingPreference.java	(revision 1222)
@@ -126,5 +126,5 @@
         });
         directionHint.setToolTipText(tr("Draw direction hints for way segments."));
-        directionHint.setSelected(Main.pref.getBoolean("draw.segment.direction"));
+        directionHint.setSelected(Main.pref.getBoolean("draw.segment.direction", true));
         panel.add(directionHint, GBC.eop().insets(20,0,0,0));
 
@@ -137,10 +137,10 @@
         // segment order number
         segmentOrderNumber.setToolTipText(tr("Draw the order numbers of all segments within their way."));
-        segmentOrderNumber.setSelected(Main.pref.getBoolean("draw.segment.order_number"));
+        segmentOrderNumber.setSelected(Main.pref.getBoolean("draw.segment.order_number", false));
         panel.add(segmentOrderNumber, GBC.eop().insets(20,0,0,0));
 
         // antialiasing
         useAntialiasing.setToolTipText(tr("Apply antialiasing to the map view resulting in a smoother appearance."));
-        useAntialiasing.setSelected(Main.pref.getBoolean("mappaint.use-antialiasing"));
+        useAntialiasing.setSelected(Main.pref.getBoolean("mappaint.use-antialiasing", false));
         panel.add(useAntialiasing, GBC.eop().insets(20,0,0,0));
 
Index: trunk/src/org/openstreetmap/josm/io/OsmServerReader.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/OsmServerReader.java	(revision 1221)
+++ trunk/src/org/openstreetmap/josm/io/OsmServerReader.java	(revision 1222)
@@ -51,5 +51,5 @@
         }
 
-        if (Boolean.parseBoolean(Main.pref.get("osm-server.use-compression", "true")))
+        if (Main.pref.getBoolean("osm-server.use-compression", true))
             activeConnection.setRequestProperty("Accept-Encoding", "gzip, deflate");
 
