diff -r 3450a1dac4a9 javafx-beans/src/javafx/collections/FXCollections.java --- a/javafx-beans/src/javafx/collections/FXCollections.java Fri May 31 17:15:40 2013 -0400 +++ b/javafx-beans/src/javafx/collections/FXCollections.java Thu Jun 06 08:19:16 2013 -0400 @@ -1625,17 +1625,23 @@ private final ObservableSet backingSet; private SetListenerHelper listenerHelper; - private final SetChangeListener listener; + private SetChangeListener listener; public UnmodifiableObservableSet(ObservableSet backingSet) { this.backingSet = backingSet; - listener = new SetChangeListener() { - @Override - public void onChanged(Change c) { - callObservers(new SetAdapterChange(UnmodifiableObservableSet.this, c)); - } - }; - this.backingSet.addListener(new WeakSetChangeListener(listener)); + this.listener = null; + } + + private void initListener() { + if (listener == null) { + listener = new SetChangeListener() { + @Override + public void onChanged(Change c) { + callObservers(new SetAdapterChange(UnmodifiableObservableSet.this, c)); + } + }; + this.backingSet.addListener(new WeakSetChangeListener(listener)); + } } private void callObservers(SetChangeListener.Change change) { @@ -1671,6 +1677,7 @@ @Override public void addListener(InvalidationListener listener) { + initListener(); listenerHelper = SetListenerHelper.addListener(listenerHelper, listener); } @@ -1681,6 +1688,7 @@ @Override public void addListener(SetChangeListener listener) { + initListener(); listenerHelper = SetListenerHelper.addListener(listenerHelper, listener); }