Stream.cpp makes sure it's not connected, but Timer::removeObserver() forbids unregistering unregistered observers. However Stream can be connected externally and has no way to no if it's connected. So it's either about allowing to check if the observer is registered or making Timer::removeObserver() more permissive. OS X observing API is permissive on this and it looks like a reasonnable choice.