Tidying up the generics being used and implementing IObservable and IObserver for eventing semantics. This will allow users in .NET to take advantage of LINQ.