Index: trunk/src/org/openstreetmap/josm/data/coor/ILatLon.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/coor/ILatLon.java	(revision 12724)
+++ trunk/src/org/openstreetmap/josm/data/coor/ILatLon.java	(revision 12725)
@@ -44,5 +44,7 @@
      *
      * @return the east north coordinates or {@code null} if #is
+     * @deprecated use {@link #getEastNorth(org.openstreetmap.josm.data.projection.Projecting)}
      */
+    @Deprecated
     default EastNorth getEastNorth() {
         return getEastNorth(Main.getProjection());
Index: trunk/src/org/openstreetmap/josm/data/coor/LatLon.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/coor/LatLon.java	(revision 12724)
+++ trunk/src/org/openstreetmap/josm/data/coor/LatLon.java	(revision 12725)
@@ -308,5 +308,5 @@
         case DEGREES_MINUTES_SECONDS: return degreesMinutesSeconds(y) + ((y < 0) ? SOUTH : NORTH);
         case NAUTICAL: return degreesMinutes(y) + ((y < 0) ? SOUTH : NORTH);
-        case EAST_NORTH: return cDdFormatter.format(this.getEastNorth().north());
+        case EAST_NORTH: return cDdFormatter.format(this.getEastNorth(Main.getProjection()).north());
         default: return "ERR";
         }
@@ -328,5 +328,5 @@
         case DEGREES_MINUTES_SECONDS: return degreesMinutesSeconds(x) + ((x < 0) ? WEST : EAST);
         case NAUTICAL: return degreesMinutes(x) + ((x < 0) ? WEST : EAST);
-        case EAST_NORTH: return cDdFormatter.format(this.getEastNorth().east());
+        case EAST_NORTH: return cDdFormatter.format(this.getEastNorth(Main.getProjection()).east());
         default: return "ERR";
         }
Index: trunk/src/org/openstreetmap/josm/data/gpx/GpxData.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/gpx/GpxData.java	(revision 12724)
+++ trunk/src/org/openstreetmap/josm/data/gpx/GpxData.java	(revision 12725)
@@ -417,8 +417,8 @@
             for (GpxTrackSegment seg : track.getSegments()) {
                 WayPoint r = null;
-                for (WayPoint S : seg.getWayPoints()) {
-                    EastNorth en = S.getEastNorth();
+                for (WayPoint wpSeg : seg.getWayPoints()) {
+                    EastNorth en = wpSeg.getEastNorth(Main.getProjection());
                     if (r == null) {
-                        r = S;
+                        r = wpSeg;
                         rx = en.east();
                         ry = en.north();
@@ -455,9 +455,9 @@
                                 double ny = ry + rnoverRS * a;
                                 bestEN = new EastNorth(nx, ny);
-                                bestTime = r.time + rnoverRS * (S.time - r.time);
+                                bestTime = r.time + rnoverRS * (wpSeg.time - r.time);
                                 pnminsq = pnsq;
                             }
                         }
-                        r = S;
+                        r = wpSeg;
                         rx = sx;
                         ry = sy;
@@ -465,5 +465,5 @@
                 }
                 if (r != null) {
-                    EastNorth c = r.getEastNorth();
+                    EastNorth c = r.getEastNorth(Main.getProjection());
                     /* if there is only one point in the seg, it will do this twice, but no matter */
                     rx = c.east();
Index: trunk/src/org/openstreetmap/josm/data/osm/Node.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/Node.java	(revision 12724)
+++ trunk/src/org/openstreetmap/josm/data/osm/Node.java	(revision 12725)
@@ -98,4 +98,14 @@
     public double lon() {
         return lon;
+    }
+
+    /**
+     * Replies the projected east/north coordinates.
+     * <p>
+     * Uses the {@link Main#getProjection() global projection} to project the lan/lon-coordinates.
+     * @return the east north coordinates or {@code null} if #is
+     */
+    public EastNorth getEastNorth() {
+        return getEastNorth(Main.getProjection());
     }
 
Index: trunk/src/org/openstreetmap/josm/data/osm/NodeData.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/NodeData.java	(revision 12724)
+++ trunk/src/org/openstreetmap/josm/data/osm/NodeData.java	(revision 12725)
@@ -76,4 +76,5 @@
 
     @Override
+    @Deprecated
     public EastNorth getEastNorth() {
         // No internal caching of projected coordinates needed. In contrast to getEastNorth()
Index: trunk/src/org/openstreetmap/josm/data/osm/visitor/BoundingXYVisitor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/visitor/BoundingXYVisitor.java	(revision 12724)
+++ trunk/src/org/openstreetmap/josm/data/osm/visitor/BoundingXYVisitor.java	(revision 12725)
@@ -74,13 +74,18 @@
      * Visiting call for lat/lon.
      * @param latlon lat/lon
+     * @since 12725 (public for ILatLon parameter)
+     */
+    public void visit(ILatLon latlon) {
+        if (latlon != null) {
+            visit(latlon.getEastNorth(Main.getProjection()));
+        }
+    }
+
+    /**
+     * Visiting call for lat/lon.
+     * @param latlon lat/lon
      */
     public void visit(LatLon latlon) {
-        if (latlon != null) {
-            visit((ILatLon) latlon);
-        }
-    }
-
-    private void visit(ILatLon latlon) {
-        visit(latlon.getEastNorth());
+        visit((ILatLon) latlon);
     }
 
@@ -138,8 +143,8 @@
         bounds = new ProjectionBounds(new LatLon(
                         Math.max(-90, minLatlon.lat() - enlargeDegree),
-                        Math.max(-180, minLatlon.lon() - enlargeDegree)).getEastNorth(),
+                        Math.max(-180, minLatlon.lon() - enlargeDegree)).getEastNorth(Main.getProjection()),
                 new LatLon(
                         Math.min(90, maxLatlon.lat() + enlargeDegree),
-                        Math.min(180, maxLatlon.lon() + enlargeDegree)).getEastNorth());
+                        Math.min(180, maxLatlon.lon() + enlargeDegree)).getEastNorth(Main.getProjection()));
     }
 
