fleshed out IObserable implementation