For example, consider this:

```
    public IDisposable Subscribe<T>(IObserver<T> observer)
    {
        return eventStream.Where(e => e is T).Cast<T>().Subscribe(observer);
    }

```

The `eventStream` is a long lived source of events. A short lived client will use this method to subscribe for some period of time, and then unsubscribe by calling `Dispose` on the returned `IDisposable`.

However, while the `eventStream` still exists and should be kept in memory, there has been 2 new `IObservables` created by this method - the one returned by the `Where()` method that is presumably held in memory by the `eventStream`, and the one returned by the `Cast<T>()` method that is presumably held in memory by the one returned by the `Where()` method.

How will these 'intermediate IObservables' (is there a better name for them?) get cleaned up? Or will they now exist for the lifetime of the `eventStream` even though they no longer have subscriptions and no one else references them except for their source `IObservable` and therefor will never have subscriptions again?

If they are cleaned up by informing their parent they no longer have subscriptions, how do they know nothing else has taken a reference to them and may at some point later subscribe to them?