private void markDirty() {
// since we are dirty, we don't need to listen anymore
removeElementChangeListener();
final Map oldMap = wrappedMap;
// lazy computation of diff
MapDiff mapDiff = new MapDiff() {
private MapDiff cachedDiff = null;
private void ensureCached() {
if (cachedDiff == null) {
recompute();