Index: trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(revision 5099)
+++ trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(revision 5100)
@@ -137,5 +137,5 @@
      * Checks if a map redraw is required and does so if needed. Also updates the status bar
      */
-    private void redrawIfRequired() {
+    private boolean redrawIfRequired() {
         updateStatusLine();
         // repaint required if the helper line is active.
@@ -157,5 +157,5 @@
 
         if ((!drawHelperLine || wayIsFinished) && !drawTargetHighlight)
-            return;
+            return false;
 
         // update selection to reflect which way being modified
@@ -177,4 +177,5 @@
             Main.map.mapView.repaint();
         }
+        return needsRepaint;
     }
 
@@ -864,5 +865,10 @@
         mousePos = e.getPoint();
         snapHelper.noSnapNow();
-        Main.map.mapView.repaint();
+        boolean repaintIssued = removeHighlighting();
+        // force repaint in case snapHelper needs one. If removeHighlighting
+        // caused one already, don’t do it again.
+        if(!repaintIssued) {
+            Main.map.mapView.repaint();
+        }
     }
 
@@ -1040,8 +1046,9 @@
     /**
      * Removes target highlighting from primitives. Issues repaint if required.
+     * Returns true if a repaint has been issued.
      */
-    private void removeHighlighting() {
+    private boolean removeHighlighting() {
         newHighlights = new HashSet<OsmPrimitive>();
-        redrawIfRequired();
+        return redrawIfRequired();
     }
 
