Index: /src/org/openstreetmap/josm/actions/mapmode/MoveAction.java
===================================================================
--- /src/org/openstreetmap/josm/actions/mapmode/MoveAction.java	(revision 311)
+++ /src/org/openstreetmap/josm/actions/mapmode/MoveAction.java	(revision 312)
@@ -15,5 +15,4 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.GroupAction;
-import org.openstreetmap.josm.actions.mapmode.AddNodeAction.Mode;
 import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.command.MoveCommand;
@@ -120,5 +119,5 @@
 		
 		// when rotating, having only one node makes no sense - quit silently
-		if (affectedNodes.size() < 2 && mode == Mode.move) 
+		if (mode == Mode.rotate && affectedNodes.size() < 2) 
 			return;
 		
Index: /src/org/openstreetmap/josm/command/MoveCommand.java
===================================================================
--- /src/org/openstreetmap/josm/command/MoveCommand.java	(revision 311)
+++ /src/org/openstreetmap/josm/command/MoveCommand.java	(revision 312)
@@ -5,5 +5,4 @@
 import static org.openstreetmap.josm.tools.I18n.trn;
 
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
@@ -47,11 +46,11 @@
 	 * Small helper for holding the interesting part of the old data state of the
 	 * objects. 
-	 * @author imi
 	 */
