Index: /trunk/src/org/openstreetmap/josm/actions/AlignInCircleAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/AlignInCircleAction.java	(revision 1635)
+++ /trunk/src/org/openstreetmap/josm/actions/AlignInCircleAction.java	(revision 1636)
@@ -16,5 +16,4 @@
 import org.openstreetmap.josm.command.SequenceCommand;
 import org.openstreetmap.josm.data.coor.EastNorth;
-import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -135,5 +134,5 @@
         Collection<Node> nodes = new LinkedList<Node>();
         Collection<Way> ways = new LinkedList<Way>();
-        Node center = null;
+        EastNorth center = null;
         double radius = 0;
         boolean regular = false;
@@ -164,5 +163,5 @@
                 } else {
 
-                    center = (Node) nodes.toArray()[way.nodes.contains(nodes.toArray()[0]) ? 1 : 0];
+                    center = ((Node) nodes.toArray()[way.nodes.contains(nodes.toArray()[0]) ? 1 : 0]).eastNorth;
                     if (nodes.size() == 2)
                         radius = distance(((Node) nodes.toArray()[0]).eastNorth, ((Node) nodes.toArray()[1]).eastNorth);
@@ -184,6 +183,5 @@
         // Get average position of circumcircles of the triangles of all triplets of neighbour nodes
         if (center == null) {
-            center = new Node(new LatLon(0, 0));
-            center.eastNorth = new EastNorth(0, 0); // to be independent of projection
+            center = new EastNorth(0, 0);
             Node n0 = (Node) nodes.toArray()[nodes.size() - 1];
             Node n1 = (Node) nodes.toArray()[nodes.size() - 2];
@@ -196,11 +194,10 @@
                 if (cc == null)
                     return;
-                center.eastNorth = new EastNorth(center.eastNorth.east() + cc.east(), center.eastNorth.north()
+                center = new EastNorth(center.east() + cc.east(), center.north()
                         + cc.north());
             }
 
-            center.eastNorth = new EastNorth(center.eastNorth.east() / nodes.size(), center.eastNorth.north()
+            center = new EastNorth(center.east() / nodes.size(), center.north()
                     / nodes.size());
-            center.coor = Main.proj.eastNorth2latlon(center.eastNorth);
         }
 
@@ -212,5 +209,5 @@
         if (radius == 0) {
             for (Node n : nodes) {
-                radius += distance(center.eastNorth, n.eastNorth);
+                radius += distance(center, n.eastNorth);
             }
             radius = radius / nodes.size();
@@ -223,7 +220,7 @@
         if (regular) { // Make a regular polygon
             double angle = Math.PI * 2 / nodes.size();
-            pc = new PolarCoor(((Node) nodes.toArray()[0]).eastNorth, center.eastNorth, 0);
-
-            if (pc.angle > (new PolarCoor(((Node) nodes.toArray()[1]).eastNorth, center.eastNorth, 0).angle))
+            pc = new PolarCoor(((Node) nodes.toArray()[0]).eastNorth, center, 0);
+
+            if (pc.angle > (new PolarCoor(((Node) nodes.toArray()[1]).eastNorth, center, 0).angle))
                 angle *= -1;
 
@@ -236,5 +233,5 @@
         } else { // Move each node to that distance from the centre.
             for (Node n : nodes) {
-                pc = new PolarCoor(n.eastNorth, center.eastNorth, 0);
+                pc = new PolarCoor(n.eastNorth, center, 0);
                 pc.radius = radius;
                 EastNorth no = pc.toEastNorth();
Index: /trunk/src/org/openstreetmap/josm/actions/PasteAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/PasteAction.java	(revision 1635)
+++ /trunk/src/org/openstreetmap/josm/actions/PasteAction.java	(revision 1636)
@@ -17,11 +17,11 @@
 import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.command.SequenceCommand;
+import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.osm.DataSet;
-import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.RelationMember;
 import org.openstreetmap.josm.data.osm.Way;
-import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.tools.Shortcut;
@@ -70,6 +70,5 @@
             nnew.id = 0;
             if (Main.main.editLayer() == source) {
-                nnew.eastNorth = new EastNorth(nnew.eastNorth.east() + offsetEast, nnew.eastNorth.north() + offsetNorth);
-                nnew.coor = Main.proj.eastNorth2latlon(nnew.eastNorth);
+                nnew.setEastNorth(nnew.eastNorth.add(offsetEast, offsetNorth));
             }
             map.put(n, nnew);
Index: /trunk/src/org/openstreetmap/josm/actions/UnGlueAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/UnGlueAction.java	(revision 1635)
+++ /trunk/src/org/openstreetmap/josm/actions/UnGlueAction.java	(revision 1636)
@@ -21,5 +21,4 @@
 import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.command.SequenceCommand;
-import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -149,6 +148,5 @@
         if(e.getSource() instanceof JPanel) {
             MapView mv = Main.map.mapView;
-            n.eastNorth = mv.getEastNorth(mv.lastMEvent.getX(), mv.lastMEvent.getY());
-            n.coor = Main.proj.eastNorth2latlon(n.eastNorth);
+            n.setEastNorth(mv.getEastNorth(mv.lastMEvent.getX(), mv.lastMEvent.getY()));
         }
         
Index: /trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(revision 1635)
+++ /trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(revision 1636)
@@ -801,5 +801,5 @@
             // (for semi-parallel lines, intersection might be miles away!)
             if (Main.map.mapView.getPoint(n.eastNorth).distance(Main.map.mapView.getPoint(intersection)) < snapToIntersectionThreshold) {
-                n.eastNorth = intersection;
+                n.setEastNorth(intersection);
                 return;
             }
@@ -814,7 +814,5 @@
             double c = A.distanceSq(B);
             q = (a - b + c) / (2*c);
-            n.eastNorth = new EastNorth(
-                B.east() + q * (A.east() - B.east()),
-                B.north() + q * (A.north() - B.north()));
+            n.setEastNorth(B.east() + q * (A.east() - B.east()), B.north() + q * (A.north() - B.north()));
         }
     }
Index: /trunk/src/org/openstreetmap/josm/command/MoveCommand.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/command/MoveCommand.java	(revision 1635)
+++ /trunk/src/org/openstreetmap/josm/command/MoveCommand.java	(revision 1636)
@@ -15,5 +15,4 @@
 import javax.swing.tree.MutableTreeNode;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.coor.LatLon;
@@ -88,6 +87,5 @@
     public void moveAgain(double x, double y) {
         for (Node n : objects) {
-            n.eastNorth = new EastNorth(n.eastNorth.east()+x, n.eastNorth.north()+y);
-            n.coor = Main.proj.eastNorth2latlon(n.eastNorth);
+            n.setEastNorth(n.eastNorth.add(x, y));
         }
         this.x += x;
@@ -97,6 +95,5 @@
     @Override public boolean executeCommand() {
         for (Node n : objects) {
-            n.eastNorth = new EastNorth(n.eastNorth.east()+x, n.eastNorth.north()+y);
-            n.coor = Main.proj.eastNorth2latlon(n.eastNorth);
+            n.setEastNorth(n.eastNorth.add(x, y));
             n.modified = true;
         }
@@ -108,6 +105,5 @@
         for (Node n : objects) {
             OldState os = it.next();
-            n.eastNorth = os.eastNorth;
-            n.coor = os.latlon;
+            n.setEastNorth(os.eastNorth);
             n.modified = os.modified;
         }
Index: /trunk/src/org/openstreetmap/josm/command/RotateCommand.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/command/RotateCommand.java	(revision 1635)
+++ /trunk/src/org/openstreetmap/josm/command/RotateCommand.java	(revision 1636)
@@ -13,7 +13,5 @@
 import javax.swing.tree.MutableTreeNode;
 
-import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.coor.EastNorth;
-import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -36,5 +34,5 @@
      * pivot point
      */
-    private Node pivot;
+    private EastNorth pivot;
 
     /**
@@ -62,6 +60,5 @@
 
         this.objects = AllNodesVisitor.getAllNodes(objects);
-        pivot = new Node(new LatLon(0,0));
-        pivot.eastNorth = new EastNorth(0,0);
+        pivot = new EastNorth(0,0);
 
         for (Node n : this.objects) {
@@ -71,8 +68,7 @@
             os.modified = n.modified;
             oldState.put(n, os);
-            pivot.eastNorth = new EastNorth(pivot.eastNorth.east()+os.eastNorth.east(), pivot.eastNorth.north()+os.eastNorth.north());
+            pivot = pivot.add(os.eastNorth.east(), os.eastNorth.north());
         }
-        pivot.eastNorth = new EastNorth(pivot.eastNorth.east()/this.objects.size(), pivot.eastNorth.north()/this.objects.size());
-        pivot.coor = Main.proj.eastNorth2latlon(pivot.eastNorth);
+        pivot = new EastNorth(pivot.east()/this.objects.size(), pivot.north()/this.objects.size());
 
         rotationAngle = Math.PI/2;
@@ -87,6 +83,6 @@
     public void rotateAgain(EastNorth start, EastNorth end) {
         // compute angle
-        startAngle = Math.atan2(start.east()-pivot.eastNorth.east(), start.north()-pivot.eastNorth.north());
-        double endAngle = Math.atan2(end.east()-pivot.eastNorth.east(), end.north()-pivot.eastNorth.north());
+        startAngle = Math.atan2(start.east()-pivot.east(), start.north()-pivot.north());
+        double endAngle = Math.atan2(end.east()-pivot.east(), end.north()-pivot.north());
         rotationAngle += startAngle - endAngle;
         rotateNodes(false);
@@ -102,10 +98,9 @@
             double sinPhi = Math.sin(rotationAngle);
             EastNorth oldEastNorth = oldState.get(n).eastNorth;
-            double x = oldEastNorth.east() - pivot.eastNorth.east();
-            double y = oldEastNorth.north() - pivot.eastNorth.north();
-            double nx =  sinPhi * x + cosPhi * y + pivot.eastNorth.east();
-            double ny = -cosPhi * x + sinPhi * y + pivot.eastNorth.north();
-            n.eastNorth = new EastNorth(nx, ny);
-            n.coor = Main.proj.eastNorth2latlon(n.eastNorth);
+            double x = oldEastNorth.east() - pivot.east();
+            double y = oldEastNorth.north() - pivot.north();
+            double nx =  sinPhi * x + cosPhi * y + pivot.east();
+            double ny = -cosPhi * x + sinPhi * y + pivot.north();
+            n.setEastNorth(nx, ny);
             if (setModified)
                 n.modified = true;
@@ -121,6 +116,5 @@
         for (Node n : objects) {
             MoveCommand.OldState os = oldState.get(n);
-            n.eastNorth = os.eastNorth;
-            n.coor = os.latlon;
+            n.setEastNorth(os.eastNorth);
             n.modified = os.modified;
         }
Index: /trunk/src/org/openstreetmap/josm/data/conflict/PositionConflict.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/conflict/PositionConflict.java	(revision 1635)
+++ /trunk/src/org/openstreetmap/josm/data/conflict/PositionConflict.java	(revision 1636)
@@ -23,6 +23,5 @@
     @Override public void apply(OsmPrimitive target, OsmPrimitive other) {
         if (target instanceof Node) {
-            ((Node)target).coor = ((Node)other).coor;
-            ((Node)target).eastNorth = ((Node)other).eastNorth;
+            ((Node)target).setEastNorth(((Node)other).eastNorth);
             int newversion = Math.max(target.version, other.version);
             // set version on "other" as well in case user decides to keep local
Index: /trunk/src/org/openstreetmap/josm/data/osm/Node.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/Node.java	(revision 1635)
+++ /trunk/src/org/openstreetmap/josm/data/osm/Node.java	(revision 1636)
@@ -5,6 +5,6 @@
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.coor.LatLon;
-import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.coor.LatLon.CoordinateFormat;
 import org.openstreetmap.josm.data.osm.visitor.Visitor;
@@ -20,5 +20,19 @@
     public LatLon coor;
     public volatile EastNorth eastNorth;
-
+        
+    public void setCoor(LatLon coor) {
+        this.coor = coor;
+        this.eastNorth = Main.proj.latlon2eastNorth(coor); 
+    }
+        
+    public void setEastNorth(EastNorth eastNorth) {
+       this.eastNorth = eastNorth;
+       this.coor = Main.proj.eastNorth2latlon(eastNorth);
+    }
+    
+    public void setEastNorth(double east, double north) {
+        this.setEastNorth(new EastNorth(east, north));
+    }
+    
     private static CoordinateFormat mCord;
 
@@ -47,6 +61,5 @@
 
     public Node(LatLon latlon) {
-        this.coor = latlon;
-        eastNorth = Main.proj.latlon2eastNorth(latlon);
+        setCoor(latlon);
     }
 
