Index: trunk/src/org/openstreetmap/josm/data/coor/LatLon.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/coor/LatLon.java	(revision 12162)
+++ trunk/src/org/openstreetmap/josm/data/coor/LatLon.java	(revision 12163)
@@ -282,5 +282,5 @@
         case DEGREES_MINUTES_SECONDS: return dms(y) + ((y < 0) ? SOUTH : NORTH);
         case NAUTICAL: return dm(y) + ((y < 0) ? SOUTH : NORTH);
-        case EAST_NORTH: return cDdFormatter.format(Main.getProjection().latlon2eastNorth(this).north());
+        case EAST_NORTH: return cDdFormatter.format(this.getEastNorth().north());
         default: return "ERR";
         }
@@ -302,5 +302,5 @@
         case DEGREES_MINUTES_SECONDS: return dms(x) + ((x < 0) ? WEST : EAST);
         case NAUTICAL: return dm(x) + ((x < 0) ? WEST : EAST);
-        case EAST_NORTH: return cDdFormatter.format(Main.getProjection().latlon2eastNorth(this).east());
+        case EAST_NORTH: return cDdFormatter.format(this.getEastNorth().east());
         default: return "ERR";
         }
Index: trunk/src/org/openstreetmap/josm/data/imagery/OffsetBookmark.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/imagery/OffsetBookmark.java	(revision 12162)
+++ trunk/src/org/openstreetmap/josm/data/imagery/OffsetBookmark.java	(revision 12163)
@@ -118,9 +118,9 @@
         LatLon center = getCenter();
         Projection offsetProj = Projections.getProjectionByCode(projection_code);
-        EastNorth centerEN = offsetProj.latlon2eastNorth(center);
+        EastNorth centerEN = center.getEastNorth(offsetProj);
         EastNorth shiftedEN = centerEN.add(getDisplacement());
         LatLon shifted = offsetProj.eastNorth2latlon(shiftedEN);
-        EastNorth centerEN2 = proj.latlon2eastNorth(center);
-        EastNorth shiftedEN2 = proj.latlon2eastNorth(shifted);
+        EastNorth centerEN2 = center.getEastNorth(proj);
+        EastNorth shiftedEN2 = shifted.getEastNorth(proj);
         return shiftedEN2.subtract(centerEN2);
     }
Index: trunk/src/org/openstreetmap/josm/data/osm/visitor/BoundingXYVisitor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/visitor/BoundingXYVisitor.java	(revision 12162)
+++ trunk/src/org/openstreetmap/josm/data/osm/visitor/BoundingXYVisitor.java	(revision 12163)
@@ -7,6 +7,6 @@
 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.ILatLon;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.Node;
@@ -27,5 +27,5 @@
     @Override
     public void visit(Node n) {
-        visit(n.getEastNorth());
+        visit((ILatLon) n);
     }
 
@@ -75,10 +75,10 @@
     public void visit(LatLon latlon) {
         if (latlon != null) {
-            if (latlon instanceof CachedLatLon) {
-                visit(((CachedLatLon) latlon).getEastNorth());
-            } else {
-                visit(Main.getProjection().latlon2eastNorth(latlon));
-            }
-        }
+            visit((ILatLon) latlon);
+        }
+    }
+
+    private void visit(ILatLon latlon) {
+        visit(latlon.getEastNorth());
     }
 
@@ -134,11 +134,10 @@
         LatLon minLatlon = Main.getProjection().eastNorth2latlon(bounds.getMin());
         LatLon maxLatlon = Main.getProjection().eastNorth2latlon(bounds.getMax());
-        bounds = new ProjectionBounds(
-                Main.getProjection().latlon2eastNorth(new LatLon(
+        bounds = new ProjectionBounds(new LatLon(
                         Math.max(-90, minLatlon.lat() - enlargeDegree),
-                        Math.max(-180, minLatlon.lon() - enlargeDegree))),
-                Main.getProjection().latlon2eastNorth(new LatLon(
+                        Math.max(-180, minLatlon.lon() - enlargeDegree)).getEastNorth(),
+                new LatLon(
                         Math.min(90, maxLatlon.lat() + enlargeDegree),
-                        Math.min(180, maxLatlon.lon() + enlargeDegree))));
+                        Math.min(180, maxLatlon.lon() + enlargeDegree)).getEastNorth());
     }
 
Index: trunk/src/org/openstreetmap/josm/data/projection/Projecting.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/Projecting.java	(revision 12162)
+++ trunk/src/org/openstreetmap/josm/data/projection/Projecting.java	(revision 12163)
@@ -25,4 +25,5 @@
      * @param ll the geographical point to convert (in WGS84 lat/lon)
      * @return the corresponding east/north coordinates
+     * @see ILatLon#getEastNorth(Projecting)
      */
     default EastNorth latlon2eastNorth(LatLon ll) {
@@ -36,4 +37,5 @@
      * @return the corresponding east/north coordinates
      * @since 12161
+     * @see ILatLon#getEastNorth(Projecting)
      */
     EastNorth latlon2eastNorth(ILatLon ll);
Index: trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 12162)
+++ trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 12163)
@@ -37,6 +37,6 @@
 import org.openstreetmap.josm.data.SystemOfMeasurement;
 import org.openstreetmap.josm.data.ViewportData;
-import org.openstreetmap.josm.data.coor.CachedLatLon;
 import org.openstreetmap.josm.data.coor.EastNorth;
+import org.openstreetmap.josm.data.coor.ILatLon;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.BBox;
@@ -510,18 +510,21 @@
     /**
      * Return the point on the screen where this Coordinate would be.
+     *
+     * Alternative: {@link #getState()}, then {@link MapViewState#getPointFor(ILatLon)}
      * @param latlon The point, where this geopoint would be drawn.
      * @return The point on screen where "point" would be drawn, relative to the own top/left.
      */
     public Point2D getPoint2D(LatLon latlon) {
-        if (latlon == null)
+        if (latlon == null) {
             return new Point();
-        else if (latlon instanceof CachedLatLon)
-            return getPoint2D(((CachedLatLon) latlon).getEastNorth());
-        else
-            return getPoint2D(getProjection().latlon2eastNorth(latlon));
+        } else {
+            return getPoint2D(latlon.getEastNorth());
+        }
     }
 
     /**
      * Return the point on the screen where this Node would be.
+     *
+     * Alternative: {@link #getState()}, then {@link MapViewState#getPointFor(ILatLon)}
      * @param n The node, where this geopoint would be drawn.
      * @return The point on screen where "node" would be drawn, relative to the own top/left.
