Index: /trunk/src/org/openstreetmap/josm/Main.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/Main.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/Main.java	(revision 12641)
@@ -138,6 +138,8 @@
     /**
      * The commands undo/redo handler.
-     */
-    public final UndoRedoHandler undoRedo = new UndoRedoHandler();
+     * @deprecated Use {@link MainApplication#undoRedo} instead
+     */
+    @Deprecated
+    public final UndoRedoHandler undoRedo = MainApplication.undoRedo;
 
     /**
@@ -446,5 +448,5 @@
     /**
      * Platform specific code goes in here.
-     * Plugins may replace it, however, some hooks will be called before any plugins have been loeaded.
+     * Plugins may replace it, however, some hooks will be called before any plugins have been loaded.
      * So if you need to hook into those early ones, split your class and send the one with the early hooks
      * to the JOSM team for inclusion.
Index: /trunk/src/org/openstreetmap/josm/actions/AddNodeAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/AddNodeAction.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/actions/AddNodeAction.java	(revision 12641)
@@ -66,5 +66,5 @@
 
         // add the node
-        Main.main.undoRedo.add(new AddCommand(nnew));
+        MainApplication.undoRedo.add(new AddCommand(nnew));
         getLayerManager().getEditDataSet().setSelected(nnew);
         MapView mapView = MainApplication.getMap().mapView;
Index: /trunk/src/org/openstreetmap/josm/actions/AlignInCircleAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/AlignInCircleAction.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/actions/AlignInCircleAction.java	(revision 12641)
@@ -17,5 +17,4 @@
 import javax.swing.JOptionPane;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.command.MoveCommand;
@@ -26,4 +25,5 @@
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.Notification;
 import org.openstreetmap.josm.tools.Geometry;
@@ -283,5 +283,5 @@
         }
 
-        Main.main.undoRedo.add(new SequenceCommand(tr("Align Nodes in Circle"), cmds));
+        MainApplication.undoRedo.add(new SequenceCommand(tr("Align Nodes in Circle"), cmds));
     }
 
Index: /trunk/src/org/openstreetmap/josm/actions/AlignInLineAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/AlignInLineAction.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/actions/AlignInLineAction.java	(revision 12641)
@@ -17,5 +17,4 @@
 import javax.swing.JOptionPane;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.command.MoveCommand;
@@ -26,4 +25,5 @@
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.Notification;
 import org.openstreetmap.josm.tools.Logging;
@@ -172,5 +172,5 @@
 
         try {
-            Main.main.undoRedo.add(buildCommand());
+            MainApplication.undoRedo.add(buildCommand());
         } catch (InvalidSelection except) {
             Logging.debug(except);
Index: /trunk/src/org/openstreetmap/josm/actions/CombineWayAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/CombineWayAction.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/actions/CombineWayAction.java	(revision 12641)
@@ -32,4 +32,5 @@
 import org.openstreetmap.josm.data.preferences.BooleanProperty;
 import org.openstreetmap.josm.gui.ExtendedDialog;
+import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.Notification;
 import org.openstreetmap.josm.gui.conflict.tags.CombinePrimitiveResolverDialog;
@@ -173,5 +174,5 @@
                 if (!reverseWayTagCommands.isEmpty()) {
                     // commands need to be executed for CombinePrimitiveResolverDialog
-                    Main.main.undoRedo.add(new SequenceCommand(tr("Reverse Ways"), reverseWayTagCommands));
+                    MainApplication.undoRedo.add(new SequenceCommand(tr("Reverse Ways"), reverseWayTagCommands));
                 }
                 wayTags = TagCollection.unionOfAllPrimitives(reversedTagWays);
@@ -192,5 +193,5 @@
             if (!reverseWayTagCommands.isEmpty()) {
                 // undo reverseWayTagCorrector and merge into SequenceCommand below
-                Main.main.undoRedo.undo();
+                MainApplication.undoRedo.undo();
             }
         }
@@ -236,5 +237,5 @@
             return;
         final Way selectedWay = combineResult.a;
-        Main.main.undoRedo.add(combineResult.b);
+        MainApplication.undoRedo.add(combineResult.b);
         if (selectedWay != null) {
             GuiHelper.runInEDT(() -> ds.setSelected(selectedWay));
Index: /trunk/src/org/openstreetmap/josm/actions/CreateCircleAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/CreateCircleAction.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/actions/CreateCircleAction.java	(revision 12641)
@@ -28,4 +28,5 @@
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.Notification;
 import org.openstreetmap.josm.tools.Geometry;
@@ -240,5 +241,5 @@
         }
 
-        Main.main.undoRedo.add(new SequenceCommand(tr("Create Circle"), cmds));
+        MainApplication.undoRedo.add(new SequenceCommand(tr("Create Circle"), cmds));
     }
 
Index: /trunk/src/org/openstreetmap/josm/actions/CreateMultipolygonAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/CreateMultipolygonAction.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/actions/CreateMultipolygonAction.java	(revision 12641)
@@ -107,5 +107,5 @@
             // to avoid EDT violations
             SwingUtilities.invokeLater(() -> {
-                    Main.main.undoRedo.add(command);
+                    MainApplication.undoRedo.add(command);
 
                     // Use 'SwingUtilities.invokeLater' to make sure the relationListDialog
Index: /trunk/src/org/openstreetmap/josm/actions/DistributeAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/DistributeAction.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/actions/DistributeAction.java	(revision 12641)
@@ -16,5 +16,4 @@
 import javax.swing.JOptionPane;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.command.MoveCommand;
@@ -23,4 +22,5 @@
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.Notification;
 import org.openstreetmap.josm.tools.Logging;
@@ -98,5 +98,5 @@
 
         // Do it!
-        Main.main.undoRedo.add(new SequenceCommand(tr("Distribute Nodes"), cmds));
+        MainApplication.undoRedo.add(new SequenceCommand(tr("Distribute Nodes"), cmds));
     }
 
Index: /trunk/src/org/openstreetmap/josm/actions/FollowLineAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/FollowLineAction.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/actions/FollowLineAction.java	(revision 12641)
@@ -11,5 +11,4 @@
 import java.util.Set;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.mapmode.DrawAction;
 import org.openstreetmap.josm.command.ChangeCommand;
@@ -115,5 +114,5 @@
                 newFollower.addNode(newPoint);
             }
-            Main.main.undoRedo.add(new SequenceCommand(tr("Follow line"),
+            MainApplication.undoRedo.add(new SequenceCommand(tr("Follow line"),
                     new ChangeCommand(follower, newFollower),
                     new SelectCommand(newFollower.isClosed() // see #10028 - unselect last node when closing a way
Index: /trunk/src/org/openstreetmap/josm/actions/JoinAreasAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/JoinAreasAction.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/actions/JoinAreasAction.java	(revision 12641)
@@ -41,4 +41,5 @@
 import org.openstreetmap.josm.data.osm.TagCollection;
 import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.Notification;
 import org.openstreetmap.josm.gui.conflict.tags.CombinePrimitiveResolverDialog;
@@ -569,6 +570,6 @@
             //FIXME: this is dirty hack
             makeCommitsOneAction(tr("Reverting changes"));
-            Main.main.undoRedo.undo();
-            Main.main.undoRedo.redoCommands.clear();
+            MainApplication.undoRedo.undo();
+            MainApplication.undoRedo.redoCommands.clear();
         }
     }
@@ -826,5 +827,5 @@
     private static void commitCommand(Command c) {
         if (Main.main != null) {
-            Main.main.undoRedo.add(c);
+            MainApplication.undoRedo.add(c);
         } else {
             c.executeCommand();
@@ -1592,5 +1593,5 @@
         cmds.clear();
         if (Main.main != null) {
-            UndoRedoHandler ur = Main.main.undoRedo;
+            UndoRedoHandler ur = MainApplication.undoRedo;
             int i = Math.max(ur.commands.size() - cmdsCount, 0);
             for (; i < ur.commands.size(); i++) {
Index: /trunk/src/org/openstreetmap/josm/actions/JoinNodeWayAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/JoinNodeWayAction.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/actions/JoinNodeWayAction.java	(revision 12641)
@@ -19,5 +19,4 @@
 import java.util.TreeSet;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.command.ChangeCommand;
 import org.openstreetmap.josm.command.Command;
@@ -160,5 +159,5 @@
 
         if (cmds.isEmpty()) return;
-        Main.main.undoRedo.add(new SequenceCommand(getValue(NAME).toString(), cmds));
+        MainApplication.undoRedo.add(new SequenceCommand(getValue(NAME).toString(), cmds));
     }
 
Index: /trunk/src/org/openstreetmap/josm/actions/MergeNodesAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/MergeNodesAction.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/actions/MergeNodesAction.java	(revision 12641)
@@ -95,5 +95,5 @@
             Command cmd = mergeNodes(getLayerManager().getEditLayer(), selectedNodes, targetNode, targetLocationNode);
             if (cmd != null) {
-                Main.main.undoRedo.add(cmd);
+                MainApplication.undoRedo.add(cmd);
                 getLayerManager().getEditLayer().data.setSelected(targetNode);
             }
@@ -274,5 +274,5 @@
             Command cmd = mergeNodes(layer, nodes, target, targetLocationNode);
             if (cmd != null) {
-                Main.main.undoRedo.add(cmd);
+                MainApplication.undoRedo.add(cmd);
                 layer.data.setSelected(target);
             }
Index: /trunk/src/org/openstreetmap/josm/actions/MirrorAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/MirrorAction.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/actions/MirrorAction.java	(revision 12641)
@@ -14,5 +14,4 @@
 import javax.swing.JOptionPane;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.command.MoveCommand;
@@ -21,4 +20,5 @@
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.Notification;
 import org.openstreetmap.josm.tools.Shortcut;
@@ -80,5 +80,5 @@
         }
 
-        Main.main.undoRedo.add(new SequenceCommand(tr("Mirror"), cmds));
+        MainApplication.undoRedo.add(new SequenceCommand(tr("Mirror"), cmds));
     }
 
Index: /trunk/src/org/openstreetmap/josm/actions/MoveAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/MoveAction.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/actions/MoveAction.java	(revision 12641)
@@ -136,5 +136,5 @@
         Collection<Node> affectedNodes = AllNodesVisitor.getAllNodes(selection);
 
-        Command c = Main.main.undoRedo.getLastCommand();
+        Command c = MainApplication.undoRedo.getLastCommand();
 
         ds.beginUpdate();
@@ -145,5 +145,5 @@
             } else {
                 c = new MoveCommand(selection, distx, disty);
-                Main.main.undoRedo.add(c);
+                MainApplication.undoRedo.add(c);
             }
         } finally {
Index: /trunk/src/org/openstreetmap/josm/actions/MoveNodeAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/MoveNodeAction.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/actions/MoveNodeAction.java	(revision 12641)
@@ -50,5 +50,5 @@
 
         // move the node
-        Main.main.undoRedo.add(new MoveCommand(n, coordinates));
+        MainApplication.undoRedo.add(new MoveCommand(n, coordinates));
         MainApplication.getMap().mapView.repaint();
     }
Index: /trunk/src/org/openstreetmap/josm/actions/OrthogonalizeAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/OrthogonalizeAction.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/actions/OrthogonalizeAction.java	(revision 12641)
@@ -30,4 +30,5 @@
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.gui.ConditionalOptionPaneUtil;
+import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.Notification;
 import org.openstreetmap.josm.tools.JosmRuntimeException;
@@ -116,5 +117,5 @@
                 }
                 if (!commands.isEmpty()) {
-                    Main.main.undoRedo.add(new SequenceCommand(tr("Orthogonalize / Undo"), commands));
+                    MainApplication.undoRedo.add(new SequenceCommand(tr("Orthogonalize / Undo"), commands));
                 } else {
                     throw new InvalidUserInputException("Commands are empty");
@@ -165,5 +166,5 @@
         try {
             final SequenceCommand command = orthogonalize(sel);
-            Main.main.undoRedo.add(new SequenceCommand(tr("Orthogonalize"), command));
+            MainApplication.undoRedo.add(new SequenceCommand(tr("Orthogonalize"), command));
         } catch (InvalidUserInputException ex) {
             Logging.debug(ex);
Index: /trunk/src/org/openstreetmap/josm/actions/PurgeAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/PurgeAction.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/actions/PurgeAction.java	(revision 12641)
@@ -38,4 +38,5 @@
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.gui.ConditionalOptionPaneUtil;
+import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.OsmPrimitivRenderer;
 import org.openstreetmap.josm.gui.help.HelpUtil;
@@ -125,7 +126,7 @@
         }
 
-        Main.main.undoRedo.add(cmd);
+        MainApplication.undoRedo.add(cmd);
         if (clearUndoRedo) {
-            Main.main.undoRedo.clean();
+            MainApplication.undoRedo.clean();
             getLayerManager().getEditDataSet().clearSelectionHistory();
         }
Index: /trunk/src/org/openstreetmap/josm/actions/RedoAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/RedoAction.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/actions/RedoAction.java	(revision 12641)
@@ -37,15 +37,15 @@
             return;
         map.repaint();
-        Main.main.undoRedo.redo();
+        MainApplication.undoRedo.redo();
     }
 
     @Override
     protected void updateEnabledState() {
-        setEnabled(Main.main != null && !Main.main.undoRedo.redoCommands.isEmpty());
+        setEnabled(Main.main != null && !MainApplication.undoRedo.redoCommands.isEmpty());
     }
 
     @Override
     public void commandChanged(int queueSize, int redoSize) {
-        if (Main.main.undoRedo.redoCommands.isEmpty()) {
+        if (MainApplication.undoRedo.redoCommands.isEmpty()) {
             putValue(NAME, tr("Redo"));
             setTooltip(tr("Redo the last undone action."));
@@ -53,5 +53,5 @@
             putValue(NAME, tr("Redo ..."));
             setTooltip(tr("Redo {0}",
-                    Main.main.undoRedo.redoCommands.getFirst().getDescriptionText()));
+                    MainApplication.undoRedo.redoCommands.getFirst().getDescriptionText()));
         }
     }
Index: /trunk/src/org/openstreetmap/josm/actions/ReverseWayAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/ReverseWayAction.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/actions/ReverseWayAction.java	(revision 12641)
@@ -26,4 +26,5 @@
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.Notification;
 import org.openstreetmap.josm.tools.Logging;
@@ -137,5 +138,5 @@
             c.addAll(revResult.getCommands());
         }
-        Main.main.undoRedo.add(new SequenceCommand(tr("Reverse ways"), c));
+        MainApplication.undoRedo.add(new SequenceCommand(tr("Reverse ways"), c));
     }
 
Index: /trunk/src/org/openstreetmap/josm/actions/SimplifyWayAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/SimplifyWayAction.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/actions/SimplifyWayAction.java	(revision 12641)
@@ -32,4 +32,5 @@
 import org.openstreetmap.josm.gui.HelpAwareOptionPane;
 import org.openstreetmap.josm.gui.HelpAwareOptionPane.ButtonSpec;
+import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.Notification;
 import org.openstreetmap.josm.tools.ImageProvider;
@@ -123,5 +124,5 @@
                     allCommands
                     );
-            Main.main.undoRedo.add(rootCommand);
+            MainApplication.undoRedo.add(rootCommand);
         } finally {
             ds.endUpdate();
Index: /trunk/src/org/openstreetmap/josm/actions/SplitWayAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/SplitWayAction.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/actions/SplitWayAction.java	(revision 12641)
@@ -215,5 +215,5 @@
             if (wayToKeep != null) {
                 final SplitWayResult result = doSplitWay(getLayerManager().getEditLayer(), selectedWay, wayToKeep, newWays, sel);
-                Main.main.undoRedo.add(result.getCommand());
+                MainApplication.undoRedo.add(result.getCommand());
                 if (!result.getNewSelection().isEmpty()) {
                     getLayerManager().getEditDataSet().setSelected(result.getNewSelection());
@@ -296,5 +296,5 @@
                 SplitWayResult result = doSplitWay(MainApplication.getLayerManager().getEditLayer(),
                         selectedWay, list.getSelectedValue(), newWays, selection);
-                Main.main.undoRedo.add(result.getCommand());
+                MainApplication.undoRedo.add(result.getCommand());
                 if (!result.getNewSelection().isEmpty()) {
                     MainApplication.getLayerManager().getEditDataSet().setSelected(result.getNewSelection());
Index: /trunk/src/org/openstreetmap/josm/actions/UnGlueAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/UnGlueAction.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/actions/UnGlueAction.java	(revision 12641)
@@ -314,5 +314,5 @@
         }
 
-        Main.main.undoRedo.add(new SequenceCommand(tr("Unglued Node"), cmds));
+        MainApplication.undoRedo.add(new SequenceCommand(tr("Unglued Node"), cmds));
         getLayerManager().getEditDataSet().setSelected(n);
         mv.repaint();
@@ -553,5 +553,5 @@
      */
     private void execCommands(List<Command> cmds, List<Node> newNodes) {
-        Main.main.undoRedo.add(new SequenceCommand(/* for correct i18n of plural forms - see #9110 */
+        MainApplication.undoRedo.add(new SequenceCommand(/* for correct i18n of plural forms - see #9110 */
                 trn("Dupe into {0} node", "Dupe into {0} nodes", newNodes.size() + 1L, newNodes.size() + 1L), cmds));
         // select one of the new nodes
@@ -641,5 +641,5 @@
         notifyWayPartOfRelation(Collections.singleton(selectedWay));
 
-        Main.main.undoRedo.add(new SequenceCommand(
+        MainApplication.undoRedo.add(new SequenceCommand(
                 trn("Dupe {0} node into {1} nodes", "Dupe {0} nodes into {1} nodes",
                         selectedNodes.size(), selectedNodes.size(), selectedNodes.size()+allNewNodes.size()), cmds));
Index: /trunk/src/org/openstreetmap/josm/actions/UnJoinNodeWayAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/UnJoinNodeWayAction.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/actions/UnJoinNodeWayAction.java	(revision 12641)
@@ -15,9 +15,9 @@
 import javax.swing.JOptionPane;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.command.RemoveNodesCommand;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.Notification;
 import org.openstreetmap.josm.tools.Shortcut;
@@ -89,5 +89,5 @@
 
         // I'm sure there's a better way to handle this
-        Main.main.undoRedo.add(new RemoveNodesCommand(selectedWay, selectedNodes));
+        MainApplication.undoRedo.add(new RemoveNodesCommand(selectedWay, selectedNodes));
     }
 
Index: /trunk/src/org/openstreetmap/josm/actions/UndoAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/UndoAction.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/actions/UndoAction.java	(revision 12641)
@@ -37,15 +37,15 @@
             return;
         map.repaint();
-        Main.main.undoRedo.undo();
+        MainApplication.undoRedo.undo();
     }
 
     @Override
     protected void updateEnabledState() {
-        setEnabled(Main.main != null && !Main.main.undoRedo.commands.isEmpty());
+        setEnabled(Main.main != null && !MainApplication.undoRedo.commands.isEmpty());
     }
 
     @Override
     public void commandChanged(int queueSize, int redoSize) {
-        if (Main.main.undoRedo.commands.isEmpty()) {
+        if (MainApplication.undoRedo.commands.isEmpty()) {
             putValue(NAME, tr("Undo"));
             setTooltip(tr("Undo the last action."));
@@ -53,5 +53,5 @@
             putValue(NAME, tr("Undo ..."));
             setTooltip(tr("Undo {0}",
-                    Main.main.undoRedo.commands.getLast().getDescriptionText()));
+                    MainApplication.undoRedo.commands.getLast().getDescriptionText()));
         }
     }
Index: /trunk/src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java	(revision 12641)
@@ -157,5 +157,5 @@
         // if c is null, an error occurred or the user aborted. Don't do anything in that case.
         if (c != null) {
-            Main.main.undoRedo.add(c);
+            MainApplication.undoRedo.add(c);
             //FIXME: This should not be required, DeleteCommand should update the selection, otherwise undo/redo won't work.
             lm.getEditDataSet().setSelected();
@@ -304,5 +304,5 @@
         Command c = buildDeleteCommands(e, e.getModifiersEx(), false);
         if (c != null) {
-            Main.main.undoRedo.add(c);
+            MainApplication.undoRedo.add(c);
         }
 
@@ -355,5 +355,5 @@
         if (cmd != null) {
             // cmd can be null if the user cancels dialogs DialogCommand displays
-            Main.main.undoRedo.add(cmd);
+            MainApplication.undoRedo.add(cmd);
             for (Relation relation : toDelete) {
                 if (layer.data.getSelectedRelations().contains(relation)) {
Index: /trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(revision 12641)
@@ -617,5 +617,5 @@
         Command c = new SequenceCommand(title, cmds);
 
-        Main.main.undoRedo.add(c);
+        MainApplication.undoRedo.add(c);
         if (!wayIsFinished) {
             lastUsedNode = n;
@@ -1334,6 +1334,6 @@
         @Override
         public void actionPerformed(ActionEvent e) {
-            Main.main.undoRedo.undo();
-            Command lastCmd = Main.main.undoRedo.getLastCommand();
+            MainApplication.undoRedo.undo();
+            Command lastCmd = MainApplication.undoRedo.getLastCommand();
             if (lastCmd == null) return;
             Node n = null;
Index: /trunk/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java	(revision 12641)
@@ -496,5 +496,5 @@
                         moveCommand2 = new MoveCommand(movingNodeList.get(1), movement2.getX(), movement2.getY());
                         Command c = new SequenceCommand(tr("Extrude Way"), moveCommand, moveCommand2);
-                        Main.main.undoRedo.add(c);
+                        MainApplication.undoRedo.add(c);
                     } else {
                         // reuse existing move commands
@@ -511,5 +511,5 @@
                         //make a new move command
                         moveCommand = new MoveCommand(new ArrayList<OsmPrimitive>(movingNodeList), bestMovement);
-                        Main.main.undoRedo.add(moveCommand);
+                        MainApplication.undoRedo.add(moveCommand);
                     } else {
                         //reuse existing move command
@@ -594,5 +594,5 @@
             SequenceCommand cmds = new SequenceCommand(tr("Add a new node to an existing way"),
                     new AddCommand(n), new ChangeCommand(ws.way, wnew));
-            Main.main.undoRedo.add(cmds);
+            MainApplication.undoRedo.add(cmds);
         }
     }
@@ -624,5 +624,5 @@
         cmds.add(new AddCommand(wnew));
         Command c = new SequenceCommand(tr("Extrude Way"), cmds);
-        Main.main.undoRedo.add(c);
+        MainApplication.undoRedo.add(c);
         getLayerManager().getEditDataSet().setSelected(wnew);
     }
@@ -712,5 +712,5 @@
         }
         Command c = new SequenceCommand(tr("Extrude Way"), cmds);
-        Main.main.undoRedo.add(c);
+        MainApplication.undoRedo.add(c);
         joinNodesIfCollapsed(changedNodes);
     }
@@ -724,8 +724,8 @@
         Command mergeCmd = MergeNodesAction.mergeNodes(MainApplication.getLayerManager().getEditLayer(), changedNodes, targetNode, locNode);
         if (mergeCmd != null) {
-            Main.main.undoRedo.add(mergeCmd);
+            MainApplication.undoRedo.add(mergeCmd);
         } else {
             // undo extruding command itself
-            Main.main.undoRedo.undo();
+            MainApplication.undoRedo.undo();
         }
     }
Index: /trunk/src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyAction.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyAction.java	(revision 12641)
@@ -473,5 +473,5 @@
                         virtualSegments.size(), virtualSegments.size());
 
-                Main.main.undoRedo.add(new SequenceCommand(text, virtualCmds));
+                MainApplication.undoRedo.add(new SequenceCommand(text, virtualCmds));
 
             } else if (alt && !ctrl && candidateNode != null) {
@@ -490,8 +490,8 @@
                         final Command deleteCmd = DeleteCommand.delete(getLayerManager().getEditLayer(), Collections.singleton(targetWay), true);
                         if (deleteCmd != null) {
-                            Main.main.undoRedo.add(deleteCmd);
+                            MainApplication.undoRedo.add(deleteCmd);
                         }
                     } else {
-                        Main.main.undoRedo.add(new ChangeCommand(targetWay, newWay));
+                        MainApplication.undoRedo.add(new ChangeCommand(targetWay, newWay));
                     }
                 } else if (candidateNode.isTagged()) {
@@ -502,5 +502,5 @@
                     final Command deleteCmd = DeleteCommand.delete(getLayerManager().getEditLayer(), Collections.singleton(candidateNode), true);
                     if (deleteCmd != null) {
-                        Main.main.undoRedo.add(deleteCmd);
+                        MainApplication.undoRedo.add(deleteCmd);
                     }
                 }
