One last thing - i'll let callers pass in an `IScheduler` here and drop the need to do the subsequent `ObserveOn` below