Index: trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(revision 387)
+++ trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(revision 388)
@@ -14,4 +14,5 @@
 import java.util.HashSet;
 import java.util.Map;
+import java.util.Set;
 import java.util.LinkedList;
 import java.util.List;
@@ -28,4 +29,5 @@
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.osm.Node;
+import org.openstreetmap.josm.data.osm.NodePair;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Way;
@@ -111,5 +113,7 @@
 					is.add(ws.lowerIndex);
 				}
-			
+
+				Set<NodePair> segSet = new HashSet<NodePair>();
+
 				for (Map.Entry<Way, List<Integer>> insertPoint : insertPoints.entrySet()) {
 					Way w = insertPoint.getKey();
@@ -119,4 +123,6 @@
 
 					pruneSuccsAndReverse(is);
+					for (int i : is) segSet.add(
+						new NodePair(w.nodes.get(i), w.nodes.get(i+1)).sort());
 					for (int i : is) wnew.nodes.add(i + 1, n);
 
@@ -125,4 +131,6 @@
 					reuseWays.add(wnew);
 				}
+
+				adjustNode(segSet, n);
 			}
 		}
@@ -215,4 +223,21 @@
 		Collections.reverse(is);
 	}
+
+	private static void adjustNode(Collection<NodePair> segs, Node n) {
+		// FIXME: find intersection if more than one seg.
+		if (segs.size() >= 1) {
+			EastNorth P = n.eastNorth;
+			NodePair seg = segs.iterator().next();
+			EastNorth A = seg.a.eastNorth;
+			EastNorth B = seg.b.eastNorth;
+			double a = P.distance(B);
+			double b = P.distance(A);
+			double c = A.distance(B);
+			double q = (a - b + c) / (2*c);
+			n.eastNorth = new EastNorth(
+				B.east() + q * (A.east() - B.east()),
+				B.north() + q * (A.north() - B.north()));
+		}
+	}
 	
 	@Override public String getModeHelpText() {
Index: trunk/src/org/openstreetmap/josm/data/osm/NodePair.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/NodePair.java	(revision 387)
+++ trunk/src/org/openstreetmap/josm/data/osm/NodePair.java	(revision 388)
@@ -31,5 +31,5 @@
 	}
 
-	public void sort() {
+	public NodePair sort() {
 		if (b.hashCode() < a.hashCode()) {
 			Node tmp = a;
@@ -37,4 +37,5 @@
 			b = tmp;
 		}
+		return this;
 	}
 }
