Index: src/org/openstreetmap/josm/command/Command.java
===================================================================
--- src/org/openstreetmap/josm/command/Command.java	(revision 6170)
+++ src/org/openstreetmap/josm/command/Command.java	(working copy)
@@ -15,6 +15,8 @@
 import javax.swing.JPanel;
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.coor.EastNorth;
+import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.PrimitiveData;
@@ -53,6 +55,23 @@
         }
     }
 
+    /**
+     * Small helper for holding the interesting part of the old data state of the
+     * objects.
+     */
+    public static class OldNodeState {
+
+        final LatLon latlon;
+        final EastNorth eastNorth; // cached EastNorth to be used for applying exact displacement
+        final boolean modified;
+
+        public OldNodeState(Node node){
+            latlon = node.getCoor();
+            eastNorth = node.getEastNorth();
+            modified = node.isModified();
+        }
+    }
+
     /** the map of OsmPrimitives in the original state to OsmPrimitives in cloned state */
     private Map<OsmPrimitive, PrimitiveData> cloneMap = new HashMap<OsmPrimitive, PrimitiveData>();
 
Index: src/org/openstreetmap/josm/command/MoveCommand.java
===================================================================
--- src/org/openstreetmap/josm/command/MoveCommand.java	(revision 6170)
+++ src/org/openstreetmap/josm/command/MoveCommand.java	(working copy)
@@ -8,6 +8,7 @@
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
+
 import javax.swing.Icon;
 
 import org.openstreetmap.josm.data.coor.EastNorth;
@@ -47,19 +48,9 @@
     private double backupY;
 
     /**
-     * Small helper for holding the interesting part of the old data state of the
-     * objects.
-     */
-    public static class OldState {
-        LatLon latlon;
-        EastNorth en; // cached EastNorth to be used for applying exact displacenment
-        boolean modified;
-    }
-
-    /**
      * List of all old states of the objects.
      */
-    private List<OldState> oldState = new LinkedList<OldState>();
+    private List<OldNodeState> oldState = new LinkedList<OldNodeState>();
 
     public MoveCommand(OsmPrimitive osm, double x, double y) {
         this(Collections.singleton(osm), x, y);
@@ -84,23 +75,19 @@
         this.y = y;
         this.nodes = AllNodesVisitor.getAllNodes(objects);
         for (Node n : this.nodes) {
-            OldState os = new OldState();
-            os.latlon = new LatLon(n.getCoor());
-            os.en = n.getEastNorth();
-            os.modified = n.isModified();
-            oldState.add(os);
+            oldState.add(new OldNodeState(n));
         }
     }
 
-     public MoveCommand(Collection<OsmPrimitive> objects, EastNorth start, EastNorth end) {
-         this(objects, end.getX()-start.getX(), end.getY()-start.getY());
-         startEN =  start;
-     }
+    public MoveCommand(Collection<OsmPrimitive> objects, EastNorth start, EastNorth end) {
+        this(objects, end.getX()-start.getX(), end.getY()-start.getY());
+        startEN =  start;
+    }
 
-     public MoveCommand(OsmPrimitive p, EastNorth start, EastNorth end) {
-         this(Collections.singleton(p), end.getX()-start.getX(), end.getY()-start.getY());
-         startEN =  start;
-     }
+    public MoveCommand(OsmPrimitive p, EastNorth start, EastNorth end) {
+        this(Collections.singleton(p), end.getX()-start.getX(), end.getY()-start.getY());
+        startEN =  start;
+    }
 
     /**
      * Move the same set of objects again by the specified vector. The vectors
@@ -134,13 +121,13 @@
         updateCoordinates();
     }
 
-     /**
+    /**
      * Changes base point of movement
      * @param newDraggedStartPoint - new starting point after movement (where user clicks to start new drag)
      */
     public void changeStartPoint(EastNorth newDraggedStartPoint) {
         startEN = new EastNorth(newDraggedStartPoint.getX()-x, newDraggedStartPoint.getY()-y);
-     }
+    }
 
     /**
      * Save curent displacement to restore in case of some problems
@@ -160,10 +147,10 @@
     }
 
     private void updateCoordinates() {
-        Iterator<OldState> it = oldState.iterator();
+        Iterator<OldNodeState> it = oldState.iterator();
         for (Node n : nodes) {
-            OldState os = it.next();
-            n.setEastNorth(os.en.add(x, y));
+            OldNodeState os = it.next();
+            n.setEastNorth(os.eastNorth.add(x, y));
         }
     }
 
@@ -182,9 +169,9 @@
     }
 
     @Override public void undoCommand() {
-        Iterator<OldState> it = oldState.iterator();
+        Iterator<OldNodeState> it = oldState.iterator();
         for (Node n : nodes) {
-            OldState os = it.next();
+            OldNodeState os = it.next();
             n.setCoor(os.latlon);
             n.setModified(os.modified);
         }
Index: src/org/openstreetmap/josm/command/TransformNodesCommand.java
===================================================================
--- src/org/openstreetmap/josm/command/TransformNodesCommand.java	(revision 6170)
+++ src/org/openstreetmap/josm/command/TransformNodesCommand.java	(working copy)
@@ -11,7 +11,6 @@
 import javax.swing.Icon;
 
 import org.openstreetmap.josm.data.coor.EastNorth;
-import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.visitor.AllNodesVisitor;
@@ -29,31 +28,18 @@
      */
     protected Collection<Node> nodes = new LinkedList<Node>();
 