-	class OldState
-	{
-		double x,y,lat,lon;
+	public static class OldState {
+		LatLon latlon;
+		EastNorth eastNorth;
 		boolean modified;
 	}
+	
 	/**
 	 * List of all old states of the objects.
@@ -72,8 +71,6 @@
 		for (Node n : this.objects) {
 			OldState os = new OldState();
-			os.x = n.eastNorth.east();
-			os.y = n.eastNorth.north();
-			os.lat = n.coor.lat();
-			os.lon = n.coor.lon();
+			os.eastNorth = n.eastNorth;
+			os.latlon = n.coor;
 			os.modified = n.modified;
 			oldState.add(os);
@@ -110,6 +107,6 @@
 		for (Node n : objects) {
 			OldState os = it.next();
-			n.eastNorth = new EastNorth(os.x, os.y);
-			n.coor = new LatLon(os.lat, os.lon);
+			n.eastNorth = os.eastNorth;
+			n.coor = os.latlon;
 			n.modified = os.modified;
 		}
Index: /src/org/openstreetmap/josm/command/RotateCommand.java
===================================================================
--- /src/org/openstreetmap/josm/command/RotateCommand.java	(revision 311)
+++ /src/org/openstreetmap/josm/command/RotateCommand.java	(revision 312)
@@ -4,10 +4,7 @@
 import static org.openstreetmap.josm.tools.I18n.trn;
 
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.LinkedList;
-import java.util.List;
 import java.util.Map;
 
@@ -17,5 +14,4 @@
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.command.MoveCommand.OldState;
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.coor.LatLon;
@@ -53,18 +49,7 @@
 	
 	/**
-	 * Small helper for holding the interesting part of the old data state of the
-	 * objects. 
-	 */
-	class OldState
-	{
-		double x,y,lat,lon;
-		boolean modified;
-		Node originalNode;
-	}
-	
-	/**
 	 * List of all old states of the objects.
 	 */
-	private Map<Node, OldState> oldState = new HashMap<Node, OldState>();
+	private Map<Node, MoveCommand.OldState> oldState = new HashMap<Node, MoveCommand.OldState>();
 	
 	/**
@@ -80,12 +65,10 @@
 			
 		for (Node n : this.objects) {
-			OldState os = new OldState();
-			os.x = n.eastNorth.east();
-			os.y = n.eastNorth.north();
-			os.lat = n.coor.lat();
-			os.lon = n.coor.lon();
+			MoveCommand.OldState os = new MoveCommand.OldState();
+			os.eastNorth = n.eastNorth;
+			os.latlon = n.coor;
 			os.modified = n.modified;
 			oldState.put(n, os);
-			pivot.eastNorth = new EastNorth(pivot.eastNorth.east()+os.x, pivot.eastNorth.north()+os.y);
+			pivot.eastNorth = new EastNorth(pivot.eastNorth.east()+os.eastNorth.east(), pivot.eastNorth.north()+os.eastNorth.north());
 			pivot.coor = Main.proj.eastNorth2latlon(pivot.eastNorth);
 		}
@@ -118,11 +101,13 @@
 			double cosPhi = Math.cos(rotationAngle);
 			double sinPhi = Math.sin(rotationAngle);
-			double x = oldState.get(n).x - pivot.eastNorth.east();
-			double y = oldState.get(n).y - pivot.eastNorth.north();
+			EastNorth oldEastNorth = oldState.get(n).eastNorth;
+			double x = oldEastNorth.east() - pivot.eastNorth.east();
+			double y = oldEastNorth.north() - pivot.eastNorth.north();
 			double nx =  sinPhi * x + cosPhi * y + pivot.eastNorth.east();
 			double ny = -cosPhi * x + sinPhi * y + pivot.eastNorth.north();
 			n.eastNorth = new EastNorth(nx, ny);
 			n.coor = Main.proj.eastNorth2latlon(n.eastNorth);
-			if (setModified) n.modified = true;
+			if (setModified)
+				n.modified = true;	
 		}
 	}
@@ -134,7 +119,7 @@
 	@Override public void undoCommand() {
 		for (Node n : objects) {
-			OldState os = oldState.get(n);
-			n.eastNorth = new EastNorth(os.x, os.y);
-			n.coor = new LatLon(os.lat, os.lon);
+			MoveCommand.OldState os = oldState.get(n);
+			n.eastNorth = os.eastNorth;
+			n.coor = os.latlon;
 			n.modified = os.modified;
 		}
Index: /src/org/openstreetmap/josm/gui/GettingStarted.java
===================================================================
--- /src/org/openstreetmap/josm/gui/GettingStarted.java	(revision 311)
+++ /src/org/openstreetmap/josm/gui/GettingStarted.java	(revision 312)
@@ -48,9 +48,4 @@
 		panel = new JPanel(new GridBagLayout());
 		
-		panel.add(new JLabel("<html><h2>You are running a beta version with a brand new feature <i>multiple data layers</i>.</h2>" +
-				"<h3>This is a major change, so expect some bugs, especally with undo/redo and the merging code.<br>" +
-				"If you can't work, downgrade to josm-1.5.jar, available at http://josm.openstreetmap.org/download/josm-1.5.jar<br><br>" +
-		"Imi.</h3>"), GBC.eol());
-
 		addGettingStarted();
 		addGettingHelp();
Index: /src/org/openstreetmap/josm/gui/MapFrame.java
===================================================================
--- /src/org/openstreetmap/josm/gui/MapFrame.java	(revision 311)
+++ /src/org/openstreetmap/josm/gui/MapFrame.java	(revision 312)
@@ -18,5 +18,4 @@
 import org.openstreetmap.josm.actions.mapmode.DeleteAction;
 import org.openstreetmap.josm.actions.mapmode.MapMode;
-import org.openstreetmap.josm.actions.mapmode.MoveAction;
 import org.openstreetmap.josm.actions.mapmode.SelectionAction;
 import org.openstreetmap.josm.actions.mapmode.ZoomAction;
Index: /src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
===================================================================
--- /src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java	(revision 311)
+++ /src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java	(revision 312)
@@ -108,9 +108,4 @@
 	 */
 	public boolean uploadedModified = false;
-	/**
-	 * Whether the data (or pieces of the data) was loaded from disk rather than from
-	 * the server directly. This affects the modified state.
-	 */
-	private boolean fromDisk = false;
 
 	public final LinkedList<ModifiedChangedListener> listenerModified = new LinkedList<ModifiedChangedListener>();
@@ -124,5 +119,4 @@
 		super(name);
 		this.data = data;
-		this.fromDisk = associatedFile != null;
 		this.associatedFile = associatedFile;
 	}
@@ -235,9 +229,9 @@
 
 		// update the modified flag
-		if (fromDisk && processed != null && !dataAdded)
+		if (associatedFile != null && processed != null && !dataAdded)
 			return; // do nothing when uploading non-harmful changes.
 
 		// modified if server changed the data (esp. the id).
-		uploadedModified = fromDisk && processed != null && dataAdded;
+		uploadedModified = associatedFile != null && processed != null && dataAdded;
 		setModified(uploadedModified);
 	}
