Index: applications/editors/josm/plugins/splinex/build.xml
===================================================================
--- applications/editors/josm/plugins/splinex/build.xml	(revision 34556)
+++ applications/editors/josm/plugins/splinex/build.xml	(revision 34557)
@@ -5,5 +5,5 @@
     <property name="commit.message" value="Commit message"/>
     <!-- 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/splinex/src/org/openstreetmap/josm/plugins/Splinex/DrawSplineAction.java
===================================================================
--- applications/editors/josm/plugins/splinex/src/org/openstreetmap/josm/plugins/Splinex/DrawSplineAction.java	(revision 34556)
+++ applications/editors/josm/plugins/splinex/src/org/openstreetmap/josm/plugins/Splinex/DrawSplineAction.java	(revision 34557)
@@ -19,9 +19,9 @@
 import javax.swing.AbstractAction;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.mapmode.MapMode;
 import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.command.MoveCommand;
 import org.openstreetmap.josm.data.Bounds;
+import org.openstreetmap.josm.data.UndoRedoHandler;
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.osm.Node;
@@ -29,4 +29,5 @@
 import org.openstreetmap.josm.data.osm.visitor.paint.MapPaintSettings;
 import org.openstreetmap.josm.data.preferences.NamedColorProperty;
+import org.openstreetmap.josm.data.projection.ProjectionRegistry;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.MapFrame;
@@ -45,4 +46,5 @@
 import org.openstreetmap.josm.plugins.Splinex.Spline.PointHandle;
 import org.openstreetmap.josm.plugins.Splinex.Spline.SplinePoint;
+import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Logging;
@@ -109,8 +111,8 @@
     protected void readPreferences() {
         rubberLineColor = new NamedColorProperty(marktr("helper line"), Color.RED).get();
-        initialMoveDelay = Main.pref.getInt("edit.initial-move-", 200);
-        initialMoveThreshold = Main.pref.getInt("edit.initial-move-threshold", 5);
+        initialMoveDelay = Config.getPref().getInt("edit.initial-move-", 200);
+        initialMoveThreshold = Config.getPref().getInt("edit.initial-move-threshold", 5);
         initialMoveThreshold *= initialMoveThreshold;
-        drawHelperLine = Main.pref.getBoolean("draw.helper-line", true);
+        drawHelperLine = Config.getPref().getBoolean("draw.helper-line", true);
     }
 
@@ -165,5 +167,5 @@
             if (!spl.isClosed() && spl.nodeCount() > 1 && ph != null && ph.point == SplinePoint.ENDPOINT
                     && ((ph.idx == 0 && direction == 1) || (ph.idx == spl.nodeCount() - 1 && direction == -1))) {
-                MainApplication.undoRedo.add(spl.new CloseSplineCommand());
+                UndoRedoHandler.getInstance().add(spl.new CloseSplineCommand());
                 return;
             }
@@ -185,6 +187,6 @@
                         + ph.sn.cnext.north()) < EPSILON);
             }
