Index: trunk/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java	(revision 1288)
+++ trunk/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java	(revision 1289)
@@ -17,4 +17,5 @@
 import java.util.LinkedList;
 import java.util.Locale;
+import java.util.Iterator;
 
 import javax.swing.ImageIcon;
@@ -225,4 +226,7 @@
         boolean showDirection = w.selected || ((!useRealWidth) && (showDirectionArrow
         && (!showRelevantDirectionsOnly || w.hasDirectionKeys)));
+        // head only takes over control if the option is true,
+        // the direction should be shown at all and not only because it's selected
+        boolean showOnlyHeadArrowOnly = showDirection && !w.selected && showHeadArrowOnly;
         int width = defaultSegmentWidth;
         int realWidth = 0; //the real width of the element in meters
@@ -270,8 +274,11 @@
         // draw the way
         lastN = null;
-        for(Node n : w.nodes)
-        {
+        Iterator<Node> it = w.nodes.iterator();
+        while (it.hasNext())
+        {
+            Node n = it.next();
             if(lastN != null)
-                drawSeg(lastN, n, color, showDirection, width, dashed);
+                drawSeg(lastN, n, color,
+                    showOnlyHeadArrowOnly ? !it.hasNext() : showDirection, width, dashed);
             lastN = n;
         }
Index: trunk/src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java	(revision 1288)
+++ trunk/src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java	(revision 1289)
@@ -64,4 +64,5 @@
     protected boolean showDirectionArrow;
     protected boolean showRelevantDirectionsOnly;
+    protected boolean showHeadArrowOnly;
     protected boolean showOrderNumber;
     protected boolean fillSelectedNode;
@@ -101,4 +102,5 @@
         showDirectionArrow = Main.pref.getBoolean("draw.segment.direction", true);
         showRelevantDirectionsOnly = Main.pref.getBoolean("draw.segment.relevant_directions_only", true);
+        showHeadArrowOnly = Main.pref.getBoolean("draw.segment.head_only", false);
         showOrderNumber = Main.pref.getBoolean("draw.segment.order_number", false);
         selectedNodeRadius = Main.pref.getInteger("mappaint.node.selected-size", 5) / 2;
@@ -292,4 +294,7 @@
         boolean showThisDirectionArrow = w.selected
         || (showDirectionArrow && (!showRelevantDirectionsOnly || w.hasDirectionKeys));
+        // head only takes over control if the option is true,
+        // the direction should be shown at all and not only because it's selected
+        boolean showOnlyHeadArrowOnly = showThisDirectionArrow && !w.selected && showHeadArrowOnly;
         Color wayColor;
 
@@ -307,5 +312,6 @@
             for (int orderNumber = 1; it.hasNext(); orderNumber++) {
                 Point p = nc.getPoint(it.next().eastNorth);
-                drawSegment(lastP, p, w.selected && !inactive ? selectedColor : wayColor, showThisDirectionArrow);
+                drawSegment(lastP, p, w.selected && !inactive ? selectedColor : wayColor, 
+                    showOnlyHeadArrowOnly ? !it.hasNext() : showThisDirectionArrow);
                 if (showOrderNumber)
                     drawOrderNumber(lastP, p, orderNumber);
Index: trunk/src/org/openstreetmap/josm/gui/preferences/DrawingPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/DrawingPreference.java	(revision 1288)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/DrawingPreference.java	(revision 1289)
@@ -34,4 +34,5 @@
     private JTextField drawGpsArrowsMinDist = new JTextField(8);
     private JCheckBox interestingDirections = new JCheckBox(tr("Only interesting direction hints (e.g. with oneway tag)."));
+    private JCheckBox headArrow = new JCheckBox(tr("Only on the head of a way."));
     private JCheckBox segmentOrderNumber = new JCheckBox(tr("Draw segment order numbers"));
     private JCheckBox sourceBounds = new JCheckBox(tr("Draw boundaries of downloaded data"));
@@ -132,10 +133,13 @@
         directionHint.addActionListener(new ActionListener(){
             public void actionPerformed(ActionEvent e) {
-                            if (directionHint.isSelected()){
-                                interestingDirections.setSelected(Main.pref.getBoolean("draw.segment.relevant_directions_only", true));
-                            }else{
-                                interestingDirections.setSelected(false);
-                            }
-                            interestingDirections.setEnabled(directionHint.isSelected());
+                if (directionHint.isSelected()){
+                    interestingDirections.setSelected(Main.pref.getBoolean("draw.segment.relevant_directions_only", true));
+                    headArrow.setSelected(Main.pref.getBoolean("draw.segment.head_only", false));
+                }else{
+                    interestingDirections.setSelected(false);
+                    headArrow.setSelected(false);
+                }
+                interestingDirections.setEnabled(directionHint.isSelected());
+                headArrow.setEnabled(directionHint.isSelected());
             }
         });
@@ -149,4 +153,10 @@
         interestingDirections.setEnabled(directionHint.isSelected());
         panel.add(interestingDirections, GBC.eop().insets(40,0,0,0));
+
+        // only on the head of a way
+        headArrow.setToolTipText(tr("Only on the head of a way."));
+        headArrow.setSelected(Main.pref.getBoolean("draw.segment.head_only", false));
+        headArrow.setEnabled(directionHint.isSelected());
+        panel.add(headArrow, GBC.eop().insets(40, 0, 0, 0));
 
         // segment order number
@@ -194,4 +204,5 @@
         Main.pref.put("draw.segment.direction", directionHint.isSelected());
         Main.pref.put("draw.segment.relevant_directions_only", interestingDirections.isSelected());
+        Main.pref.put("draw.segment.head_only", headArrow.isSelected());
         Main.pref.put("draw.segment.order_number", segmentOrderNumber.isSelected());
         Main.pref.put("draw.data.downloaded_area", sourceBounds.isSelected());
