Index: /trunk/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java	(revision 1471)
+++ /trunk/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java	(revision 1472)
@@ -198,5 +198,5 @@
 
             Main.main.undoRedo.add(new SequenceCommand(text, virtualCmds));
-            selectPrims(Collections.singleton((OsmPrimitive)virtualNode), false, false, false);
+            selectPrims(Collections.singleton((OsmPrimitive)virtualNode), false, false, false, false);
             virtualWays.clear();
             virtualNode = null;
@@ -334,5 +334,5 @@
 
         if (ctrl && shift) {
-            if (Main.ds.getSelected().isEmpty()) selectPrims(osmColl, true, false, false);
+            if (Main.ds.getSelected().isEmpty()) selectPrims(osmColl, true, false, false, false);
             mode = Mode.rotate;
             setCursor(ImageProvider.getCursor("rotate", null));
@@ -344,5 +344,5 @@
             selectPrims(osmColl,
                 shift || Main.ds.getSelected().containsAll(osmColl),
-                ctrl, false);
+                ctrl, false, false);
             mode = Mode.move;
         } else {
@@ -392,5 +392,5 @@
                 selectPrims(
                     Main.map.mapView.getNearestCollection(e.getPoint()),
-                    shift, ctrl, true);
+                    shift, ctrl, true, false);
 
                 // If the user double-clicked a node, change to draw mode
@@ -434,8 +434,9 @@
 
     public void selectionEnded(Rectangle r, boolean alt, boolean shift, boolean ctrl) {
-        selectPrims(selectionManager.getObjectsInRectangle(r, alt), shift, ctrl, false);
-    }
-
-    public void selectPrims(Collection<OsmPrimitive> selectionList, boolean shift, boolean ctrl, boolean released) {
+        selectPrims(selectionManager.getObjectsInRectangle(r, alt), shift, ctrl, true, true);
+    }
+
+    public void selectPrims(Collection<OsmPrimitive> selectionList, boolean shift,
+    boolean ctrl, boolean released, boolean area) {
         if ((shift && ctrl) || (ctrl && !released))
             return; // not allowed together
@@ -453,5 +454,5 @@
                 if(curSel.contains(osm))
                     curSel.remove(osm);
-                else
+                else if(!area)
                     curSel.add(osm);
             }
