Index: trunk/src/org/openstreetmap/josm/command/Command.java
===================================================================
--- trunk/src/org/openstreetmap/josm/command/Command.java	(revision 6172)
+++ trunk/src/org/openstreetmap/josm/command/Command.java	(revision 6173)
@@ -16,4 +16,6 @@
 
 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;
@@ -51,4 +53,24 @@
         public void visit(Relation e) {
             orig.put(e, e.save());
+        }
+    }
+
+    /**
+     * 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;
+
+        /**
+         * Constructs a new {@code OldNodeState} for the given node.
+         * @param node The node whose state has to be remembered
+         */
+        public OldNodeState(Node node){
+            latlon = node.getCoor();
+            eastNorth = node.getEastNorth();
+            modified = node.isModified();
         }
     }
Index: trunk/src/org/openstreetmap/josm/command/MoveCommand.java
===================================================================
--- trunk/src/org/openstreetmap/josm/command/MoveCommand.java	(revision 6172)
+++ trunk/src/org/openstreetmap/josm/command/MoveCommand.java	(revision 6173)
@@ -9,4 +9,5 @@
 import java.util.LinkedList;
 import java.util.List;
+
 import javax.swing.Icon;
 
@@ -48,17 +49,7 @@
 
     /**
-     * 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) {
@@ -85,21 +76,17 @@
         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);
-        }
-    }
-
-     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;
-     }
+            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(OsmPrimitive p, EastNorth start, EastNorth end) {
+        this(Collections.singleton(p), end.getX()-start.getX(), end.getY()-start.getY());
+        startEN =  start;
+    }
 
     /**
@@ -135,5 +122,5 @@
     }
 
-     /**
+    /**
      * Changes base point of movement
      * @param newDraggedStartPoint - new starting point after movement (where user clicks to start new drag)
@@ -141,5 +128,5 @@
     public void changeStartPoint(EastNorth newDraggedStartPoint) {
         startEN = new EastNorth(newDraggedStartPoint.getX()-x, newDraggedStartPoint.getY()-y);
-     }
+    }
 
     /**
@@ -161,8 +148,8 @@
 
     private void updateCoordinates() {
-        Iterator<OldState> it = oldState.iterator();
-        for (Node n : nodes) {
-            OldState os = it.next();
-            n.setEastNorth(os.en.add(x, y));
+        Iterator<OldNodeState> it = oldState.iterator();
+        for (Node n : nodes) {
+            OldNodeState os = it.next();
+            n.setEastNorth(os.eastNorth.add(x, y));
         }
     }
@@ -183,7 +170,7 @@
 
     @Override public void undoCommand() {
-        Iterator<OldState> it = oldState.iterator();
-        for (Node n : nodes) {
-            OldState os = it.next();
+        Iterator<OldNodeState> it = oldState.iterator();
+        for (Node n : nodes) {
+            OldNodeState os = it.next();
             n.setCoor(os.latlon);
             n.setModified(os.modified);
Index: trunk/src/org/openstreetmap/josm/command/TransformNodesCommand.java
===================================================================
--- trunk/src/org/openstreetmap/josm/command/TransformNodesCommand.java	(revision 6172)
+++ trunk/src/org/openstreetmap/josm/command/TransformNodesCommand.java	(revision 6173)
@@ -12,5 +12,4 @@
 
 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;
@@ -30,18 +29,9 @@
     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>();
 
     /**
@@ -50,9 +40,5 @@
     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));
         }
     }
@@ -107,5 +93,5 @@
     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: trunk/src/org/openstreetmap/josm/data/coor/EastNorth.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/coor/EastNorth.java	(revision 6172)
+++ trunk/src/org/openstreetmap/josm/data/coor/EastNorth.java	(revision 6173)
@@ -9,5 +9,5 @@
  * @author Imi
  */
-public class EastNorth extends Coordinate implements Cloneable {
+public class EastNorth extends Coordinate {
 
     public EastNorth(double east, double north) {
@@ -37,5 +37,5 @@
     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));
     }
 
@@ -54,5 +54,5 @@
         return super.distance(en);
     }
-   
+
     /**
      * Returns the square of the euclidean distance from this {@code EastNorth} to a specified {@code EastNorth}.
@@ -74,5 +74,5 @@
         return Math.sqrt(x*x + y*y);
     }
-    
+
     /**
      * Returns the heading, in radians, that you have to use to get from
@@ -84,5 +84,7 @@
     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;
     }
@@ -130,8 +132,3 @@
         return (Math.abs(x - other.x) < e && Math.abs(y - other.y) < e);
     }
-
-    @Override
-    public EastNorth clone() throws CloneNotSupportedException {
-        return (EastNorth) super.clone();
-    }
 }
Index: trunk/src/org/openstreetmap/josm/data/coor/LatLon.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/coor/LatLon.java	(revision 6172)
+++ trunk/src/org/openstreetmap/josm/data/coor/LatLon.java	(revision 6173)
@@ -26,5 +26,5 @@
  * @author Imi
  */
-public class LatLon extends Coordinate implements Cloneable {
+public class LatLon extends Coordinate {
 
     /**
@@ -158,5 +158,5 @@
     }
 
-    public LatLon(LatLon coor) {
+    protected LatLon(LatLon coor) {
         super(coor.lon(), coor.lat());
     }
@@ -222,8 +222,8 @@
 
     /**
-     * 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) {
@@ -306,5 +306,5 @@
         return super.distance(ll);
     }
-   
+
     /**
      * Returns the square of the euclidean distance from this {@code LatLon} to a specified {@code LatLon}.
@@ -317,5 +317,5 @@
         return super.distanceSq(ll);
     }
-    
+
     @Override public String toString() {
         return "LatLon[lat="+lat()+",lon="+lon()+"]";
@@ -395,8 +395,3 @@
         return true;
     }
-
-    @Override
-    public LatLon clone() throws CloneNotSupportedException {
-        return (LatLon) super.clone();
-    }
 }
