Index: trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(revision 5738)
+++ trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(revision 5739)
@@ -69,4 +69,5 @@
 import org.openstreetmap.josm.gui.layer.MapViewPaintable;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
+import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.widgets.PopupMenuLauncher;
 import org.openstreetmap.josm.tools.Geometry;
@@ -116,5 +117,7 @@
     private final JCheckBoxMenuItem snapCheckboxMenuItem;
     private boolean useRepeatedShortcut;
-
+    private Stroke rubberLineStroke;
+    private static final BasicStroke BASIC_STROKE = new BasicStroke(1);
+    
     public DrawAction(MapFrame mapFrame) {
         super(tr("Draw"), "node/autonode", tr("Draw nodes"),
@@ -199,5 +202,7 @@
             return;
         super.enterMode();
-        selectedColor =PaintColors.SELECTED.get();
+        
+        selectedColor = Main.pref.getColor(marktr("helper-line") ,PaintColors.SELECTED.get());
+        rubberLineStroke = GuiHelper.getCustomizedStroke(Main.pref.get("draw.stroke.helper-line","3"));
         drawHelperLine = Main.pref.getBoolean("draw.helper-line", true);
         drawTargetHighlight = Main.pref.getBoolean("draw.target-highlight", true);
@@ -1109,5 +1114,5 @@
         if (!snapHelper.isActive()) { // else use color and stoke from  snapHelper.draw
             g2.setColor(selectedColor);
-            g2.setStroke(new BasicStroke(3, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
+            g2.setStroke(rubberLineStroke);
         } else if (!snapHelper.drawConstructionGeometry)
             return;
@@ -1127,5 +1132,5 @@
 
         g2.draw(b);
-        g2.setStroke(new BasicStroke(1));
+        g2.setStroke(BASIC_STROKE);
     }
 
@@ -1310,5 +1315,6 @@
 
         JCheckBoxMenuItem checkBox;
-
+        public final Color ORANGE_TRANSPARENT = new Color(Color.ORANGE.getRed(),Color.ORANGE.getGreen(),Color.ORANGE.getBlue(),128);
+    
         public void init() {
             snapOn=false;
@@ -1339,14 +1345,10 @@
             useRepeatedShortcut = Main.pref.getBoolean("draw.anglesnap.toggleOnRepeatedA", true);
 
-            normalStroke = new BasicStroke(3, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND);
+            normalStroke = rubberLineStroke;
             snapHelperColor = Main.pref.getColor(marktr("draw angle snap"), Color.ORANGE);
 
-            highlightColor = Main.pref.getColor(marktr("draw angle snap highlight"),
-                    new Color(Color.ORANGE.getRed(),Color.ORANGE.getGreen(),Color.ORANGE.getBlue(),128));
-            highlightStroke = new BasicStroke(10, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND);
-
-            float dash1[] = { 4.0f };
-            helperStroke = new BasicStroke(1.0f, BasicStroke.CAP_BUTT,
-                    BasicStroke.JOIN_MITER, 10.0f, dash1, 0.0f);
+            highlightColor = Main.pref.getColor(marktr("draw angle snap highlight"), ORANGE_TRANSPARENT);
+            highlightStroke = GuiHelper.getCustomizedStroke(Main.pref.get("draw.anglesnap.stroke.highlight","10"));
+            helperStroke = GuiHelper.getCustomizedStroke(Main.pref.get("draw.anglesnap.stroke.helper","1 4"));
         }
 
Index: trunk/src/org/openstreetmap/josm/gui/util/GuiHelper.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/util/GuiHelper.java	(revision 5738)
+++ trunk/src/org/openstreetmap/josm/gui/util/GuiHelper.java	(revision 5739)
@@ -2,4 +2,5 @@
 package org.openstreetmap.josm.gui.util;
 
+import java.awt.BasicStroke;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
@@ -9,4 +10,5 @@
 import java.awt.Dimension;
 import java.awt.Image;
+import java.awt.Stroke;
 import java.awt.Toolkit;
 import java.awt.Window;
@@ -17,4 +19,5 @@
 import java.awt.image.FilteredImageSource;
 import java.lang.reflect.InvocationTargetException;
+import java.util.Arrays;
 
 import javax.swing.GrayFilter;
@@ -156,3 +159,43 @@
         return timer;
     }
+    
+    /**
+     * Return s new BasicStroke object with given thickness and style
+     * @param code = 3.5 -> thickness=3.5px
+     * @param code = 3.5 10 5 -> thickness=3.5px, dashed: 10px filled + 5px empty
+     */
+    public static Stroke getCustomizedStroke(String code) {
+        String[] s = code.trim().split("[^\\.0-9]+");
+        
+        if (s.length==0) return new BasicStroke(); 
+        float w;
+        try {
+            w = Float.parseFloat(s[0]);
+        } catch (NumberFormatException ex) {
+            w = 1.0f;
+        }
+        if (s.length>1) {
+            float dash[]= new float[s.length-1];
+            try {
+                for (int i=1; i<s.length; i++) {
+                   dash[i-1] = Float.parseFloat(s[i]);
+                }
+            } catch (NumberFormatException ex) {
+                System.err.println("Error in stroke preference format: "+code);
+                dash = new float[]{5.0f};
+            }
+            // dashed stroke
+            return new BasicStroke(w, BasicStroke.CAP_BUTT,
+                    BasicStroke.JOIN_MITER, 10.0f, dash, 0.0f);
+        } else {
+            if (w>1) {
+                // thick stroke
+                return new BasicStroke(w, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND);
+            } else {
+                // thin stroke
+                return new BasicStroke(w);
+            }
+        }
+    }
+    
 }
