Index: trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(revision 1457)
+++ trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(revision 1458)
@@ -139,5 +139,9 @@
     }
     
+    /**
+     * Checks if a map redraw is required and does so if needed. Also updates the status bar
+     */
     private void redrawIfRequired() {
+        updateStatusLine();
         if ((!drawHelperLine || wayIsFinished) && !drawTargetHighlight) return;
         Main.map.mapView.repaint();
@@ -156,6 +160,7 @@
         }
 
-        // This happens when nothing is selected
-        if(mouseOnExistingNode == null && Main.ds.getSelected().size() == 0 && mousePos != null)
+        // This happens when nothing is selected, but we still want to highlight the "target node"
+        if(mouseOnExistingNode == null && Main.ds.getSelected().size() == 0
+                && mousePos != null && !shift)
             mouseOnExistingNode = Main.map.mapView.getNearestNode(mousePos);
 
@@ -654,5 +659,6 @@
 
         if (selectedNode == null) {
-            if (selectedWay == null) return;
+            if (selectedWay == null)
+                return;
             if (selectedWay.isFirstLastNode(lastUsedNode)) {
                 currentBaseNode = lastUsedNode;
@@ -669,8 +675,6 @@
         }
 
-        if (currentBaseNode == null || currentBaseNode == currentMouseNode) {
-            updateStatusLine();
+        if (currentBaseNode == null || currentBaseNode == currentMouseNode)
             return; // Don't create zero length way segments.
-        }
 
         // find out the distance, in metres, between the base point and the mouse cursor
@@ -685,5 +689,6 @@
         Main.map.statusLine.setHeading(hdg);
         Main.map.statusLine.setDist(distance);
-        updateStatusLine();
+        // Now done in redrawIfRequired()
+        //updateStatusLine();
     }
 
@@ -875,11 +880,9 @@
         } else {
             // oldHighlights may store a node or way, check if it's a node
-            for(OsmPrimitive x : oldHighlights) {
-                if(x instanceof Node)
-                    rv = tr("Select node under cursor.");
-                else
-                    rv = tr("Insert new node into {0} way(s).", oldHighlights.size());
-                break;
-            }
+            OsmPrimitive x = oldHighlights.iterator().next();
+            if(x instanceof Node)
+                rv = tr("Select node under cursor.");
+            else
+                rv = tr("Insert new node into {0} way(s).", oldHighlights.size());
         }
 
