Index: /trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java	(revision 4315)
+++ /trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java	(revision 4316)
@@ -202,5 +202,5 @@
     @Override
     public void render(final DataSet data, boolean renderVirtualNodes, Bounds bounds) {
-        //long start = System.currentTimeMillis();
+        long start = System.currentTimeMillis();
         BBox bbox = new BBox(bounds);
 
@@ -226,11 +226,11 @@
         collectWayStyles(data, sc, bbox);
         collectRelationStyles(data, sc, bbox);
-        //long phase1 = System.currentTimeMillis();
+        long phase1 = System.currentTimeMillis();
         sc.drawAll();
         sc = null;
         painter.drawVirtualNodes(data.searchWays(bbox));
 
-        //long now = System.currentTimeMillis();
-        //System.err.println(String.format("PAINTING TOOK %d [PHASE1 took %d] (at scale %s)", now - start, phase1 - start, circum));
+        long now = System.currentTimeMillis();
+        System.err.println(String.format("PAINTING TOOK %d [PHASE1 took %d] (at scale %s)", now - start, phase1 - start, circum));
     }
 }
Index: /trunk/src/org/openstreetmap/josm/gui/mappaint/LineElemStyle.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/mappaint/LineElemStyle.java	(revision 4315)
+++ /trunk/src/org/openstreetmap/josm/gui/mappaint/LineElemStyle.java	(revision 4316)
@@ -33,9 +33,10 @@
     public Color color;
     public Color dashesBackground;
+    public int offset;
     public float realWidth; // the real width of this line in meter
 
     private BasicStroke dashesLine;
 
-    protected LineElemStyle(Cascade c, BasicStroke line, Color color, BasicStroke dashesLine, Color dashesBackground, float realWidth) {
+    protected LineElemStyle(Cascade c, BasicStroke line, Color color, BasicStroke dashesLine, Color dashesBackground, int offset, float realWidth) {
         super(c, 0f);
         this.line = line;
@@ -43,4 +44,5 @@
         this.dashesLine = dashesLine;
         this.dashesBackground = dashesBackground;
+        this.offset = offset;
         this.realWidth = realWidth;
     }
@@ -175,4 +177,6 @@
         BasicStroke dashesLine = null;
 
+        float offset = c.get("offset", 0f, Float.class);
+
         if (dashes != null && dashesBackground != null) {
             float[] dashes2 = new float[dashes.length];
@@ -182,5 +186,5 @@
         }
 
-        return new LineElemStyle(c, line, color, dashesLine, dashesBackground, realWidth);
+        return new LineElemStyle(c, line, color, dashesLine, dashesBackground, (int) offset, realWidth);
     }
 
@@ -228,5 +232,5 @@
         }
 
-        painter.drawWay(w, myColor, myLine, myDashLine, myDashedColor, showOrientation,
+        painter.drawWay(w, myColor, myLine, myDashLine, myDashedColor, offset, showOrientation,
                 showOnlyHeadArrowOnly, showOneway, onewayReversed);
 
@@ -260,4 +264,5 @@
             equal(dashesLine, other.dashesLine) &&
             equal(dashesBackground, other.dashesBackground) &&
+            offset == other.offset &&
             realWidth == other.realWidth;
     }
@@ -270,4 +275,5 @@
         hash = 29 * hash + (dashesLine != null ? dashesLine.hashCode() : 0);
         hash = 29 * hash + (dashesBackground != null ? dashesBackground.hashCode() : 0);
+        hash = 29 * hash + offset;
         hash = 29 * hash + Float.floatToIntBits(realWidth);
         return hash;
@@ -283,4 +289,5 @@
             " linejoin=" + linejoinToString(line.getLineJoin()) +
             " linecap=" + linecapToString(line.getEndCap()) +
+            (offset == 0 ? "" : " offset=" + offset) +
             '}';
     }
