Updated to implement IObservable