Index: src/org/openstreetmap/josm/gui/dialogs/validator/ValidatorTreePanel.java
===================================================================
--- src/org/openstreetmap/josm/gui/dialogs/validator/ValidatorTreePanel.java	(revision 14829)
+++ src/org/openstreetmap/josm/gui/dialogs/validator/ValidatorTreePanel.java	(working copy)
@@ -404,6 +404,7 @@
      * Updates the current errors list
      */
     public void resetErrors() {
+        errors.removeIf(error -> error.getPrimitives().stream().anyMatch(OsmPrimitive::isDeleted));
         setErrors(new ArrayList<>(errors));
     }
 
@@ -485,7 +486,9 @@
         // Remove purged primitives (fix #8639)
         if (errors != null) {
             final Set<? extends OsmPrimitive> deletedPrimitives = new HashSet<>(event.getPrimitives());
-            errors.removeIf(error -> error.getPrimitives().stream().anyMatch(deletedPrimitives::contains));
+            if (errors.removeIf(error -> error.getPrimitives().stream().anyMatch(deletedPrimitives::contains))) {
+                buildTree();
+            }
         }
     }
 
@@ -514,6 +517,8 @@
     }
 
     @Override public void dataChanged(DataChangedEvent event) {
-        // Do nothing
+        if (errors.removeIf(error -> error.getPrimitives().stream().anyMatch(OsmPrimitive::isDeleted))) {
+            buildTree();
+        }
     }
 }
