Index: applications/editors/josm/plugins/navigator/src/at/dallermassl/josm/plugin/navigator/NavigatorLayer.java
===================================================================
--- applications/editors/josm/plugins/navigator/src/at/dallermassl/josm/plugin/navigator/NavigatorLayer.java	(revision 3802)
+++ applications/editors/josm/plugins/navigator/src/at/dallermassl/josm/plugin/navigator/NavigatorLayer.java	(revision 3828)
@@ -4,7 +4,12 @@
 package at.dallermassl.josm.plugin.navigator;
 
+import java.awt.BasicStroke;
+import java.awt.Color;
 import java.awt.Component;
 import java.awt.Graphics;
+import java.awt.Graphics2D;
 import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.geom.Line2D;
 import java.util.List;
 
@@ -16,4 +21,5 @@
 import org.openstreetmap.josm.gui.MapView;
 import org.openstreetmap.josm.gui.layer.Layer;
+import org.openstreetmap.josm.tools.ColorHelper;
 import org.openstreetmap.josm.tools.ImageProvider;
 
@@ -25,4 +31,8 @@
  */
 public class NavigatorLayer extends Layer {
+    private static final String KEY_ROUTE_COLOR = "color.navigator.route";
+    private static final String KEY_ROUTE_WIDTH = "navigator.route.width";
+    private static final String KEY_ROUTE_SELECT = "navigator.route.select";
+    protected static final double ARROW_PHI = Math.toRadians(20);
     private NavigatorModel navigatorNodeModel;
     private Icon startIcon;
@@ -137,12 +147,74 @@
             endIcon.paintIcon(mv, g, screen.x, screen.y - endIcon.getIconHeight());
         }
-        
-        List<Segment> path = navigatorNodeModel.getSegmentPath();
-        if(path != null) {
-            synchronized(path) {
-                // TODO paint path
+
+        Main.pref.hasKey(KEY_ROUTE_COLOR);
+        String selectString = Main.pref.get(KEY_ROUTE_SELECT);
+        if(selectString.length() == 0) {
+            selectString = "true";
+            Main.pref.put(KEY_ROUTE_SELECT, selectString);
+        }
+        
+        if(Boolean.parseBoolean(selectString)) {
+            List<Segment> path = navigatorNodeModel.getSegmentPath();
+            if(path != null) {
+                synchronized(path) {
+                    Main.ds.setSelected(path);
+//                  Main.map.mapView.repaint();
+                }
             }
         }
-    }
+        
+        String colorString = Main.pref.get(KEY_ROUTE_COLOR);
+        if(colorString.length() == 0) {
+            colorString = ColorHelper.color2html(Color.GREEN);
+            // FIXXME add after good color is found: Main.pref.put(KEY_ROUTE_COLOR, colorString);
+        }
+        Color color = ColorHelper.html2color(colorString);
+
+        String widthString = Main.pref.get(KEY_ROUTE_WIDTH);
+        if(widthString.length() == 0) {
+            widthString = "5";
+            // FIXXME add after good width is found: Main.pref.put(KEY_ROUTE_WIDTH, widthString);
+        }
+        int width = Integer.parseInt(widthString);
+
+        List<SegmentEdge>edgePath = navigatorNodeModel.getEdgePath();
+        if(edgePath != null) {
+            for(SegmentEdge edge : edgePath) {
+                drawSegmentEdge(g, mv, edge, color, width, true);
+            }
+        }
+    }
+    
+    /**
+     * Draw a line with the given color.
+     */
+    protected void drawSegmentEdge(Graphics g, MapView mv, SegmentEdge edge, Color col, int width, boolean showDirection) {
+        g.setColor(col);
+        Point from;
+        Point to;
+        if(!edge.isInverted()) {
+            from = mv.getPoint(edge.getSegment().from.eastNorth);
+            to = mv.getPoint(edge.getSegment().to.eastNorth);
+        } else {
+            from = mv.getPoint(edge.getSegment().to.eastNorth);
+            to = mv.getPoint(edge.getSegment().from.eastNorth);            
+        }
+        
+        Rectangle screen = g.getClipBounds();
+        Line2D line = new Line2D.Double(from.x, from.y, to.x, to.y);
+        if (screen.contains(from.x, from.y, to.x, to.y) || screen.intersectsLine(line))
+        {
+            Graphics2D g2d = (Graphics2D)g;
+            g2d.setStroke(new BasicStroke(width)); // thickness
+            g.drawLine(from.x, from.y, to.x, to.y);
+            if (showDirection) {
+                double t = Math.atan2(to.y-from.y, to.x-from.x) + Math.PI;
+                g.drawLine(to.x,to.y, (int)(to.x + 10*Math.cos(t-ARROW_PHI)), (int)(to.y + 10*Math.sin(t-ARROW_PHI)));
+                g.drawLine(to.x,to.y, (int)(to.x + 10*Math.cos(t+ARROW_PHI)), (int)(to.y + 10*Math.sin(t+ARROW_PHI)));
+            }
+        }
+    }
+
 
     /*
