Index: /applications/editors/josm/plugins/FastDraw/build.xml
===================================================================
--- /applications/editors/josm/plugins/FastDraw/build.xml	(revision 34509)
+++ /applications/editors/josm/plugins/FastDraw/build.xml	(revision 34510)
@@ -4,5 +4,5 @@
     <property name="commit.message" value="[josm_fastdraw] Fix incorrect settings saving-2"/>
     <!-- enter the *lowest* JOSM version this plugin is currently compatible with -->
-    <property name="plugin.main.version" value="12987"/>
+    <property name="plugin.main.version" value="14153"/>
     
     <!-- Configure these properties (replace "..." accordingly).
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 34509)
+++ /applications/editors/josm/plugins/FastDraw/src/org/openstreetmap/josm/plugins/fastdraw/FDSettings.java	(revision 34510)
@@ -2,14 +2,10 @@
 package org.openstreetmap.josm.plugins.fastdraw;
 
-import static org.openstreetmap.josm.tools.I18n.tr;
-
 import java.awt.Color;
 import java.awt.Stroke;
-import java.io.IOException;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.preferences.NamedColorProperty;
 import org.openstreetmap.josm.gui.util.GuiHelper;
-import org.openstreetmap.josm.tools.Logging;
+import org.openstreetmap.josm.spi.preferences.Config;
 
 public class FDSettings {
@@ -53,50 +49,45 @@
 
     public void loadPrefs() {
-        normalStroke = GuiHelper.getCustomizedStroke(Main.pref.get("fastdraw.stroke.normal", "2"));
-        deleteStroke = GuiHelper.getCustomizedStroke(Main.pref.get("fastdraw.stroke.delete", "3"));
-        simplifiedStroke = GuiHelper.getCustomizedStroke(Main.pref.get("fastdraw.stroke.simplified", "2"));
+        normalStroke = GuiHelper.getCustomizedStroke(Config.getPref().get("fastdraw.stroke.normal", "2"));
+        deleteStroke = GuiHelper.getCustomizedStroke(Config.getPref().get("fastdraw.stroke.delete", "3"));
+        simplifiedStroke = GuiHelper.getCustomizedStroke(Config.getPref().get("fastdraw.stroke.simplified", "2"));
 
-        bigDotSize = Main.pref.getInt("fastdraw.point.bigsize", 7);
-        dotSize = Main.pref.getInt("fastdraw.point.normalsize", 5);
+        bigDotSize = Config.getPref().getInt("fastdraw.point.bigsize", 7);
+        dotSize = Config.getPref().getInt("fastdraw.point.normalsize", 5);
 
-        maxDist = Main.pref.getDouble("fastdraw.maxdist", 5);
-        epsilonMult = Main.pref.getDouble("fastdraw.epsilonmult", 1.1);
-        //deltaLatLon = Main.pref.getDouble("fastdraw.deltasearch", 0.01);
-        minPixelsBetweenPoints = Main.pref.getDouble("fastdraw.mindelta", 20);
-        startingEps = Main.pref.getDouble("fastdraw.startingEps", 5);
-        maxPointsPerKm = Main.pref.getDouble("fastdraw.maxpkm", 150);
-        pkmBlockSize = Main.pref.getInt("fastdraw.pkmblocksize", 10);
-        drawLastSegment = Main.pref.getBoolean("fastdraw.drawlastsegment", true);
-        snapNodes = Main.pref.getBoolean("fastdraw.snapnodes", true);
-        fixedClick = Main.pref.getBoolean("fastdraw.fixedclick", false);
-        fixedSpacebar = Main.pref.getBoolean("fastdraw.fixedspacebar", false);
-        drawClosed = Main.pref.getBoolean("fastdraw.drawclosed", false);
-        simplifyMode = Main.pref.getInt("fastdraw.simplifymode", 0) % 3;
-        allowEditExistingWays = Main.pref.getBoolean("fastdraw.alloweditexisting", false);
+        maxDist = Config.getPref().getDouble("fastdraw.maxdist", 5);
+        epsilonMult = Config.getPref().getDouble("fastdraw.epsilonmult", 1.1);
+        //deltaLatLon = Config.getPref().getDouble("fastdraw.deltasearch", 0.01);
+        minPixelsBetweenPoints = Config.getPref().getDouble("fastdraw.mindelta", 20);
+        startingEps = Config.getPref().getDouble("fastdraw.startingEps", 5);
+        maxPointsPerKm = Config.getPref().getDouble("fastdraw.maxpkm", 150);
+        pkmBlockSize = Config.getPref().getInt("fastdraw.pkmblocksize", 10);
+        drawLastSegment = Config.getPref().getBoolean("fastdraw.drawlastsegment", true);
+        snapNodes = Config.getPref().getBoolean("fastdraw.snapnodes", true);
+        fixedClick = Config.getPref().getBoolean("fastdraw.fixedclick", false);
+        fixedSpacebar = Config.getPref().getBoolean("fastdraw.fixedspacebar", false);
+        drawClosed = Config.getPref().getBoolean("fastdraw.drawclosed", false);
+        simplifyMode = Config.getPref().getInt("fastdraw.simplifymode", 0) % 3;
+        allowEditExistingWays = Config.getPref().getBoolean("fastdraw.alloweditexisting", false);
 
-        autoTags = Main.pref.get("fastdraw.autotags");
+        autoTags = Config.getPref().get("fastdraw.autotags");
     }
 
     public void savePrefs() {
-        Main.pref.putDouble("fastdraw.maxdist", maxDist);
-        Main.pref.putDouble("fastdraw.epsilonmult", epsilonMult);
-        //Main.pref.putDouble("fastdraw.deltasearch", deltaLatLon);
-        Main.pref.putDouble("fastdraw.mindelta", minPixelsBetweenPoints);
-        Main.pref.putDouble("fastdraw.startingEps", startingEps);
-        Main.pref.putDouble("fastdraw.maxpkm", maxPointsPerKm);
-        Main.pref.putInt("fastdraw.pkmblocksize", pkmBlockSize);
-        Main.pref.putBoolean("fastdraw.drawlastsegment", drawLastSegment);
-        Main.pref.putBoolean("fastdraw.snapnodes", snapNodes);
-        Main.pref.putBoolean("fastdraw.fixedclick", fixedClick);
-        Main.pref.putBoolean("fastdraw.fixedspacebar", fixedSpacebar);
-        Main.pref.putBoolean("fastdraw.drawclosed", drawClosed);
-        Main.pref.putInt("fastdraw.simplifymode", simplifyMode);
-        Main.pref.put("fastdraw.autotags", autoTags);
-        Main.pref.putBoolean("fastdraw.alloweditexisting", allowEditExistingWays);
-        try {
-            Main.pref.save();
-        } catch (IOException e) {
-            Logging.error(tr("Can not save preferences"));
-        }
+        Config.getPref().putDouble("fastdraw.maxdist", maxDist);
+        Config.getPref().putDouble("fastdraw.epsilonmult", epsilonMult);
+        //Config.getPref().putDouble("fastdraw.deltasearch", deltaLatLon);
+        Config.getPref().putDouble("fastdraw.mindelta", minPixelsBetweenPoints);
+        Config.getPref().putDouble("fastdraw.startingEps", startingEps);
+        Config.getPref().putDouble("fastdraw.maxpkm", maxPointsPerKm);
+        Config.getPref().putInt("fastdraw.pkmblocksize", pkmBlockSize);
+        Config.getPref().putBoolean("fastdraw.drawlastsegment", drawLastSegment);
+        Config.getPref().putBoolean("fastdraw.snapnodes", snapNodes);
+        Config.getPref().putBoolean("fastdraw.fixedclick", fixedClick);
+        Config.getPref().putBoolean("fastdraw.fixedspacebar", fixedSpacebar);
+        Config.getPref().putBoolean("fastdraw.drawclosed", drawClosed);
+        Config.getPref().putInt("fastdraw.simplifymode", simplifyMode);
+        Config.getPref().put("fastdraw.autotags", autoTags);
+        Config.getPref().putBoolean("fastdraw.alloweditexisting", allowEditExistingWays);
     }
 }
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 34509)
+++ /applications/editors/josm/plugins/FastDraw/src/org/openstreetmap/josm/plugins/fastdraw/FastDrawConfigDialog.java	(revision 34510)
@@ -19,9 +19,10 @@
 import javax.swing.JPanel;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.ExtendedDialog;
