public boolean removeObserver(Object observer) {
if (observer == null) throw new IllegalArgumentException("observer cannot be null");
// Observers can observe they are to be removed
fireEvent(new ObserverRemoved(observer));
return observers.remove(new Observer(observer));
}