Index: trunk/src/org/openstreetmap/josm/actions/mapmode/ParallelWayAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/mapmode/ParallelWayAction.java	(revision 4526)
+++ trunk/src/org/openstreetmap/josm/actions/mapmode/ParallelWayAction.java	(revision 4527)
@@ -31,4 +31,6 @@
 import org.openstreetmap.josm.gui.MapFrame;
 import org.openstreetmap.josm.gui.MapView;
+import org.openstreetmap.josm.gui.NavigatableComponent;
+import org.openstreetmap.josm.gui.NavigatableComponent.SystemOfMeasurement;
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.layer.MapViewPaintable;
@@ -50,6 +52,4 @@
  * 3. Improve snapping
  *
- * Need at least a setting for step length
- *
  * 4. Visual cues could be better
  *
@@ -96,5 +96,8 @@
     private boolean snapDefault;
 
-    private double snapThreshold;
+    private double snapThreshold; 
+    private double snapDistanceMetric;
+    private double snapDistanceImperial;
+    private double snapDistanceChinese;
 
     private ModifiersSpec snapModifierCombo;
@@ -196,8 +199,12 @@
     private void updateModeLocalPreferences() {
         // @formatter:off
-        snapThreshold    = Main.pref.getDouble (prefKey("snap-threshold"), 0.35);
-        snapDefault      = Main.pref.getBoolean(prefKey("snap-default"),      true);
-        copyTagsDefault  = Main.pref.getBoolean(prefKey("copy-tags-default"), true);
-        initialMoveDelay = Main.pref.getInteger(prefKey("initial-move-delay"), 200);
+        //snapThreshold        = Main.pref.getDouble (prefKey("snap-threshold"), 0.35); // Old preference was stored in meters, hence the new name (percent)
+        snapThreshold        = Main.pref.getDouble (prefKey("snap-threshold-percent"), 0.70);
+        snapDefault          = Main.pref.getBoolean(prefKey("snap-default"),      true);
+        copyTagsDefault      = Main.pref.getBoolean(prefKey("copy-tags-default"), true);
+        initialMoveDelay     = Main.pref.getInteger(prefKey("initial-move-delay"), 200);
+        snapDistanceMetric   = Main.pref.getDouble(prefKey("snap-distance-metric"), 0.5);
+        snapDistanceImperial = Main.pref.getDouble(prefKey("snap-distance-imperial"), 1);
+        snapDistanceChinese  = Main.pref.getDouble(prefKey("snap-distance-chinese"), 1);
 
         snapModifierCombo           = new ModifiersSpec(getStringPref("snap-modifier-combo",             "?sC"));
@@ -408,10 +415,25 @@
         if (snap) {
             // TODO: Very simple snapping
-            // - Snap steps and/or threshold relative to the distance?
-            long closestWholeUnit = Math.round(realD);
-            if (Math.abs(closestWholeUnit - realD) < snapThreshold) {
+            // - Snap steps relative to the distance?
+            double snapDistance;
+            SystemOfMeasurement som = NavigatableComponent.getSystemOfMeasurement();
+            if (som.equals(NavigatableComponent.CHINESE_SOM)) {
+                snapDistance = snapDistanceChinese * NavigatableComponent.CHINESE_SOM.aValue;
+            } else if (som.equals(NavigatableComponent.IMPERIAL_SOM)) {
+                snapDistance = snapDistanceImperial * NavigatableComponent.IMPERIAL_SOM.aValue;
+            } else {
+                snapDistance = snapDistanceMetric; // Metric system by default
+            }
+            double closestWholeUnit;
+            double modulo = realD % snapDistance;
+            if (modulo < snapDistance/2.0) {
+                closestWholeUnit = realD - modulo;
+            } else {
+                closestWholeUnit = realD + (snapDistance-modulo);
+            }
+            if (Math.abs(closestWholeUnit - realD) < (snapThreshold * snapDistance)) {
                 snappedRealD = closestWholeUnit;
             } else {
-                snappedRealD = closestWholeUnit + Math.signum(closestWholeUnit - realD) * -0.5;
+                snappedRealD = closestWholeUnit + Math.signum(realD - closestWholeUnit) * snapDistance;
             }
         }
Index: trunk/src/org/openstreetmap/josm/gui/MainApplication.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MainApplication.java	(revision 4526)
+++ trunk/src/org/openstreetmap/josm/gui/MainApplication.java	(revision 4527)
@@ -310,6 +310,5 @@
 
         String[] obsolete = {
-                "proxy.anonymous", // 01/2010 - not needed anymore. Can be removed mid 2010
-                "proxy.enable"     // 01/2010 - not needed anymore. Can be removed mid 2010
+                "edit.make-parallel-way-action.snap-threshold"  // 10/2011 - replaced by snap-threshold-percent. Can be removed mid 2012
         };
         for (String key : obsolete) {
