Index: /src/org/openstreetmap/josm/actions/UnselectAllAction.java
===================================================================
--- /src/org/openstreetmap/josm/actions/UnselectAllAction.java	(revision 296)
+++ /src/org/openstreetmap/josm/actions/UnselectAllAction.java	(revision 297)
@@ -15,5 +15,5 @@
 
 	public void actionPerformed(ActionEvent e) {
-		Main.ds.clearSelection();
+		Main.ds.setSelected();
 	}
 }
Index: /src/org/openstreetmap/josm/data/osm/DataSet.java
===================================================================
--- /src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 296)
+++ /src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 297)
@@ -82,5 +82,7 @@
 	/**
 	 * Remove the selection of the whole dataset.
+	 * @deprecated Use setSelected() instead.
 	 */
+	@Deprecated
 	public void clearSelection() {
 		clearSelection(nodes);
@@ -103,5 +105,7 @@
 
 	public void setSelected(Collection<? extends OsmPrimitive> selection) {
-		clearSelection();
+		clearSelection(nodes);
+		clearSelection(segments);
+		clearSelection(ways);
 		for (OsmPrimitive osm : selection)
 			osm.selected = true;
@@ -110,9 +114,14 @@
 
 	public void setSelected(OsmPrimitive... osm) {
-		clearSelection();
-		if (osm.length == 0 || (osm.length == 1 && osm[0] == null))
+		if (osm.length == 1 && osm[0] == null) {
+			setSelected();
 			return;
+		}
+		clearSelection(nodes);
+		clearSelection(segments);
+		clearSelection(ways);
 		for (OsmPrimitive o : osm)
-			o.selected = true;
+			if (o != null)
+				o.selected = true;
 		fireSelectionChanged(Arrays.asList(osm));
 	}
Index: /src/org/openstreetmap/josm/gui/MapView.java
===================================================================
--- /src/org/openstreetmap/josm/gui/MapView.java	(revision 296)
+++ /src/org/openstreetmap/josm/gui/MapView.java	(revision 297)
@@ -132,5 +132,5 @@
 		if (layer == editLayer) {
 			editLayer = null;
-			Main.ds.clearSelection();
+			Main.ds.setSelected();
 		}
 		layer.destroy();
Index: /src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
===================================================================
--- /src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java	(revision 296)
+++ /src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java	(revision 297)
@@ -230,5 +230,5 @@
 		redoCommands.push(c);
 		setModified(uploadedModified || !commands.isEmpty());
-		Main.ds.clearSelection();
+		Main.ds.setSelected();
 		fireCommandsChanged();
 	}
Index: /test/unit/org/openstreetmap/josm/data/osm/DataSetTest.java
===================================================================
--- /test/unit/org/openstreetmap/josm/data/osm/DataSetTest.java	(revision 296)
+++ /test/unit/org/openstreetmap/josm/data/osm/DataSetTest.java	(revision 297)
@@ -46,10 +46,4 @@
 	}
 
-	public void testClearSelection() {
-		node1.selected = true;
-		ds.clearSelection();
-		assertFalse(node1.selected);
-	}
-
 	public void testGetSelected() {
 		node1.selected = true;
