Index: /trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(revision 1502)
+++ /trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(revision 1503)
@@ -325,4 +325,5 @@
                 // have to switch modes)
                 Main.ds.setSelected(n);
+                selection = Main.ds.getSelected();
                 return;
             }
@@ -396,5 +397,5 @@
         boolean wayIsFinishedTemp = wayIsFinished;
         wayIsFinished = false;
-        if (selection.size() > 0 && !wayIsFinishedTemp) {
+        if (selection.size() > 0) {
             Node selectedNode = null;
             Way selectedWay = null;
@@ -425,56 +426,58 @@
                 return;
             }
-
-            if(isSelfContainedWay(selectedWay, n0, n))
-                return;
-
-            // User clicked last node again, finish way
-            if(n0 == n) {
-                finishDrawing();
-                return;
-            }
-
-            // Ok we know now that we'll insert a line segment, but will it connect to an
-            // existing way or make a new way of its own? The "alt" modifier means that the
-            // user wants a new way.
-            Way way = alt ? null : (selectedWay != null) ? selectedWay : getWayForNode(n0);
-
-            // Don't allow creation of self-overlapping ways
-            if(way != null) {
-                int nodeCount=0;
-                for (Node p : way.nodes)
-                    if(p.equals(n0)) nodeCount++;
-                if(nodeCount > 1) way = null;
-            }
-
-            if (way == null) {
-                way = new Way();
-                way.addNode(n0);
-                cmds.add(new AddCommand(way));
-            } else {
-                int i;
-                if ((i = replacedWays.indexOf(way)) != -1) {
-                    way = reuseWays.get(i);
+            if(!wayIsFinishedTemp)
+            {
+                if(isSelfContainedWay(selectedWay, n0, n))
+                    return;
+
+                // User clicked last node again, finish way
+                if(n0 == n) {
+                    finishDrawing();
+                    return;
+                }
+
+                // Ok we know now that we'll insert a line segment, but will it connect to an
+                // existing way or make a new way of its own? The "alt" modifier means that the
+                // user wants a new way.
+                Way way = alt ? null : (selectedWay != null) ? selectedWay : getWayForNode(n0);
+
+                // Don't allow creation of self-overlapping ways
+                if(way != null) {
+                    int nodeCount=0;
+                    for (Node p : way.nodes)
+                        if(p.equals(n0)) nodeCount++;
+                    if(nodeCount > 1) way = null;
+                }
+
+                if (way == null) {
+                    way = new Way();
+                    way.addNode(n0);
+                    cmds.add(new AddCommand(way));
                 } else {
-                    Way wnew = new Way(way);
-                    cmds.add(new ChangeCommand(way, wnew));
-                    way = wnew;
+                    int i;
+                    if ((i = replacedWays.indexOf(way)) != -1) {
+                        way = reuseWays.get(i);
+                    } else {
+                        Way wnew = new Way(way);
+                        cmds.add(new ChangeCommand(way, wnew));
+                        way = wnew;
+                    }
                 }
-            }
-
-            // Connected to a node that's already in the way
-            if(way.nodes.contains(n)) {
-                wayIsFinished = true;
-                selection.clear();
-            }
-
-            // Add new node to way
-            if (way.nodes.get(way.nodes.size() - 1) == n0)
-                way.addNode(n);
-            else
-                way.addNode(0, n);
-
-            extendedWay = true;
-            Main.ds.setSelected(way);
+
+                // Connected to a node that's already in the way
+                if(way.nodes.contains(n)) {
+                    wayIsFinished = true;
+                    selection.clear();
+                }
+
+                // Add new node to way
+                if (way.nodes.get(way.nodes.size() - 1) == n0)
+                    way.addNode(n);
+                else
+                    way.addNode(0, n);
+
+                extendedWay = true;
+                Main.ds.setSelected(way);
+            }
         }
 
Index: /trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 1502)
+++ /trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 1503)
@@ -165,5 +165,6 @@
             }
             // when multiple nodes on one point, prefer new or selected nodes
-            else if(dist == minDistanceSq && ((n.id == 0 && n.selected)
+            else if(dist == minDistanceSq && minPrimitive != null
+            && ((n.id == 0 && n.selected)
             || (!minPrimitive.selected && (n.selected || n.id == 0))))
                 minPrimitive = n;
