Index: trunk/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java	(revision 5442)
+++ trunk/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java	(revision 5443)
@@ -436,5 +436,6 @@
                 virtualManager.activateVirtualNodeNearPoint(e.getPoint());
             }
-            selectPrims(cycleManager.cycleSetup(nearestPrimitive, e.getPoint()), false, false);
+            OsmPrimitive toSelect = cycleManager.cycleSetup(nearestPrimitive, e.getPoint());
+            selectPrims(mv.asColl(toSelect), false, false);
             useLastMoveCommandIfPossible();
             break;
@@ -661,4 +662,9 @@
         // So don't add them in the first place to make handling easier
         Collection<OsmPrimitive> selection = getCurrentDataSet().getSelectedNodesAndWays();
+        if (selection.isEmpty()) { // if nothing was selected to drag, just select nearest node/way to the cursor
+            OsmPrimitive nearestPrimitive = mv.getNearestNodeOrWay(mv.getPoint(startEN), OsmPrimitive.isSelectablePredicate, true);
+            getCurrentDataSet().setSelected(nearestPrimitive);
+        }
+        
         Collection<Node> affectedNodes = AllNodesVisitor.getAllNodes(selection);
         // for these transformations, having only one node makes no sense - quit silently
@@ -690,5 +696,10 @@
             }
             getCurrentDataSet().endUpdate();
-        } else if (mode == Mode.rotate) {
+            return true;
+        } 
+
+        startEN = currentEN; // drag can continue after scaling/rotation
+
+        if (mode == Mode.rotate) {
             getCurrentDataSet().beginUpdate();
             if (c instanceof RotateCommand && affectedNodes.equals(((RotateCommand) c).getTransformedNodes())) {
@@ -885,7 +896,7 @@
          * @param nearest primitive found by simple method
          * @param p point where user clicked
-         * @return single-element collection with OsmPrimitive to be selected
+         * @return OsmPrimitive to be selected
          */
-        private Collection<OsmPrimitive> cycleSetup(OsmPrimitive nearest, Point p) {
+        private OsmPrimitive cycleSetup(OsmPrimitive nearest, Point p) {
             OsmPrimitive osm = null;
 
@@ -938,6 +949,5 @@
                 }
             }
-
-            return MapView.asColl(osm);
+            return osm;
         }
 
