 			
 		}
 		
+		func reset() {
+			timer?.invalidate()
+			
+			hasError = false
+			currentRetryIndex = 0
+			currentPosition = 0
+			player._disabled = false
+			
+			player.destroyScreen(&player._errorScreen) {
+				self.player.updateFullscreen(nil, false)
+			}
+		}
+		
 		func onLoad() {
-			reset()
+			recover()
 		}
 		
 		func onStart() {
-			reset()
+			recover()
 		}
 		
 		func onResume() {
-			reset()
+			recover()
 		}
 		
 		func onProgress() {

	private func reset(_ restart: Bool = true) {
		_hasStarted = !restart
		stopTimer()
		_player?.reset()
		
		for delegate in _delegates { delegate.onReset?() }

		}
		
		func onDestroy() {
			reset()
		}
		
		private func recover() {
			guard hasError else { return }
			
			if !player.media.isLive && currentPosition > 0 {
				player.seek(currentPosition)
				currentPosition = 0
			}
			
			reset()
		}
		
		@objc private func retryHandler() {
