private synchronized void setupChangeListeners(final List<VisibilityQueryImplementation> oldVqiInstances, final List<VisibilityQueryImplementation> newVqiInstances) { if (oldVqiInstances != null) { Set<VisibilityQueryImplementation> removed = new HashSet<VisibilityQueryImplementation>(oldVqiInstances); removed.removeAll(newVqiInstances); for (VisibilityQueryImplementation vqi : removed) { vqi.removeChangeListener(vqiListener); } } Set<VisibilityQueryImplementation> added = new HashSet<VisibilityQueryImplementation>(newVqiInstances); if (oldVqiInstances != null) { added.removeAll(oldVqiInstances); } for (VisibilityQueryImplementation vqi : added) { vqi.addChangeListener(vqiListener); } cachedVqiInstances = newVqiInstances; }