Index: src/org/openstreetmap/josm/actions/CreateCircleAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/CreateCircleAction.java	(revision 14959)
+++ src/org/openstreetmap/josm/actions/CreateCircleAction.java	(working copy)
@@ -212,11 +212,11 @@
                 double alpha = angles[i].a + (j+1)*delta/(count[i]+1);
                 double x = center.east() + r*Math.cos(alpha);
                 double y = center.north() + r*Math.sin(alpha);
-                LatLon ll = ProjectionRegistry.getProjection().eastNorth2latlon(new EastNorth(x, y));
-                if (ll.isOutSideWorld()) {
+                if (new Node(new EastNorth(x, y)).isOutSideWorld()) {
                     notifyNodesNotOnCircle();
                     return;
                 }
+                LatLon ll = ProjectionRegistry.getProjection().eastNorth2latlon(new EastNorth(x, y));
                 Node n = new Node(ll);
                 nodesToAdd.add(n);
                 cmds.add(new AddCommand(ds, n));
Index: src/org/openstreetmap/josm/actions/MoveAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/MoveAction.java	(revision 14959)
+++ src/org/openstreetmap/josm/actions/MoveAction.java	(working copy)
@@ -151,9 +151,8 @@
         }
 
         for (Node n : affectedNodes) {
-            if (n.isLatLonKnown() && n.getCoor().isOutSideWorld()) {
-                // Revert move
-                ((MoveCommand) c).moveAgain(-distx, -disty);
+            if (n.isLatLonKnown() && n.isOutSideWorld()) {
+                // Undo move
                 JOptionPane.showMessageDialog(
                         MainApplication.getMainFrame(),
                         tr("Cannot move objects outside of the world."),
@@ -160,6 +159,7 @@
                         tr("Warning"),
                         JOptionPane.WARNING_MESSAGE
                 );
+                UndoRedoHandler.getInstance().undo(1);
                 return;
             }
         }
Index: src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(revision 14959)
+++ src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(working copy)
@@ -529,7 +529,7 @@
         List<Way> replacedWays = new ArrayList<>();
 
         if (newNode) {
-            if (n.getCoor().isOutSideWorld()) {
+            if (n.isOutSideWorld()) {
                 JOptionPane.showMessageDialog(
                         MainApplication.getMainFrame(),
                         tr("Cannot add a node outside of the world."),
Index: src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyAction.java	(revision 14959)
+++ src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyAction.java	(working copy)
@@ -415,7 +415,8 @@
             }
         } else if (state == State.IMPROVING) {
             // Checking if the new coordinate is outside of the world
-            if (mv.getLatLon(mousePos.x, mousePos.y).isOutSideWorld()) {
+            Node test = new Node(mv.getEastNorth(mousePos.x, mousePos.y));
+            if (test.isOutSideWorld()) {
                 JOptionPane.showMessageDialog(MainApplication.getMainFrame(),
                         tr("Cannot add a node outside of the world."),
                         tr("Warning"), JOptionPane.WARNING_MESSAGE);
Index: src/org/openstreetmap/josm/actions/mapmode/SelectAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/mapmode/SelectAction.java	(revision 14959)
+++ src/org/openstreetmap/josm/actions/mapmode/SelectAction.java	(working copy)
@@ -31,7 +31,6 @@
 import org.openstreetmap.josm.command.SequenceCommand;
 import org.openstreetmap.josm.data.UndoRedoHandler;
 import org.openstreetmap.josm.data.coor.EastNorth;
-import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmData;
@@ -722,12 +721,7 @@
                     UndoRedoHandler.getInstance().add(c);
                 }
                 for (Node n : affectedNodes) {
-                    LatLon ll = n.getCoor();
-                    if (ll != null && ll.isOutSideWorld()) {
-                        // Revert move
-                        if (c instanceof MoveCommand) {
-                            ((MoveCommand) c).resetToCheckpoint();
-                        }
+                    if (n.isOutSideWorld()) {
                         // TODO: We might use a simple notification in the lower left corner.
                         JOptionPane.showMessageDialog(
                                 MainApplication.getMainFrame(),
@@ -734,6 +728,10 @@
                                 tr("Cannot move objects outside of the world."),
                                 tr("Warning"),
                                 JOptionPane.WARNING_MESSAGE);
+                        // Undo move
+                        if (c instanceof MoveCommand) {
+                            UndoRedoHandler.getInstance().undo(1);
+                        }
                         mv.setNewCursor(cursor, this);
                         return false;
                     }
Index: src/org/openstreetmap/josm/data/osm/Node.java
===================================================================
--- src/org/openstreetmap/josm/data/osm/Node.java	(revision 14959)
+++ src/org/openstreetmap/josm/data/osm/Node.java	(working copy)
@@ -402,4 +402,22 @@
     public List<Way> getParentWays() {
         return referrers(Way.class).collect(Collectors.toList());
     }
+
+    /**
+     * Determines if this node is outside of the world. See also #13538.
+     * @return <code>true</code>, if the coordinate is outside the world, compared by using lat/lon and east/north
+     * @since xxx
+     */
+    public boolean isOutSideWorld() {
+        LatLon ll = getCoor();
+        if (ll != null) {
+            if (ll.isOutSideWorld())
+                return true;
+            if (!new Node(ll).getEastNorth().equalsEpsilon(getEastNorth(), 1.0)) {
+                // we get here if a node was moved or created left from -180 or right from +180
+                return true;
+            }
+        }
+        return false;
+    }
 }
Index: test/unit/org/openstreetmap/josm/data/osm/NodeTest.java
===================================================================
--- test/unit/org/openstreetmap/josm/data/osm/NodeTest.java	(revision 14959)
+++ test/unit/org/openstreetmap/josm/data/osm/NodeTest.java	(working copy)
@@ -11,6 +11,7 @@
 import org.junit.Test;
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.DataSource;
+import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 
@@ -26,7 +27,7 @@
      */
     @Rule
     @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
-    public JOSMTestRules test = new JOSMTestRules();
+    public JOSMTestRules test = new JOSMTestRules().projection();
 
     /**
      * Non-regression test for ticket #12060.
@@ -103,4 +104,29 @@
     public void testLoadIAE() {
         new Node().load(new WayData());
     }
+
+    /**
+     * Test that {@link Node#isOutSideWorld} works as expected.
+     */
+    @Test
+    public void testOutsideWorld() {
+        Node n = new Node(1, 1);
+        n.setCoor(LatLon.ZERO);
+        assertFalse(n.isOutSideWorld());
+        n.setCoor(null);
+        assertFalse(n.isOutSideWorld());
+        n.setCoor(LatLon.NORTH_POLE);
+        assertTrue(n.isOutSideWorld());
+        n.setCoor(new LatLon(0, 180.0));
+        assertFalse(n.isOutSideWorld());
+        // simulate a small move east
+        n.setEastNorth(new EastNorth(n.getEastNorth().getX() + 0.1, n.getEastNorth().getY()));
+        assertTrue(n.isOutSideWorld());
+        n.setCoor(new LatLon(0, -180.0));
+        assertFalse(n.isOutSideWorld());
+        // simulate a small move west
+        n.setEastNorth(new EastNorth(n.getEastNorth().getX() - 0.1, n.getEastNorth().getY()));
+        assertTrue(n.isOutSideWorld());
+    }
+
 }
