Index: src/org/openstreetmap/josm/gui/dialogs/validator/ValidatorTreePanel.java
===================================================================
--- src/org/openstreetmap/josm/gui/dialogs/validator/ValidatorTreePanel.java	(revision 11287)
+++ src/org/openstreetmap/josm/gui/dialogs/validator/ValidatorTreePanel.java	(working copy)
@@ -104,6 +104,12 @@
                 removeKeyListener(keyListener);
             }
         }
+        addDataSetListener();
+    }
+
+    private void addDataSetListener() {
+        if (getErrors().isEmpty())
+            return;
         DataSet ds = Main.getLayerManager().getEditDataSet();
         if (ds != null) {
             ds.addDataSetListener(this);
@@ -302,6 +308,7 @@
      */
     public final void setErrorList(List<TestError> errors) {
         this.errors = errors;
+        addDataSetListener();
         if (isVisible()) {
             buildTree();
         }
@@ -320,6 +327,7 @@
                 errors.add(error);
             }
         }
+        addDataSetListener();
         if (isVisible()) {
             buildTree();
         }
@@ -436,18 +444,10 @@
     }
 
     @Override public void primitivesRemoved(PrimitivesRemovedEvent event) {
-        // Remove purged primitives (fix #8639)
-        for (TestError err : errors) {
-            try {
-                err.getPrimitives().removeAll(event.getPrimitives());
-            } catch (UnsupportedOperationException e) {
-                if (event.getPrimitives().containsAll(err.getPrimitives())) {
-                    err.getPrimitives().clear();
-                } else {
-                    Main.warn(e, "Unable to remove primitives from "+err+'.');
-                }
-            }
-        }
+        // Remove errors which list of primitives refer to purged primitives (fix #8639)
+        setErrorList(errors.stream()
+                .filter(err -> event.getPrimitives().stream().noneMatch(prim -> err.getPrimitives().contains(prim)))
+                .collect(Collectors.toList()));
     }
 
     @Override public void primitivesAdded(PrimitivesAddedEvent event) {
