     // MARK: Private Properties
     
     fileprivate var player = AVPlayer()
+
+    private var regularPlayerView: RegularPlayerView
+
+    private var playerLayer: AVPlayerLayer {
+        return self.regularPlayerView.playerLayer
+    }
+
+    private var seekTolerance: CMTime?
     
     // MARK: Public API
     

        return self.player.errorForPlayerOrItem
    }
    
    public func seek(to time: TimeInterval) {
        let cmTime = CMTimeMakeWithSeconds(time, preferredTimescale: Int32(NSEC_PER_SEC))
        
        self.player.seek(to: cmTime)
        
        self.time = time
    }
    
    public func play() {
        self.player.play()
    }
    
    public func pause() {
        self.player.pause()
    }
    
    // MARK: Lifecycle
    
    public override init() {
        super.init()
        
        self.addPlayerObservers()
        
        self.regularPlayerView.configureForPlayer(player: self.player)
        
        self.setupAirplay()
    }
    

    }
    
    // MARK: Observation Helpers

    private func playerItemStatusDidChange(status: AVPlayerItem.Status) {
        switch status {
        case .unknown:
