diff --git a/0001-DeviceMotion-use-quaternions-and-convert-them-oursel.patch b/0001-DeviceMotion-use-quaternions-and-convert-them-oursel.patch
deleted file mode 100644
index da69049fade4d348cc29b8f43a8221e028e2bfa7..0000000000000000000000000000000000000000
--- a/0001-DeviceMotion-use-quaternions-and-convert-them-oursel.patch
+++ /dev/null
@@ -1,123 +0,0 @@
-From b124ee92f2b4ef6c44515c19d72f0cd2434ae386 Mon Sep 17 00:00:00 2001
-From: Adrien Maglo <magsoft@videolan.org>
-Date: Wed, 7 Mar 2018 13:45:01 +0100
-Subject: [PATCH] DeviceMotion: use quaternions and convert them ourself
-
-Do not use the Euler angles provided by CoreMotion as they are not defined in the same reference frame as libvlc.
----
- Sources/DeviceMotion.swift | 82 +++++++++++++++++++++++++++++++++++++---------
- 1 file changed, 67 insertions(+), 15 deletions(-)
-
-diff --git a/Sources/DeviceMotion.swift b/Sources/DeviceMotion.swift
-index 4666801f..2ad61639 100644
---- a/Sources/DeviceMotion.swift
-+++ b/Sources/DeviceMotion.swift
-@@ -21,6 +21,12 @@ protocol DeviceMotionDelegate:NSObjectProtocol {
- 
- }
- 
-+struct EulerAngles {
-+    var yaw: Double = 0
-+    var pitch: Double = 0
-+    var roll: Double = 0
-+}
-+
- @objc(VLCDeviceMotion)
- class DeviceMotion:NSObject {
- 
-@@ -28,31 +34,77 @@ class DeviceMotion:NSObject {
-     var referenceAttitude:CMAttitude? = nil
-     @objc weak var delegate: DeviceMotionDelegate? = nil
- 
-+
-+    func multQuaternion(q1: CMQuaternion, q2: CMQuaternion) -> CMQuaternion {
-+        var ret = CMQuaternion()
-+
-+        ret.x = q1.x * q2.x - q1.y * q2.y - q1.z * q2.z - q1.w * q2.w
-+        ret.y = q1.x * q2.y + q1.y * q2.x + q1.z * q2.w - q1.w * q2.z
-+        ret.z = q1.x * q2.z + q1.z * q2.x - q1.y * q2.w + q1.w * q2.y
-+        ret.w = q1.w * q2.x + q1.x * q2.w + q1.y * q2.z - q1.z * q2.y
-+
-+        return ret
-+    }
-+
-+    func quaternionToEuler(qIn: CMQuaternion) -> EulerAngles {
-+        // Change the axes
-+        var q = CMQuaternion(x:qIn.y, y:qIn.z, z:qIn.x, w:qIn.w)
-+
-+        // Rotation of 90°
-+        let sqrt2 = 0.707106781186548
-+        let qRot = CMQuaternion(x: 0, y: 0, z: -sqrt2 / 2, w: sqrt2 / 2)
-+
-+        // Perform the rotation
-+        q = multQuaternion(q1:qRot, q2:q)
-+
-+        // Now, we can perform the conversion and manage ourself the singularities
-+
-+        let sqx = q.x * q.x
-+        let sqy = q.y * q.y
-+        let sqz = q.z * q.z
-+        let sqw = q.w * q.w
-+
-+        let unit = sqx + sqy + sqz + sqw // if normalised is one, otherwise is correction factor
-+        let test = q.x * q.y + q.z * q.w
-+
-+        var vp = EulerAngles()
-+
-+        if (test > 0.499 * unit) {
-+            // singularity at north pole
-+            vp.yaw = 2 * atan2(q.x, q.w)
-+            vp.pitch = Double.pi / 2
-+            vp.roll = 0
-+        } else if (test < -0.499 * unit) {
-+            // singularity at south pole
-+            vp.yaw = -2 * atan2(q.x, q.w)
-+            vp.pitch = -Double.pi / 2
-+            vp.roll = 0
-+        } else {
-+            vp.yaw = atan2(2 * q.y * q.w - 2 * q.x * q.z, sqx - sqy - sqz + sqw)
-+            vp.pitch = asin(2 * test / unit)
-+            vp.roll = atan2(2 * q.x * q.w - 2 * q.y * q.z, -sqx + sqy - sqz + sqw)
-+        }
-+
-+        vp.yaw = -vp.yaw * 180 / Double.pi
-+        vp.pitch = vp.pitch * 180 / Double.pi
-+        vp.roll = vp.roll * 180 / Double.pi
-+
-+        return vp
-+    }
-+
-     @objc func startDeviceMotion() {
- 
-         if motion.isDeviceMotionAvailable {
-             motion.gyroUpdateInterval = 1.0 / 60.0  // 60 Hz
--            motion.startDeviceMotionUpdates(using: .xTrueNorthZVertical, to: .main) {
-+            motion.startDeviceMotionUpdates(using: .xArbitraryZVertical, to: .main) {
-                 [weak self] (data, error) in
-                 guard let strongSelf = self, let data = data else {
-                     return
-                 }
- 
--                //We're using the initial angle of phone as 0.0.0 reference for all axis
--                //we need to create a copy here, otherwise we just have a reference which is being changed in the next line
--                if strongSelf.referenceAttitude == nil {
--                    strongSelf.referenceAttitude = data.attitude.copy() as? CMAttitude
-+                if let euler = self?.quaternionToEuler(qIn: data.attitude.quaternion) {
-+                    strongSelf.delegate?.deviceMotionHasAttitude(deviceMotion:strongSelf, pitch:euler.pitch, yaw:euler.yaw, roll:euler.roll)
-                 }
--                // this line basically substracts the reference attitude so that we have yaw, pitch and roll changes in
--                // relation to the very first angle
--                data.attitude.multiply(byInverseOf: strongSelf.referenceAttitude!)
--
--                let pitch = -(180/Double.pi)*data.attitude.pitch // -90; 90
--                let yaw = -(180/Double.pi)*data.attitude.yaw // -180; 180
--                let roll = -(180/Double.pi)*data.attitude.roll// -180; 180
--
--                //print(pitch,yaw,roll)
--                strongSelf.delegate?.deviceMotionHasAttitude(deviceMotion:strongSelf, pitch:pitch, yaw:yaw, roll:roll)
-             }
-         }
-     }
--- 
-2.13.0
-
diff --git a/Sources/DeviceMotion.swift b/Sources/DeviceMotion.swift
index c4dbc86c4bef58fc7da6c927d0defcaf21f1ac26..5beeb21f71a5d20abc5bd2fc3a6a1aa7707f8e63 100644
--- a/Sources/DeviceMotion.swift
+++ b/Sources/DeviceMotion.swift
@@ -15,9 +15,9 @@ import Foundation
 import CoreMotion
 
 @objc(VLCDeviceMotionDelegate)
-protocol DeviceMotionDelegate:NSObjectProtocol {
+protocol DeviceMotionDelegate: NSObjectProtocol {
 
-    func deviceMotionHasAttitude(deviceMotion:DeviceMotion, pitch:Double, yaw:Double, roll:Double)
+    func deviceMotionHasAttitude(deviceMotion: DeviceMotion, pitch: Double, yaw: Double, roll: Double)
 
 }
 
@@ -28,12 +28,12 @@ struct EulerAngles {
 }
 
 @objc(VLCDeviceMotion)
-class DeviceMotion:NSObject {
+class DeviceMotion: NSObject {
 
     let motion = CMMotionManager()
     let sqrt2 = 0.5.squareRoot()
-    var lastEulerAngle = EulerAngles()
-    var lastQuaternion: CMQuaternion? = nil
+    var lastEulerAngle: EulerAngles? = nil
+    var beginningQuaternion: CMQuaternion? = nil
 
     @objc weak var delegate: DeviceMotionDelegate? = nil
 
@@ -70,12 +70,12 @@ class DeviceMotion:NSObject {
 
         var vp = EulerAngles()
 
-        if (test > 0.499 * unit) {
+        if test > 0.499 * unit {
             // singularity at north pole
             vp.yaw = 2 * atan2(q.x, q.w)
             vp.pitch = Double.pi / 2
             vp.roll = 0
-        } else if (test < -0.499 * unit) {
+        } else if test < -0.499 * unit {
             // singularity at south pole
             vp.yaw = -2 * atan2(q.x, q.w)
             vp.pitch = -Double.pi / 2
@@ -101,32 +101,43 @@ class DeviceMotion:NSObject {
                 guard let strongSelf = self, let data = data else {
                     return
                 }
-
-                var euler = strongSelf.quaternionToEuler(qIn: data.attitude.quaternion)
-                if let lastQuaternion = strongSelf.lastQuaternion {
-                    let lastEuler = strongSelf.quaternionToEuler(qIn: lastQuaternion)
-                    let diffYaw = euler.yaw - lastEuler.yaw
-                    let diffPitch = euler.pitch - lastEuler.pitch
-                    let diffRoll = euler.roll - lastEuler.roll
-
-                    euler.yaw = strongSelf.lastEulerAngle.yaw + diffYaw
-                    euler.pitch = strongSelf.lastEulerAngle.pitch + diffPitch
-                    euler.pitch = strongSelf.lastEulerAngle.roll + diffRoll
+                //get the first quaternion that we started with
+                if strongSelf.beginningQuaternion == nil {
+                    strongSelf.beginningQuaternion = data.attitude.quaternion
                 }
-                strongSelf.delegate?.deviceMotionHasAttitude(deviceMotion:strongSelf, pitch:euler.pitch, yaw:euler.yaw, roll:euler.roll)
+                var currentEuler = strongSelf.quaternionToEuler(qIn: data.attitude.quaternion)
+
+                // if we panned we will have a lastEuler value that we need to take as beginning angle
+                if let lastEulerAngle = strongSelf.lastEulerAngle {
+                    //we get the devicemotion diff between start and currentangle
+                    let beginningEuler = strongSelf.quaternionToEuler(qIn: strongSelf.beginningQuaternion!)
+                    let diffYaw = currentEuler.yaw - beginningEuler.yaw
+                    let diffPitch = currentEuler.pitch - beginningEuler.pitch
+                    let diffRoll = currentEuler.roll - beginningEuler.roll
+
+                    //and add that to the angle that we had after we lifted our finger
+                    currentEuler.yaw = lastEulerAngle.yaw + diffYaw
+                    currentEuler.pitch = lastEulerAngle.pitch + diffPitch
+                    currentEuler.roll = lastEulerAngle.roll + diffRoll
+                }
+                strongSelf.delegate?.deviceMotionHasAttitude(deviceMotion:strongSelf, pitch:currentEuler.pitch, yaw:currentEuler.yaw, roll:currentEuler.roll)
             }
         }
     }
 
-    @objc func lastAngle(yaw:Double, pitch:Double, roll:Double) {
-        lastEulerAngle.yaw = yaw
-        lastEulerAngle.pitch = pitch
-        lastEulerAngle.roll = roll
+    @objc func lastAngle(yaw: Double, pitch: Double, roll: Double) {
+        if lastEulerAngle == nil {
+            lastEulerAngle = EulerAngles()
+        }
+        lastEulerAngle?.yaw = yaw
+        lastEulerAngle?.pitch = pitch
+        lastEulerAngle?.roll = roll
     }
 
     @objc func stopDeviceMotion() {
         if motion.isDeviceMotionActive {
-            lastQuaternion = motion.deviceMotion?.attitude.quaternion
+            beginningQuaternion = nil
+            lastEulerAngle = nil
             motion.stopDeviceMotionUpdates()
         }
     }
diff --git a/Sources/VLCMovieViewController.m b/Sources/VLCMovieViewController.m
index c02ccff4e1c24bc6e654050b7fad098823f296fd..1ef76d7baf0c990c08a3b5a34e6c4cffc09d2f26 100644
--- a/Sources/VLCMovieViewController.m
+++ b/Sources/VLCMovieViewController.m
@@ -42,7 +42,7 @@
 #define BACKWARD_SWIPE_DURATION 10
 #define SHORT_JUMP_DURATION 10
 
-#define ZOOM_SENSITIVITY 2.99f
+#define ZOOM_SENSITIVITY 5.f
 #define DEFAULT_FOV 80.f
 #define MAX_FOV 150.f
 #define MIN_FOV 20.f
@@ -237,8 +237,7 @@ typedef NS_ENUM(NSInteger, VLCPanType) {
     [self setupControlPanel];
 
     CGRect screenBounds = [[UIScreen mainScreen] bounds];
-    CGFloat screenScale = [[UIScreen mainScreen] scale];
-    _screenPixelSize = CGSizeMake(screenBounds.size.width * screenScale, screenBounds.size.height * screenScale);
+    _screenPixelSize = CGSizeMake(screenBounds.size.width, screenBounds.size.height);
 
     [self setupConstraints];