Index: trunk/src/org/openstreetmap/josm/data/projection/Projections.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/Projections.java	(revision 12724)
+++ trunk/src/org/openstreetmap/josm/data/projection/Projections.java	(revision 12725)
@@ -19,4 +19,5 @@
 import org.openstreetmap.josm.Main;
 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.projection.datum.Datum;
@@ -192,8 +193,19 @@
      * @param ll the geographical point to convert (in WGS84 lat/lon)
      * @return the corresponding east/north coordinates
-     */
-    public static EastNorth project(LatLon ll) {
+     * @since 12725
+     */
+    public static EastNorth project(ILatLon ll) {
         if (ll == null) return null;
         return Main.getProjection().latlon2eastNorth(ll);
+    }
+
+    /**
+     * Convert from lat/lon to easting/northing using the current projection.
+     *
+     * @param ll the geographical point to convert (in WGS84 lat/lon)
+     * @return the corresponding east/north coordinates
+     */
+    public static EastNorth project(LatLon ll) {
+        return project((ILatLon) ll);
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/MapViewState.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MapViewState.java	(revision 12724)
+++ trunk/src/org/openstreetmap/josm/gui/MapViewState.java	(revision 12725)
@@ -395,5 +395,5 @@
         Bounds b = Optional.ofNullable(DownloadDialog.getSavedDownloadBounds()).orElseGet(
                 () -> Main.getProjection().getWorldBoundsLatLon());
-        return b.getCenter().getEastNorth();
+        return b.getCenter().getEastNorth(Main.getProjection());
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 12724)
+++ trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 12725)
@@ -516,10 +516,21 @@
      * @return The point on screen where "point" would be drawn, relative to the own top/left.
      */
