Index: trunk/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java	(revision 6160)
+++ trunk/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java	(revision 6162)
@@ -684,5 +684,5 @@
                 Point p4 = mv.getPoint(newN2en);
 
-                EastNorth normalUnitVector = getNormalUniVector();
+                Point2D normalUnitVector = getNormalUniVector();
 
                 if (mode == Mode.extrude || mode == Mode.create_new) {
@@ -753,8 +753,8 @@
     }
 
-    private EastNorth getNormalUniVector() {
-        double fac = 1.0 / activeMoveDirection.en.distance(0,0);
+    private Point2D getNormalUniVector() {
+        double fac = 1.0 / activeMoveDirection.en.length();
         // mult by factor to get unit vector.
-        EastNorth normalUnitVector = new EastNorth(activeMoveDirection.en.getX() * fac, activeMoveDirection.en.getY() * fac);
+        Point2D normalUnitVector = new Point2D.Double(activeMoveDirection.en.getX() * fac, activeMoveDirection.en.getY() * fac);
 
         // Check to see if our new N1 is in a positive direction with respect to the normalUnitVector.
@@ -762,5 +762,5 @@
         if (newN1en != null && ((newN1en.getX() > initialN1en.getX()) != (normalUnitVector.getX() > -0.0))) {
             // If not, use a sign-flipped version of the normalUnitVector.
-            normalUnitVector = new EastNorth(-normalUnitVector.getX(), -normalUnitVector.getY());
+            normalUnitVector = new Point2D.Double(-normalUnitVector.getX(), -normalUnitVector.getY());
         }
 
@@ -771,5 +771,5 @@
     }
 
-    private void drawAngleSymbol(Graphics2D g2, Point2D center, EastNorth normal, boolean mirror) {
+    private void drawAngleSymbol(Graphics2D g2, Point2D center, Point2D normal, boolean mirror) {
         // EastNorth units per pixel
         double factor = 1.0/g2.getTransform().getScaleX();
Index: trunk/src/org/openstreetmap/josm/command/Command.java
===================================================================
--- trunk/src/org/openstreetmap/josm/command/Command.java	(revision 6160)
+++ trunk/src/org/openstreetmap/josm/command/Command.java	(revision 6162)
@@ -16,5 +16,4 @@
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -222,6 +221,5 @@
     private static boolean isOutlying(OsmPrimitive osm, Area area) {
         if (osm instanceof Node && !osm.isNewOrUndeleted()) {
-            LatLon coor = ((Node) osm).getCoor();
-            return coor != null && !area.contains(coor);
+            return !((Node) osm).getCoor().isIn(area);
         } else if (osm instanceof Way) {
             for (Node n : ((Way) osm).getNodes()) {
Index: trunk/src/org/openstreetmap/josm/command/SequenceCommand.java
===================================================================
--- trunk/src/org/openstreetmap/josm/command/SequenceCommand.java	(revision 6160)
+++ trunk/src/org/openstreetmap/josm/command/SequenceCommand.java	(revision 6162)
@@ -7,5 +7,4 @@
 import java.util.Collection;
 import java.util.HashSet;
-import java.util.List;
 
 import javax.swing.Icon;
Index: trunk/src/org/openstreetmap/josm/data/Bounds.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/Bounds.java	(revision 6160)
+++ trunk/src/org/openstreetmap/josm/data/Bounds.java	(revision 6162)
@@ -206,5 +206,5 @@
             LatLon result = new LatLon(minLat, minLon-360.0).getCenter(getMax());
             if (result.lon() < -180.0) {
-                result.setLocation(result.lon()+360.0, result.lat());
+                result = new LatLon(result.lat(), result.lon() + 360.0);
             }
             return result;
Index: trunk/src/org/openstreetmap/josm/data/coor/CachedLatLon.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/coor/CachedLatLon.java	(revision 6160)
+++ trunk/src/org/openstreetmap/josm/data/coor/CachedLatLon.java	(revision 6162)
@@ -33,16 +33,4 @@
     }
 
-    public final void setCoor(LatLon coor) {
-        setLocation(coor.lon(), coor.lat());
-        proj = null;
-    }
-
-    public final void setEastNorth(EastNorth eastNorth) {
-        proj = Main.getProjection();
-        this.eastNorth = eastNorth;
-        LatLon l = proj.eastNorth2latlon(eastNorth);
-        setLocation(l.lon(), l.lat());
-    }
-
     /**
      * Replies the projected east/north coordinates.
Index: trunk/src/org/openstreetmap/josm/data/coor/Coordinate.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/coor/Coordinate.java	(revision 6160)
+++ trunk/src/org/openstreetmap/josm/data/coor/Coordinate.java	(revision 6162)
@@ -2,5 +2,4 @@
 package org.openstreetmap.josm.data.coor;
 
-import java.awt.geom.Point2D;
 import java.io.Serializable;
 
@@ -17,8 +16,8 @@
  * @author imi
  */
-abstract class Coordinate extends Point2D implements Serializable {
+abstract class Coordinate implements Serializable {
 
-    protected double x;
-    protected double y;
+    protected final double x;
+    protected final double y;
 
     /**
@@ -32,18 +31,10 @@
     }
 
-    @Override
     public double getX() {
         return x;
     }
 
-    @Override
     public double getY() {
         return y;
-    }
-
-    @Override
-    public void setLocation (double x, double y) {
-        this.x = x;
-        this.y = y;
     }
 
Index: trunk/src/org/openstreetmap/josm/data/coor/EastNorth.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/coor/EastNorth.java	(revision 6160)
+++ trunk/src/org/openstreetmap/josm/data/coor/EastNorth.java	(revision 6162)
@@ -44,8 +44,37 @@
     }
 
-    public double distance(EastNorth en2) {
-        return Math.sqrt((this.x-en2.x)*(this.x-en2.x) + (this.y-en2.y)*(this.y-en2.y));
+    /**
+     * Counts euclidean distance between this and other EastNorth.
+     * 
+     * @param en2 other EastNorth
+     * @return distance between this and other EastNorth
+     */
+    public double distance(final EastNorth en2) {
+        final double dx = this.x-en2.x;
+        final double dy = this.y-en2.y;
+        return Math.sqrt(dx*dx + dy*dy);
     }
 
+    /**
+     * Counts square of euclidean distance between this and other EastNorth.
+     * 
+     * @param en2 other EastNorth
+     * @return square of distance between this and other EastNorth
+     */
+    public double distanceSq(final EastNorth en2) {
+        final double dx = this.x-en2.x;
+        final double dy = this.y-en2.y;
+        return dx*dx + dy*dy;
+    }
+
+    /**
+     * Counts length (distance from [0,0]) of this.
+     * 
+     * @return length of this
+     */
+    public double length(){
+        return Math.sqrt(x*x + y*y);
+    }
+    
     /**
      * Returns the heading, in radians, that you have to use to get from
Index: trunk/src/org/openstreetmap/josm/data/coor/LatLon.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/coor/LatLon.java	(revision 6160)
+++ trunk/src/org/openstreetmap/josm/data/coor/LatLon.java	(revision 6162)
@@ -11,4 +11,5 @@
 import static org.openstreetmap.josm.tools.I18n.trc;
 
+import java.awt.geom.Area;
 import java.text.DecimalFormat;
 import java.text.NumberFormat;
@@ -219,4 +220,14 @@
     public boolean isWithin(Bounds b) {
         return b.contains(this);
+    }
+
+    /**
+     * Check if this is contained in given area or area is null. 
+     * 
+     * @param a Area
+     * @return <code>true</code> if this is contained in given area or area is null. 
+     */
+    public boolean isIn(Area a) {
+        return a == null || a.contains(x, y);
     }
 
@@ -284,4 +295,16 @@
     public LatLon getCenter(LatLon ll2) {
         return new LatLon((this.lat() + ll2.lat())/2.0, (this.lon() + ll2.lon())/2.0);
+    }
+
+    /**
+     * Counts euclidean distance between this and other LatLon.
+     * 
+     * @param ll2 other LatLon
+     * @return distance between this and other LatLon
+     */
+   public double distance(final LatLon ll2) {
+        final double dx = this.x-ll2.x;
+        final double dy = this.y-ll2.y;
+        return Math.sqrt(dx*dx + dy*dy);
     }
 
Index: trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java	(revision 6160)
+++ trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java	(revision 6162)
@@ -1342,5 +1342,5 @@
         boolean initial = true;
         for (Node n : w.getNodes()) {
-            Point2D p = n.getEastNorth();
+            EastNorth p = n.getEastNorth();
             if (p != null) {
                 if (initial) {
Index: trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/relations/Multipolygon.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/relations/Multipolygon.java	(revision 6160)
+++ trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/relations/Multipolygon.java	(revision 6162)
@@ -18,4 +18,5 @@
 import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
 import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
+import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
@@ -213,5 +214,5 @@
             boolean initial = true;
             for (Node n : nodes) {
-                Point2D p = n.getEastNorth();
+                EastNorth p = n.getEastNorth();
                 if (p != null) {
                     if (initial) {
Index: trunk/src/org/openstreetmap/josm/data/validation/tests/Coastlines.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/tests/Coastlines.java	(revision 6160)
+++ trunk/src/org/openstreetmap/josm/data/validation/tests/Coastlines.java	(revision 6162)
@@ -150,8 +150,8 @@
                 List<OsmPrimitive> highlight = new ArrayList<OsmPrimitive>();
 
-                if (headWays == 0 && (downloadedArea == null || downloadedArea.contains(head.getCoor()))) {
+                if (headWays == 0 && head.getCoor().isIn(downloadedArea)) {
                     highlight.add(head);
                 }
-                if (tailWays == 0 && (downloadedArea == null || downloadedArea.contains(tail.getCoor()))) {
+                if (tailWays == 0 && tail.getCoor().isIn(downloadedArea)) {
                     highlight.add(tail);
                 }
Index: trunk/src/org/openstreetmap/josm/data/validation/tests/UnconnectedWays.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/tests/UnconnectedWays.java	(revision 6160)
+++ trunk/src/org/openstreetmap/josm/data/validation/tests/UnconnectedWays.java	(revision 6162)
@@ -293,6 +293,5 @@
 
             for (Node n : found_nodes) {
-                if (!nearby(n, dist) ||
-                        (ds_area != null && !ds_area.contains(n.getCoor()))) {
+                if (!nearby(n, dist) || !n.getCoor().isIn(ds_area)) {
                     continue;
                 }
Index: trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/Marker.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/Marker.java	(revision 6160)
+++ trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/Marker.java	(revision 6162)
@@ -341,9 +341,5 @@
 
     public final void setCoor(LatLon coor) {
-        if(this.coor == null) {
-            this.coor = new CachedLatLon(coor);
-        } else {
-            this.coor.setCoor(coor);
-        }
+        this.coor = new CachedLatLon(coor);
     }
 
@@ -353,5 +349,5 @@
 
     public final void setEastNorth(EastNorth eastNorth) {
-        coor.setEastNorth(eastNorth);
+        this.coor = new CachedLatLon(eastNorth);
     }
 
