Index: src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java	(revision 7233)
+++ src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java	(working copy)
@@ -179,7 +179,7 @@
     /** Dual alignment reference segments */
     private ReferenceSegment dualAlignSegment1, dualAlignSegment2;
     /** {@code true}, if new segment was collapsed */
-    private boolean dualAlignSegmentCollapsed;
+    private boolean dualAlignSegmentCollapsed = false;
     // Dual alignment UI stuff
     private final DualAlignChangeAction dualAlignChangeAction;
     private final JCheckBoxMenuItem dualAlignCheckboxMenuItem;
@@ -547,6 +547,7 @@
             selectedSegment = null;
             moveCommand = null;
             mode = Mode.select;
+            dualAlignSegmentCollapsed = false;
             updateStatusLine();
             Main.map.mapView.repaint();
         }
@@ -589,14 +590,17 @@
         wnew.addNode(selectedSegment.getFirstNode());
         wnew.addNode(selectedSegment.getSecondNode());
         wnew.addNode(third);
-        if (newN1en.distance(newN2en)>1e-6) {
-            wnew.addNode(fourth); // rectangle can degrade to triangle for dual alignment
+        if (!dualAlignSegmentCollapsed) {
+            // rectangle can degrade to triangle for dual alignment after collapsing
+            wnew.addNode(fourth);
         }
         // ... and close the way
         wnew.addNode(selectedSegment.getFirstNode());
         // undo support
         cmds.add(new AddCommand(third));
-        cmds.add(new AddCommand(fourth));
+        if (!dualAlignSegmentCollapsed) {
+            cmds.add(new AddCommand(fourth));
+        }
         cmds.add(new AddCommand(wnew));
         Command c = new SequenceCommand(tr("Extrude Way"), cmds);
         Main.main.undoRedo.add(c);
@@ -692,7 +696,7 @@
     }
 
     private void joinNodesIfCollapsed(List<Node> changedNodes) {
-        if (!dualAlignActive || newN1en == null || newN2en == null) return;
+        if (!dualAlignSegmentCollapsed) return;
         if (newN1en.distance(newN2en) > 1e-6) return;
         // If the dual alignment moved two nodes to the same point, merge them
         Node targetNode = MergeNodesAction.selectTargetNode(changedNodes);
