     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({ [.lab, .labByAppointment].contains($0.type) })
    }()

    lazy var rxPlayableContent: Observable<Results<SessionAsset>> = {

        let validAssets = self.session.assets.filter("(rawAssetType == %@ AND remoteURL != '') OR (rawAssetType == %@ AND SUBQUERY(session.instances, $instance, $instance.isCurrentlyLive == true).@count > 0)", SessionAssetType.streamingVideo.rawValue, SessionAssetType.liveStreamVideo.rawValue)
        let validAssetsObservable = Observable.collection(from: validAssets)

        return validAssetsObservable.map { $0.count > 0 }
    }()

    lazy var rxDownloadableContent: Observable<Results<SessionAsset>> = {