+import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.datatransfer.ClipboardUtils;
 import org.openstreetmap.josm.gui.datatransfer.importers.TextTagPaster;
 import org.openstreetmap.josm.gui.widgets.HistoryComboBox;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageProvider;
@@ -49,5 +50,5 @@
 
     public FastDrawConfigDialog(FDSettings settings) {
-        super(Main.parent, tr("FastDraw configuration"), new String[] {tr("Ok"), tr("Cancel")});
+        super(MainApplication.getMainFrame(), tr("FastDraw configuration"), new String[] {tr("Ok"), tr("Cancel")});
         this.settings = settings;
 
@@ -66,5 +67,5 @@
         pasteButton.setToolTipText(tr("Try copying tags from properties table"));
 
-        ArrayList<String> history = new ArrayList<>(Main.pref.getList("fastdraw.tags-history"));
+        ArrayList<String> history = new ArrayList<>(Config.getPref().getList("fastdraw.tags-history"));
         while (history.remove("")) { };
         addTags.setPossibleItems(history);
@@ -131,8 +132,8 @@
                     addTags.addCurrentItemToHistory();
                 }
-                Main.pref.putList("fastdraw.tags-history", addTags.getHistory());
+                Config.getPref().putList("fastdraw.tags-history", addTags.getHistory());
                 settings.savePrefs();
             } catch (ParseException e) {
-                JOptionPane.showMessageDialog(Main.parent,
+                JOptionPane.showMessageDialog(MainApplication.getMainFrame(),
                         tr("Can not read settings"));
             }
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 34509)
+++ /applications/editors/josm/plugins/FastDraw/src/org/openstreetmap/josm/plugins/fastdraw/FastDrawingMode.java	(revision 34510)
@@ -20,5 +20,4 @@
 import javax.swing.JOptionPane;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.mapmode.MapMode;
 import org.openstreetmap.josm.command.AddCommand;
