Index: PropertyChangeSupport.java =================================================================== --- PropertyChangeSupport.java (revision 395916) +++ PropertyChangeSupport.java (working copy) @@ -161,15 +161,15 @@ public synchronized void removePropertyChangeListener( PropertyChangeListener listener) { if (listener != null) { - Iterator iterator = allPropertiesChangeListeners.iterator(); - while (iterator.hasNext()) { - PropertyChangeListener pcl = - (PropertyChangeListener) iterator.next(); - if (pcl == listener) { - iterator.remove(); - break; - } - } + if(listener instanceof PropertyChangeListenerProxy) { + String name = ((PropertyChangeListenerProxy) listener).getPropertyName(); + PropertyChangeListener lst = (PropertyChangeListener) + ((PropertyChangeListenerProxy) listener).getListener(); + + removePropertyChangeListener(name, lst); + } else { + allPropertiesChangeListeners.remove(listener); + } } } @@ -179,7 +179,15 @@ public synchronized void addPropertyChangeListener( PropertyChangeListener listener) { if (listener != null) { - allPropertiesChangeListeners.add(listener); + if (listener instanceof PropertyChangeListenerProxy) { + String name = ((PropertyChangeListenerProxy) listener).getPropertyName(); + PropertyChangeListener lst=(PropertyChangeListener) + ((PropertyChangeListenerProxy) listener).getListener(); + + addPropertyChangeListener(name, lst); + } else { + allPropertiesChangeListeners.add(listener); + } } }