Index: trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java	(revision 16392)
+++ trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java	(revision 16393)
@@ -1325,6 +1325,8 @@
         boolean initialMoveToNeeded = true;
         ArrowPaintHelper drawArrowHelper = null;
+        double minSegmentLenSq = 0;
         if (showOrientation) {
             drawArrowHelper = new ArrowPaintHelper(PHI, 10 + line.getLineWidth());
+            minSegmentLenSq = Math.pow(drawArrowHelper.getOnLineLength() * 1.3, 2);
         }
         while (it.hasNext()) {
@@ -1342,10 +1344,11 @@
                 /* draw arrow */
                 if (drawArrowHelper != null) {
-                    boolean drawArrow;
-                    // always draw last arrow - no matter how short the segment is
-                    drawArrow = !it.hasNext();
-                    if (!showHeadArrowOnly) {
-                        // draw arrows in between only if there is enough space
-                        drawArrow = drawArrow || p1.distanceToInView(p2) > drawArrowHelper.getOnLineLength() * 1.3;
+                    final boolean drawArrow;
+                    if (way.isSelected()) {
+                        // always draw last arrow - no matter how short the segment is
+                        drawArrow = !it.hasNext() || p1.distanceToInViewSq(p2) > minSegmentLenSq;
+                    } else {
+                        // not selected: only draw arrow when it fits
+                        drawArrow = (!showHeadArrowOnly || !it.hasNext()) && p1.distanceToInViewSq(p2) > minSegmentLenSq;
                     }
                     if (drawArrow) {
