Index: /trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(revision 1544)
+++ /trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(revision 1545)
@@ -162,6 +162,6 @@
 
         // 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)
+        if (mouseOnExistingNode == null && Main.ds.getSelected().size() == 0
+                && mousePos != null)
             mouseOnExistingNode = Main.map.mapView.getNearestNode(mousePos);
 
@@ -176,5 +176,5 @@
 
         // Insert the node into all the nearby way segments
-        if(mouseOnExistingWays.size() == 0) {
+        if (mouseOnExistingWays.size() == 0) {
             setCursor(Cursors.crosshair);
             return;
@@ -185,6 +185,6 @@
         // We also need this list for the statusbar help text
         oldHighlights.addAll(mouseOnExistingWays);
-        if(!drawTargetHighlight) return;
-        for(Way w : mouseOnExistingWays) {
+        if (!drawTargetHighlight) return;
+        for (Way w : mouseOnExistingWays) {
             w.highlighted = true;
         }
@@ -314,5 +314,5 @@
         Node n = null;
 
-        if (!ctrl && !shift)
+        if (!ctrl)
             n = Main.map.mapView.getNearestNode(mousePos);
 
@@ -395,8 +395,13 @@
 
         // If the above does not apply, the selection is cleared and a new try is started
+        
+  
+        
         boolean extendedWay = false;
         boolean wayIsFinishedTemp = wayIsFinished;
         wayIsFinished = false;
-        if (selection.size() > 0) {
+        
+        // don't draw lines if shift is held
+        if (selection.size() > 0 && !shift) {
             Node selectedNode = null;
             Way selectedWay = null;
@@ -627,5 +632,5 @@
         Main.map.statusLine.setDist(-1);
 
-        if (!ctrl && !shift && mousePos != null) {
+        if (!ctrl && mousePos != null) {
             currentMouseNode = Main.map.mapView.getNearestNode(mousePos);
         }
@@ -821,5 +826,5 @@
 
     public void paint(Graphics g, MapView mv) {
-        if (!drawHelperLine || wayIsFinished) return;
+        if (!drawHelperLine || wayIsFinished || shift) return;
 
         // sanity checks
@@ -859,6 +864,6 @@
          *  No modifiers: all (Connect, Node Re-Use, Auto-Weld)
          *  CTRL: disables node re-use, auto-weld
-         *  Shift: disables node re-use
-         *  ALT: disables connect
+         *  Shift: do not make connection
+         *  ALT: make connection but start new way in doing so
          */
 
@@ -877,15 +882,10 @@
         // oldHighlights stores the current highlights. If this
         // list is empty we can assume that we won't do any joins
-        if(ctrl || oldHighlights.isEmpty())
+        if (ctrl || oldHighlights.isEmpty()) {
             rv = tr("Create new node.");
-        else if(shift) {
-            // We already know oldHighlights is not empty, but shift is pressed.
-            // We can assume the new node will be joined into an existing way
-            rv = trn("Insert new node into way.", "Insert new node into {0} ways.",
-            oldHighlights.size(), oldHighlights.size());
         } else {
             // oldHighlights may store a node or way, check if it's a node
             OsmPrimitive x = oldHighlights.iterator().next();
-            if(x instanceof Node)
+            if (x instanceof Node)
                 rv = tr("Select node under cursor.");
             else
@@ -898,5 +898,5 @@
          */
         if (currentBaseNode != null && !wayIsFinished) {
-            if(alt)
+            if (alt)
                 rv += " " + tr("Start new way from last node.");
             else
@@ -908,6 +908,6 @@
          * Handle special case: Highlighted node == selected node => finish drawing
          */
-        if(n != null && Main.ds.getSelectedNodes().contains(n)) {
-            if(wayIsFinished)
+        if (n != null && Main.ds.getSelectedNodes().contains(n)) {
+            if (wayIsFinished)
                 rv = tr("Select node under cursor.");
             else
@@ -918,8 +918,8 @@
          * Handle special case: Self-Overlapping or closing way
          */
-        if(Main.ds.getSelectedWays().size() > 0 && !wayIsFinished && !alt) {
+        if (Main.ds.getSelectedWays().size() > 0 && !wayIsFinished && !alt) {
             Way w = (Way) Main.ds.getSelectedWays().iterator().next();
-            for(Node m : w.nodes) {
-                if(m.equals(mouseOnExistingNode) || mouseOnExistingWays.contains(w)) {
+            for (Node m : w.nodes) {
+                if (m.equals(mouseOnExistingNode) || mouseOnExistingWays.contains(w)) {
                     rv += " " + tr("Finish drawing.");
                     break;
