Index: src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java	(revision 6012)
+++ src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java	(working copy)
@@ -71,6 +71,7 @@
     private Node selectedNode = null;
     private Color mainColor;
     private Stroke mainStroke;
+    private boolean ignoreSharedNodes;
     
     /**
      * drawing settings for helper lines
@@ -212,6 +213,8 @@
         
         oldLineStroke = GuiHelper.getCustomizedStroke(Main.pref.get("extrude.ctrl.stroke.old-line", "1"));
         mainStroke = GuiHelper.getCustomizedStroke(Main.pref.get("extrude.stroke.main", "3"));
+
+        ignoreSharedNodes = Main.pref.getBoolean("extrude.ignore-shared-nodes", false);
     }
 
     @Override public void exitMode() {
@@ -445,6 +448,14 @@
             //move existing node
             Node n1Old = selectedSegment.getFirstNode();
             cmds.add(new MoveCommand(n1Old, Main.getProjection().eastNorth2latlon(newN1en)));
+        } else if (ignoreSharedNodes && nodeOverlapsSegment && !alwaysCreateNodes && hasOtherWays) {
+            // replace shared node with new one
+            Node n1Old = selectedSegment.getFirstNode();
+            Node n1New = new Node(Main.getProjection().eastNorth2latlon(newN1en));
+            wnew.addNode(insertionPoint, n1New);
+            wnew.removeNode(n1Old);
+            wayWasModified = true;
+            cmds.add(new AddCommand(n1New));
         } else {
             //introduce new node
             Node n1New = new Node(Main.getProjection().eastNorth2latlon(newN1en));
@@ -463,6 +474,14 @@
             //move existing node
             Node n2Old = selectedSegment.getSecondNode();
             cmds.add(new MoveCommand(n2Old, Main.getProjection().eastNorth2latlon(newN2en)));
+        } else if (ignoreSharedNodes && nodeOverlapsSegment && !alwaysCreateNodes && hasOtherWays) {
+            // replace shared node with new one
+            Node n2Old = selectedSegment.getSecondNode();
+            Node n2New = new Node(Main.getProjection().eastNorth2latlon(newN2en));
+            wnew.addNode(insertionPoint, n2New);
+            wnew.removeNode(n2Old);
+            wayWasModified = true;
+            cmds.add(new AddCommand(n2New));
         } else {
             //introduce new node
             Node n2New = new Node(Main.getProjection().eastNorth2latlon(newN2en));
