Index: /trunk/src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyAction.java	(revision 9357)
+++ /trunk/src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyAction.java	(revision 9358)
@@ -82,4 +82,5 @@
     private transient Stroke selectTargetWayStroke;
     private transient Stroke moveNodeStroke;
+    private transient Stroke moveNodeIntersectingStroke;
     private transient Stroke addNodeStroke;
     private transient Stroke deleteNodeStroke;
@@ -147,4 +148,5 @@
         selectTargetWayStroke = GuiHelper.getCustomizedStroke(Main.pref.get("improvewayaccuracy.stroke.select-target", "2"));
         moveNodeStroke = GuiHelper.getCustomizedStroke(Main.pref.get("improvewayaccuracy.stroke.move-node", "1 6"));
+        moveNodeIntersectingStroke = GuiHelper.getCustomizedStroke(Main.pref.get("improvewayaccuracy.stroke.move-node-intersecting", "1 2 6"));
         addNodeStroke = GuiHelper.getCustomizedStroke(Main.pref.get("improvewayaccuracy.stroke.add-node", "1"));
         deleteNodeStroke = GuiHelper.getCustomizedStroke(Main.pref.get("improvewayaccuracy.stroke.delete-node", "1"));
@@ -308,4 +310,35 @@
             }
 
+            if (!alt && !ctrl && candidateNode != null) {
+                b.reset();
+                drawIntersectingWayHelperLines(mv, b);
+                g.setStroke(moveNodeIntersectingStroke);
+                g.draw(b);
+            }
+
+        }
+    }
+
+    protected void drawIntersectingWayHelperLines(MapView mv, GeneralPath b) {
+        for (final OsmPrimitive referrer : candidateNode.getReferrers()) {
+            if (!(referrer instanceof Way) || targetWay.equals(referrer)) {
+                continue;
+            }
+            final List<Node> nodes = ((Way) referrer).getNodes();
+            for (int i = 0; i < nodes.size(); i++) {
+                if (!candidateNode.equals(nodes.get(i))) {
+                    continue;
+                }
+                if (i > 0) {
+                    final Point p = mv.getPoint(nodes.get(i - 1));
+                    b.moveTo(mousePos.x, mousePos.y);
+                    b.lineTo(p.x, p.y);
+                }
+                if (i < nodes.size() - 1) {
+                    final Point p = mv.getPoint(nodes.get(i + 1));
+                    b.moveTo(mousePos.x, mousePos.y);
+                    b.lineTo(p.x, p.y);
+                }
+            }
         }
     }