@@ -512,5 +512,5 @@
                 EastNorth cursorEN = mv.getEastNorth(mousePos.x, mousePos.y);
 
-                Main.main.undoRedo.add(new MoveCommand(candidateNode, cursorEN.east() - nodeEN.east(), cursorEN.north() - nodeEN.north()));
+                MainApplication.undoRedo.add(new MoveCommand(candidateNode, cursorEN.east() - nodeEN.east(), cursorEN.north() - nodeEN.north()));
             }
         }
Index: /trunk/src/org/openstreetmap/josm/actions/mapmode/ParallelWays.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/mapmode/ParallelWays.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/actions/mapmode/ParallelWays.java	(revision 12641)
@@ -11,5 +11,4 @@
 import java.util.Set;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.command.AddCommand;
 import org.openstreetmap.josm.command.Command;
@@ -19,4 +18,5 @@
 import org.openstreetmap.josm.data.osm.NodeGraph;
 import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.tools.Geometry;
 
@@ -182,5 +182,5 @@
      */
     public void commit() {
-        Main.main.undoRedo.add(new SequenceCommand("Make parallel way(s)", makeAddWayAndNodesCommandList()));
+        MainApplication.undoRedo.add(new SequenceCommand("Make parallel way(s)", makeAddWayAndNodesCommandList()));
     }
 
