diff --git a/Sources/Playback/Control/VLCPlayerDisplayController.m b/Sources/Playback/Control/VLCPlayerDisplayController.m
index 0ce8275dcd119767c0c7bec7c3d1cea51d1246d2..fc92640cbe62687257224c603b621a64bebb30e4 100644
--- a/Sources/Playback/Control/VLCPlayerDisplayController.m
+++ b/Sources/Playback/Control/VLCPlayerDisplayController.m
@@ -449,8 +449,7 @@ NSString *const VLCPlayerDisplayControllerHideMiniPlayer = @"VLCPlayerDisplayCon
             UIViewController *rootViewController = [[[UIApplication sharedApplication] delegate] window].rootViewController;
 
             // Until VideoMiniPlayer is integrated, only AudioMiniPlayer is used.
-            self.miniPlaybackView = miniPlaybackView = [[VLCAudioMiniPlayer alloc] initWithService:[VLCAppCoordinator sharedInstance].mediaLibraryService
-                                                                                  draggingDelegate:self];
+            self.miniPlaybackView = miniPlaybackView = [[VLCAudioMiniPlayer alloc] initWithDraggingDelegate:self];
             if (!_queueViewController) {
                 [self initQueueViewController];
             }
diff --git a/Sources/Playback/Player/AudioPlayer/AudioPlayerView.swift b/Sources/Playback/Player/AudioPlayer/AudioPlayerView.swift
index 1b94c4be28f1894c6b8b6f6ff2dcb4cb810176c3..f9ac9b76e11c6f654b2fd0832044e367c68f1164 100644
--- a/Sources/Playback/Player/AudioPlayer/AudioPlayerView.swift
+++ b/Sources/Playback/Player/AudioPlayer/AudioPlayerView.swift
@@ -23,10 +23,6 @@ protocol AudioPlayerViewDelegate: AnyObject {
     func audioPlayerViewDelegateDidTapRepeatButton(_ audioPlayerView: AudioPlayerView)
     func audioPlayerViewDelegateDidTapPlaybackSpeedButton(_ audioPlayerView: AudioPlayerView)
     func audioPlayerViewDelegateDidLongPressPlaybackSpeedButton(_ audioPlayerView: AudioPlayerView)
-    #if os(iOS)
-    func audioPlayerViewDelegateGetVolumeSlider(_ audioPlayerView: AudioPlayerView) -> VolumeControlView
-    func audioPlayerViewDelegateGetBrightnessSlider(_ audioPlayerView: AudioPlayerView) -> BrightnessControlView
-    #endif
 }
 
 class AudioPlayerView: UIView, UIGestureRecognizerDelegate {
diff --git a/Sources/Playback/Player/AudioPlayer/AudioPlayerViewController.swift b/Sources/Playback/Player/AudioPlayer/AudioPlayerViewController.swift
index 189fcee327eb13635b6ae4146f3daeb0e8f1c067..31e324299b642d25fa25929e359e96f1350cef56 100644
--- a/Sources/Playback/Player/AudioPlayer/AudioPlayerViewController.swift
+++ b/Sources/Playback/Player/AudioPlayer/AudioPlayerViewController.swift
@@ -60,8 +60,13 @@ class AudioPlayerViewController: PlayerViewController {
     // MARK: - Init
 
 #if os(iOS)
-    @objc override init(mediaLibraryService: MediaLibraryService, rendererDiscovererManager: VLCRendererDiscovererManager, playerController: PlayerController) {
-        super.init(mediaLibraryService: mediaLibraryService, rendererDiscovererManager: rendererDiscovererManager, playerController: playerController)
+    @objc init(mediaLibraryService: MediaLibraryService,
+               rendererDiscovererManager: VLCRendererDiscovererManager,
+               playerController: PlayerController) {
+        super.init(mediaLibraryService: mediaLibraryService,
+                   rendererDiscovererManager: rendererDiscovererManager,
+                   playerController: playerController,
+                   isBrightnessControlAvailable: false)
         NotificationCenter.default.addObserver(self, selector: #selector(playbackSpeedHasChanged(_:)), name: Notification.Name("ChangePlaybackSpeed"), object: nil)
 
         self.playerController.delegate = self
@@ -111,7 +116,6 @@ class AudioPlayerViewController: PlayerViewController {
         audioPlayerView.setupBackgroundColor()
         audioPlayerView.setupPlaybackSpeed()
         mediaScrubProgressBar.updateInterfacePosition()
-        setupGestures()
         playModeUpdated()
 
         if playbackService.isPlayingOnExternalScreen() {
@@ -435,15 +439,6 @@ extension AudioPlayerViewController: AudioPlayerViewDelegate {
         }
     }
 
-#if os(iOS)
-    func audioPlayerViewDelegateGetBrightnessSlider(_ audioPlayerView: AudioPlayerView) -> BrightnessControlView {
-        return brightnessControlView
-    }
-
-    func audioPlayerViewDelegateGetVolumeSlider(_ audioPlayerView: AudioPlayerView) -> VolumeControlView {
-        return volumeControlView
-    }
-#endif
 }
 
 // MARK: - VLCPlaybackServiceDelegate
@@ -501,10 +496,6 @@ extension AudioPlayerViewController {
                                                             comment: ""))
         }
 
-        if currentState == .buffering {
-            mediaDuration = playbackService.mediaDuration
-        }
-
         if currentState == .opening || currentState == .stopped {
             resetABRepeat()
         }
@@ -598,6 +589,8 @@ extension AudioPlayerViewController {
 
 extension AudioPlayerViewController {
     override func mediaMoreOptionsActionSheetDidToggleInterfaceLock(state: Bool) {
+        super.mediaMoreOptionsActionSheetDidToggleInterfaceLock(state: state)
+
         setPlayerInterfaceEnabled(!state)
     }
 
diff --git a/Sources/Playback/Player/MiniPlayer-iOS/AudioMiniPlayer.swift b/Sources/Playback/Player/MiniPlayer-iOS/AudioMiniPlayer.swift
index 961431cc9d456efdc633ad7b0947205a0c8b285a..41c96f2a131699597bd7b26137bb5cbe35742692 100644
--- a/Sources/Playback/Player/MiniPlayer-iOS/AudioMiniPlayer.swift
+++ b/Sources/Playback/Player/MiniPlayer-iOS/AudioMiniPlayer.swift
@@ -61,7 +61,6 @@ class AudioMiniPlayer: UIView, MiniPlayer, QueueViewControllerDelegate {
 
     private let animationDuration = 0.2
 
-    private var mediaService: MediaLibraryService
     private lazy var playbackService = PlaybackService.sharedInstance()
 
     private var queueViewController: QueueViewController?
@@ -79,8 +78,7 @@ class AudioMiniPlayer: UIView, MiniPlayer, QueueViewControllerDelegate {
         }
     }
 
-    @objc init(service: MediaLibraryService, draggingDelegate: MiniPlayerDraggingDelegate) {
-        self.mediaService = service
+    @objc init(draggingDelegate: MiniPlayerDraggingDelegate) {
         self.draggingDelegate = draggingDelegate
         super.init(frame: .zero)
         initView()
diff --git a/Sources/Playback/Player/PlayerViewController.swift b/Sources/Playback/Player/PlayerViewController.swift
index 19490da2c9443b84708901eb96c8dc9ea9a45a0f..67fec51e1c330fead1d4d383e72793881e30d1cc 100644
--- a/Sources/Playback/Player/PlayerViewController.swift
+++ b/Sources/Playback/Player/PlayerViewController.swift
@@ -19,7 +19,7 @@ enum PlayerSeekState {
     case backward
 }
 
-enum PlayerPanType {
+fileprivate enum PlayerPanType {
     case none
 #if os(iOS)
     case brightness
@@ -28,7 +28,7 @@ enum PlayerPanType {
     case projection
 }
 
-enum PlayerSeekGestureType {
+fileprivate enum PlayerSeekGestureType {
     case tap
     case swipe
 }
@@ -72,12 +72,13 @@ class PlayerViewController: UIViewController {
     }
 
     // MARK: - Properties
-    var mediaLibraryService: MediaLibraryService
+    let mediaLibraryService: MediaLibraryService
 #if os(iOS)
-    var rendererDiscovererManager: VLCRendererDiscovererManager
+    let rendererDiscovererManager: VLCRendererDiscovererManager
 #endif
-    var playerController: PlayerController
-    var playbackService: PlaybackService = PlaybackService.sharedInstance()
+    let playerController: PlayerController
+    let playbackService: PlaybackService = PlaybackService.sharedInstance()
+
     var queueViewController: QueueViewController?
     var alertController: UIAlertController?
 
@@ -90,7 +91,6 @@ class PlayerViewController: UIViewController {
     var seekBackwardBySwipe: Int = 0
     var forwardBackwardEqual: Bool = true
     var tapSwipeEqual: Bool = true
-    var numberOfTapSeek: Int = 0
     var previousSeekState: PlayerSeekState = .default
 
     // MARK: UI Elements
@@ -245,9 +245,7 @@ class PlayerViewController: UIViewController {
         vc.alpha = 0
         return vc
     }()
-#endif
 
-#if os(iOS)
     lazy var rendererButton: UIButton = {
         let rendererButton = rendererDiscovererManager.setupRendererButton()
         rendererButton.tintColor = .white
@@ -272,15 +270,13 @@ class PlayerViewController: UIViewController {
 
         return rendererButton
     }()
-#endif
 
-#if os(iOS)
     let volumeView = MPVolumeView(frame: .zero)
 #endif
 
     var addBookmarksView: AddBookmarksView? = nil
 
-    var mediaDuration: Int = 0
+    private let isBrightnessControlAvailable: Bool
 
     private var isGestureActive: Bool = false
 
@@ -298,10 +294,7 @@ class PlayerViewController: UIViewController {
         return deviceMotion
     }()
 
-    var systemBrightness: Double?
-
-    // MARK: Constants
-    private let ZOOM_SENSITIVITY: CGFloat = 5
+    private var systemBrightness: Double?
 
 #if os(iOS)
     private let screenPixelSize = CGSize(width: UIScreen.main.bounds.width,
@@ -368,20 +361,30 @@ class PlayerViewController: UIViewController {
     // MARK: - Init
 
 #if os(iOS)
-    @objc init(mediaLibraryService: MediaLibraryService, rendererDiscovererManager: VLCRendererDiscovererManager, playerController: PlayerController) {
+    init(mediaLibraryService: MediaLibraryService,
+         rendererDiscovererManager: VLCRendererDiscovererManager,
+         playerController: PlayerController,
+         isBrightnessControlAvailable: Bool) {
         self.mediaLibraryService = mediaLibraryService
         self.rendererDiscovererManager = rendererDiscovererManager
         self.playerController = playerController
+        self.isBrightnessControlAvailable = isBrightnessControlAvailable
+
         super.init(nibName: nil, bundle: nil)
+
         mediaNavigationBar.chromeCastButton = rendererButton
         mediaNavigationBar.addGestureRecognizer(minimizeGestureRecognizer)
         systemBrightness = UIScreen.main.brightness
     }
 #else
-    @objc init(mediaLibraryService: MediaLibraryService, playerController: PlayerController) {
+    init(mediaLibraryService: MediaLibraryService, playerController: PlayerController) {
         self.mediaLibraryService = mediaLibraryService
         self.playerController = playerController
+        self.isBrightnessControlAvailable = false
+        self.systemBrightness = 1.0
+
         super.init(nibName: nil, bundle: nil)
+
         mediaNavigationBar.addGestureRecognizer(minimizeGestureRecognizer)
     }
 #endif
@@ -391,11 +394,16 @@ class PlayerViewController: UIViewController {
     }
 
     override func viewDidLoad() {
+        super.viewDidLoad()
+
         setupObservers()
+        setupGestures()
         hideSystemVolumeInfo()
     }
 
     override func viewWillAppear(_ animated: Bool) {
+        super.viewWillAppear(animated)
+
 #if os(iOS)
         setupRendererDiscovererManager()
 #endif
@@ -425,7 +433,7 @@ class PlayerViewController: UIViewController {
 
         //update the value of brightness control view
         //In case of remember brightness option is disabled, this will update the brightness bar with current brightness.
-        if !playerController.isRememberBrightnessEnabled && self is VideoPlayerViewController {
+        if !playerController.isRememberBrightnessEnabled && isBrightnessControlAvailable {
             brightnessControlView.updateIcon(level: brightnessControl.fetchAndGetDeviceValue())
         }
 #endif
@@ -435,7 +443,7 @@ class PlayerViewController: UIViewController {
     override func viewDidAppear(_ animated: Bool) {
         super.viewDidAppear(animated)
 
-        if playerController.isRememberBrightnessEnabled && self is VideoPlayerViewController {
+        if playerController.isRememberBrightnessEnabled && isBrightnessControlAvailable {
             if let brightness = userDefaults.value(forKey: KVLCPlayerBrightness) as? CGFloat {
                 animateBrightness(to: brightness)
                 self.brightnessControl.value = Float(brightness)
@@ -457,7 +465,7 @@ class PlayerViewController: UIViewController {
     override func viewDidDisappear(_ animated: Bool) {
         super.viewDidDisappear(animated)
 
-        if playerController.isRememberBrightnessEnabled && self is VideoPlayerViewController {
+        if playerController.isRememberBrightnessEnabled && isBrightnessControlAvailable {
             let currentBrightness = UIScreen.main.brightness
             self.brightnessControl.value = Float(currentBrightness) // helper in indicating change in the system brightness
             userDefaults.set(currentBrightness, forKey: KVLCPlayerBrightness)
@@ -488,7 +496,7 @@ class PlayerViewController: UIViewController {
     }
 
     func setControlsHidden(_ hidden: Bool, animated: Bool) {
-        // HIDE THE CONTROLS IF NEEDED
+        // Empty implementation. Should override in subclasses.
     }
 
     func setupGestures() {
@@ -572,16 +580,28 @@ class PlayerViewController: UIViewController {
         }
     }
 
-    // MARK: - Private methods
+    func showIcon(button: UIButton) {
+        UIView.animate(withDuration: 0.5, animations: {
+            button.isHidden = false
+        }, completion: nil)
+    }
 
-    private func jumpBackwards(_ interval: Int = 10) {
+    func hideIcon(button: UIButton) {
+        UIView.animate(withDuration: 0.5, animations: {
+            button.isHidden = true
+        }, completion: nil)
+    }
+    
+    func jumpBackwards(_ interval: Int = 10) {
         playbackService.jumpBackward(Int32(interval))
     }
 
-    private func jumpForwards(_ interval: Int = 10) {
+    func jumpForwards(_ interval: Int = 10) {
         playbackService.jumpForward(Int32(interval))
     }
 
+    // MARK: - Private methods
+
     private func executeSeekFromGesture(_ type: PlayerSeekGestureType) {
         let currentSeek: Int
         if numberOfGestureSeek > 0 {
@@ -597,24 +617,12 @@ class PlayerViewController: UIViewController {
         displayAndApplySeekDuration(currentSeek)
     }
 
-    private func showIcon(button: UIButton) {
-        UIView.animate(withDuration: 0.5, animations: {
-            button.isHidden = false
-        }, completion: nil)
-    }
-
     private func openOptionView(view: ActionSheetCellIdentifier) {
         present(moreOptionsActionSheet, animated: true, completion: {
             self.moreOptionsActionSheet.addView(view)
         })
     }
 
-    private func hideIcon(button: UIButton) {
-        UIView.animate(withDuration: 0.5, animations: {
-            button.isHidden = true
-        }, completion: nil)
-    }
-
     private func resetVideoFilters() {
         hideIcon(button: optionsNavigationBar.videoFiltersButton)
         moreOptionsActionSheet.resetVideoFilters()
@@ -656,7 +664,7 @@ class PlayerViewController: UIViewController {
             resetABRepeatMarks(true)
             break
         default:
-            assertionFailure("VideoPlayerViewController: Unvalid button.")
+            assertionFailure("PlayerViewController: Invalid button.")
         }
     }
 
@@ -1003,14 +1011,7 @@ class PlayerViewController: UIViewController {
     }
 
     @objc func handlePinchGesture(recognizer: UIPinchGestureRecognizer) {
-        if playbackService.currentMediaIs360Video {
-            let zoom: CGFloat = MediaProjection.FOV.default * -(ZOOM_SENSITIVITY * recognizer.velocity / screenPixelSize.width)
-            if playbackService.updateViewpoint(0, pitch: 0,
-                                               roll: 0, fov: zoom, absolute: false) {
-                // Clam FOV between min and max
-                fov = max(min(fov + zoom, MediaProjection.FOV.max), MediaProjection.FOV.min)
-            }
-        }
+        // Empty implementation. Override in subclasses.
     }
 
     @objc func handleSwipeGestures(recognizer: UISwipeGestureRecognizer) {
@@ -1083,8 +1084,6 @@ class PlayerViewController: UIViewController {
     }
 
     @objc func handleDoubleTapGesture(_ sender: UITapGestureRecognizer) {
-        // CHECK THE TAP LOCATION
-
         executeSeekFromGesture(.tap)
     }
 
@@ -1107,15 +1106,18 @@ extension PlayerViewController: VLCPlaybackServiceDelegate {
     }
 
     func mediaPlayerStateChanged(_ currentState: VLCMediaPlayerState, isPlaying: Bool, currentMediaHasTrackToChooseFrom: Bool, currentMediaHasChapters: Bool, for playbackService: PlaybackService) {
-        if currentState == .opening {
+        switch currentState {
+        case .opening:
             applyCustomEqualizerProfileIfNeeded()
-        }
 
-        if currentState == .stopped {
+        case .stopped:
             moreOptionsActionSheet.resetPlaybackSpeed()
             mediaMoreOptionsActionSheetHideIcon(for: .playbackSpeed)
             moreOptionsActionSheet.resetSleepTimer()
             mediaMoreOptionsActionSheetHideIcon(for: .sleepTimer)
+
+        default:
+            break
         }
     }
 
diff --git a/Sources/Playback/Player/VideoPlayer-iOS/PlayerController.swift b/Sources/Playback/Player/VideoPlayer-iOS/PlayerController.swift
index 07217a3b4143fdabf3de4928861f82f0081ed154..261fc9c253105b54a1a9b124fbbc09ddc77177fa 100644
--- a/Sources/Playback/Player/VideoPlayer-iOS/PlayerController.swift
+++ b/Sources/Playback/Player/VideoPlayer-iOS/PlayerController.swift
@@ -26,24 +26,14 @@ protocol PlayerControllerDelegate: AnyObject {
 class PlayerController: NSObject {
     weak var delegate: PlayerControllerDelegate?
 
-    private var playbackService: PlaybackService = PlaybackService.sharedInstance()
-
     // MARK: - States
 
     var isControlsHidden: Bool = false
 
-    var lockedOrientation: UIInterfaceOrientation = .unknown
-
     var isInterfaceLocked: Bool = false
 
-    var isTapSeeking: Bool = false
-
     // MARK: - UserDefaults computed properties getters
 
-    var displayRemainingTime: Bool {
-        return UserDefaults.standard.bool(forKey: kVLCShowRemainingTime)
-    }
-
     var isVolumeGestureEnabled: Bool {
         return UserDefaults.standard.bool(forKey: kVLCSettingVolumeGesture)
     }
@@ -91,10 +81,6 @@ class PlayerController: NSObject {
         setupObservers()
     }
 
-    func updateUserDefaults() {
-
-    }
-
     private func setupObservers() {
         let notificationCenter = NotificationCenter.default
 
diff --git a/Sources/Playback/Player/VideoPlayer-iOS/VideoPlayerViewController.swift b/Sources/Playback/Player/VideoPlayer-iOS/VideoPlayerViewController.swift
index 33dde55a82f41e053a65dac71833a35e1e15fed4..ceb6249f3f9c07f820caf30a046a508877c0d9ab 100644
--- a/Sources/Playback/Player/VideoPlayer-iOS/VideoPlayerViewController.swift
+++ b/Sources/Playback/Player/VideoPlayer-iOS/VideoPlayerViewController.swift
@@ -26,8 +26,6 @@ protocol VideoPlayerViewControllerDelegate: AnyObject {
 class VideoPlayerViewController: PlayerViewController {
     @objc weak var delegate: VideoPlayerViewControllerDelegate?
 
-    var playAsAudio: Bool = false
-
     // MARK: - Constants
 
     private let ZOOM_SENSITIVITY: CGFloat = 5
@@ -145,8 +143,6 @@ class VideoPlayerViewController: PlayerViewController {
         return aspectRatioActionSheet
     }()
 
-    let notificationCenter = NotificationCenter.default
-
     private(set) lazy var titleSelectionView: TitleSelectionView = {
 #if os(iOS)
         let isLandscape = UIDevice.current.orientation.isLandscape
@@ -160,8 +156,6 @@ class VideoPlayerViewController: PlayerViewController {
         return titleSelectionView
     }()
 
-    private var projectionLocation: CGPoint = .zero
-
     private lazy var longPressPlaybackSpeedView: LongPressPlaybackSpeedView = {
         let view = LongPressPlaybackSpeedView()
         view.translatesAutoresizingMaskIntoConstraints = false
@@ -279,8 +273,6 @@ class VideoPlayerViewController: PlayerViewController {
 
     private var isGestureActive: Bool = false
 
-    private var minimizationInitialCenter: CGPoint?
-
     // MARK: - Popup Views
 
     lazy var trackSelectorPopupView: PopupView = {
@@ -319,8 +311,13 @@ class VideoPlayerViewController: PlayerViewController {
     // MARK: - Init methods
 
 #if os(iOS)
-    @objc override init(mediaLibraryService: MediaLibraryService, rendererDiscovererManager: VLCRendererDiscovererManager, playerController: PlayerController) {
-        super.init(mediaLibraryService: mediaLibraryService, rendererDiscovererManager: rendererDiscovererManager, playerController: playerController)
+    @objc init(mediaLibraryService: MediaLibraryService,
+               rendererDiscovererManager: VLCRendererDiscovererManager,
+               playerController: PlayerController) {
+        super.init(mediaLibraryService: mediaLibraryService,
+                   rendererDiscovererManager: rendererDiscovererManager,
+                   playerController: playerController,
+                   isBrightnessControlAvailable: true)
 
         self.playerController.delegate = self
         self.mediaNavigationBar.addGestureRecognizer(minimizeGestureRecognizer)
@@ -332,11 +329,7 @@ class VideoPlayerViewController: PlayerViewController {
     @objc override init(mediaLibraryService: MediaLibraryService, playerController: PlayerController) {
         super.init(mediaLibraryService: mediaLibraryService, playerController: playerController)
 
-        self.mediaLibraryService = mediaLibraryService
-        self.playerController = playerController
-
         self.playerController.delegate = self
-        systemBrightness = 1.0
         self.mediaNavigationBar.addGestureRecognizer(minimizeGestureRecognizer)
     }
 #endif
@@ -349,14 +342,11 @@ class VideoPlayerViewController: PlayerViewController {
         super.viewWillAppear(animated)
         playbackService.delegate = self
         playbackService.recoverPlaybackState()
-        playerController.lockedOrientation = .portrait
         navigationController?.navigationBar.isHidden = true
         mediaScrubProgressBar.updateInterfacePosition()
 
         setControlsHidden(false, animated: false)
 
-        setupSeekDurations()
-
         // Make sure interface is enabled on
         setPlayerInterfaceEnabled(true)
 
@@ -400,16 +390,6 @@ class VideoPlayerViewController: PlayerViewController {
     override func viewDidAppear(_ animated: Bool) {
         super.viewDidAppear(animated)
 
-#if os(iOS)
-        let defaults = UserDefaults.standard
-        if defaults.bool(forKey: kVLCPlayerShouldRememberBrightness) {
-            if let brightness = defaults.value(forKey: KVLCPlayerBrightness) as? CGFloat {
-                animateBrightness(to: brightness)
-                self.brightnessControl.value = Float(brightness)
-            }
-        }
-#endif
-
         playbackService.recoverDisplayedMetadata()
 
         // The video output view is not initialized when the play as audio option was chosen
@@ -467,31 +447,13 @@ class VideoPlayerViewController: PlayerViewController {
     override func viewDidDisappear(_ animated: Bool) {
         super.viewDidDisappear(animated)
         deviceMotion.stopDeviceMotion()
-#if os(iOS)
-        let defaults = UserDefaults.standard
-        if defaults.bool(forKey: kVLCPlayerShouldRememberBrightness) {
-            let currentBrightness = UIScreen.main.brightness
-            self.brightnessControl.value = Float(currentBrightness) // helper in indicating change in the system brightness
-            defaults.set(currentBrightness, forKey: KVLCPlayerBrightness)
-        }
-
-        //set the value of system brightness after closing the app x
-        //even if the Player Should Remember Brightness option is disabled
-        animateBrightness(to: systemBrightness!, duration: 0.35)
-
-        // remove the observer when the view disappears to avoid breaking the brightness view value
-        // when the video player is not shown to save the persisted values
-        removePlayerBrightnessObservers()
-#endif
     }
 
     override func viewDidLoad() {
         super.viewDidLoad()
         navigationController?.navigationBar.isHidden = true
-        setupObservers()
         setupViews()
         setupAccessibility()
-        setupGestures()
         setupConstraints()
 #if os(iOS)
         setupRendererDiscoverer()
@@ -500,18 +462,9 @@ class VideoPlayerViewController: PlayerViewController {
 
     // MARK: - Setup methods
 
-    private func setupObservers() {
-        try? AVAudioSession.sharedInstance().setActive(true)
-        AVAudioSession.sharedInstance().addObserver(self, forKeyPath: "outputVolume", options: NSKeyValueObservingOptions.new, context: nil)
-
-        NotificationCenter.default.addObserver(self, selector: #selector(updatePlayerControls), name: .VLCDidAppendMediaToQueue, object: nil)
-        NotificationCenter.default.addObserver(self, selector: #selector(updatePlayerControls), name: .VLCDidRemoveMediaFromQueue, object: nil)
-    }
-
     private func setupViews() {
         view.backgroundColor = .black
         view.addSubview(mediaNavigationBar)
-        hideSystemVolumeInfo()
         videoPlayerButtons()
         if playerController.isRememberStateEnabled {
             setupVideoControlsState()
@@ -716,51 +669,6 @@ class VideoPlayerViewController: PlayerViewController {
         titleSelectionView.mainStackView.distribution = isLandscape ? .fillEqually : .fill
     }
 
-#if os(iOS)
-    private func addPlayerBrightnessObservers() {
-        NotificationCenter.default.addObserver(
-            self,
-            selector: #selector(systemBrightnessChanged),
-            name: UIApplication.didBecomeActiveNotification,
-            object: nil
-        )
-
-        NotificationCenter.default.addObserver(
-            self,
-            selector: #selector(playerWillResignActive),
-            name: UIApplication.willResignActiveNotification,
-            object: nil
-        )
-
-        NotificationCenter.default.addObserver(
-            self,
-            selector: #selector(playerWillEnterForeground),
-            name: UIApplication.willEnterForegroundNotification,
-            object: nil
-        )
-    }
-
-    private func removePlayerBrightnessObservers() {
-        NotificationCenter.default.removeObserver(
-            self,
-            name: UIApplication.didBecomeActiveNotification,
-            object: nil
-        )
-
-        NotificationCenter.default.removeObserver(
-            self,
-            name: UIApplication.willResignActiveNotification,
-            object: nil
-        )
-
-        NotificationCenter.default.removeObserver(
-            self,
-            name: UIApplication.willEnterForegroundNotification,
-            object: nil
-        )
-    }
-#endif
-
     // MARK: - Private helpers
 
 #if os(iOS)
@@ -864,30 +772,6 @@ class VideoPlayerViewController: PlayerViewController {
         ])
     }
 
-    private func setupSeekDurations() {
-        let defaults = UserDefaults.standard
-
-        tapSwipeEqual = defaults.bool(forKey: kVLCSettingPlaybackTapSwipeEqual)
-        forwardBackwardEqual = defaults.bool(forKey: kVLCSettingPlaybackForwardBackwardEqual)
-        seekForwardBy = defaults.integer(forKey: kVLCSettingPlaybackForwardSkipLength)
-        seekBackwardBy = forwardBackwardEqual ? seekForwardBy : defaults.integer(forKey: kVLCSettingPlaybackBackwardSkipLength)
-        seekForwardBySwipe = tapSwipeEqual ? seekForwardBy : defaults.integer(forKey: kVLCSettingPlaybackForwardSkipLengthSwipe)
-
-        if tapSwipeEqual, forwardBackwardEqual {
-            // if tap = swipe, and backward = forward, then backward swipe = forward tap
-            seekBackwardBySwipe = seekForwardBy
-        } else if tapSwipeEqual, !forwardBackwardEqual {
-            // if tap = swipe, and backward != forward, then backward swipe = backward tap
-            seekBackwardBySwipe = seekBackwardBy
-        } else if !tapSwipeEqual, forwardBackwardEqual {
-            // if tap != swipe, and backward = forward, then backward swipe = forward swipe
-            seekBackwardBySwipe = seekForwardBySwipe
-        } else {
-            // otherwise backward swipe = backward swipe
-            seekBackwardBySwipe = defaults.integer(forKey: kVLCSettingPlaybackBackwardSkipLengthSwipe)
-        }
-    }
-
     private func setupForMediaProjection() {
         let mediaHasProjection = playbackService.currentMediaIs360Video
 
@@ -904,6 +788,8 @@ class VideoPlayerViewController: PlayerViewController {
         }
     }
 
+    // MARK: - Accessibility
+
     @objc private func handleAccessibilityPlayPause() -> Bool {
         togglePlayPause()
         return true
@@ -957,6 +843,11 @@ class VideoPlayerViewController: PlayerViewController {
 
         let tapPosition = sender.location(in: view)
 
+        // Limit y position in order to avoid conflicts with the bottom controls
+        guard tapPosition.y <= mediaScrubProgressBar.frame.origin.y else {
+            return
+        }
+
         // Reset number(set to -1/1) of seek when orientation has been changed.
         if tapPosition.x < backwardBoundary {
             numberOfGestureSeek = previousSeekState == .forward ? -1 : numberOfGestureSeek - 1
@@ -1032,64 +923,6 @@ class VideoPlayerViewController: PlayerViewController {
         }
     }
 
-    func jumpBackwards(_ interval: Int = 10) {
-        playbackService.jumpBackward(Int32(interval))
-    }
-
-    func jumpForwards(_ interval: Int = 10) {
-        playbackService.jumpForward(Int32(interval))
-    }
-
-    @objc func handleDoubleTapGesture(recognizer: UITapGestureRecognizer) {
-        let screenWidth: CGFloat = view.frame.size.width
-        let backwardBoundary: CGFloat = screenWidth / 3.0
-        let forwardBoundary: CGFloat = 2 * screenWidth / 3.0
-
-        let tapPosition = recognizer.location(in: view)
-
-        // Limit y position in order to avoid conflicts with the bottom controls
-        if tapPosition.y > mediaScrubProgressBar.frame.origin.y {
-            return
-        }
-
-        // Reset number(set to -1/1) of seek when orientation has been changed.
-        if tapPosition.x < backwardBoundary {
-            numberOfGestureSeek = previousSeekState == .forward ? -1 : numberOfGestureSeek - 1
-        } else if tapPosition.x > forwardBoundary {
-            numberOfGestureSeek = previousSeekState == .backward ? 1 : numberOfGestureSeek + 1
-        } else {
-            playbackService.switchAspectRatio(true)
-            return
-        }
-        //_isTapSeeking = YES;
-        executeSeekFromGesture(.tap)
-    }
-
-    private func applyYaw(yaw: CGFloat, pitch: CGFloat) {
-        //Add and limit new pitch and yaw
-        deviceMotion.yaw += yaw
-        deviceMotion.pitch += pitch
-
-        playbackService.updateViewpoint(deviceMotion.yaw,
-                                        pitch: deviceMotion.pitch,
-                                        roll: 0,
-                                        fov: fov, absolute: true)
-    }
-
-    private func updateProjection(with recognizer: UIPanGestureRecognizer) {
-        let newLocationInView: CGPoint = recognizer.location(in: view)
-
-        let diffX = newLocationInView.x - projectionLocation.x
-        let diffY = newLocationInView.y - projectionLocation.y
-        projectionLocation = newLocationInView
-
-        // ScreenSizePixel width is used twice to get a constant speed on the movement.
-        let diffYaw = fov * -diffX / screenPixelSize.width
-        let diffPitch = fov * -diffY / screenPixelSize.width
-
-        applyYaw(yaw: diffYaw, pitch: diffPitch)
-    }
-
     @objc private func handleLongPressGesture(_ gestureRecognizer: UILongPressGestureRecognizer) {
         guard playerController.isSpeedUpGestureEnabled,
               playbackService.isPlaying else {
@@ -1368,52 +1201,6 @@ class VideoPlayerViewController: PlayerViewController {
         }
     }
 
-    private func executeSeekFromGesture(_ type: PlayerSeekGestureType) {
-
-        let currentSeek: Int
-        if numberOfGestureSeek > 0 {
-            currentSeek = type == .tap ? seekForwardBy : seekForwardBySwipe
-            totalSeekDuration = previousSeekState == .backward ? currentSeek : totalSeekDuration + currentSeek
-            previousSeekState = .forward
-        } else {
-            currentSeek = type == .tap ? seekBackwardBy : seekBackwardBySwipe
-            totalSeekDuration = previousSeekState == .forward ? -currentSeek : totalSeekDuration - currentSeek
-            previousSeekState = .backward
-        }
-
-        displayAndApplySeekDuration(currentSeek)
-    }
-
-    private func applyCustomEqualizerProfileIfNeeded() {
-        let userDefaults = UserDefaults.standard
-        guard userDefaults.bool(forKey: kVLCCustomProfileEnabled) else {
-            return
-        }
-
-        let profileIndex = userDefaults.integer(forKey: kVLCSettingEqualizerProfile)
-        let encodedData = userDefaults.data(forKey: kVLCCustomEqualizerProfiles)
-
-        guard let encodedData = encodedData,
-              let customProfiles = NSKeyedUnarchiver(forReadingWith: encodedData).decodeObject(forKey: "root") as? CustomEqualizerProfiles,
-              profileIndex < customProfiles.profiles.count else {
-            return
-        }
-
-        let selectedProfile = customProfiles.profiles[profileIndex]
-        playbackService.preAmplification = CGFloat(selectedProfile.preAmpLevel)
-
-        for (index, frequency) in selectedProfile.frequencies.enumerated() {
-            playbackService.setAmplification(CGFloat(frequency), forBand: UInt32(index))
-        }
-    }
-
-    private func hideSystemVolumeInfo() {
-#if os(iOS)
-        volumeView.alpha = 0.00001
-        view.addSubview(volumeView)
-#endif
-    }
-
     private func videoPlayerButtons() {
         let audioMedia: Bool = playbackService.metadata.isAudioOnly
         if audioMedia || playbackService.playAsAudio {
@@ -1563,7 +1350,7 @@ extension VideoPlayerViewController {
         if playbackService.isPlayingOnExternalScreen() {
 #if os(iOS)
             if let renderer = playbackService.renderer {
-                externalVideoOutputView.updateUI(rendererName: playbackService.renderer?.name, title: metadata.title)
+                externalVideoOutputView.updateUI(rendererName: renderer.name, title: metadata.title)
             }
 #else
             externalVideoOutputView.updateUI(rendererName: nil, title: metadata.title)
@@ -1619,14 +1406,6 @@ extension VideoPlayerViewController {
 
         videoPlayerControls.shuffleButton.tintColor = playbackService.isShuffleMode ? orangeColor : .white
     }
-
-    override func reloadPlayQueue() {
-        guard let queueViewController = queueViewController else {
-            return
-        }
-
-        queueViewController.reload()
-    }
 }
 
 // MARK: - PlayerControllerDelegate
@@ -1716,6 +1495,8 @@ extension VideoPlayerViewController {
 
 extension VideoPlayerViewController {
     override func mediaMoreOptionsActionSheetDidToggleInterfaceLock(state: Bool) {
+        super.mediaMoreOptionsActionSheetDidToggleInterfaceLock(state: state)
+
 #if os(iOS)
         let mask = getInterfaceOrientationMask(orientation: UIApplication.shared.statusBarOrientation)
 
@@ -1806,83 +1587,6 @@ extension VideoPlayerViewController {
     }
 }
 
-// MARK: - OptionsNavigationBarDelegate
-
-extension VideoPlayerViewController {
-    private func resetVideoFilters() {
-        hideIcon(button: optionsNavigationBar.videoFiltersButton)
-        moreOptionsActionSheet.resetVideoFilters()
-    }
-
-    private func resetPlaybackSpeed() {
-        hideIcon(button: optionsNavigationBar.playbackSpeedButton)
-        moreOptionsActionSheet.resetPlaybackSpeed()
-    }
-
-    private func resetEqualizer() {
-        moreOptionsActionSheet.resetEqualizer()
-        hideIcon(button: optionsNavigationBar.equalizerButton)
-    }
-
-    private func resetSleepTimer() {
-        hideIcon(button: optionsNavigationBar.sleepTimerButton)
-        moreOptionsActionSheet.resetSleepTimer()
-    }
-
-    private func resetABRepeatMarks(_ shouldDisplayView: Bool = false) {
-        hideIcon(button: optionsNavigationBar.abRepeatMarksButton)
-        aMark.removeFromSuperview()
-        aMark.isEnabled = false
-
-        bMark.removeFromSuperview()
-        bMark.isEnabled = false
-
-        guard let abRepeatView = abRepeatView,
-              shouldDisplayView else {
-            return
-        }
-
-        mediaMoreOptionsActionSheetPresentABRepeatView(with: abRepeatView)
-    }
-
-    private func showIcon(button: UIButton) {
-        UIView.animate(withDuration: 0.5, animations: {
-            button.isHidden = false
-        }, completion: nil)
-    }
-
-    private func hideIcon(button: UIButton) {
-        UIView.animate(withDuration: 0.5, animations: {
-            button.isHidden = true
-        }, completion: nil)
-    }
-
-    private func handleReset(button: UIButton) {
-        switch button {
-        case optionsNavigationBar.videoFiltersButton:
-            resetVideoFilters()
-            return
-        case optionsNavigationBar.playbackSpeedButton:
-            resetPlaybackSpeed()
-            return
-        case optionsNavigationBar.equalizerButton:
-            resetEqualizer()
-            return
-        case optionsNavigationBar.sleepTimerButton:
-            resetSleepTimer()
-            return
-        case optionsNavigationBar.abRepeatButton:
-            resetABRepeat()
-            return
-        case optionsNavigationBar.abRepeatMarksButton:
-            resetABRepeatMarks(true)
-            return
-        default:
-            assertionFailure("VideoPlayerViewController: Invalid button.")
-        }
-    }
-}
-
 // MARK: - Download More SPU
 
 extension VideoPlayerViewController {