     var timeObserver: AnyObject?
     
     func setupTimeObserver() {
-        if session == nil {
-            return
-        }
+        guard session != nil else { return }
         
         timeObserver = player?.addPeriodicTimeObserverForInterval(CMTimeMakeWithSeconds(5, 1), queue: dispatch_get_main_queue()) { [unowned self] currentTime in
             let progress = Double(CMTimeGetSeconds(currentTime)/CMTimeGetSeconds(self.player!.currentItem!.duration))

    }
    
    private func loadEventVideo() {
        if let url = event!.appropriateURL {
            print("LIVE EVENT URL: \(url)")

            self.asset = AVURLAsset(URL: url, options: nil)
            let keys = ["playable", "tracks"]
            asset.loadValuesAsynchronouslyForKeys(keys) {
                for key in keys {
                    var error: NSError?
                    let status = self.asset.statusOfValueForKey(key, error: &error)
                    if status == .Failed {
                        print("[Live Session Playback] Failed to load status for key \(key) \(error)")
                        return
                    }
                }
                
                dispatch_async(dispatch_get_main_queue()) {
                    self.playEventVideo()
                }
            }
        }
    }
    
    private func playEventVideo() {
        self.item = AVPlayerItem(asset: self.asset)
        self.player = AVPlayer(playerItem: self.item)
        self.item.addObserver(self, forKeyPath: "status", options: [.Initial, .New], context: nil)
        
        if NSProcessInfo.processInfo().isElCapitan {
            self.playerView.hidden = true
            self.customPlayerView.hidden = false
            self.customPlayerView.player = self.player
        } else {
            self.playerView.player = player
        }
    }
    
    override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {

            transcriptWC = TranscriptWindowController(session: session)
            transcriptWC.showWindow(sender)
            transcriptWC.jumpToTimeCallback = { [unowned self] time in
                guard let player = self.player else { return }
                player.seekToTime(CMTimeMakeWithSeconds(time, 30))
            }
            transcriptWC.transcriptReadyCallback = { [unowned self] transcript in
                self.setupTranscriptSync(transcript)
