Index: /applications/editors/josm/plugins/ImproveWayAccuracy/src/org/openstreetmap/josm/plugins/iwa/IWAMode.java
===================================================================
--- /applications/editors/josm/plugins/ImproveWayAccuracy/src/org/openstreetmap/josm/plugins/iwa/IWAMode.java	(revision 27474)
+++ /applications/editors/josm/plugins/ImproveWayAccuracy/src/org/openstreetmap/josm/plugins/iwa/IWAMode.java	(revision 27475)
@@ -95,4 +95,5 @@
     private final BasicStroke moveNodeStroke;
     private final BasicStroke addNodeStroke;
+    private final BasicStroke deleteNodeStroke;
 
     private boolean selectionChangedBlocked = false;
@@ -125,4 +126,6 @@
         addNodeStroke = new BasicStroke(1, BasicStroke.CAP_BUTT,
                 BasicStroke.JOIN_MITER);
+        deleteNodeStroke = new BasicStroke(1, BasicStroke.CAP_BUTT,
+                BasicStroke.JOIN_MITER);
     }
 
@@ -193,8 +196,10 @@
                 return tr("Select a way that you want to make more accurate.");
         } else {
-            if (!ctrl)
-                return tr("Click to move the highlighted node. Hold Ctrl to add new nodes.");
+            if (ctrl)
+                return tr("Click to add a new node. Release Ctrl to move existing nodes or hold Alt to delete.");
+            else if (alt)
+                return tr("Click to delete the highlighted node. Release Alt to move existing nodes or hold Ctrl to add new nodes.");
             else
-                return tr("Click to add a new node. Release Ctrl to move existing nodes.");
+                return tr("Click to move the highlighted node. Hold Ctrl to add new nodes, or Alt to delete.");
         }
     }
@@ -255,9 +260,9 @@
             // Finding endpoints
             Point p1 = null, p2 = null;
-            if (candidateSegment != null) {
+            if (ctrl && candidateSegment != null) {
                 g.setStroke(addNodeStroke);
                 p1 = mv.getPoint(candidateSegment.getFirstNode());
                 p2 = mv.getPoint(candidateSegment.getSecondNode());
-            } else if (candidateNode != null) {
+            } else if (!alt && !ctrl && candidateNode != null) {
                 g.setStroke(moveNodeStroke);
                 List<Pair<Node, Node>> wpps = targetWay.getNodePairs(false);
@@ -270,8 +275,29 @@
                         break;
                 }
-            }
+            } else if (alt && !ctrl && candidateNode != null) {
+                g.setStroke(deleteNodeStroke);
+                List<Node> nodes = targetWay.getNodes();
+                int index = nodes.indexOf(candidateNode);
+                
+                // Only draw line if node is not first and/or last
+                if (index != 0 && index != (nodes.size() - 1)) {
+                    p1 = mv.getPoint(nodes.get(index - 1));
+                    p2 = mv.getPoint(nodes.get(index + 1));
+            }
+                // TODO: indicate what part that will be deleted? (for end nodes)
+            }
+            
 
             // Drawing preview lines
             GeneralPath b = new GeneralPath();
+            if (alt && !ctrl) {
+                // In delete mode
+                if (p1 != null && p2 != null) {
+                    b.moveTo(p1.x, p1.y);
+                    b.lineTo(p2.x, p2.y);
+                }
+            }
+            else {
+                // In add or move mode
             if (p1 != null) {
                 b.moveTo(mousePos.x, mousePos.y);
@@ -281,4 +307,5 @@
                 b.moveTo(mousePos.x, mousePos.y);
                 b.lineTo(p2.x, p2.y);
+            }
             }
             g.draw(b);
@@ -417,5 +444,6 @@
                 Main.main.undoRedo.add(new SequenceCommand(text, virtualCmds));
 
-            } else if(alt && ctrl && candidateNode != null) { 
+            } else if(alt && !ctrl && candidateNode != null) { 
+            	// Deleting the highlighted node
             	
             	//check to see if node has interesting keys
@@ -490,5 +518,6 @@
         ctrl = (e.getModifiers() & ActionEvent.CTRL_MASK) != 0;
         shift = (e.getModifiers() & ActionEvent.SHIFT_MASK) != 0;
-        alt = (e.getModifiers() & ActionEvent.ALT_MASK) != 0;
+        // accept either Alt key (including AltGr)
+        alt = ((e.getModifiers() & (ActionEvent.ALT_MASK|InputEvent.ALT_GRAPH_MASK)) != 0);
     }
 
@@ -506,5 +535,5 @@
                     : cursorSelectHover, this);
         } else if (state == State.improving) {
-        	if(alt && ctrl) {
+        	if(alt && !ctrl) {
         		mv.setNewCursor(cursorImproveDelete, this);
         	} else if(shift || dragging) {
