     private var disposeBag = DisposeBag()
 
     lazy var rxSession: Observable<Session> = {
-        return Observable.from(object: self.session)
+        return Observable.from(object: session)
+    }()
+
+    lazy var rxSessionInstance: Observable<SessionInstance> = {
+        return Observable.from(object: sessionInstance)
     }()
 
     lazy var rxTitle: Observable<String> = {
-        return Observable.from(object: self.session).map({ $0.title })
+        return rxSession.map { $0.title }
     }()
 
     lazy var rxSubtitle: Observable<String> = {
-        return Observable.from(object: self.session).map({ SessionViewModel.subtitle(from: $0, at: $0.event.first) })
+        return rxSession.map { SessionViewModel.subtitle(from: $0, at: $0.event.first) }
     }()
 
     lazy var rxTrackName: Observable<String> = {
-        return Observable.from(object: self.session).map({ $0.track.first?.name }).ignoreNil()
+        return rxSession.map { $0.track.first?.name }.ignoreNil()
     }()
 
     lazy var rxSummary: Observable<String> = {
-        return Observable.from(object: self.session).map({ $0.summary })
+        return rxSession.map { $0.summary }
     }()
 
     lazy var rxActionPrompt: Observable<String?> = {
         guard sessionInstance.startTime > today() else { return Observable.just(nil) }
         guard actionLinkURL != nil else { return Observable.just(nil) }
 
-        return Observable.from(object: self.sessionInstance).map({ $0.actionLinkPrompt })
+        return rxSessionInstance.map { $0.actionLinkPrompt }
     }()
 
     var actionLinkURL: URL? {

            return Observable.just(false)
        }

        return Observable.from(object: self.sessionInstance).map({ $0.isCurrentlyLive })
    }()

    lazy var rxIsLab: Observable<Bool> = {


    lazy var rxContext: Observable<String> = {
        if self.style == .schedule {

            return Observable.combineLatest(rxSession, rxSessionInstance, showsShortDayInContextSubject).map {
                SessionViewModel.context(for: $0.0, instance: $0.1, showingWeekday: $0.2)
            }
        } else {
            return rxSession.map { [weak self] in
                SessionViewModel.context(for: $0, showingWeekday: self?.showsWeekdayInContext == true)
            }
        }
    }()

    lazy var rxFooter: Observable<String> = {
        return rxSession.map { SessionViewModel.footer(for: $0, at: $0.event.first) }
    }()

    lazy var rxSessionType: Observable<SessionInstanceType> = {
        return rxSession.map { $0.instances.first?.type }.ignoreNil()
    }()

    lazy var rxColor: Observable<NSColor> = {
        return rxSession.map { SessionViewModel.trackColor(for: $0) }.ignoreNil()
    }()

    lazy var rxDarkColor: Observable<NSColor> = {
        return rxSession.map { SessionViewModel.darkTrackColor(for: $0) }.ignoreNil()
    }()

    lazy var rxImageUrl: Observable<URL?> = {
        return rxSession.map { SessionViewModel.imageUrl(for: $0) }
    }()

    lazy var rxWebUrl: Observable<URL?> = {
        return rxSession.map { SessionViewModel.webUrl(for: $0) }
    }()

    lazy var rxIsDownloaded: Observable<Bool> = {
        return rxSession.map { $0.isDownloaded }
    }()

    lazy var rxIsFavorite: Observable<Bool> = {
        return Observable.collection(from: self.session.favorites.filter("isDeleted == false")).map { $0.count > 0 }
    }()

    lazy var rxIsCurrentlyLive: Observable<Bool> = {