@@ -28,4 +27,5 @@
 import org.openstreetmap.josm.command.SequenceCommand;
 import org.openstreetmap.josm.data.Bounds;
+import org.openstreetmap.josm.data.UndoRedoHandler;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.DataSet;
@@ -464,5 +464,5 @@
                 if (line.getPoints().size() > 5) {
                     boolean answer = ConditionalOptionPaneUtil.showConfirmationDialog(
-                            "delete_drawn_line", Main.parent,
+                            "delete_drawn_line", MainApplication.getMainFrame(),
                             tr("Are you sure you do not want to save the line containing {0} points?",
                                     line.getPoints().size()), tr("Delete confirmation"),
@@ -476,5 +476,5 @@
 
         case KeyEvent.VK_I:
-            JOptionPane.showMessageDialog(Main.parent,
+            JOptionPane.showMessageDialog(MainApplication.getMainFrame(),
                     tr("{0} m - length of the line\n{1} nodes\n{2} points per km (maximum)\n{3} points per km (average)",
                             line.getLength(), line.getPoints().size(), line.getNodesPerKm(settings.pkmBlockSize),
@@ -565,5 +565,5 @@
             }
             if (nd.getCoor().isOutSideWorld()) {
-                JOptionPane.showMessageDialog(Main.parent,
+                JOptionPane.showMessageDialog(MainApplication.getMainFrame(),
                         tr("Cannot place node outside of the world."));
                 return;
@@ -599,5 +599,5 @@
         } else cmds.add(new AddCommand(ds, w));
         Command c = new SequenceCommand(tr("Draw the way by mouse"), cmds);
-        MainApplication.undoRedo.add(c);
+        UndoRedoHandler.getInstance().add(c);
         lineWasSaved = true;
         newDrawing(); // stop drawing
