Index: trunk/src/org/openstreetmap/josm/actions/CreateCircleAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/CreateCircleAction.java	(revision 14952)
+++ trunk/src/org/openstreetmap/josm/actions/CreateCircleAction.java	(revision 14960)
@@ -214,5 +214,5 @@
                 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;
Index: trunk/src/org/openstreetmap/josm/actions/MoveAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/MoveAction.java	(revision 14952)
+++ trunk/src/org/openstreetmap/josm/actions/MoveAction.java	(revision 14960)
@@ -152,5 +152,5 @@
 
         for (Node n : affectedNodes) {
-            if (n.isLatLonKnown() && n.getCoor().isOutSideWorld()) {
+            if (n.isLatLonKnown() && n.isOutSideWorld()) {
                 // Revert move
                 ((MoveCommand) c).moveAgain(-distx, -disty);
Index: trunk/src/org/openstreetmap/josm/actions/MoveNodeAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/MoveNodeAction.java	(revision 14952)
+++ trunk/src/org/openstreetmap/josm/actions/MoveNodeAction.java	(revision 14960)
@@ -52,4 +52,14 @@
         // move the node
         UndoRedoHandler.getInstance().add(new MoveCommand(n, coordinates));
+        if (n.getCoor().distance(coordinates) > 1) {
+            // see #13538: Avoid rounding error near 180 longitude which moves nodes too far
+            if (coordinates.lon() >= 180.0) {
+                coordinates = new LatLon(coordinates.lat(), Math.nextDown(180.0));
+            } else if (coordinates.lon() <= -180.0) {
+                coordinates = new LatLon(coordinates.lat(), Math.nextUp(-180.0));
+            }
+            UndoRedoHandler.getInstance().undo(1);
+            UndoRedoHandler.getInstance().add(new MoveCommand(n, coordinates));
+        }
         MainApplication.getMap().mapView.repaint();
     }
Index: trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(revision 14952)
+++ trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(revision 14960)
@@ -530,5 +530,5 @@
 
         if (newNode) {
-            if (n.getCoor().isOutSideWorld()) {
+            if (n.isOutSideWorld()) {
                 JOptionPane.showMessageDialog(
                         MainApplication.getMainFrame(),
Index: trunk/src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyAction.java	(revision 14952)
+++ trunk/src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyAction.java	(revision 14960)
@@ -416,5 +416,5 @@
         } else if (state == State.IMPROVING) {
             // Checking if the new coordinate is outside of the world
-            if (mv.getLatLon(mousePos.x, mousePos.y).isOutSideWorld()) {
+            if (new Node(mv.getEastNorth(mousePos.x, mousePos.y)).isOutSideWorld()) {
                 JOptionPane.showMessageDialog(MainApplication.getMainFrame(),
                         tr("Cannot add a node outside of the world."),
Index: trunk/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java	(revision 14952)
+++ trunk/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java	(revision 14960)
@@ -32,5 +32,4 @@
 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;
@@ -723,6 +722,5 @@
                 }
                 for (Node n : affectedNodes) {
-                    LatLon ll = n.getCoor();
-                    if (ll != null && ll.isOutSideWorld()) {
+                    if (n.isOutSideWorld()) {
                         // Revert move
                         if (c instanceof MoveCommand) {
Index: trunk/src/org/openstreetmap/josm/data/osm/Node.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/Node.java	(revision 14952)
+++ trunk/src/org/openstreetmap/josm/data/osm/Node.java	(revision 14960)
@@ -403,3 +403,21 @@
         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 14960
+     */
+    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;
+    }
 }