Index: /trunk/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java	(revision 12641)
@@ -711,5 +711,5 @@
                 } else {
                     c = new MoveCommand(selection, startEN, currentEN);
-                    Main.main.undoRedo.add(c);
+                    MainApplication.undoRedo.add(c);
                 }
                 for (Node n : affectedNodes) {
@@ -744,5 +744,5 @@
                         ((RotateCommand) c).handleEvent(currentEN);
                     } else {
-                        Main.main.undoRedo.add(new RotateCommand(selection, currentEN));
+                        MainApplication.undoRedo.add(new RotateCommand(selection, currentEN));
                     }
                 } else if (mode == Mode.SCALE) {
@@ -750,5 +750,5 @@
                         ((ScaleCommand) c).handleEvent(currentEN);
                     } else {
-                        Main.main.undoRedo.add(new ScaleCommand(selection, currentEN));
+                        MainApplication.undoRedo.add(new ScaleCommand(selection, currentEN));
                     }
                 }
@@ -799,5 +799,5 @@
      */
     private static Command getLastCommandInDataset(DataSet ds) {
-        Command lastCommand = Main.main.undoRedo.getLastCommand();
+        Command lastCommand = MainApplication.undoRedo.getLastCommand();
         if (lastCommand instanceof SequenceCommand) {
             lastCommand = ((SequenceCommand) lastCommand).getLastCommand();
@@ -825,5 +825,5 @@
             ed.showDialog();
             if (ed.getValue() != 1) {
-                Main.main.undoRedo.undo();
+                MainApplication.undoRedo.undo();
             }
         }
@@ -848,5 +848,5 @@
 
             if (ed.getValue() != 1) {
-                Main.main.undoRedo.undo();
+                MainApplication.undoRedo.undo();
             }
         } else {
@@ -1247,5 +1247,5 @@
                     "Add and move a virtual new node to {0} ways", virtualWays.size(),
                     virtualWays.size());
