Index: trunk/src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java	(revision 5100)
+++ trunk/src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java	(revision 5101)
@@ -192,5 +192,6 @@
         if(!drawTargetHighlight)
             return;
-        removeHighlighting();
+
+        Set<OsmPrimitive> newHighlights = new HashSet<OsmPrimitive>();
 
         DeleteParameters parameters = getDeleteParameters(e, modifiers);
@@ -208,5 +209,5 @@
             Command delCmd = buildDeleteCommands(e, modifiers, true);
             if(delCmd == null) {
-                Main.map.mapView.repaint();
+                repaintIfRequired(newHighlights);
                 return;
             }
@@ -215,9 +216,28 @@
             // safely do the following
             for(OsmPrimitive osm : delCmd.getParticipatingPrimitives()) {
-                osm.setHighlighted(true);
-                oldHighlights.add(osm);
-            }
-        }
-        Main.map.mapView.repaint();
+                newHighlights.add(osm);
+            }
+        }
+        repaintIfRequired(newHighlights);
+    }
+
+    private void repaintIfRequired(Set<OsmPrimitive> newHighlights) {
+        boolean needsRepaint = false;
+        for(OsmPrimitive x : newHighlights) {
+            if(oldHighlights.contains(x)) {
+                continue;
+            }
+            needsRepaint = true;
+            x.setHighlighted(true);
+        }
+        oldHighlights.removeAll(newHighlights);
+        for(OsmPrimitive x : oldHighlights) {
+            x.setHighlighted(false);
+            needsRepaint = true;
+        }
+        oldHighlights = newHighlights;
+        if(needsRepaint) {
+            Main.map.mapView.repaint();
+        }
     }
 
@@ -284,5 +304,4 @@
         getCurrentDataSet().setSelected();
         giveUserFeedback(e);
-        Main.map.mapView.repaint();
     }
 
@@ -318,5 +337,5 @@
             Main.main.undoRedo.add(cmd);
             if (getCurrentDataSet().getSelectedRelations().contains(toDelete)) {
-            	getCurrentDataSet().toggleSelected(toDelete);
+                getCurrentDataSet().toggleSelected(toDelete);
             }
             RelationDialogManager.getRelationDialogManager().close(layer, toDelete);
