Index: /trunk/src/org/openstreetmap/josm/data/osm/DataSet.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 3381)
+++ /trunk/src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 3382)
@@ -21,4 +21,5 @@
 
 import org.openstreetmap.josm.data.SelectionChangedListener;
+import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.event.AbstractDatasetChangedEvent;
@@ -804,7 +805,7 @@
     }
 
-    private void reindexNode(Node node, LatLon newCoor) {
+    private void reindexNode(Node node, LatLon newCoor, EastNorth eastNorth) {
         nodes.remove(node);
-        node.setCoorInternal(newCoor);
+        node.setCoorInternal(newCoor, eastNorth);
         nodes.add(node);
         for (OsmPrimitive primitive: node.getReferrers()) {
@@ -932,6 +933,6 @@
     }
 
-    void fireNodeMoved(Node node, LatLon newCoor) {
-        reindexNode(node, newCoor);
+    void fireNodeMoved(Node node, LatLon newCoor, EastNorth eastNorth) {
+        reindexNode(node, newCoor, eastNorth);
         fireEvent(new NodeMovedEvent(this, node));
     }
Index: /trunk/src/org/openstreetmap/josm/data/osm/Node.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/Node.java	(revision 3381)
+++ /trunk/src/org/openstreetmap/josm/data/osm/Node.java	(revision 3382)
@@ -2,5 +2,4 @@
 package org.openstreetmap.josm.data.osm;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.coor.CachedLatLon;
 import org.openstreetmap.josm.data.coor.EastNorth;
@@ -19,14 +18,24 @@
     public final void setCoor(LatLon coor) {
         if(coor != null){
-            if (getDataSet() != null) {
-                boolean locked = writeLock();
-                try {
-                    getDataSet().fireNodeMoved(this, coor);
-                } finally {
-                    writeUnlock(locked);
-                }
-            } else {
-                setCoorInternal(coor);
-            }
+            updateCoor(coor, null);
+        }
+    }
+
+    public final void setEastNorth(EastNorth eastNorth) {
+        if(eastNorth != null) {
+            updateCoor(null, eastNorth);
+        }
+    }
+
+    private void updateCoor(LatLon coor, EastNorth eastNorth) {
+        if (getDataSet() != null) {
+            boolean locked = writeLock();
+            try {
+                getDataSet().fireNodeMoved(this, coor, eastNorth);
+            } finally {
+                writeUnlock(locked);
+            }
+        } else {
+            setCoorInternal(coor, eastNorth);
         }
     }
@@ -36,10 +45,4 @@
     }
 
-    public final void setEastNorth(EastNorth eastNorth) {
-        if(eastNorth != null) {
-            setCoor(Main.proj.eastNorth2latlon(eastNorth));
-        }
-    }
-
     public final EastNorth getEastNorth() {
         return coor != null ? coor.getEastNorth() : null;
@@ -49,9 +52,17 @@
      * To be used only by Dataset.reindexNode
      */
-    protected void setCoorInternal(LatLon coor) {
+    protected void setCoorInternal(LatLon coor, EastNorth eastNorth) {
         if(this.coor == null) {
-            this.coor = new CachedLatLon(coor);
+            if (eastNorth == null) {
+                this.coor = new CachedLatLon(coor);
+            } else {
+                this.coor = new CachedLatLon(eastNorth);
+            }
         } else {
-            this.coor.setCoor(coor);
+            if (eastNorth == null) {
+                this.coor.setCoor(coor);
+            } else {
+                this.coor.setEastNorth(eastNorth);
+            }
         }
     }