-            Main.main.undoRedo.add(new SequenceCommand(text, virtualCmds));
+            MainApplication.undoRedo.add(new SequenceCommand(text, virtualCmds));
             getLayerManager().getEditDataSet().setSelected(Collections.singleton((OsmPrimitive) virtualNode));
             clear();
Index: /trunk/src/org/openstreetmap/josm/actions/relation/AddSelectionToRelations.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/relation/AddSelectionToRelations.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/actions/relation/AddSelectionToRelations.java	(revision 12641)
@@ -11,5 +11,4 @@
 import javax.swing.JOptionPane;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.command.SequenceCommand;
@@ -46,5 +45,5 @@
         }
         if (!cmds.isEmpty()) {
-            Main.main.undoRedo.add(new SequenceCommand(tr("Add selection to relation"), cmds));
+            MainApplication.undoRedo.add(new SequenceCommand(tr("Add selection to relation"), cmds));
             new Notification(
                     "<html>"+
Index: /trunk/src/org/openstreetmap/josm/actions/relation/RecentRelationsAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/relation/RecentRelationsAction.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/actions/relation/RecentRelationsAction.java	(revision 12641)
@@ -18,5 +18,4 @@
 import javax.swing.plaf.basic.BasicArrowButton;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.JosmAction;
 import org.openstreetmap.josm.data.osm.Relation;
@@ -50,5 +49,5 @@
         arrow = editButton.createArrow(this);
         arrow.setToolTipText(tr("List of recent relations"));
-        Main.main.undoRedo.addCommandQueueListener(this);
+        MainApplication.undoRedo.addCommandQueueListener(this);
         enableArrow();
         shortcut = Shortcut.registerShortcut(
Index: /trunk/src/org/openstreetmap/josm/actions/upload/DiscardTagsHook.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/upload/DiscardTagsHook.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/actions/upload/DiscardTagsHook.java	(revision 12641)
@@ -10,9 +10,9 @@
 import java.util.Map;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.command.ChangePropertyCommand;
 import org.openstreetmap.josm.command.SequenceCommand;
 import org.openstreetmap.josm.data.APIDataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.gui.MainApplication;
 
 /**
@@ -44,5 +44,5 @@
             SequenceCommand removeKeys = new SequenceCommand(tr("Removed obsolete tags"),
                     new ChangePropertyCommand(objectsToUpload, map));
-            Main.main.undoRedo.add(removeKeys);
+            MainApplication.undoRedo.add(removeKeys);
         }
         return true;
Index: /trunk/src/org/openstreetmap/josm/actions/upload/FixDataHook.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/upload/FixDataHook.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/actions/upload/FixDataHook.java	(revision 12641)
@@ -20,4 +20,5 @@
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.Tag;
+import org.openstreetmap.josm.gui.MainApplication;
 
 /**
@@ -204,5 +205,5 @@
 
             if (!cmds.isEmpty()) {
-                Main.main.undoRedo.add(new SequenceCommand(tr("Fix deprecated tags"), cmds));
+                MainApplication.undoRedo.add(new SequenceCommand(tr("Fix deprecated tags"), cmds));
             }
         }
Index: /trunk/src/org/openstreetmap/josm/gui/MainApplication.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/MainApplication.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/gui/MainApplication.java	(revision 12641)
@@ -69,4 +69,5 @@
 import org.openstreetmap.josm.actions.search.SearchAction;
 import org.openstreetmap.josm.data.Bounds;
+import org.openstreetmap.josm.data.UndoRedoHandler;
 import org.openstreetmap.josm.data.Version;
 import org.openstreetmap.josm.data.osm.DataSet;
@@ -164,4 +165,10 @@
 
     /**
+     * The commands undo/redo handler.
+     * @since 12641 (as a replacement to {@code Main.main.undoRedo})
+     */
+    public static final UndoRedoHandler undoRedo = new UndoRedoHandler();
+
+    /**
      * Provides access to the layers displayed in the main view.
      */
Index: /trunk/src/org/openstreetmap/josm/gui/MainMenu.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/MainMenu.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/gui/MainMenu.java	(revision 12641)
@@ -678,7 +678,7 @@
 
         add(editMenu, undo);
-        Main.main.undoRedo.addCommandQueueListener(undo);
+        MainApplication.undoRedo.addCommandQueueListener(undo);
         add(editMenu, redo);
-        Main.main.undoRedo.addCommandQueueListener(redo);
+        MainApplication.undoRedo.addCommandQueueListener(redo);
         editMenu.addSeparator();
         add(editMenu, copy);
Index: /trunk/src/org/openstreetmap/josm/gui/datatransfer/importers/AbstractTagPaster.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/datatransfer/importers/AbstractTagPaster.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/gui/datatransfer/importers/AbstractTagPaster.java	(revision 12641)
@@ -14,5 +14,4 @@
 import javax.swing.TransferHandler.TransferSupport;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.command.ChangePropertyCommand;
 import org.openstreetmap.josm.command.Command;
@@ -20,4 +19,5 @@
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.tools.I18n;
@@ -65,5 +65,5 @@
             @I18n.QuirkyPluralString
             final String title = title1 + ' ' + title2;
-            Main.main.undoRedo.add(new SequenceCommand(title, commands));
+            MainApplication.undoRedo.add(new SequenceCommand(title, commands));
         }
     }
Index: /trunk/src/org/openstreetmap/josm/gui/datatransfer/importers/PrimitiveDataPaster.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/datatransfer/importers/PrimitiveDataPaster.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/gui/datatransfer/importers/PrimitiveDataPaster.java	(revision 12641)
@@ -24,4 +24,5 @@
 import org.openstreetmap.josm.data.osm.WayData;
 import org.openstreetmap.josm.gui.ExtendedDialog;
+import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.datatransfer.data.PrimitiveTransferData;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
@@ -57,5 +58,5 @@
 
         /* Now execute the commands to add the duplicated contents of the paste buffer to the map */
-        Main.main.undoRedo.add(command);
+        MainApplication.undoRedo.add(command);
         return true;
     }
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/CommandStackDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/CommandStackDialog.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/CommandStackDialog.java	(revision 12641)
@@ -36,5 +36,4 @@
 import javax.swing.tree.TreeSelectionModel;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.AutoScaleAction;
 import org.openstreetmap.josm.command.Command;
