Index: trunk/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java	(revision 451)
+++ trunk/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java	(revision 452)
@@ -73,6 +73,4 @@
 		selectionManager = new SelectionManager(this, false, mapFrame.mapView);		
 		try { initialMoveDelay = Integer.parseInt(Main.pref.get("edit.initial-move-delay","100")); } catch (NumberFormatException x) {};
-
-
 	}
 
@@ -197,18 +195,23 @@
 		mouseDownTime = System.currentTimeMillis();
 
+		// find the object that was clicked on.
+		// if the object is not part of the current selection, clear current
+		// selection before proceeding.
+		Collection<OsmPrimitive> osmColl = null;
 		OsmPrimitive osm = Main.map.mapView.getNearest(e.getPoint());
-		Collection<OsmPrimitive> osmColl;
 		if (osm == null) {
 			osmColl = Collections.emptySet();
+			Main.ds.setSelected();
 		} else {
 			osmColl = Collections.singleton(osm);
-		}
-
+			if (!Main.ds.getSelected().contains(osm)) Main.ds.setSelected();
+		}
+		
 		if (ctrl && shift) {
-			selectPrims(osmColl, true, false);
+			if (Main.ds.getSelected().isEmpty()) selectPrims(osmColl, true, false);
 			mode = Mode.rotate;
 			setCursor(ImageProvider.getCursor("rotate", null));
-		} else if (osm != null) {
-			selectPrims(osmColl, shift, ctrl);
+		} else if (!osmColl.isEmpty()) {
+			if (Main.ds.getSelected().isEmpty()) selectPrims(osmColl, shift, ctrl);
 			mode = Mode.move;
 		} else {
