Index: styles/standard/elemstyles.xml
===================================================================
--- styles/standard/elemstyles.xml	(revision 1629)
+++ styles/standard/elemstyles.xml	(working copy)
@@ -354,7 +354,8 @@
 	<rule>
 		<condition k="barrier" v="bollard"/>
 		<icon annotate="true" src="vehicle/restriction/bollard.png"/>
-		<line width="3" colour="barrier#F0F050" closed="true"/>
+		<line width="3" colour="barrier#F0F050" dashed="3,9"/>
+		<area colour="barrier#F0F050" closed="true"/>
 		<scale_min>1</scale_min>
 		<scale_max>50000</scale_max>
 	</rule>
Index: src/org/openstreetmap/josm/gui/mappaint/ElemStyleHandler.java
===================================================================
--- src/org/openstreetmap/josm/gui/mappaint/ElemStyleHandler.java	(revision 1629)
+++ src/org/openstreetmap/josm/gui/mappaint/ElemStyleHandler.java	(working copy)
@@ -104,11 +104,15 @@
             else if (atts.getQName(count).equals("dashed")) {
                 try
                 {
-                    line.dashed=Integer.parseInt(atts.getValue(count));
+                    String[] parts = atts.getValue(count).split(",");
+                    line.dashed = new float[parts.length];
+                    for (int i = 0; i < parts.length; i++) {
+                        line.dashed[i] = (float)(Integer.parseInt(parts[i]));
+                    }
                 } catch (NumberFormatException nfe) {
                     boolean dashed=Boolean.parseBoolean(atts.getValue(count));
                     if(dashed) {
-                        line.dashed = 9;
+                        line.dashed = new float[]{9};
                     }
                 }
             } else if (atts.getQName(count).equals("dashedcolour"))
Index: src/org/openstreetmap/josm/gui/mappaint/LineElemStyle.java
===================================================================
--- src/org/openstreetmap/josm/gui/mappaint/LineElemStyle.java	(revision 1629)
+++ src/org/openstreetmap/josm/gui/mappaint/LineElemStyle.java	(working copy)
@@ -8,7 +8,7 @@
     public int width;
     public int realWidth; //the real width of this line in meter
     public Color color;
-    public int dashed;
+    public float[] dashed;
     public Color dashedColor;
 
     public boolean over;
@@ -56,7 +56,7 @@
     {
         width = 1;
         realWidth = 0;
-        dashed = 0;
+        dashed = new float[0];
         dashedColor = null;
         priority = 0;
         color = null;
Index: src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java
===================================================================
--- src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java	(revision 1629)
+++ src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java	(working copy)
@@ -54,7 +54,7 @@
     protected int fillAlpha;
     protected Color untaggedColor;
     protected Color textColor;
-    protected int currentDashed = 0;
+    protected float[] currentDashed = new float[0];
     protected Color currentDashedColor;
     protected int currentWidth = 0;
     protected Stroke currentStroke = null;
@@ -249,7 +249,7 @@
         boolean showOnlyHeadArrowOnly = showDirection && !w.selected && showHeadArrowOnly;
         int width = defaultSegmentWidth;
         int realWidth = 0; /* the real width of the element in meters */
-        int dashed = 0;
+        float dashed[] = new float[0];
         Color dashedColor = null;
         Node lastN;
 
@@ -1124,9 +1124,9 @@
         return name;
     }
 
-    private void drawSeg(Node n1, Node n2, Color col, boolean showDirection, int width, int dashed, Color dashedColor) {
+    private void drawSeg(Node n1, Node n2, Color col, boolean showDirection, int width, float dashed[], Color dashedColor) {
         //profilerSegments++;
-        if (col != currentColor || width != currentWidth || dashed != currentDashed || dashedColor != currentDashedColor) {
+        if (col != currentColor || width != currentWidth || !Arrays.equals(dashed,currentDashed) || dashedColor != currentDashedColor) {
             displaySegments(col, width, dashed, dashedColor);
         }
         Point p1 = nc.getPoint(n1.eastNorth);
@@ -1148,16 +1148,21 @@
     }
 
     protected void displaySegments() {
-        displaySegments(null, 0, 0, null);
+        displaySegments(null, 0, new float[0], null);
     }
 
-    protected void displaySegments(Color newColor, int newWidth, int newDash, Color newDashedColor) {
+    protected void displaySegments(Color newColor, int newWidth, float newDash[], Color newDashedColor) {
         if (currentPath != null) {
             Graphics2D g2d = (Graphics2D)g;
             g2d.setColor(inactive ? inactiveColor : currentColor);
             if (currentStroke == null && useStrokes > dist) {
-                if (currentDashed != 0)
-                    g2d.setStroke(new BasicStroke(currentWidth,BasicStroke.CAP_BUTT,BasicStroke.JOIN_ROUND,0,new float[] {currentDashed},0));
+                if (currentDashed.length > 0) {
+                    try {
+                        g2d.setStroke(new BasicStroke(currentWidth,BasicStroke.CAP_BUTT,BasicStroke.JOIN_ROUND,0,currentDashed,0));
+                    } catch (IllegalArgumentException e) {
+                        g2d.setStroke(new BasicStroke(currentWidth,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND));
+                    }
+                }
                 else
                     g2d.setStroke(new BasicStroke(currentWidth,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND));
             }
@@ -1166,8 +1171,17 @@
             if(currentDashedColor != null) {
                 g2d.setColor(currentDashedColor);
                 if (currentStroke == null && useStrokes > dist) {
-                    if (currentDashed != 0)
-                        g2d.setStroke(new BasicStroke(currentWidth,BasicStroke.CAP_BUTT,BasicStroke.JOIN_ROUND,0,new float[] {currentDashed},currentDashed));
+                    if (currentDashed.length > 0) {
+                        float[] currentDashedOffset = new float[currentDashed.length];
+                        System.arraycopy(currentDashed, 1, currentDashedOffset, 0, currentDashed.length - 1);
+                        currentDashedOffset[currentDashed.length-1] = currentDashed[0];
+                        float offset = currentDashedOffset[0];
+                        try {
+                            g2d.setStroke(new BasicStroke(currentWidth,BasicStroke.CAP_BUTT,BasicStroke.JOIN_ROUND,0,currentDashedOffset,offset));
+                        } catch (IllegalArgumentException e) {
+                            g2d.setStroke(new BasicStroke(currentWidth,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND));
+                        }
+                    }
                     else
                         g2d.setStroke(new BasicStroke(currentWidth,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND));
                 }