@@ -233,5 +232,5 @@
             listener.updateEnabledState();
         }
-        Main.main.undoRedo.addCommandQueueListener(this);
+        MainApplication.undoRedo.addCommandQueueListener(this);
     }
 
@@ -249,5 +248,5 @@
         undoTreeModel.setRoot(new DefaultMutableTreeNode());
         redoTreeModel.setRoot(new DefaultMutableTreeNode());
-        Main.main.undoRedo.removeCommandQueueListener(this);
+        MainApplication.undoRedo.removeCommandQueueListener(this);
     }
 
@@ -261,5 +260,5 @@
             return;
 
-        List<Command> undoCommands = Main.main.undoRedo.commands;
+        List<Command> undoCommands = MainApplication.undoRedo.commands;
         DefaultMutableTreeNode undoRoot = new DefaultMutableTreeNode();
         for (int i = 0; i < undoCommands.size(); ++i) {
@@ -268,5 +267,5 @@
         undoTreeModel.setRoot(undoRoot);
 
-        List<Command> redoCommands = Main.main.undoRedo.redoCommands;
+        List<Command> redoCommands = MainApplication.undoRedo.redoCommands;
         DefaultMutableTreeNode redoRoot = new DefaultMutableTreeNode();
         for (int i = 0; i < redoCommands.size(); ++i) {
@@ -457,9 +456,9 @@
             case UNDO:
                 int numUndo = ((DefaultMutableTreeNode) undoTreeModel.getRoot()).getChildCount() - idx;
-                Main.main.undoRedo.undo(numUndo);
+                MainApplication.undoRedo.undo(numUndo);
                 break;
             case REDO:
                 int numRedo = idx+1;
-                Main.main.undoRedo.redo(numRedo);
+                MainApplication.undoRedo.redo(numRedo);
                 break;
             }
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java	(revision 12641)
@@ -520,5 +520,5 @@
                 }
             }
