Index: src/org/openstreetmap/josm/io/OsmWriter.java
===================================================================
--- src/org/openstreetmap/josm/io/OsmWriter.java    (revision 1638)
+++ src/org/openstreetmap/josm/io/OsmWriter.java    (working copy)
@@ -97,7 +97,7 @@
     public void visit(Node n) {
         if (n.incomplete) return;
         addCommon(n, "node");
-        out.print(" lat='"+n.coor.lat()+"' lon='"+n.coor.lon()+"'");
+        out.print(" lat='"+n.getCoor().lat()+"' lon='"+n.getCoor().lon()+"'");
         if (!withBody) {
             out.println("/>");  
         } else {
Index: src/org/openstreetmap/josm/actions/DistributeAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/DistributeAction.java    (revision 1638)
+++ src/org/openstreetmap/josm/actions/DistributeAction.java    (working copy)
@@ -69,7 +69,7 @@
         for (Node n : nodes) {
             itnodes.remove(n);
             for (Node m : itnodes) {
-                double dist = Math.sqrt(n.eastNorth.distance(m.eastNorth));
+                double dist = Math.sqrt(n.getEastNorth().distance(m.getEastNorth()));
                 if (dist > distance) {
                     nodea = n;
                     nodeb = m;
@@ -83,10 +83,10 @@
         nodes.remove(nodeb);
 
         // Find out co-ords of A and B
-        double ax = nodea.eastNorth.east();
-        double ay = nodea.eastNorth.north();
-        double bx = nodeb.eastNorth.east();
-        double by = nodeb.eastNorth.north();
+        double ax = nodea.getEastNorth().east();
+        double ay = nodea.getEastNorth().north();
+        double bx = nodeb.getEastNorth().east();
+        double by = nodeb.getEastNorth().north();
 
         // A list of commands to do
         Collection<Command> cmds = new LinkedList<Command>();
@@ -103,7 +103,7 @@
             // Find the node that is furthest from B (i.e. closest to A)
             distance = 0.0;
             for (Node n : nodes) {
-                double dist = Math.sqrt(nodeb.eastNorth.distance(n.eastNorth));
+                double dist = Math.sqrt(nodeb.getEastNorth().distance(n.getEastNorth()));
                 if (dist > distance) {
                     s = n;
                     distance = dist;
@@ -111,8 +111,8 @@
             }
 
             // First move the node to A's position, then move it towards B
-            double dx = ax - s.eastNorth.east() + (bx-ax)*pos/num;
-            double dy = ay - s.eastNorth.north() + (by-ay)*pos/num;
+            double dx = ax - s.getEastNorth().east() + (bx-ax)*pos/num;
+            double dy = ay - s.getEastNorth().north() + (by-ay)*pos/num;
 
             cmds.add(new MoveCommand(s, dx, dy));
 
Index: src/org/openstreetmap/josm/actions/OrthogonalizeAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/OrthogonalizeAction.java (revision 1638)
+++ src/org/openstreetmap/josm/actions/OrthogonalizeAction.java (working copy)
@@ -80,8 +80,8 @@
             for (int i1=0; i1 < way.nodes.size()-1; i1++) {
                 int i2 = (i1+1) % (way.nodes.size()-1);
                 int i3 = (i1+2) % (way.nodes.size()-1);
-                double angle1  =Math.abs(way.nodes.get(i1).eastNorth.heading(way.nodes.get(i2).eastNorth));
-                double angle2 = Math.abs(way.nodes.get(i2).eastNorth.heading(way.nodes.get(i3).eastNorth));
+                double angle1  =Math.abs(way.nodes.get(i1).getEastNorth().heading(way.nodes.get(i2).getEastNorth()));
+                double angle2 = Math.abs(way.nodes.get(i2).getEastNorth().heading(way.nodes.get(i3).getEastNorth()));
                 double delta = Math.abs(angle2 - angle1);
                 while(delta > Math.PI) delta -= Math.PI;
                 if(delta < Math.PI/4) {
@@ -116,7 +116,7 @@
         if (dirnodes.size() == 2) {
             // When selection contains two nodes, use the nodes to compute a direction
             // to align all ways to
-            align_to_heading = normalize_angle(dirnodes.get(0).eastNorth.heading(dirnodes.get(1).eastNorth));
+            align_to_heading = normalize_angle(dirnodes.get(0).getEastNorth().heading(dirnodes.get(1).getEastNorth()));
             use_dirnodes = true;
         }
 
@@ -130,7 +130,7 @@
             // Copy necessary data into a more suitable data structure
             EastNorth en[] = new EastNorth[sides];
             for (int i=0; i < sides; i++) {
-                en[i] = new EastNorth(way.nodes.get(i).eastNorth.east(), way.nodes.get(i).eastNorth.north());
+                en[i] = new EastNorth(way.nodes.get(i).getEastNorth().east(), way.nodes.get(i).getEastNorth().north());
             }
 
             if (! use_dirnodes) {
@@ -141,8 +141,8 @@
                 double headings[] = new double[sides];
                 double weights[] = new double[sides];
                 for (int i=0; i < sides; i++) {
-                    headings[i] = normalize_angle(way.nodes.get(i).eastNorth.heading(way.nodes.get(i+1).eastNorth));
-                    weights[i] = way.nodes.get(i).eastNorth.distance(way.nodes.get(i+1).eastNorth);
+                    headings[i] = normalize_angle(way.nodes.get(i).getEastNorth().heading(way.nodes.get(i+1).getEastNorth()));
+                    weights[i] = way.nodes.get(i).getEastNorth().distance(way.nodes.get(i+1).getEastNorth());
                 }
 
                 // CAVEAT: for orientations near -PI/4 or PI/4 the mapping into ONE orientation fails
@@ -231,9 +231,9 @@
                 Node n = way.nodes.get(i2);
 
                 LatLon ill = Main.proj.eastNorth2latlon(intersection);
-                if (!ill.equalsEpsilon(n.coor)) {
-                    double dx = intersection.east()-n.eastNorth.east();
-                    double dy = intersection.north()-n.eastNorth.north();
+                if (!ill.equalsEpsilon(n.getCoor())) {
+                    double dx = intersection.east()-n.getEastNorth().east();
+                    double dy = intersection.north()-n.getEastNorth().north();
                     cmds.add(new MoveCommand(n, dx, dy));
                 }
             }
Index: src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/mapmode/DrawAction.java  (revision 1638)
+++ src/org/openstreetmap/josm/actions/mapmode/DrawAction.java  (working copy)
@@ -331,7 +331,7 @@
         } else {
             // no node found in clicked area
             n = new Node(Main.map.mapView.getLatLon(e.getX(), e.getY()));
-            if (n.coor.isOutSideWorld()) {
+            if (n.getCoor().isOutSideWorld()) {
                 JOptionPane.showMessageDialog(Main.parent,
                     tr("Cannot add a node outside of the world."));
                 return;
@@ -646,7 +646,7 @@
         if (currentMouseNode != null) {
             // user clicked on node
             if (selection.isEmpty()) return;
-            currentMouseEastNorth = currentMouseNode.eastNorth;
+            currentMouseEastNorth = currentMouseNode.getEastNorth();
             mouseOnExistingNode = currentMouseNode;
         } else {
             // no node found in clicked area
@@ -689,10 +689,10 @@
 
         // find out the distance, in metres, between the base point and the mouse cursor
         LatLon mouseLatLon = Main.proj.eastNorth2latlon(currentMouseEastNorth);
-        distance = currentBaseNode.coor.greatCircleDistance(mouseLatLon);
-        double hdg = Math.toDegrees(currentBaseNode.coor.heading(mouseLatLon));
+        distance = currentBaseNode.getCoor().greatCircleDistance(mouseLatLon);
+        double hdg = Math.toDegrees(currentBaseNode.getCoor().heading(mouseLatLon));
         if (previousNode != null) {
-            angle = hdg - Math.toDegrees(previousNode.coor.heading(currentBaseNode.coor));
+            angle = hdg - Math.toDegrees(previousNode.getCoor().heading(currentBaseNode.getCoor()));
             if (angle < 0) angle += 360;
         }
         Main.map.statusLine.setAngle(angle);
@@ -771,11 +771,11 @@
             // the two segments and adjusts the node position.
             Iterator<Pair<Node,Node>> i = segs.iterator();
             Pair<Node,Node> seg = i.next();
-            EastNorth A = seg.a.eastNorth;
-            EastNorth B = seg.b.eastNorth;
+            EastNorth A = seg.a.getEastNorth();
+            EastNorth B = seg.b.getEastNorth();
             seg = i.next();
-            EastNorth C = seg.a.eastNorth;
-            EastNorth D = seg.b.eastNorth;
+            EastNorth C = seg.a.getEastNorth();
+            EastNorth D = seg.b.getEastNorth();
 
             double u=det(B.east() - A.east(), B.north() - A.north(), C.east() - D.east(), C.north() - D.north());
 
@@ -799,16 +799,16 @@
             // only adjust to intersection if within snapToIntersectionThreshold pixel of mouse click; otherwise
             // fall through to default action.
             // (for semi-parallel lines, intersection might be miles away!)
-            if (Main.map.mapView.getPoint(n.eastNorth).distance(Main.map.mapView.getPoint(intersection)) < snapToIntersectionThreshold) {
+            if (Main.map.mapView.getPoint(n.getEastNorth()).distance(Main.map.mapView.getPoint(intersection)) < snapToIntersectionThreshold) {
                 n.setEastNorth(intersection);
                 return;
             }
 
         default:
-            EastNorth P = n.eastNorth;
+            EastNorth P = n.getEastNorth();
             seg = segs.iterator().next();
-            A = seg.a.eastNorth;
-            B = seg.b.eastNorth;
+            A = seg.a.getEastNorth();
+            B = seg.b.getEastNorth();
             double a = P.distanceSq(B);
             double b = P.distanceSq(A);
             double c = A.distanceSq(B);
@@ -839,7 +839,7 @@
         g2.setColor(selectedColor);
         g2.setStroke(new BasicStroke(3, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
         GeneralPath b = new GeneralPath();
-        Point p1=mv.getPoint(currentBaseNode.eastNorth);
+        Point p1=mv.getPoint(currentBaseNode.getEastNorth());
         Point p2=mv.getPoint(currentMouseEastNorth);
 
         double t = Math.atan2(p2.y-p1.y, p2.x-p1.x) + Math.PI;
Index: src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java   (revision 1638)
+++ src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java   (working copy)
@@ -154,8 +154,8 @@
             Node n1 = selectedSegment.way.nodes.get(selectedSegment.lowerIndex);
             Node n2 = selectedSegment.way.nodes.get(selectedSegment.lowerIndex + 1);
 
-            EastNorth en1 = n1.eastNorth;
-            EastNorth en2 = n2.eastNorth;
+            EastNorth en1 = n1.getEastNorth();
+            EastNorth en2 = n2.getEastNorth();
             EastNorth en3 = mv.getEastNorth(mousePos.x, mousePos.y);
 
             double u = ((en3.east() - en1.east()) * (en2.east() - en1.east()) +
@@ -233,9 +233,9 @@
         if (mousePos.distance(initialMousePos) > 10) {
             Node n1 = selectedSegment.way.nodes.get(selectedSegment.lowerIndex);
             Node n2 = selectedSegment.way.nodes.get(selectedSegment.lowerIndex+1);
-            EastNorth en3 = n2.eastNorth.add(xoff, yoff);
+            EastNorth en3 = n2.getEastNorth().add(xoff, yoff);
             Node n3 = new Node(Main.proj.eastNorth2latlon(en3));
-            EastNorth en4 = n1.eastNorth.add(xoff, yoff);
+            EastNorth en4 = n1.getEastNorth().add(xoff, yoff);
             Node n4 = new Node(Main.proj.eastNorth2latlon(en4));
             Way wnew = new Way(selectedSegment.way);
             wnew.addNode(selectedSegment.lowerIndex+1, n3);
Index: src/org/openstreetmap/josm/actions/mapmode/SelectAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/mapmode/SelectAction.java    (revision 1638)
+++ src/org/openstreetmap/josm/actions/mapmode/SelectAction.java    (working copy)
@@ -223,7 +223,7 @@
                         c = new MoveCommand(selection, dx, dy));
 
                 for (Node n : affectedNodes) {
-                    if (n.coor.isOutSideWorld()) {
+                    if (n.getCoor().isOutSideWorld()) {
                         // Revert move
                         ((MoveCommand) c).moveAgain(-dx, -dy);
 
@@ -279,8 +279,8 @@
                 if(Main.pref.getInteger("mappaint.node.virtual-size", 8) > 0)
                 {
                     Way w = (Way)osm;
-                    Point p1 = c.getPoint(w.nodes.get(nearestWS.lowerIndex).eastNorth);
-                    Point p2 = c.getPoint(w.nodes.get(nearestWS.lowerIndex+1).eastNorth);
+                    Point p1 = c.getPoint(w.nodes.get(nearestWS.lowerIndex).getEastNorth());
+                    Point p2 = c.getPoint(w.nodes.get(nearestWS.lowerIndex+1).getEastNorth());
                     if(SimplePaintVisitor.isLargeSegment(p1, p2, Main.pref.getInteger("mappaint.node.virtual-space", 70)))
                     {
                         Point pc = new Point((p1.x+p2.x)/2, (p1.y+p2.y)/2);
Index: src/org/openstreetmap/josm/actions/PasteAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/PasteAction.java (revision 1638)
+++ src/org/openstreetmap/josm/actions/PasteAction.java (working copy)
@@ -42,8 +42,8 @@
         /* Find the middle of the pasteBuffer area */
         double maxEast = -1E100, minEast = 1E100, maxNorth = -1E100, minNorth = 1E100;
         for (Node n : pasteBuffer.nodes) {
-            double east = n.eastNorth.east();
-            double north = n.eastNorth.north();
+            double east = n.getEastNorth().east();
+            double north = n.getEastNorth().north();
             if (east > maxEast) { maxEast = east; }
             if (east < minEast) { minEast = east; }
             if (north > maxNorth) { maxNorth = north; }
@@ -69,7 +69,7 @@
             Node nnew = new Node(n);
             nnew.id = 0;
             if (Main.main.editLayer() == source) {
-                nnew.setEastNorth(nnew.eastNorth.add(offsetEast, offsetNorth));
+                nnew.setEastNorth(nnew.getEastNorth().add(offsetEast, offsetNorth));
             }
             map.put(n, nnew);
         }
Index: src/org/openstreetmap/josm/actions/JoinNodeWayAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/JoinNodeWayAction.java   (revision 1638)
+++ src/org/openstreetmap/josm/actions/JoinNodeWayAction.java   (working copy)
@@ -36,7 +36,7 @@
         Node node = (Node) sel.iterator().next();
 
         List<WaySegment> wss = Main.map.mapView.getNearestWaySegments(
-            Main.map.mapView.getPoint(node.eastNorth));
+            Main.map.mapView.getPoint(node.getEastNorth()));
         HashMap<Way, List<Integer>> insertPoints = new HashMap<Way, List<Integer>>();
         for (WaySegment ws : wss) {
             List<Integer> is;
Index: src/org/openstreetmap/josm/actions/MoveAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/MoveAction.java  (revision 1638)
+++ src/org/openstreetmap/josm/actions/MoveAction.java  (working copy)
@@ -98,7 +98,7 @@
                     c = new MoveCommand(selection, distx, disty));
 
         for (Node n : affectedNodes) {
-            if (n.coor.isOutSideWorld()) {
+            if (n.getCoor().isOutSideWorld()) {
                 // Revert move
                 ((MoveCommand) c).moveAgain(-distx, -disty);
                 JOptionPane.showMessageDialog(Main.parent,
Index: src/org/openstreetmap/josm/actions/AlignInCircleAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/AlignInCircleAction.java (revision 1638)
+++ src/org/openstreetmap/josm/actions/AlignInCircleAction.java (working copy)
@@ -88,7 +88,7 @@
         EastNorth result = new EastNorth(bx / (2 * a) + i.east(), -by / (2 * a) + i.north());
 
         Node n = new Node(Main.proj.eastNorth2latlon(result));
-        if (n.coor.isOutSideWorld()) {
+        if (n.getCoor().isOutSideWorld()) {
             JOptionPane.showMessageDialog(Main.parent, tr("Some of the nodes are (almost) in the line"));
             return null;
         }
@@ -162,9 +162,9 @@
                     regular = true;
                 } else {
 
-                    center = ((Node) nodes.toArray()[way.nodes.contains(nodes.toArray()[0]) ? 1 : 0]).eastNorth;
+                    center = ((Node) nodes.toArray()[way.nodes.contains(nodes.toArray()[0]) ? 1 : 0]).getEastNorth();
                     if (nodes.size() == 2)
-                        radius = distance(((Node) nodes.toArray()[0]).eastNorth, ((Node) nodes.toArray()[1]).eastNorth);
+                        radius = distance(((Node) nodes.toArray()[0]).getEastNorth(), ((Node) nodes.toArray()[1]).getEastNorth());
                 }
                 nodes = new LinkedList<Node>();
             }
@@ -190,7 +190,7 @@
                 n2 = n1;
                 n1 = n0;
                 n0 = n;
-                EastNorth cc = circumcenter(n0.eastNorth, n1.eastNorth, n2.eastNorth);
+                EastNorth cc = circumcenter(n0.getEastNorth(), n1.getEastNorth(), n2.getEastNorth());
                 if (cc == null)
                     return;
                 center = new EastNorth(center.east() + cc.east(), center.north()
@@ -208,7 +208,7 @@
         // relative to the distance from the N or S poles.
         if (radius == 0) {
             for (Node n : nodes) {
-                radius += distance(center, n.eastNorth);
+                radius += distance(center, n.getEastNorth());
             }
             radius = radius / nodes.size();
         }
@@ -219,23 +219,23 @@
 
         if (regular) { // Make a regular polygon
             double angle = Math.PI * 2 / nodes.size();
-            pc = new PolarCoor(((Node) nodes.toArray()[0]).eastNorth, center, 0);
+            pc = new PolarCoor(((Node) nodes.toArray()[0]).getEastNorth(), center, 0);
 
-            if (pc.angle > (new PolarCoor(((Node) nodes.toArray()[1]).eastNorth, center, 0).angle))
+            if (pc.angle > (new PolarCoor(((Node) nodes.toArray()[1]).getEastNorth(), center, 0).angle))
                 angle *= -1;
 
             pc.radius = radius;
             for (Node n : nodes) {
                 EastNorth no = pc.toEastNorth();
-                cmds.add(new MoveCommand(n, no.east() - n.eastNorth.east(), no.north() - n.eastNorth.north()));
+                cmds.add(new MoveCommand(n, no.east() - n.getEastNorth().east(), no.north() - n.getEastNorth().north()));
                 pc.angle += angle;
             }
         } else { // Move each node to that distance from the centre.
             for (Node n : nodes) {
-                pc = new PolarCoor(n.eastNorth, center, 0);
+                pc = new PolarCoor(n.getEastNorth(), center, 0);
                 pc.radius = radius;
                 EastNorth no = pc.toEastNorth();
-                cmds.add(new MoveCommand(n, no.east() - n.eastNorth.east(), no.north() - n.eastNorth.north()));
+                cmds.add(new MoveCommand(n, no.east() - n.getEastNorth().east(), no.north() - n.getEastNorth().north()));
             }
         }
 
Index: src/org/openstreetmap/josm/actions/AlignInLineAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/AlignInLineAction.java   (revision 1638)
+++ src/org/openstreetmap/josm/actions/AlignInLineAction.java   (working copy)
@@ -70,7 +70,7 @@
         for (Node n : nodes) {
             itnodes.remove(n);
             for (Node m : itnodes) {
-                double dist = Math.sqrt(n.eastNorth.distance(m.eastNorth));
+                double dist = Math.sqrt(n.getEastNorth().distance(m.getEastNorth()));
                 if (dist > distance) {
                     nodea = n;
                     nodeb = m;
@@ -84,10 +84,10 @@
         nodes.remove(nodeb);
 
         // Find out co-ords of A and B
-        double ax = nodea.eastNorth.east();
-        double ay = nodea.eastNorth.north();
-        double bx = nodeb.eastNorth.east();
-        double by = nodeb.eastNorth.north();
+        double ax = nodea.getEastNorth().east();
+        double ay = nodea.getEastNorth().north();
+        double bx = nodeb.getEastNorth().east();
+        double by = nodeb.getEastNorth().north();
 
         // A list of commands to do
         Collection<Command> cmds = new LinkedList<Command>();
@@ -95,8 +95,8 @@
         // OK, for each node to move, work out where to move it!
         for (Node n : nodes) {
             // Get existing co-ords of node to move
-            double nx = n.eastNorth.east();
-            double ny = n.eastNorth.north();
+            double nx = n.getEastNorth().east();
+            double ny = n.getEastNorth().north();
 
             if (ax == bx) {
                 // Special case if AB is vertical...
@@ -109,14 +109,14 @@
                 double m1 = (by - ay) / (bx - ax);
                 double c1 = ay - (ax * m1);
                 double m2 = (-1) / m1;
-                double c2 = n.eastNorth.north() - (n.eastNorth.east() * m2);
+                double c2 = n.getEastNorth().north() - (n.getEastNorth().east() * m2);
 
                 nx = (c2 - c1) / (m1 - m2);
                 ny = (m1 * nx) + c1;
             }
 
             // Add the command to move the node to its new position.
-            cmds.add(new MoveCommand(n, nx - n.eastNorth.east(), ny - n.eastNorth.north() ));
+            cmds.add(new MoveCommand(n, nx - n.getEastNorth().east(), ny - n.getEastNorth().north() ));
         }
 
         // Do it!
Index: src/org/openstreetmap/josm/actions/CreateCircleAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/CreateCircleAction.java  (revision 1638)
+++ src/org/openstreetmap/josm/actions/CreateCircleAction.java  (working copy)
@@ -104,14 +104,14 @@
 
         // let's get some shorter names
         Node   n1 = ((Node)nodes.toArray()[0]);
-        double x1 = n1.eastNorth.east();
-        double y1 = n1.eastNorth.north();
+        double x1 = n1.getEastNorth().east();
+        double y1 = n1.getEastNorth().north();
         Node   n2 = ((Node)nodes.toArray()[1]);
-        double x2 = n2.eastNorth.east();
-        double y2 = n2.eastNorth.north();
+        double x2 = n2.getEastNorth().east();
+        double y2 = n2.getEastNorth().north();
         Node   n3 = ((Node)nodes.toArray()[2]);
-        double x3 = n3.eastNorth.east();
-        double y3 = n3.eastNorth.north();
+        double x3 = n3.getEastNorth().east();
+        double y3 = n3.getEastNorth().north();
 
         // calculate the center (xc/yc)
         double s = 0.5*((x2 - x3)*(x1 - x3) - (y2 - y3)*(y3 - y1));
Index: src/org/openstreetmap/josm/command/RotateCommand.java
===================================================================
--- src/org/openstreetmap/josm/command/RotateCommand.java   (revision 1638)
+++ src/org/openstreetmap/josm/command/RotateCommand.java   (working copy)
@@ -63,8 +63,8 @@
 
         for (Node n : this.objects) {
             MoveCommand.OldState os = new MoveCommand.OldState();
-            os.eastNorth = n.eastNorth;
-            os.latlon = n.coor;
+            os.eastNorth = n.getEastNorth();
+            os.latlon = n.getCoor();
             os.modified = n.modified;
             oldState.put(n, os);
             pivot = pivot.add(os.eastNorth.east(), os.eastNorth.north());
Index: src/org/openstreetmap/josm/command/MoveCommand.java
===================================================================
--- src/org/openstreetmap/josm/command/MoveCommand.java (revision 1638)
+++ src/org/openstreetmap/josm/command/MoveCommand.java (working copy)
@@ -69,8 +69,8 @@
         this.objects = AllNodesVisitor.getAllNodes(objects);
         for (Node n : this.objects) {
             OldState os = new OldState();
-            os.eastNorth = n.eastNorth;
-            os.latlon = n.coor;
+            os.eastNorth = n.getEastNorth();
+            os.latlon = n.getCoor();
             os.modified = n.modified;
             oldState.add(os);
         }
@@ -86,7 +86,7 @@
      */
     public void moveAgain(double x, double y) {
         for (Node n : objects) {
-            n.setEastNorth(n.eastNorth.add(x, y));
+            n.setEastNorth(n.getEastNorth().add(x, y));
         }
         this.x += x;
         this.y += y;
@@ -94,7 +94,7 @@
 
     @Override public boolean executeCommand() {
         for (Node n : objects) {
-            n.setEastNorth(n.eastNorth.add(x, y));
+            n.setEastNorth(n.getEastNorth().add(x, y));
             n.modified = true;
         }
         return true;
Index: src/org/openstreetmap/josm/command/DeleteCommand.java
===================================================================
--- src/org/openstreetmap/josm/command/DeleteCommand.java   (revision 1638)
+++ src/org/openstreetmap/josm/command/DeleteCommand.java   (working copy)
@@ -339,7 +339,7 @@
             for (OsmPrimitive osm : del) {
                 if (osm instanceof Node && osm.id != 0) {
                     Node n = (Node) osm;
-                    if (!a.contains(n.coor)) {
+                    if (!a.contains(n.getCoor())) {
                         JPanel msg = new JPanel(new GridBagLayout());
                         msg.add(new JLabel(
                             "<html>" +
Index: src/org/openstreetmap/josm/data/osm/visitor/MergeVisitor.java
===================================================================
--- src/org/openstreetmap/josm/data/osm/visitor/MergeVisitor.java   (revision 1638)
+++ src/org/openstreetmap/josm/data/osm/visitor/MergeVisitor.java   (working copy)
@@ -162,7 +162,7 @@
     }
 
     private static boolean realMatch(Node n1, Node n2) {
-        return n1.coor.equalsEpsilon(n2.coor);
+        return n1.getCoor().equalsEpsilon(n2.getCoor());
     }
 
     private static boolean realMatch(Way w1, Way w2) {
Index: src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java
===================================================================
--- src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java (revision 1638)
+++ src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java (working copy)
@@ -270,10 +270,10 @@
     public void visitVirtual(Way w) {
         Iterator<Node> it = w.nodes.iterator();
         if (it.hasNext()) {
-            Point lastP = nc.getPoint(it.next().eastNorth);
+            Point lastP = nc.getPoint(it.next().getEastNorth());
             while(it.hasNext())
             {
-                Point p = nc.getPoint(it.next().eastNorth);
+                Point p = nc.getPoint(it.next().getEastNorth());
                 if(isSegmentVisible(lastP, p) && isLargeSegment(lastP, p, virtualNodeSpace))
                 {
                     int x = (p.x+lastP.x)/2;
@@ -320,9 +320,9 @@
 
         Iterator<Node> it = w.nodes.iterator();
         if (it.hasNext()) {
-            Point lastP = nc.getPoint(it.next().eastNorth);
+            Point lastP = nc.getPoint(it.next().getEastNorth());
             for (int orderNumber = 1; it.hasNext(); orderNumber++) {
-                Point p = nc.getPoint(it.next().eastNorth);
+                Point p = nc.getPoint(it.next().getEastNorth());
                 drawSegment(lastP, p, wayColor,
                     showOnlyHeadArrowOnly ? !it.hasNext() : showThisDirectionArrow);
                 if (showOrderNumber)
@@ -351,7 +351,7 @@
             if (m.member.incomplete || m.member.deleted) continue;
 
             if (m.member instanceof Node) {
-                Point p = nc.getPoint(((Node) m.member).eastNorth);
+                Point p = nc.getPoint(((Node) m.member).getEastNorth());
                 if (p.x < 0 || p.y < 0
                     || p.x > nc.getWidth() || p.y > nc.getHeight()) continue;
 
@@ -362,7 +362,7 @@
                 boolean first = true;
                 for (Node n : ((Way) m.member).nodes) {
                     if (n.incomplete || n.deleted) continue;
-                    Point p = nc.getPoint(n.eastNorth);
+                    Point p = nc.getPoint(n.getEastNorth());
                     if (first) {
                         path.moveTo(p.x, p.y);
                         first = false;
@@ -409,7 +409,7 @@
      */
     public void drawNode(Node n, Color color, int size, int radius, boolean fill) {
         if (size > 1) {
-            Point p = nc.getPoint(n.eastNorth);
+            Point p = nc.getPoint(n.getEastNorth());
             if ((p.x < 0) || (p.y < 0) || (p.x > nc.getWidth())
                     || (p.y > nc.getHeight()))
                 return;
Index: src/org/openstreetmap/josm/data/osm/visitor/BoundingXYVisitor.java
===================================================================
--- src/org/openstreetmap/josm/data/osm/visitor/BoundingXYVisitor.java  (revision 1638)
+++ src/org/openstreetmap/josm/data/osm/visitor/BoundingXYVisitor.java  (working copy)
@@ -21,7 +21,7 @@
     public EastNorth min, max;
 
     public void visit(Node n) {
-        visit(n.eastNorth);
+        visit(n.getEastNorth());
     }
 
     public void visit(Way w) {
Index: src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java
===================================================================
--- src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java    (revision 1638)
+++ src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java    (working copy)
@@ -133,10 +133,10 @@
      */
     public void visit(Node n) {
         /* check, if the node is visible at all */
-        if((n.eastNorth.east()  > maxEN.east() ) ||
-           (n.eastNorth.north() > maxEN.north()) ||
-           (n.eastNorth.east()  < minEN.east() ) ||
-           (n.eastNorth.north() < minEN.north()))
+        if((n.getEastNorth().east()  > maxEN.east() ) ||
+           (n.getEastNorth().north() > maxEN.north()) ||
+           (n.getEastNorth().east()  < minEN.east() ) ||
+           (n.getEastNorth().north() < minEN.north()))
         {
             n.mappaintVisibleCode = viewid;
             return;
@@ -179,10 +179,10 @@
 
         for (Node n : w.nodes)
         {
-            if(n.eastNorth.east() > maxx) maxx = n.eastNorth.east();
-            if(n.eastNorth.north() > maxy) maxy = n.eastNorth.north();
-            if(n.eastNorth.east() < minx) minx = n.eastNorth.east();
-            if(n.eastNorth.north() < miny) miny = n.eastNorth.north();
+            if(n.getEastNorth().east() > maxx) maxx = n.getEastNorth().east();
+            if(n.getEastNorth().north() > maxy) maxy = n.getEastNorth().north();
+            if(n.getEastNorth().east() < minx) minx = n.getEastNorth().east();
+            if(n.getEastNorth().north() < miny) miny = n.getEastNorth().north();
         }
 
         if ((minx > maxEN.east()) ||
@@ -649,8 +649,8 @@
             fromNode = fromWay.nodes.get(fromWay.nodes.size()-2);
         }
 
-        Point pFrom = nc.getPoint(fromNode.eastNorth);
-        Point pVia = nc.getPoint(viaNode.eastNorth);
+        Point pFrom = nc.getPoint(fromNode.getEastNorth());
+        Point pVia = nc.getPoint(viaNode.getEastNorth());
 
         //if(restrictionDebug) {
         /* find the "direct" node after the via node */
@@ -886,7 +886,7 @@
                         way = w;
                         for (Node n : w.nodes)
                         {
-                            p = nc.getPoint(n.eastNorth);
+                            p = nc.getPoint(n.getEastNorth());
                             poly.addPoint(p.x,p.y);
                         }
                     }
@@ -940,12 +940,12 @@
 
                     for (Node n : wInner.nodes)
                     {
-                        Point pInner = nc.getPoint(n.eastNorth);
+                        Point pInner = nc.getPoint(n.getEastNorth());
                         polygon.addPoint(pInner.x,pInner.y);
                     }
                     if(!wInner.isClosed())
                     {
-                        Point pInner = nc.getPoint(wInner.nodes.get(0).eastNorth);
+                        Point pInner = nc.getPoint(wInner.nodes.get(0).getEastNorth());
                         polygon.addPoint(pInner.x,pInner.y);
                     }
                     PolyData o = null;
@@ -1064,7 +1064,7 @@
 
         for (Node n : w.nodes)
         {
-            Point p = nc.getPoint(n.eastNorth);
+            Point p = nc.getPoint(n.getEastNorth());
             polygon.addPoint(p.x,p.y);
         }
         return polygon;
@@ -1087,7 +1087,7 @@
     }
 
     protected void drawNode(Node n, ImageIcon icon, boolean annotate, Boolean selected) {
-        Point p = nc.getPoint(n.eastNorth);
+        Point p = nc.getPoint(n.getEastNorth());
         if ((p.x < 0) || (p.y < 0) || (p.x > nc.getWidth()) || (p.y > nc.getHeight())) return;
 
         //profilerVisibleNodes++;
@@ -1129,8 +1129,8 @@
         if (col != currentColor || width != currentWidth || !Arrays.equals(dashed,currentDashed) || dashedColor != currentDashedColor) {
             displaySegments(col, width, dashed, dashedColor);
         }
-        Point p1 = nc.getPoint(n1.eastNorth);
-        Point p2 = nc.getPoint(n2.eastNorth);
+        Point p1 = nc.getPoint(n1.getEastNorth());
+        Point p2 = nc.getPoint(n2.getEastNorth());
 
         if (!isSegmentVisible(p1, p2)) {
             return;
@@ -1208,7 +1208,7 @@
      */
     public void drawNode(Node n, Color color, int size, int radius, boolean fill) {
         if (isZoomOk(null) && size > 1) {
-            Point p = nc.getPoint(n.eastNorth);
+            Point p = nc.getPoint(n.getEastNorth());
             if ((p.x < 0) || (p.y < 0) || (p.x > nc.getWidth())
                     || (p.y > nc.getHeight()))
                 return;
@@ -1455,8 +1455,8 @@
      * parents way
      */
     protected void drawOrderNumber(Node n1, Node n2, int orderNumber) {
-        Point p1 = nc.getPoint(n1.eastNorth);
-        Point p2 = nc.getPoint(n2.eastNorth);
+        Point p1 = nc.getPoint(n1.getEastNorth());
+        Point p2 = nc.getPoint(n2.getEastNorth());
         drawOrderNumber(p1, p2, orderNumber);
     }
 }
Index: src/org/openstreetmap/josm/data/osm/Node.java
===================================================================
--- src/org/openstreetmap/josm/data/osm/Node.java   (revision 1638)
+++ src/org/openstreetmap/josm/data/osm/Node.java   (working copy)
@@ -19,21 +19,29 @@
 
     public LatLon coor;
     public volatile EastNorth eastNorth;
-        
-    public void setCoor(LatLon coor) {
+
+    public final void setCoor(LatLon coor) {
         this.coor = coor;
-        this.eastNorth = Main.proj.latlon2eastNorth(coor); 
+        this.eastNorth = Main.proj.latlon2eastNorth(coor);
     }
-        
-    public void setEastNorth(EastNorth eastNorth) {
+
+    public final LatLon getCoor() {
+        return coor;
+    }
+
+    public final void setEastNorth(EastNorth eastNorth) {
        this.eastNorth = eastNorth;
        this.coor = Main.proj.eastNorth2latlon(eastNorth);
     }
-    
-    public void setEastNorth(double east, double north) {
+
+    public final void setEastNorth(double east, double north) {
         this.setEastNorth(new EastNorth(east, north));
     }
-    
+
+    public final EastNorth getEastNorth() {
+        return eastNorth;
+    }
+
     private static CoordinateFormat mCord;
 
     static {
@@ -106,4 +114,5 @@
         }
         return name;
     }
+
 }
Index: src/org/openstreetmap/josm/data/conflict/PositionConflict.java
===================================================================
--- src/org/openstreetmap/josm/data/conflict/PositionConflict.java  (revision 1638)
+++ src/org/openstreetmap/josm/data/conflict/PositionConflict.java  (working copy)
@@ -9,11 +9,11 @@
 public class PositionConflict extends ConflictItem {
 
     @Override public boolean hasConflict(OsmPrimitive key, OsmPrimitive value) {
-        return key instanceof Node && !((Node)key).coor.equals(((Node)value).coor);
+        return key instanceof Node && !((Node)key).getCoor().equals(((Node)value).getCoor());
     }
 
     @Override protected String str(OsmPrimitive osm) {
-        return osm instanceof Node ? ((Node)osm).coor.lat()+", "+((Node)osm).coor.lon() : null;
+        return osm instanceof Node ? ((Node)osm).getCoor().lat()+", "+((Node)osm).getCoor().lon() : null;
     }
 
     @Override public String key() {
@@ -22,7 +22,7 @@
 
     @Override public void apply(OsmPrimitive target, OsmPrimitive other) {
         if (target instanceof Node) {
-            ((Node)target).setEastNorth(((Node)other).eastNorth);
+            ((Node)target).setEastNorth(((Node)other).getEastNorth());
             int newversion = Math.max(target.version, other.version);
             // set version on "other" as well in case user decides to keep local
             target.version = newversion;
Index: src/org/openstreetmap/josm/gui/SelectionManager.java
===================================================================
--- src/org/openstreetmap/josm/gui/SelectionManager.java    (revision 1638)
+++ src/org/openstreetmap/josm/gui/SelectionManager.java    (working copy)
@@ -279,7 +279,7 @@
         } else {
             // nodes
             for (Node n : nc.getData().nodes) {
-                if (!n.deleted && !n.incomplete && r.contains(nc.getPoint(n.eastNorth)))
+                if (!n.deleted && !n.incomplete && r.contains(nc.getPoint(n.getEastNorth())))
                     selection.add(n);
             }
 
@@ -289,7 +289,7 @@
                         continue;
                 if (alt) {
                     for (Node n : w.nodes) {
-                        if (!n.incomplete && r.contains(nc.getPoint(n.eastNorth))) {
+                        if (!n.incomplete && r.contains(nc.getPoint(n.getEastNorth()))) {
                             selection.add(w);
                             break;
                         }
@@ -297,7 +297,7 @@
                 } else {
                     boolean allIn = true;
                     for (Node n : w.nodes) {
-                        if (!n.incomplete && !r.contains(nc.getPoint(n.eastNorth))) {
+                        if (!n.incomplete && !r.contains(nc.getPoint(n.getEastNorth()))) {
                             allIn = false;
                             break;
                         }
Index: src/org/openstreetmap/josm/gui/conflict/relation/RelationMemberTableCellRenderer.java
===================================================================
--- src/org/openstreetmap/josm/gui/conflict/relation/RelationMemberTableCellRenderer.java   (revision 1638)
+++ src/org/openstreetmap/josm/gui/conflict/relation/RelationMemberTableCellRenderer.java   (working copy)
@@ -81,10 +81,10 @@
         if (primitive instanceof Node) {
             Node n = (Node)primitive;
             sb.append(" (");
-            if (n.coor != null) {
-                sb.append(COORD_FORMATTER.format(n.coor.lat()));
+            if (n.getCoor() != null) {
+                sb.append(COORD_FORMATTER.format(n.getCoor().lat()));
                 sb.append(",");
-                sb.append(COORD_FORMATTER.format(n.coor.lon()));
+                sb.append(COORD_FORMATTER.format(n.getCoor().lon()));
             } else {
                 sb.append("?,?");
             }
Index: src/org/openstreetmap/josm/gui/conflict/nodes/NodeListTableCellRenderer.java
===================================================================
--- src/org/openstreetmap/josm/gui/conflict/nodes/NodeListTableCellRenderer.java    (revision 1638)
+++ src/org/openstreetmap/josm/gui/conflict/nodes/NodeListTableCellRenderer.java    (working copy)
@@ -64,10 +64,10 @@
         }
         sb.append(" (");
 
-        if (node.coor != null) {
-            sb.append(COORD_FORMATTER.format(node.coor.lat()));
+        if (node.getCoor() != null) {
+            sb.append(COORD_FORMATTER.format(node.getCoor().lat()));
             sb.append(",");
-            sb.append(COORD_FORMATTER.format(node.coor.lon()));
+            sb.append(COORD_FORMATTER.format(node.getCoor().lon()));
         } else {
             sb.append("?,?");
         }
Index: src/org/openstreetmap/josm/gui/NavigatableComponent.java
===================================================================
--- src/org/openstreetmap/josm/gui/NavigatableComponent.java    (revision 1638)
+++ src/org/openstreetmap/josm/gui/NavigatableComponent.java    (working copy)
@@ -157,7 +157,7 @@
         for (Node n : getData().nodes) {
             if (n.deleted || n.incomplete)
                 continue;
-            Point sp = getPoint(n.eastNorth);
+            Point sp = getPoint(n.getEastNorth());
             double dist = p.distanceSq(sp);
             if (dist < minDistanceSq) {
                 minDistanceSq = dist;
@@ -192,8 +192,8 @@
                     continue;
                 }
 
-                Point A = getPoint(lastN.eastNorth);
-                Point B = getPoint(n.eastNorth);
+                Point A = getPoint(lastN.getEastNorth());
+                Point B = getPoint(n.getEastNorth());
                 double c = A.distanceSq(B);
                 double a = p.distanceSq(B);
                 double b = p.distanceSq(A);
@@ -301,8 +301,8 @@
                     lastN = n;
                     continue;
                 }
-                Point A = getPoint(lastN.eastNorth);
-                Point B = getPoint(n.eastNorth);
+                Point A = getPoint(lastN.getEastNorth());
+                Point B = getPoint(n.getEastNorth());
                 double c = A.distanceSq(B);
                 double a = p.distanceSq(B);
                 double b = p.distanceSq(A);
@@ -316,7 +316,7 @@
             }
         for (Node n : getData().nodes) {
             if (!n.deleted && !n.incomplete
-                    && getPoint(n.eastNorth).distanceSq(p) < snapDistance) {
+                    && getPoint(n.getEastNorth()).distanceSq(p) < snapDistance) {
                 nearest.add(n);
             }
         }
@@ -335,7 +335,7 @@
         Collection<Node> nearest = new HashSet<Node>();
         for (Node n : getData().nodes) {
             if (!n.deleted && !n.incomplete
-                    && getPoint(n.eastNorth).distanceSq(p) < snapDistance) {
+                    && getPoint(n.getEastNorth()).distanceSq(p) < snapDistance) {
                 nearest.add(n);
             }
         }
Index: src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java
===================================================================
--- src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java  (revision 1638)
+++ src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java  (working copy)
@@ -201,12 +201,12 @@
         g.setColor(preferencesColor);
         Visitor conflictPainter = new AbstractVisitor(){
             public void visit(Node n) {
-                Point p = nc.getPoint(n.eastNorth);
+                Point p = nc.getPoint(n.getEastNorth());
                 g.drawRect(p.x-1, p.y-1, 2, 2);
             }
             public void visit(Node n1, Node n2) {
-                Point p1 = nc.getPoint(n1.eastNorth);
-                Point p2 = nc.getPoint(n2.eastNorth);
+                Point p1 = nc.getPoint(n1.getEastNorth());
+                Point p2 = nc.getPoint(n2.getEastNorth());
                 g.drawLine(p1.x, p1.y, p2.x, p2.y);
             }
             public void visit(Way w) {
Index: src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
===================================================================
--- src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java  (revision 1638)
+++ src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java  (working copy)
@@ -426,7 +426,7 @@
                 if (!n.isTagged()) {
                     doneNodes.add(n);
                 }
-                WayPoint wpt = new WayPoint(n.coor);                
+                WayPoint wpt = new WayPoint(n.getCoor());                
                 if (!n.isTimestampEmpty())
                 {
                     wpt.attr.put("time", DateUtils.fromDate(n.getTimestamp()));
@@ -440,7 +440,7 @@
         // records them?
         for (Node n : data.nodes) {
             if (n.incomplete || n.deleted || doneNodes.contains(n)) continue;
-            WayPoint wpt = new WayPoint(n.coor);
+            WayPoint wpt = new WayPoint(n.getCoor());
             if (!n.isTimestampEmpty()) {
                 wpt.attr.put("time", DateUtils.fromDate(n.getTimestamp()));
                 wpt.setTime();
