Index: /trunk/src/org/openstreetmap/josm/gui/MapStatus.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/MapStatus.java	(revision 2228)
+++ /trunk/src/org/openstreetmap/josm/gui/MapStatus.java	(revision 2229)
@@ -212,5 +212,7 @@
                         // of the first middle click)
                         if(isAtOldPosition && middleMouseDown) {
-                            popupCycleSelection(osms);
+                            // Hand down mouse modifiers so the SHIFT mod can be
+                            // handled correctly (see funcion)
+                            popupCycleSelection(osms, ms.modifiers);
                         }
 
@@ -295,6 +297,7 @@
          * will automatically select the next item and update the map
          * @param osms
-         */
-        private final void popupCycleSelection(Collection<OsmPrimitive> osms) {
+         * @param mouse modifiers
+         */
+        private final void popupCycleSelection(Collection<OsmPrimitive> osms, int mods) {
             // Find some items that are required for cycling through
             OsmPrimitive firstItem = null;
@@ -310,4 +313,13 @@
                 if(firstSelected == null && osm.isSelected()) {
                     firstSelected = osm;
+                }
+            }
+
+            // Clear previous selection if SHIFT (add to selection) is not
+            // pressed. Cannot use "setSelected()" because it will cause a
+            // fireSelectionChanged event which is unnecessary at this point.
+            if((mods & MouseEvent.SHIFT_DOWN_MASK) == 0) {
+                for(OsmPrimitive o : Main.main.getCurrentDataSet().getSelected()) {
+                    o.setSelected(false);
                 }
             }