-            if (ph.point == SplinePoint.ENDPOINT && !MainApplication.undoRedo.commands.isEmpty()) {
-                Command cmd = MainApplication.undoRedo.commands.getLast();
+            if (ph.point == SplinePoint.ENDPOINT && !UndoRedoHandler.getInstance().commands.isEmpty()) {
+                Command cmd = UndoRedoHandler.getInstance().commands.getLast();
                 if (cmd instanceof MoveCommand) {
                     mc = (MoveCommand) cmd;
@@ -196,6 +198,6 @@
                 }
             }
-            if (ph.point != SplinePoint.ENDPOINT && !MainApplication.undoRedo.commands.isEmpty()) {
-                Command cmd = MainApplication.undoRedo.commands.getLast();
+            if (ph.point != SplinePoint.ENDPOINT && !UndoRedoHandler.getInstance().commands.isEmpty()) {
+                Command cmd = UndoRedoHandler.getInstance().commands.getLast();
                 if (!(cmd instanceof Spline.EditSplineCommand && ((Spline.EditSplineCommand) cmd).sn == ph.sn))
                     dragControl = true;
@@ -224,5 +226,5 @@
         }
         int idx = direction == -1 ? 0 : spl.nodeCount();
-        MainApplication.undoRedo.add(spl.new AddSplineNodeCommand(new Spline.SNode(n), existing, idx));
+        UndoRedoHandler.getInstance().add(spl.new AddSplineNodeCommand(new Spline.SNode(n), existing, idx));
         ph = spl.new PointHandle(idx, direction == -1 ? SplinePoint.CONTROL_PREV : SplinePoint.CONTROL_NEXT);
         lockCounterpart = true;
@@ -257,10 +259,10 @@
             return;
         EastNorth en = MainApplication.getMap().mapView.getEastNorth(e.getX(), e.getY());
-        if (Main.getProjection().eastNorth2latlon(en).isOutSideWorld())
+        if (ProjectionRegistry.getProjection().eastNorth2latlon(en).isOutSideWorld())
             return;
         if (dragSpline) {
             if (mc == null) {
                 mc = new MoveCommand(spl.getNodes(), MainApplication.getMap().mapView.getEastNorth(clickPos.x, clickPos.y), en);
-                MainApplication.undoRedo.add(mc);
+                UndoRedoHandler.getInstance().add(mc);
                 clickPos = null;
             } else
@@ -274,10 +276,10 @@
             if (mc == null) {
                 mc = new MoveCommand(ph.sn.node, ph.sn.node.getEastNorth(), en);
-                MainApplication.undoRedo.add(mc);
+                UndoRedoHandler.getInstance().add(mc);
             } else
                 mc.applyVectorTo(en);
         } else {
             if (dragControl) {
-                MainApplication.undoRedo.add(new Spline.EditSplineCommand(ph.sn));
+                UndoRedoHandler.getInstance().add(new Spline.EditSplineCommand(ph.sn));
                 dragControl = false;
             }
@@ -400,5 +402,5 @@
         @Override
         public void actionPerformed(ActionEvent e) {
-            MainApplication.undoRedo.undo();
+            UndoRedoHandler.getInstance().undo();
         }
     }
@@ -448,5 +450,5 @@
             if (spl.nodeCount() == 3 && spl.isClosed() && ph.idx == 1)
                 return; // Don't allow to delete node when it results with two-node closed spline
-            MainApplication.undoRedo.add(spl.new DeleteSplineNodeCommand(ph.idx));
+            UndoRedoHandler.getInstance().add(spl.new DeleteSplineNodeCommand(ph.idx));
             e.consume();
         }
Index: applications/editors/josm/plugins/splinex/src/org/openstreetmap/josm/plugins/Splinex/Spline.java
===================================================================
--- applications/editors/josm/plugins/splinex/src/org/openstreetmap/josm/plugins/Splinex/Spline.java	(revision 34556)
+++ applications/editors/josm/plugins/splinex/src/org/openstreetmap/josm/plugins/Splinex/Spline.java	(revision 34557)
@@ -23,8 +23,8 @@
 import javax.swing.JOptionPane;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.command.AddCommand;
 import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.command.SequenceCommand;
+import org.openstreetmap.josm.data.UndoRedoHandler;
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.osm.DataSet;
@@ -34,4 +34,5 @@
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.data.preferences.IntegerProperty;
+import org.openstreetmap.josm.data.projection.ProjectionRegistry;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.MapView;
@@ -261,8 +262,8 @@
             if (!a.equalsEpsilon(ca, EPSILON) || !b.equalsEpsilon(cb, EPSILON))
                 for (int i = 1; i < detail; i++) {
-                    Node n = new Node(Main.getProjection().eastNorth2latlon(
+                    Node n = new Node(ProjectionRegistry.getProjection().eastNorth2latlon(
                             cubicBezier(a, ca, cb, b, (double) i / detail)));
                     if (n.getCoor().isOutSideWorld()) {
-                        JOptionPane.showMessageDialog(Main.parent, tr("Spline goes outside of the world."));
+                        JOptionPane.showMessageDialog(MainApplication.getMainFrame(), tr("Spline goes outside of the world."));
                         return;
                     }
@@ -276,5 +277,5 @@
         if (!cmds.isEmpty())
             cmds.add(new AddCommand(ds, w));
-        MainApplication.undoRedo.add(new FinishSplineCommand(cmds));
+        UndoRedoHandler.getInstance().add(new FinishSplineCommand(cmds));
     }
 
Index: applications/editors/josm/plugins/splinex/src/org/openstreetmap/josm/plugins/Splinex/SplineHitTest.java
===================================================================
--- applications/editors/josm/plugins/splinex/src/org/openstreetmap/josm/plugins/Splinex/SplineHitTest.java	(revision 34556)
+++ applications/editors/josm/plugins/splinex/src/org/openstreetmap/josm/plugins/Splinex/SplineHitTest.java	(revision 34557)
@@ -2,5 +2,4 @@
 package org.openstreetmap.josm.plugins.Splinex;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.tools.Logging;
 