-            Main.main.undoRedo.add(new SequenceCommand(name, commands));
+            MainApplication.undoRedo.add(new SequenceCommand(name, commands));
             refreshView();
         }
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictResolutionDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictResolutionDialog.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictResolutionDialog.java	(revision 12641)
@@ -21,4 +21,5 @@
 import org.openstreetmap.josm.gui.DefaultNameFormatter;
 import org.openstreetmap.josm.gui.ExtendedDialog;
+import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.conflict.pair.ConflictResolver;
 import org.openstreetmap.josm.gui.help.HelpBrowser;
@@ -203,5 +204,5 @@
                 }
             }
-            Main.main.undoRedo.add(resolver.buildResolveCommand());
+            MainApplication.undoRedo.add(resolver.buildResolveCommand());
             buttonAction(1, evt);
         }
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/ValidatorDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/ValidatorDialog.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/ValidatorDialog.java	(revision 12641)
@@ -613,5 +613,5 @@
                 final Command fixCommand = error.getFix();
                 if (fixCommand != null) {
-                    SwingUtilities.invokeAndWait(() -> Main.main.undoRedo.addNoRedraw(fixCommand));
+                    SwingUtilities.invokeAndWait(() -> MainApplication.undoRedo.addNoRedraw(fixCommand));
                 }
                 // It is wanted to ignore an error if it said fixable, even if fixCommand was null
