Index: trunk/src/org/openstreetmap/josm/data/coor/CachedLatLon.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/coor/CachedLatLon.java	(revision 10332)
+++ trunk/src/org/openstreetmap/josm/data/coor/CachedLatLon.java	(revision 10334)
@@ -1,4 +1,6 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.coor;
+
+import java.util.Objects;
 
 import org.openstreetmap.josm.Main;
@@ -54,5 +56,5 @@
      */
     public final EastNorth getEastNorth() {
-        if (proj != Main.getProjection()) {
+        if (!Objects.equals(proj, Main.getProjection())) {
             proj = Main.getProjection();
             eastNorth = proj.latlon2eastNorth(this);
@@ -62,4 +64,17 @@
 
     @Override
+    public int hashCode() {
+        return Objects.hash(x, y, eastNorth);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (!super.equals(obj))
+            return false;
+        CachedLatLon other = (CachedLatLon) obj;
+        return Objects.equals(eastNorth, other.eastNorth);
+    }
+
+    @Override
     public String toString() {
         return "CachedLatLon[lat="+lat()+",lon="+lon()+']';
Index: trunk/src/org/openstreetmap/josm/data/coor/EastNorth.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/coor/EastNorth.java	(revision 10332)
+++ trunk/src/org/openstreetmap/josm/data/coor/EastNorth.java	(revision 10334)
@@ -13,12 +13,25 @@
     private static final long serialVersionUID = 1L;
 
+    /**
+     * Constructs a new {@code EastNorth}.
+     * @param east easting
+     * @param north northing
+     */
     public EastNorth(double east, double north) {
         super(east, north);
     }
 
+    /**
+     * Returns easting.
+     * @return easting
+     */
     public double east() {
         return x;
     }
 
+    /**
+     * Returns northing.
+     * @return northing
+     */
     public double north() {
         return y;
@@ -53,4 +66,9 @@
     }
 
+    /**
+     * Scales this {@link EastNorth} instance to a given factor and returns the result.
+     * @param s factor
+     * @return The result.
+     */
     public EastNorth scale(double s) {
         return new EastNorth(s * x, s * y);
Index: trunk/src/org/openstreetmap/josm/data/coor/LatLon.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/coor/LatLon.java	(revision 10332)
+++ trunk/src/org/openstreetmap/josm/data/coor/LatLon.java	(revision 10334)
@@ -56,8 +56,7 @@
     public static final LatLon ZERO = new LatLon(0, 0);
 
-    /**
-     * North and south pole.
-     */
+    /** North pole. */
     public static final LatLon NORTH_POLE = new LatLon(90, 0);
+    /** South pole. */
     public static final LatLon SOUTH_POLE = new LatLon(-90, 0);
 
@@ -227,5 +226,4 @@
     }
 
-
     /**
      * Returns the latitude, i.e., the north-south position in degrees.
@@ -487,8 +485,8 @@
     public boolean equals(Object obj) {
         if (this == obj) return true;
-        if (!(obj instanceof LatLon)) return false;
+        if (obj == null || getClass() != obj.getClass()) return false;
         LatLon that = (LatLon) obj;
         return Double.compare(that.x, x) == 0 &&
-                Double.compare(that.y, y) == 0;
+               Double.compare(that.y, y) == 0;
     }
 
