If a property or class was removed, its value or md5sum stayed in the set
of md5sums, so that each following build (without a clean) was juged as
modified.
 
   boolean modified()
   {
-    modified |= !propertyNames.containsAll(properties.keySet());
-    modified |= !properties.keySet().containsAll(propertyNames);
-    modified |= !classNames.containsAll(classes.keySet());
-    modified |= !classes.keySet().containsAll(classNames);
+    for (String property : properties.keySet())
+      if (!propertyNames.contains(property))
+      {
+        modified = true;
+        properties.remove(property);
+      }
+    for (String clazz : classes.keySet())
+      if (!classNames.contains(clazz))
+      {
+        modified = true;
+        classes.remove(clazz);
+      }
     return modified;
   }