-    /**
-     * Small helper for holding the interesting part of the old data state of the
-     * nodes.
-     */
-    public static class OldState {
-        LatLon latlon;
-        EastNorth eastNorth;
-        boolean modified;
-    }
 
     /**
      * List of all old states of the nodes.
      */
-    protected Map<Node, OldState> oldStates = new HashMap<Node, OldState>();
+    protected Map<Node, OldNodeState> oldStates = new HashMap<Node, OldNodeState>();
 
     /**
      * Stores the state of the nodes before the command.
      */
     protected void storeOldState() {
         for (Node n : this.nodes) {
-            OldState os = new OldState();
-            os.latlon = new LatLon(n.getCoor());
-            os.eastNorth = n.getEastNorth();
-            os.modified = n.isModified();
-            oldStates.put(n, os);
+            oldStates.put(n, new OldNodeState(n));
         }
     }
 
@@ -106,7 +92,7 @@
     @Override
     public void undoCommand() {
         for (Node n : nodes) {
-            OldState os = oldStates.get(n);
+            OldNodeState os = oldStates.get(n);
             n.setCoor(os.latlon);
             n.setModified(os.modified);
         }
Index: src/org/openstreetmap/josm/data/coor/EastNorth.java
===================================================================
--- src/org/openstreetmap/josm/data/coor/EastNorth.java	(revision 6170)
+++ src/org/openstreetmap/josm/data/coor/EastNorth.java	(working copy)
@@ -8,7 +8,7 @@
  *
  * @author Imi
  */
-public class EastNorth extends Coordinate implements Cloneable {
+public class EastNorth extends Coordinate {
 
     public EastNorth(double east, double north) {
         super(east,north);
@@ -36,7 +36,7 @@
 
     public EastNorth interpolate(EastNorth en2, double proportion) {
         return new EastNorth(this.x + proportion * (en2.x - this.x),
-            this.y + proportion * (en2.y - this.y));
+                this.y + proportion * (en2.y - this.y));
     }
 
     public EastNorth getCenter(EastNorth en2) {
@@ -53,7 +53,7 @@
     public double distance(final EastNorth en) {
         return super.distance(en);
     }
-   
+
     /**
      * Returns the square of the euclidean distance from this {@code EastNorth} to a specified {@code EastNorth}.
      * 
@@ -73,7 +73,7 @@
     public double length(){
         return Math.sqrt(x*x + y*y);
     }
-    
+
     /**
      * Returns the heading, in radians, that you have to use to get from
      * this EastNorth to another. Heading is mapped into [0, 2pi)
@@ -83,7 +83,9 @@
      */
     public double heading(EastNorth other) {
         double hd = Math.atan2(other.east() - east(), other.north() - north());
-        if(hd < 0) hd = 2 * Math.PI + hd;
+        if(hd < 0) {
+            hd = 2 * Math.PI + hd;
+        }
         return hd;
     }
 
@@ -129,9 +131,4 @@
     public boolean equalsEpsilon(EastNorth other, double e) {
         return (Math.abs(x - other.x) < e && Math.abs(y - other.y) < e);
     }
-
-    @Override
-    public EastNorth clone() throws CloneNotSupportedException {
-        return (EastNorth) super.clone();
-    }
 }
Index: src/org/openstreetmap/josm/data/coor/LatLon.java
===================================================================
--- src/org/openstreetmap/josm/data/coor/LatLon.java	(revision 6170)
+++ src/org/openstreetmap/josm/data/coor/LatLon.java	(working copy)
@@ -25,7 +25,7 @@
  *
  * @author Imi
  */
-public class LatLon extends Coordinate implements Cloneable {
+public class LatLon extends Coordinate {
 
     /**
      * Minimum difference in location to not be represented as the same position.
@@ -157,7 +157,7 @@
         super(lon, lat);
     }
 
-    public LatLon(LatLon coor) {
+    protected LatLon(LatLon coor) {
         super(coor.lon(), coor.lat());
     }
 
@@ -221,10 +221,10 @@
     }
 
     /**
-     * Check if this is contained in given area or area is null. 
+     * 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. 
+     * @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);
@@ -305,7 +305,7 @@
     public double distance(final LatLon ll) {
         return super.distance(ll);
     }
-   
+
     /**
      * Returns the square of the euclidean distance from this {@code LatLon} to a specified {@code LatLon}.
      * 
@@ -316,7 +316,7 @@
     public double distanceSq(final LatLon ll) {
         return super.distanceSq(ll);
     }
-    
+
     @Override public String toString() {
         return "LatLon[lat="+lat()+",lon="+lon()+"]";
     }
@@ -394,9 +394,4 @@
             return false;
         return true;
     }
-
-    @Override
-    public LatLon clone() throws CloneNotSupportedException {
-        return (LatLon) super.clone();
-    }
 }
