Index: trunk/src/org/openstreetmap/josm/actions/JoinNodeWayAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/JoinNodeWayAction.java	(revision 1724)
+++ trunk/src/org/openstreetmap/josm/actions/JoinNodeWayAction.java	(revision 1725)
@@ -37,5 +37,5 @@
 
         List<WaySegment> wss = Main.map.mapView.getNearestWaySegments(
-            Main.map.mapView.getPoint(node.getEastNorth()));
+            Main.map.mapView.getPoint(node));
         HashMap<Way, List<Integer>> insertPoints = new HashMap<Way, List<Integer>>();
         for (WaySegment ws : wss) {
Index: trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(revision 1724)
+++ trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(revision 1725)
@@ -798,5 +798,5 @@
             // fall through to default action.
             // (for semi-parallel lines, intersection might be miles away!)
-            if (Main.map.mapView.getPoint(n.getEastNorth()).distance(Main.map.mapView.getPoint(intersection)) < snapToIntersectionThreshold) {
+            if (Main.map.mapView.getPoint(n).distance(Main.map.mapView.getPoint(intersection)) < snapToIntersectionThreshold) {
                 n.setEastNorth(intersection);
                 return;
@@ -838,5 +838,5 @@
         g2.setStroke(new BasicStroke(3, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
         GeneralPath b = new GeneralPath();
-        Point p1=mv.getPoint(currentBaseNode.getEastNorth());
+        Point p1=mv.getPoint(currentBaseNode);
         Point p2=mv.getPoint(currentMouseEastNorth);
 
Index: trunk/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java	(revision 1724)
+++ trunk/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java	(revision 1725)
@@ -282,6 +282,6 @@
                 {
                     Way w = (Way)osm;
-                    Point p1 = c.getPoint(w.nodes.get(nearestWS.lowerIndex).getEastNorth());
-                    Point p2 = c.getPoint(w.nodes.get(nearestWS.lowerIndex+1).getEastNorth());
+                    Point p1 = c.getPoint(w.nodes.get(nearestWS.lowerIndex));
+                    Point p2 = c.getPoint(w.nodes.get(nearestWS.lowerIndex+1));
                     if(SimplePaintVisitor.isLargeSegment(p1, p2, Main.pref.getInteger("mappaint.node.virtual-space", 70)))
                     {
Index: trunk/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java	(revision 1724)
+++ trunk/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java	(revision 1725)
@@ -650,6 +650,6 @@
         }
 
-        Point pFrom = nc.getPoint(fromNode.getEastNorth());
-        Point pVia = nc.getPoint(viaNode.getEastNorth());
+        Point pFrom = nc.getPoint(fromNode);
+        Point pVia = nc.getPoint(viaNode);
 
         //if(restrictionDebug) {
@@ -663,5 +663,5 @@
         //        toNode = toWay.nodes.get(toWay.nodes.size()-2);
         //    }
-        //    Point pTo = nc.getPoint(toNode.eastNorth);
+        //    Point pTo = nc.getPoint(toNode);
 
         //    /* debug output of interesting nodes */
@@ -887,5 +887,5 @@
                         for (Node n : w.nodes)
                         {
-                            p = nc.getPoint(n.getEastNorth());
+                            p = nc.getPoint(n);
                             poly.addPoint(p.x,p.y);
                         }
@@ -941,10 +941,10 @@
                     for (Node n : wInner.nodes)
                     {
-                        Point pInner = nc.getPoint(n.getEastNorth());
+                        Point pInner = nc.getPoint(n);
                         polygon.addPoint(pInner.x,pInner.y);
                     }
                     if(!wInner.isClosed())
                     {
-                        Point pInner = nc.getPoint(wInner.nodes.get(0).getEastNorth());
+                        Point pInner = nc.getPoint(wInner.nodes.get(0));
                         polygon.addPoint(pInner.x,pInner.y);
                     }
@@ -1065,5 +1065,5 @@
         for (Node n : w.nodes)
         {
-            Point p = nc.getPoint(n.getEastNorth());
+            Point p = nc.getPoint(n);
             polygon.addPoint(p.x,p.y);
         }
@@ -1088,5 +1088,5 @@
 
     protected void drawNode(Node n, ImageIcon icon, boolean annotate, Boolean selected) {
-        Point p = nc.getPoint(n.getEastNorth());
+        Point p = nc.getPoint(n);
         if ((p.x < 0) || (p.y < 0) || (p.x > nc.getWidth()) || (p.y > nc.getHeight())) return;
 
@@ -1130,6 +1130,6 @@
             displaySegments(col, width, dashed, dashedColor);
         }
-        Point p1 = nc.getPoint(n1.getEastNorth());
-        Point p2 = nc.getPoint(n2.getEastNorth());
+        Point p1 = nc.getPoint(n1);
+        Point p2 = nc.getPoint(n2);
 
         if (!isSegmentVisible(p1, p2)) {
@@ -1209,5 +1209,5 @@
     public void drawNode(Node n, Color color, int size, int radius, boolean fill) {
         if (isZoomOk(null) && size > 1) {
-            Point p = nc.getPoint(n.getEastNorth());
+            Point p = nc.getPoint(n);
             if ((p.x < 0) || (p.y < 0) || (p.x > nc.getWidth())
                     || (p.y > nc.getHeight()))
@@ -1456,6 +1456,6 @@
      */
     protected void drawOrderNumber(Node n1, Node n2, int orderNumber) {
-        Point p1 = nc.getPoint(n1.getEastNorth());
-        Point p2 = nc.getPoint(n2.getEastNorth());
+        Point p1 = nc.getPoint(n1);
+        Point p2 = nc.getPoint(n2);
         drawOrderNumber(p1, p2, orderNumber);
     }
Index: trunk/src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java	(revision 1724)
+++ trunk/src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java	(revision 1725)
@@ -271,8 +271,8 @@
         Iterator<Node> it = w.nodes.iterator();
         if (it.hasNext()) {
-            Point lastP = nc.getPoint(it.next().getEastNorth());
+            Point lastP = nc.getPoint(it.next());
             while(it.hasNext())
             {
-                Point p = nc.getPoint(it.next().getEastNorth());
+                Point p = nc.getPoint(it.next());
                 if(isSegmentVisible(lastP, p) && isLargeSegment(lastP, p, virtualNodeSpace))
                 {
@@ -321,7 +321,7 @@
         Iterator<Node> it = w.nodes.iterator();
         if (it.hasNext()) {
-            Point lastP = nc.getPoint(it.next().getEastNorth());
+            Point lastP = nc.getPoint(it.next());
             for (int orderNumber = 1; it.hasNext(); orderNumber++) {
-                Point p = nc.getPoint(it.next().getEastNorth());
+                Point p = nc.getPoint(it.next());
                 drawSegment(lastP, p, wayColor,
                     showOnlyHeadArrowOnly ? !it.hasNext() : showThisDirectionArrow);
@@ -352,5 +352,5 @@
 
             if (m.member instanceof Node) {
-                Point p = nc.getPoint(((Node) m.member).getEastNorth());
+                Point p = nc.getPoint((Node) m.member);
                 if (p.x < 0 || p.y < 0
                     || p.x > nc.getWidth() || p.y > nc.getHeight()) continue;
@@ -363,5 +363,5 @@
                 for (Node n : ((Way) m.member).nodes) {
                     if (n.incomplete || n.deleted) continue;
-                    Point p = nc.getPoint(n.getEastNorth());
+                    Point p = nc.getPoint(n);
                     if (first) {
                         path.moveTo(p.x, p.y);
@@ -410,5 +410,5 @@
     public void drawNode(Node n, Color color, int size, int radius, boolean fill) {
         if (size > 1) {
-            Point p = nc.getPoint(n.getEastNorth());
+            Point p = nc.getPoint(n);
             if ((p.x < 0) || (p.y < 0) || (p.x > nc.getWidth())
                     || (p.y > nc.getHeight()))
Index: trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 1724)
+++ trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 1725)
@@ -18,4 +18,5 @@
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.ProjectionBounds;
+import org.openstreetmap.josm.data.coor.CachedLatLon;
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.coor.LatLon;
@@ -149,4 +150,16 @@
     }
 
+    public Point getPoint(LatLon latlon) {
+        if(latlon == null)
+            return new Point();
+        else if(latlon instanceof CachedLatLon)
+            return getPoint(((CachedLatLon)latlon).getEastNorth());
+        else
+            return getPoint(getProjection().latlon2eastNorth(latlon));
+    }
+    public Point getPoint(Node n) {
+        return getPoint(n.getEastNorth());
+    }
+
     /**
      * Zoom to the given coordinate.
@@ -179,4 +192,11 @@
     }
 
+    public void zoomTo(LatLon newCenter) {
+        if(newCenter instanceof CachedLatLon)
+            zoomTo(((CachedLatLon)newCenter).getEastNorth(), scale);
+        else
+            zoomTo(getProjection().latlon2eastNorth(newCenter), scale);
+    }
+
     public void zoomToFactor(double x, double y, double factor) {
         double newScale = scale*factor;
@@ -228,5 +248,5 @@
             if (n.deleted || n.incomplete)
                 continue;
-            Point sp = getPoint(n.getEastNorth());
+            Point sp = getPoint(n);
             double dist = p.distanceSq(sp);
             if (dist < minDistanceSq) {
@@ -263,6 +283,6 @@
                 }
 
-                Point A = getPoint(lastN.getEastNorth());
-                Point B = getPoint(n.getEastNorth());
+                Point A = getPoint(lastN);
+                Point B = getPoint(n);
                 double c = A.distanceSq(B);
                 double a = p.distanceSq(B);
@@ -372,6 +392,6 @@
                     continue;
                 }
-                Point A = getPoint(lastN.getEastNorth());
-                Point B = getPoint(n.getEastNorth());
+                Point A = getPoint(lastN);
+                Point B = getPoint(n);
                 double c = A.distanceSq(B);
                 double a = p.distanceSq(B);
@@ -387,5 +407,5 @@
         for (Node n : getData().nodes) {
             if (!n.deleted && !n.incomplete
-                    && getPoint(n.getEastNorth()).distanceSq(p) < snapDistance) {
+                    && getPoint(n).distanceSq(p) < snapDistance) {
                 nearest.add(n);
             }
@@ -406,5 +426,5 @@
         for (Node n : getData().nodes) {
             if (!n.deleted && !n.incomplete
-                    && getPoint(n.getEastNorth()).distanceSq(p) < snapDistance) {
+                    && getPoint(n).distanceSq(p) < snapDistance) {
                 nearest.add(n);
             }
Index: trunk/src/org/openstreetmap/josm/gui/SelectionManager.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/SelectionManager.java	(revision 1724)
+++ trunk/src/org/openstreetmap/josm/gui/SelectionManager.java	(revision 1725)
@@ -280,5 +280,5 @@
             // nodes
             for (Node n : nc.getData().nodes) {
-                if (!n.deleted && !n.incomplete && r.contains(nc.getPoint(n.getEastNorth())))
+                if (!n.deleted && !n.incomplete && r.contains(nc.getPoint(n)))
                     selection.add(n);
             }
@@ -290,5 +290,5 @@
                 if (alt) {
                     for (Node n : w.nodes) {
-                        if (!n.incomplete && r.contains(nc.getPoint(n.getEastNorth()))) {
+                        if (!n.incomplete && r.contains(nc.getPoint(n))) {
                             selection.add(w);
                             break;
@@ -298,5 +298,5 @@
                     boolean allIn = true;
                     for (Node n : w.nodes) {
-                        if (!n.incomplete && !r.contains(nc.getPoint(n.getEastNorth()))) {
+                        if (!n.incomplete && !r.contains(nc.getPoint(n))) {
                             allIn = false;
                             break;
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java	(revision 1724)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java	(revision 1725)
@@ -190,10 +190,10 @@
         Visitor conflictPainter = new AbstractVisitor(){
             public void visit(Node n) {
-                Point p = nc.getPoint(n.getEastNorth());
+                Point p = nc.getPoint(n);
                 g.drawRect(p.x-1, p.y-1, 2, 2);
             }
             public void visit(Node n1, Node n2) {
-                Point p1 = nc.getPoint(n1.getEastNorth());
-                Point p2 = nc.getPoint(n2.getEastNorth());
+                Point p1 = nc.getPoint(n1);
+                Point p2 = nc.getPoint(n2);
                 g.drawLine(p1.x, p1.y, p2.x, p2.y);
             }
Index: trunk/src/org/openstreetmap/josm/gui/layer/GeoImageLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/GeoImageLayer.java	(revision 1724)
+++ trunk/src/org/openstreetmap/josm/gui/layer/GeoImageLayer.java	(revision 1725)
@@ -404,5 +404,5 @@
                     if (e.pos == null)
                         continue;
-                    Point p = Main.map.mapView.getPoint(e.pos.getEastNorth());
+                    Point p = Main.map.mapView.getPoint(e.pos);
                     Rectangle r = new Rectangle(p.x-ICON_SIZE/2, p.y-ICON_SIZE/2, ICON_SIZE, ICON_SIZE);
                     if (r.contains(ev.getPoint())) {
@@ -536,5 +536,5 @@
 
             if (centerToggle.getModel().isSelected())
-                Main.map.mapView.zoomTo(currentImageEntry.pos.getEastNorth());
+                Main.map.mapView.zoomTo(currentImageEntry.pos);
 
             dlg.setTitle(currentImageEntry.image +
@@ -612,5 +612,5 @@
                 }
 
-                Point p = mv.getPoint(e.pos.getEastNorth());
+                Point p = mv.getPoint(e.pos);
                 Rectangle r = new Rectangle(p.x-ICON_SIZE / 2, p.y-ICON_SIZE / 2, ICON_SIZE, ICON_SIZE);
                 if (r.contains(mousePosition)) {
@@ -624,5 +624,5 @@
             ImageEntry e = data.get(i);
             if (e.pos != null) {
-                Point p = mv.getPoint(e.pos.getEastNorth());
+                Point p = mv.getPoint(e.pos);
                 Rectangle r = new Rectangle(p.x-ICON_SIZE / 2, p.y-ICON_SIZE / 2, ICON_SIZE, ICON_SIZE);
                 g.drawImage(e.getIcon(), r.x, r.y, null);
