private void removed(E input) {
    listeners.elementRemoved(input);

    IObservableList<E> observable = elementToObservable.remove(input);
    if (observable != null) {
      observable.removeListChangeListener(listChangeListener);
      for (E element : observable) {
        removed(element);
      }
      observable.dispose();
    }
  }
 @Override
 public synchronized void dispose() {
   super.dispose();
   navigableEndsObservableList.removeChangeListener(this);
   navigableEndsObservableList.dispose();
 }