diff --git a/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java b/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
index bdc4aad..8ee76cf 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
@@ -140,6 +140,7 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
 
         readPreferences();
         snapHelper.init();
+        readPreferences();
     }
 
     private JCheckBoxMenuItem addMenuItem() {
@@ -238,7 +239,8 @@ public class DrawAction extends MapMode implements MapViewPaintable, SelectionCh
         ignoreNextKeyRelease = true;
     }
 
-    private void readPreferences() {
+    @Override
+    protected void readPreferences() {
         rubberLineColor = Main.pref.getColor(marktr("helper line"), null);
         if (rubberLineColor == null) rubberLineColor = PaintColors.SELECTED.get();
 
diff --git a/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java b/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java
index 0e017a4..18d28fb 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java
@@ -294,13 +294,13 @@ public class ExtrudeAction extends MapMode implements MapViewPaintable, KeyPress
         super.enterMode();
         Main.map.mapView.addMouseListener(this);
         Main.map.mapView.addMouseMotionListener(this);
-        readPreferences();
         ignoreNextKeyRelease = true;
         Main.map.keyDetector.addKeyListener(this);
         Main.map.keyDetector.addModifierListener(this);
     }
 
-    private void readPreferences() {
+    @Override
+    protected void readPreferences() {
         initialMoveDelay = Main.pref.getInteger("edit.initial-move-delay", 200);
         initialMoveThreshold = Main.pref.getInteger("extrude.initial-move-threshold", 1);
         mainColor = Main.pref.getColor(marktr("Extrude: main line"), null);
diff --git a/src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyAction.java b/src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyAction.java
index 0d343ee..87599f2 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyAction.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyAction.java
@@ -141,7 +141,8 @@ public class ImproveWayAccuracyAction extends MapMode implements MapViewPaintabl
         Main.map.keyDetector.addModifierListener(this);
     }
 
-    private void readPreferences() {
+    @Override
+    protected void readPreferences() {
         guideColor = Main.pref.getColor(marktr("improve way accuracy helper line"), null);
         if (guideColor == null) guideColor = PaintColors.HIGHLIGHT.get();
 
diff --git a/src/org/openstreetmap/josm/actions/mapmode/MapMode.java b/src/org/openstreetmap/josm/actions/mapmode/MapMode.java
index ba5d48a..ce87902 100644
--- a/src/org/openstreetmap/josm/actions/mapmode/MapMode.java
+++ b/src/org/openstreetmap/josm/actions/mapmode/MapMode.java
@@ -14,6 +14,8 @@ import org.openstreetmap.josm.gui.MapFrame;
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Shortcut;
+import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
+import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
 
 /**
  * A class implementing MapMode is able to be selected as an mode for map editing.
@@ -21,7 +23,7 @@ import org.openstreetmap.josm.tools.Shortcut;
  *
  * MapModes should register/deregister all necessary listeners on the map's view control.
  */
-public abstract class MapMode extends JosmAction implements MouseListener, MouseMotionListener {
+public abstract class MapMode extends JosmAction implements MouseListener, MouseMotionListener, PreferenceChangedListener {
     protected final Cursor cursor;
     protected boolean ctrl;
     protected boolean alt;
@@ -40,6 +42,7 @@ public abstract class MapMode extends JosmAction implements MouseListener, Mouse
         super(name, "mapmode/"+iconName, tooltip, shortcut, false);
         this.cursor = cursor;
         putValue("active", Boolean.FALSE);
+        Main.pref.addPreferenceChangeListener(this);
     }
 
     /**
@@ -55,6 +58,7 @@ public abstract class MapMode extends JosmAction implements MouseListener, Mouse
         putValue(SMALL_ICON, ImageProvider.get("mapmode", iconName));
         putValue(SHORT_DESCRIPTION, tooltip);
         this.cursor = cursor;
+        Main.pref.addPreferenceChangeListener(this);
     }
 
     /**
@@ -83,6 +87,8 @@ public abstract class MapMode extends JosmAction implements MouseListener, Mouse
         return "";
     }
 
+    protected void readPreferences() {}
+
     /**
      * Call selectMapMode(this) on the parent mapFrame.
      */
@@ -159,4 +165,9 @@ public abstract class MapMode extends JosmAction implements MouseListener, Mouse
     public void mouseDragged(MouseEvent e) {
         // Do nothing
     }
+
+    @Override
+    public void preferenceChanged(PreferenceChangeEvent e) {
+        readPreferences();
+    }
 }
