Index: applications/editors/josm/plugins/FastDraw/src/org/openstreetmap/josm/plugins/fastdraw/FDSettings.java
===================================================================
--- applications/editors/josm/plugins/FastDraw/src/org/openstreetmap/josm/plugins/fastdraw/FDSettings.java	(revision 30737)
+++ applications/editors/josm/plugins/FastDraw/src/org/openstreetmap/josm/plugins/fastdraw/FDSettings.java	(revision 31224)
@@ -35,4 +35,6 @@
     // option for simplifiction: 0="Autosimplify and wait",
     //1="Simplify and wait", 2="Save as is"
+
+    public boolean allowEditExistingWays;
 
     public boolean drawClosed;
@@ -73,4 +75,6 @@
         drawClosed =  Main.pref.getBoolean("fastdraw.drawclosed", false);
         simplifyMode = Main.pref.getInteger("fastdraw.simplifymode", 0);
+        allowEditExistingWays = Main.pref.getBoolean("fastdraw.alloweditexisting", false);
+
         autoTags = Main.pref.get("fastdraw.autotags");
     }
@@ -91,4 +95,5 @@
          Main.pref.putInteger("fastdraw.simplifymode", simplifyMode);
          Main.pref.put("fastdraw.autotags", autoTags);
+         Main.pref.put("fastdraw.alloweditexisting", allowEditExistingWays);
          try {Main.pref.save();} catch (IOException e) {
              System.err.println(tr("Can not save preferences"));
Index: applications/editors/josm/plugins/FastDraw/src/org/openstreetmap/josm/plugins/fastdraw/FastDrawConfigDialog.java
===================================================================
--- applications/editors/josm/plugins/FastDraw/src/org/openstreetmap/josm/plugins/fastdraw/FastDrawConfigDialog.java	(revision 30737)
+++ applications/editors/josm/plugins/FastDraw/src/org/openstreetmap/josm/plugins/fastdraw/FastDrawConfigDialog.java	(revision 31224)
@@ -41,4 +41,5 @@
     private final JCheckBox fixedClickCb = new JCheckBox(tr("Add fixed points on click"));
     private final JCheckBox fixedSpaceCb = new JCheckBox(tr("Add fixed points on spacebar"));
+    private final JCheckBox allowEditExistingWaysCb = new JCheckBox(tr("Allow edit existing ways"));
     private final JCheckBox drawClosedCb = new JCheckBox(tr("Draw closed polygons only"));
     private final HistoryComboBox addTags = new HistoryComboBox();
@@ -87,4 +88,6 @@
         all.add(drawClosedCb,GBC.eop().insets(20,0,0,0));
         
+        all.add(allowEditExistingWaysCb,GBC.eop().insets(20,0,0,0));
+        
         addTags.setText(settings.autoTags);
         text1.setValue(settings.epsilonMult);
@@ -95,4 +98,5 @@
         fixedSpaceCb.setSelected(settings.fixedSpacebar);
         drawClosedCb.setSelected(settings.drawClosed);
+        allowEditExistingWaysCb.setSelected(settings.allowEditExistingWays);
         combo1.setSelectedIndex(settings.simplifyMode);
         
@@ -110,5 +114,5 @@
     public ExtendedDialog showDialog() {
         ExtendedDialog result = super.showDialog();
-        if (getValue() == 0) {
+        if (getValue() == 1) {
             try {
                 settings.epsilonMult=NumberFormat.getInstance().parse(text1.getText()).doubleValue();
@@ -118,4 +122,5 @@
                 settings.fixedClick=fixedClickCb.isSelected();
                 settings.fixedSpacebar=fixedSpaceCb.isSelected();
+                settings.allowEditExistingWays=allowEditExistingWaysCb.isSelected();
                 settings.drawClosed=drawClosedCb.isSelected();
                 settings.simplifyMode=combo1.getSelectedIndex();
Index: applications/editors/josm/plugins/FastDraw/src/org/openstreetmap/josm/plugins/fastdraw/FastDrawingMode.java
===================================================================
--- applications/editors/josm/plugins/FastDraw/src/org/openstreetmap/josm/plugins/fastdraw/FastDrawingMode.java	(revision 30737)
+++ applications/editors/josm/plugins/FastDraw/src/org/openstreetmap/josm/plugins/fastdraw/FastDrawingMode.java	(revision 31224)
@@ -15,4 +15,5 @@
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -27,4 +28,5 @@
 import org.openstreetmap.josm.actions.mapmode.MapMode;
 import org.openstreetmap.josm.command.AddCommand;
+import org.openstreetmap.josm.command.ChangeCommand;
 import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.command.DeleteCommand;
@@ -73,9 +75,9 @@
     private int nearestPointIndex;
     private int dragNode=-1;
-    private SequenceCommand delCmd;
     private List<Node> oldNodes;
     
     private boolean lineWasSaved;
     private boolean deltaChanged;
+    private Way oldWay;
     
     FastDrawingMode(MapFrame mapFrame) {
@@ -511,6 +513,5 @@
 // <editor-fold defaultstate="collapsed" desc="Different action helper methods">
     public void newDrawing() {
-        if (delCmd!=null) delCmd.undoCommand();
-        delCmd=null; oldNodes=null;
+        oldWay=null; oldNodes=null;
         eps=settings.startingEps;
         line.clear();
@@ -526,5 +527,13 @@
         Collection<Command> cmds = new LinkedList<>();
         int i = 0;
-        Way w = new Way();
+        
+        Way w;
+        if (oldWay==null) {
+            w = new Way();
+        } else {
+            w = new Way(oldWay);
+            w.setNodes(new ArrayList<Node>()); // nodes will be created frosm scratch
+        }
+        
         LatLon first=pts.get(0);
         Node firstNode=null;
@@ -570,6 +579,7 @@
             }
         }
-        if (delCmd!=null) {
+        if (oldWay!=null) {
             List<Node> nodes = w.getNodes();
+            cmds.add(new ChangeCommand(oldWay, w));
             for (Node nd: oldNodes) {
                 // node from old way but not in new way 
@@ -577,9 +587,8 @@
                     List<OsmPrimitive> refs = nd.getReferrers();
                     // does someone need this node? if no-delete it.
-                    if (refs.isEmpty() && !nd.isDeleted() && nd.isUsable()) cmds.add(new DeleteCommand(nd));                                       
+                    if (refs.size()==1 && !nd.isDeleted() && nd.isUsable() && !nd.isTagged()) cmds.add(new DeleteCommand(nd));
                 }
             }
-            delCmd = null; // that is all with this command
-            cmds.add(new AddCommand(w));
+            oldWay = null; // that is all with this command
         } else cmds.add(new AddCommand(w));
         Command c = new SequenceCommand(tr("Draw the way by mouse"), cmds);
@@ -638,5 +647,4 @@
 
     private void loadFromWay(Way w) {
-        Collection<Command> cmds = new LinkedList<>();
         
         Object[] nodes = w.getNodes().toArray();
@@ -645,14 +653,14 @@
         for (int i=0;i<n;i++) {
             Node nd=(Node) nodes[i];
-            line.addLast(nd.getCoor());
+            List<OsmPrimitive> refs = nd.getReferrers();
+            if (refs.size()>1 || nd.isTagged()) {
+                line.addFixed(nd.getCoor());
+            } else {
+                line.addLast(nd.getCoor());
+            }
         }
         if (w.isClosed()) line.closeLine();
         oldNodes = w.getNodes();
-        List <OsmPrimitive> wl = new ArrayList<>(); wl.add(w);
-        
-        Command c = DeleteCommand.delete(getEditLayer(), wl, false);
-        if (c != null) cmds.add(c);
-        delCmd = new SequenceCommand(tr("Convert way to FastDraw line"), cmds);
-        Main.main.undoRedo.add(delCmd);
+        oldWay = w;
     }
 
@@ -690,5 +698,5 @@
             Way w = selectedWays.iterator().next();
             
-            if (w.isNew()) loadFromWay(w);
+            if (w.isNew() || settings.allowEditExistingWays) loadFromWay(w);
         }
     }