-    public Point2D getPoint2D(LatLon latlon) {
+    public Point2D getPoint2D(ILatLon latlon) {
         if (latlon == null) {
             return new Point();
         } else {
-            return getPoint2D(latlon.getEastNorth());
-        }
+            return getPoint2D(latlon.getEastNorth(Main.getProjection()));
+        }
+    }
+
+    /**
+     * 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) {
+        return getPoint2D((ILatLon) latlon);
     }
 
@@ -551,8 +562,19 @@
      * @return point
      * @see #getPoint2D(LatLon)
-     */
-    public Point getPoint(LatLon latlon) {
+     * @since 12725
+     */
+    public Point getPoint(ILatLon latlon) {
         Point2D d = getPoint2D(latlon);
         return new Point((int) d.getX(), (int) d.getY());
+    }
+
+    /**
+     * looses precision, may overflow (depends on p and current scale)
+     * @param latlon lat/lon
+     * @return point
+     * @see #getPoint2D(LatLon)
+     */
+    public Point getPoint(LatLon latlon) {
+        return getPoint((ILatLon) latlon);
     }
 
@@ -690,7 +712,16 @@
      * Zoom to given lat/lon.
      * @param newCenter new center coordinates
+     * @since 12725
+     */
+    public void zoomTo(ILatLon newCenter) {
+        zoomTo(Projections.project(newCenter));
+    }
+
+    /**
+     * Zoom to given lat/lon.
+     * @param newCenter new center coordinates
      */
     public void zoomTo(LatLon newCenter) {
-        zoomTo(Projections.project(newCenter));
+        zoomTo((ILatLon) newCenter);
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/datatransfer/data/PrimitiveTransferData.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/datatransfer/data/PrimitiveTransferData.java	(revision 12724)
+++ trunk/src/org/openstreetmap/josm/gui/datatransfer/data/PrimitiveTransferData.java	(revision 12725)
@@ -132,5 +132,5 @@
         for (PrimitiveData pd : getAll()) {
             if (pd instanceof NodeData && !pd.isIncomplete()) {
-                visitor.visit(((NodeData) pd).getEastNorth());
+                visitor.visit(((NodeData) pd));
             }
         }
Index: trunk/src/org/openstreetmap/josm/gui/datatransfer/importers/PrimitiveDataPaster.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/datatransfer/importers/PrimitiveDataPaster.java	(revision 12724)
+++ trunk/src/org/openstreetmap/josm/gui/datatransfer/importers/PrimitiveDataPaster.java	(revision 12725)
@@ -73,5 +73,5 @@
                 if (data instanceof NodeData) {
                     NodeData nodeData = (NodeData) data;
-                    nodeData.setEastNorth(nodeData.getEastNorth().add(offset));
+                    nodeData.setEastNorth(nodeData.getEastNorth(Main.getProjection()).add(offset));
                 } else if (data instanceof WayData) {
                     updateNodes(newIds.get(OsmPrimitiveType.NODE), data);
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDataText.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDataText.java	(revision 12724)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/InspectPrimitiveDataText.java	(revision 12725)
@@ -191,6 +191,6 @@
         if (bbox != null) {
             add(tr("Bounding box: "), bbox.toStringCSV(", "));
-            EastNorth bottomRigth = bbox.getBottomRight().getEastNorth();
-            EastNorth topLeft = bbox.getTopLeft().getEastNorth();
+            EastNorth bottomRigth = bbox.getBottomRight().getEastNorth(Main.getProjection());
+            EastNorth topLeft = bbox.getTopLeft().getEastNorth(Main.getProjection());
             add(tr("Bounding box (projected): "),
                     Double.toString(topLeft.east()), ", ",
Index: trunk/src/org/openstreetmap/josm/gui/layer/gpx/GpxDrawHelper.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/gpx/GpxDrawHelper.java	(revision 12724)
+++ trunk/src/org/openstreetmap/josm/gui/layer/gpx/GpxDrawHelper.java	(revision 12725)
@@ -651,5 +651,5 @@
                     continue;
                 }
-                Point screen = mv.getPoint(trkPnt.getEastNorth());
+                Point screen = mv.getPoint(trkPnt);
                 // skip points that are on the same screenposition
                 if (trkPnt.drawLine && old != null && ((old.x != screen.x) || (old.y != screen.y))) {
@@ -681,5 +681,5 @@
                 }
                 if (trkPnt.drawLine) {
-                    Point screen = mv.getPoint(trkPnt.getEastNorth());
+                    Point screen = mv.getPoint(trkPnt);
                     // skip points that are on the same screenposition
                     if (old != null
@@ -711,5 +711,5 @@
                 }
                 if (trkPnt.drawLine) {
-                    Point screen = mv.getPoint(trkPnt.getEastNorth());
+                    Point screen = mv.getPoint(trkPnt);
                     // skip points that are on the same screenposition
                     if (old != null
@@ -746,5 +746,5 @@
                     continue;
                 }
-                Point screen = mv.getPoint(trkPnt.getEastNorth());
+                Point screen = mv.getPoint(trkPnt);
 
                 if (hdopCircle && trkPnt.get(GpxConstants.PT_HDOP) != null) {
@@ -787,5 +787,5 @@
                 }
                 if (!trkPnt.drawLine) {
-                    Point screen = mv.getPoint(trkPnt.getEastNorth());
+                    Point screen = mv.getPoint(trkPnt);
                     g.drawRect(screen.x, screen.y, 0, 0);
                 }
@@ -803,5 +803,5 @@
                     continue;
                 }
-                Point screen = mv.getPoint(trkPnt.getEastNorth());
+                Point screen = mv.getPoint(trkPnt);
                 g.setColor(trkPnt.customColoring);
                 g.drawRect(screen.x, screen.y, 0, 0);
@@ -853,5 +853,5 @@
 
             // transform coordinates
-            final Point paintPnt = mv.getPoint(trkPnt.getEastNorth());
+            final Point paintPnt = mv.getPoint(trkPnt);
 
             // skip single points
@@ -1112,5 +1112,5 @@
 
             // get transformed coordinates
-            final Point paintPnt = mv.getPoint(trkPnt.getEastNorth());
+            final Point paintPnt = mv.getPoint(trkPnt);
 
             // end of line segment or end of list reached
@@ -1362,5 +1362,5 @@
 
             // get transformed coordinates
-            final Point paintPnt = mv.getPoint(trkPnt.getEastNorth());
+            final Point paintPnt = mv.getPoint(trkPnt);
 
             // end of line segment or end of list reached
Index: trunk/src/org/openstreetmap/josm/gui/layer/gpx/ImportAudioAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/gpx/ImportAudioAction.java	(revision 12724)
+++ trunk/src/org/openstreetmap/josm/gui/layer/gpx/ImportAudioAction.java	(revision 12725)
@@ -187,5 +187,5 @@
                     continue;
                 }
-                WayPoint wNear = layer.data.nearestPointOnTrack(w.getEastNorth(), snapDistance);
+                WayPoint wNear = layer.data.nearestPointOnTrack(w.getEastNorth(Main.getProjection()), snapDistance);
                 if (wNear != null) {
                     WayPoint wc = new WayPoint(w.getCoor());
Index: trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/ButtonMarker.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/ButtonMarker.java	(revision 12724)
+++ trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/ButtonMarker.java	(revision 12725)
@@ -39,5 +39,5 @@
 
     @Override public boolean containsPoint(Point p) {
-        Point screen = MainApplication.getMap().mapView.getPoint(getEastNorth());
+        Point screen = MainApplication.getMap().mapView.getPoint(this);
         buttonRectangle.setLocation(screen.x+4, screen.y+2);
         return buttonRectangle.contains(p);
@@ -49,5 +49,5 @@
             return;
         }
-        Point screen = mv.getPoint(getEastNorth());
+        Point screen = mv.getPoint(this);
         buttonRectangle.setLocation(screen.x+4, screen.y+2);
         paintIcon(mv, g, screen.x+4, screen.y+2);
Index: trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/Marker.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/Marker.java	(revision 12724)
+++ trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/Marker.java	(revision 12725)
@@ -23,7 +23,9 @@
 import javax.swing.ImageIcon;
 
+import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
 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.gpx.GpxConstants;
@@ -75,5 +77,5 @@
  * @author Frederik Ramm
  */
-public class Marker implements TemplateEngineDataProvider {
+public class Marker implements TemplateEngineDataProvider, ILatLon {
 
     public static final class TemplateEntryProperty extends CachedProperty<TemplateEntry> {
@@ -318,9 +320,27 @@
 
     /**
+     * @since 12725
+     */
+    @Override
+    public double lon() {
+        return coor == null ? Double.NaN : coor.lon();
+    }
+
+    /**
+     * @since 12725
+     */
+    @Override
+    public double lat() {
+        return coor == null ? Double.NaN : coor.lat();
+    }
+
+    /**
      * Returns the marker's projected coordinates.
      * @return The marker's projected coordinates (easting/northing)
-     */
+     * @deprecated use {@link #getEastNorth(org.openstreetmap.josm.data.projection.Projecting)}
+     */
+    @Deprecated
     public final EastNorth getEastNorth() {
-        return coor.getEastNorth();
+        return coor.getEastNorth(Main.getProjection());
     }
 
@@ -354,5 +374,5 @@
      */
     public void paint(Graphics g, MapView mv, boolean mousePressed, boolean showTextOrIcon) {
-        Point screen = mv.getPoint(getEastNorth());
+        Point screen = mv.getPoint(this);
         if (symbol != null && showTextOrIcon) {
             paintIcon(mv, g, screen.x-symbol.getIconWidth()/2, screen.y-symbol.getIconHeight()/2);
Index: trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java	(revision 12724)
+++ trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java	(revision 12725)
@@ -211,5 +211,5 @@
     @Override public void visitBoundingBox(BoundingXYVisitor v) {
         for (Marker mkr : data) {
-            v.visit(mkr.getEastNorth());
+            v.visit(mkr);
         }
     }
@@ -352,5 +352,5 @@
             }
         }
-        MainApplication.getMap().mapView.zoomTo(currentMarker.getEastNorth());
+        MainApplication.getMap().mapView.zoomTo(currentMarker);
     }
 
@@ -371,5 +371,5 @@
             }
         }
-        MainApplication.getMap().mapView.zoomTo(currentMarker.getEastNorth());
+        MainApplication.getMap().mapView.zoomTo(currentMarker);
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/PlayHeadMarker.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/PlayHeadMarker.java	(revision 12724)
+++ trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/PlayHeadMarker.java	(revision 12725)
@@ -85,5 +85,5 @@
     @Override
     public boolean containsPoint(Point p) {
-        Point screen = MainApplication.getMap().mapView.getPoint(getEastNorth());
+        Point screen = MainApplication.getMap().mapView.getPoint(this);
         Rectangle r = new Rectangle(screen.x, screen.y, symbol.getIconWidth(),
                 symbol.getIconHeight());
@@ -214,5 +214,5 @@
             for (Marker m : recent.parentLayer.data) {
                 if (m instanceof AudioMarker) {
-                    double distanceSquared = m.getEastNorth().distanceSq(en);
+                    double distanceSquared = m.getEastNorth(Main.getProjection()).distanceSq(en);
                     if (distanceSquared < closestAudioMarkerDistanceSquared) {
                         ca = (AudioMarker) m;
@@ -283,5 +283,5 @@
     public void paint(Graphics g, MapView mv) {
         if (time < 0.0) return;
-        Point screen = mv.getPoint(getEastNorth());
+        Point screen = mv.getPoint(this);
         paintIcon(mv, g, screen.x, screen.y);
     }
@@ -347,6 +347,6 @@
             return;
         setEastNorth(w2 == null ?
-                w1.getEastNorth() :
-                    w1.getEastNorth().interpolate(w2.getEastNorth(),
+                w1.getEastNorth(Main.getProjection()) :
+                    w1.getEastNorth(Main.getProjection()).interpolate(w2.getEastNorth(Main.getProjection()),
                             (audioTime - w1.time)/(w2.time - w1.time)));
         time = audioTime;
@@ -354,5 +354,5 @@
         if (jumpToMarker) {
             jumpToMarker = false;
-            mapView.zoomTo(w1.getEastNorth());
+            mapView.zoomTo(w1);
         }
         mapView.repaint();