@@ -644,5 +644,5 @@
                 monitor.subTask(tr("Updating map ..."));
                 SwingUtilities.invokeAndWait(() -> {
-                    Main.main.undoRedo.afterAdd();
+                    MainApplication.undoRedo.afterAdd();
                     MainApplication.getLayerManager().getLayersOfType(ValidatorLayer.class).forEach(ValidatorLayer::invalidate);
                     tree.resetErrors();
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 12641)
@@ -830,5 +830,5 @@
             Command command = TaggingPreset.createCommand(getSelection(), tags);
             if (command != null) {
-                Main.main.undoRedo.add(command);
+                MainApplication.undoRedo.add(command);
             }
         }
@@ -997,5 +997,5 @@
 
             Collection<OsmPrimitive> sel = Main.main.getInProgressSelection();
-            Main.main.undoRedo.add(new ChangePropertyCommand(sel, tags));
+            MainApplication.undoRedo.add(new ChangePropertyCommand(sel, tags));
 
             membershipTable.clearSelection();
@@ -1028,5 +1028,5 @@
                 rel.removeMembersFor(primitive);
             }
-            Main.main.undoRedo.add(new ChangeCommand(cur, rel));
+            MainApplication.undoRedo.add(new ChangeCommand(cur, rel));
 
             tagTable.clearSelection();
@@ -1266,5 +1266,5 @@
             if (sel.isEmpty() || clipboard == null)
                 return;
-            Main.main.undoRedo.add(new ChangePropertyCommand(sel, key, Utils.strip(clipboard)));
+            MainApplication.undoRedo.add(new ChangePropertyCommand(sel, key, Utils.strip(clipboard)));
         }
     }
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java	(revision 12641)
@@ -507,5 +507,5 @@
                 return;
             if (key.equals(newkey) || value == null) {
-                Main.main.undoRedo.add(new ChangePropertyCommand(sel, newkey, value));
+                MainApplication.undoRedo.add(new ChangePropertyCommand(sel, newkey, value));
                 AutoCompletionManager.rememberUserInput(newkey, value, true);
             } else {
@@ -541,5 +541,5 @@
                     AutoCompletionManager.rememberUserInput(newkey, value, false);
                 }
-                Main.main.undoRedo.add(new SequenceCommand(
+                MainApplication.undoRedo.add(new SequenceCommand(
                         trn("Change properties of up to {0} object",
                                 "Change properties of up to {0} objects", sel.size(), sel.size()),
@@ -1068,5 +1068,5 @@
             AutoCompletionManager.rememberUserInput(key, value, false);
             commandCount++;
-            Main.main.undoRedo.add(new ChangePropertyCommand(sel, key, value));
+            MainApplication.undoRedo.add(new ChangePropertyCommand(sel, key, value));
             changedKey = key;
             clearEntries();
@@ -1079,5 +1079,5 @@
 
         public void undoAllTagsAdding() {
-            Main.main.undoRedo.undo(commandCount);
+            MainApplication.undoRedo.undo(commandCount);
         }
 
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/actions/RefreshAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/actions/RefreshAction.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/actions/RefreshAction.java	(revision 12641)
@@ -14,4 +14,5 @@
 import org.openstreetmap.josm.gui.HelpAwareOptionPane;
 import org.openstreetmap.josm.gui.HelpAwareOptionPane.ButtonSpec;
+import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.dialogs.relation.IRelationEditor;
 import org.openstreetmap.josm.gui.dialogs.relation.MemberTable;
@@ -50,5 +51,5 @@
             ((JComponent) editor).getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(sc.getKeyStroke(), "refresh");
         }
-        Main.main.undoRedo.addCommandQueueListener(this);
+        MainApplication.undoRedo.addCommandQueueListener(this);
         updateEnabledState();
     }
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/actions/SavingAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/actions/SavingAction.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/actions/SavingAction.java	(revision 12641)
@@ -73,5 +73,5 @@
         if (newRelation.getMembersCount() == 0 && !newRelation.hasKeys())
             return;
-        Main.main.undoRedo.add(new AddCommand(layer, newRelation));
+        MainApplication.undoRedo.add(new AddCommand(layer, newRelation));
 
         // make sure everybody is notified about the changes
@@ -95,5 +95,5 @@
         memberTableModel.applyToRelation(editedRelation);
         Conflict<Relation> conflict = new Conflict<>(editor.getRelation(), editedRelation);
-        Main.main.undoRedo.add(new ConflictAddCommand(layer, conflict));
+        MainApplication.undoRedo.add(new ConflictAddCommand(layer, conflict));
     }
 
@@ -107,5 +107,5 @@
         memberTableModel.applyToRelation(editedRelation);
         if (!editedRelation.hasEqualSemanticAttributes(editor.getRelation(), false)) {
-            Main.main.undoRedo.add(new ChangeCommand(editor.getRelation(), editedRelation));
+            MainApplication.undoRedo.add(new ChangeCommand(editor.getRelation(), editedRelation));
         }
     }
Index: /trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java	(revision 12641)
@@ -609,5 +609,5 @@
             return;
 
-        Main.main.undoRedo.clean(this);
+        MainApplication.undoRedo.clean(this);
 
         // if uploaded, clean the modified flags as well
