Index: trunk/src/org/openstreetmap/josm/data/coor/Coordinate.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/coor/Coordinate.java	(revision 9372)
+++ trunk/src/org/openstreetmap/josm/data/coor/Coordinate.java	(revision 9375)
@@ -3,4 +3,5 @@
 
 import java.io.Serializable;
+import java.util.Objects;
 
 import org.openstreetmap.josm.data.osm.BBox;
@@ -113,3 +114,16 @@
     }
 
+    @Override
+    public int hashCode() {
+        return Objects.hash(x, y);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) return true;
+        if (obj == null || getClass() != obj.getClass()) return false;
+        Coordinate that = (Coordinate) obj;
+        return Double.compare(that.x, x) == 0 &&
+                Double.compare(that.y, y) == 0;
+    }
 }
Index: trunk/src/org/openstreetmap/josm/data/coor/LatLon.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/coor/LatLon.java	(revision 9372)
+++ trunk/src/org/openstreetmap/josm/data/coor/LatLon.java	(revision 9375)
@@ -429,5 +429,5 @@
     @Override
     public int hashCode() {
-        return Objects.hash(super.hashCode());
+        return Objects.hash(x, y);
     }
 
@@ -436,5 +436,7 @@
         if (this == obj) return true;
         if (obj == null || getClass() != obj.getClass()) return false;
-        return super.equals(obj);
+        LatLon that = (LatLon) obj;
+        return Double.compare(that.x, x) == 0 &&
+                Double.compare(that.y, y) == 0;
     }
 
