     private(set) lazy var currentTime: Observable<Float64> = asObservable(self._currentTime)
     private let _currentTime = Variable<Float64>(0)
 
-    private var _installs: [PlayerMiddleware] = []
+    fileprivate var _installs: [PlayerMiddleware] = []
 
     var playing: Bool { return _player.rate != 0 }
 
-    private let previewer: Preview
+    fileprivate let previewer: Preview
 
     init(previewer: Preview) {
         self.previewer = previewer

            )
            .addDisposableTo(disposeBag)
    }

    @objc
    private func didEndPlay(_ notification: Foundation.Notification) {
        assert(Thread.isMainThread)

        if let item = notification.object as? AVPlayerItem, let trackId = item.trackId {
            _installs.forEach { $0.didEndPlayTrack(trackId) }
        }
        if _player.items().count == 1 {
            pause()
        }
    }
}

private func configureFading(item: AVPlayerItem, duration: Double) {

            .addDisposableTo(_disposeBag)
    }

    @objc
    private func didEndPlay(_ notification: Foundation.Notification) {
        assert(Thread.isMainThread)

        if let item = notification.object as? AVPlayerItem, let trackId = item.trackId {
            _installs.forEach { $0.didEndPlayTrack(trackId) }
        }
        if _player.items().count == 1 {
            pause()
        }
    }
}

// add/(remove)
extension PlayerImpl {

    func add(track: Track) {
        add(track: track, afterPlaylist: false)