Index: /trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java	(revision 12641)
@@ -398,5 +398,5 @@
             Command cmd = createCommand(sel, getChangedTags());
             if (cmd != null) {
-                Main.main.undoRedo.add(cmd);
+                MainApplication.undoRedo.add(cmd);
             }
         } else if (answer == DIALOG_ANSWER_NEW_RELATION) {
Index: /trunk/src/org/openstreetmap/josm/io/remotecontrol/AddTagsDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/remotecontrol/AddTagsDialog.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/io/remotecontrol/AddTagsDialog.java	(revision 12641)
@@ -258,5 +258,5 @@
                     String key = (String) tm.getValueAt(i, 1);
                     Object value = tm.getValueAt(i, 2);
-                    Main.main.undoRedo.add(new ChangePropertyCommand(sel,
+                    MainApplication.undoRedo.add(new ChangePropertyCommand(sel,
                             key, value instanceof String ? (String) value : ""));
                 }
@@ -312,5 +312,5 @@
             if (MainApplication.getLayerManager().getEditDataSet() != null) {
                 for (String[] row : keyValue) {
-                    Main.main.undoRedo.add(new ChangePropertyCommand(primitives, row[0], row[1]));
+                    MainApplication.undoRedo.add(new ChangePropertyCommand(primitives, row[0], row[1]));
                 }
             }
Index: /trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/AddNodeHandler.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/AddNodeHandler.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/AddNodeHandler.java	(revision 12641)
@@ -99,5 +99,5 @@
             node = new Node(ll);
             // Now execute the commands to add this node.
-            Main.main.undoRedo.add(new AddCommand(node));
+            MainApplication.undoRedo.add(new AddCommand(node));
         }
 
Index: /trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/AddWayHandler.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/AddWayHandler.java	(revision 12640)
+++ /trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/AddWayHandler.java	(revision 12641)
@@ -167,5 +167,5 @@
         allCoordinates.clear();
         commands.add(new AddCommand(way));
-        Main.main.undoRedo.add(new SequenceCommand(tr("Add way"), commands));
+        MainApplication.undoRedo.add(new SequenceCommand(tr("Add way"), commands));
         MainApplication.getLayerManager().getEditDataSet().setSelected(way);
         if (PermissionPrefWithDefault.CHANGE_VIEWPORT.isAllowed()) {
Index: /trunk/test/unit/org/openstreetmap/josm/actions/SplitWayActionTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/actions/SplitWayActionTest.java	(revision 12640)
+++ /trunk/test/unit/org/openstreetmap/josm/actions/SplitWayActionTest.java	(revision 12641)
@@ -199,5 +199,5 @@
         final SplitWayAction.SplitWayResult result = SplitWayAction.splitWay(
                 layer, w2, SplitWayAction.buildSplitChunks(w2, Arrays.asList(n3, n4, n5)), new ArrayList<OsmPrimitive>(), strategy);
-        Main.main.undoRedo.add(result.getCommand());
+        MainApplication.undoRedo.add(result.getCommand());
 
         assertEquals(6, route.getMembersCount());
Index: /trunk/test/unit/org/openstreetmap/josm/actions/mapmode/DrawActionTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/actions/mapmode/DrawActionTest.java	(revision 12640)
+++ /trunk/test/unit/org/openstreetmap/josm/actions/mapmode/DrawActionTest.java	(revision 12641)
@@ -17,5 +17,4 @@
 import org.junit.Rule;
 import org.junit.Test;
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.osm.DataSet;
@@ -93,5 +92,5 @@
             assertNotNull(renderer.getListCellRendererComponent(lstPrimitives, n3, 0, false, false));
 
-            Main.main.undoRedo.undo();
+            MainApplication.undoRedo.undo();
 
             assertEquals(2, w.getNodesCount());
Index: /trunk/test/unit/org/openstreetmap/josm/actions/upload/FixDataHookTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/actions/upload/FixDataHookTest.java	(revision 12640)
+++ /trunk/test/unit/org/openstreetmap/josm/actions/upload/FixDataHookTest.java	(revision 12641)
@@ -12,5 +12,4 @@
 import org.junit.Rule;
 import org.junit.Test;
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.command.PseudoCommand;
 import org.openstreetmap.josm.command.SequenceCommand;
@@ -20,4 +19,5 @@
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 
@@ -42,7 +42,7 @@
     public void testCheckUpload() {
         // Empty data set
-        Main.main.undoRedo.commands.clear();
+        MainApplication.undoRedo.commands.clear();
         new FixDataHook().checkUpload(new APIDataSet());
-        assertTrue(Main.main.undoRedo.commands.isEmpty());
+        assertTrue(MainApplication.undoRedo.commands.isEmpty());
 
         // Complete data set
@@ -77,9 +77,9 @@
         ads.init(Arrays.asList(emptyNode, emptyWay, emptyRelation, w1, w2, w3, w4, w5, w6, w7, r1, r2));
 
-        Main.main.undoRedo.commands.clear();
+        MainApplication.undoRedo.commands.clear();
         new FixDataHook().checkUpload(ads);
-        assertEquals(1, Main.main.undoRedo.commands.size());
+        assertEquals(1, MainApplication.undoRedo.commands.size());
 
-        SequenceCommand seq = (SequenceCommand) Main.main.undoRedo.commands.iterator().next();
+        SequenceCommand seq = (SequenceCommand) MainApplication.undoRedo.commands.iterator().next();
         Collection<? extends OsmPrimitive> prims = seq.getParticipatingPrimitives();
         assertNotNull(prims);
Index: /trunk/test/unit/org/openstreetmap/josm/gui/dialogs/CommandStackDialogTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/gui/dialogs/CommandStackDialogTest.java	(revision 12640)
+++ /trunk/test/unit/org/openstreetmap/josm/gui/dialogs/CommandStackDialogTest.java	(revision 12641)
@@ -7,5 +7,4 @@
 import org.junit.Rule;
 import org.junit.Test;
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.command.Command;
@@ -52,10 +51,10 @@
             Command cmd1 = TestUtils.newCommand();
             Command cmd2 = TestUtils.newCommand();
-            Main.main.undoRedo.add(cmd1);
-            Main.main.undoRedo.add(cmd2);
-            Main.main.undoRedo.undo(1);
+            MainApplication.undoRedo.add(cmd1);
+            MainApplication.undoRedo.add(cmd2);
+            MainApplication.undoRedo.undo(1);
 
-            assertFalse(Main.main.undoRedo.commands.isEmpty());
-            assertFalse(Main.main.undoRedo.redoCommands.isEmpty());
+            assertFalse(MainApplication.undoRedo.commands.isEmpty());
+            assertFalse(MainApplication.undoRedo.redoCommands.isEmpty());
 
             MapFrame map = MainApplication.getMap();
@@ -68,5 +67,5 @@
             assertFalse(dlg.isVisible());
         } finally {
-            Main.main.undoRedo.clean();
+            MainApplication.undoRedo.clean();
             MainApplication.getLayerManager().removeLayer(layer);
         }
