public <T> void setPersistentMapProperty(String prop, Map<String, T> value) { boolean dirty = false; synchronized (persistent_properties) { Map<String, T> existing = getPersistentMapProperty(prop, null); if (!BEncoder.mapsAreIdentical(value, existing)) { try { if (value == null) { persistent_properties.remove(prop); } else { persistent_properties.put(prop, value); } dirty = true; } catch (Throwable e) { Debug.printStackTrace(e); } } } if (dirty) { setDirty(); } }