diff --git a/src/plugins/avfoundation/camera/avfcameraservice.mm b/src/plugins/avfoundation/camera/avfcameraservice.mm
index 25111c5cc6e12e550b1ac8f9adba222c7bb86b1c..966202ede2498b582983a39db984f0ade3bd78a0 100644
--- a/src/plugins/avfoundation/camera/avfcameraservice.mm
+++ b/src/plugins/avfoundation/camera/avfcameraservice.mm
@@ -135,9 +135,9 @@ QMediaControl *AVFCameraService::requestControl(const char *name)
 void AVFCameraService::releaseControl(QMediaControl *control)
 {
     if (m_videoOutput == control) {
-        m_videoOutput = 0;
         m_session->setVideoOutput(0);
-        delete control;
+        delete m_videoOutput;
+        m_videoOutput = 0;
     }
 }
 
diff --git a/src/plugins/avfoundation/mediaplayer/avfmediaplayerservice.mm b/src/plugins/avfoundation/mediaplayer/avfmediaplayerservice.mm
index e5549803fd53b27a704f08509bd54ea0da8d4376..bb75adb8be437fbfa537d0e32e2d70d8460be10d 100644
--- a/src/plugins/avfoundation/mediaplayer/avfmediaplayerservice.mm
+++ b/src/plugins/avfoundation/mediaplayer/avfmediaplayerservice.mm
@@ -118,14 +118,15 @@ void AVFMediaPlayerService::releaseControl(QMediaControl *control)
 #ifdef QT_DEBUG_AVF
     qDebug() << Q_FUNC_INFO << control;
 #endif
-#if defined(Q_OS_OSX)
     if (m_videoOutput == control) {
+#if defined(Q_OS_OSX)
         AVFVideoRendererControl *renderControl = qobject_cast<AVFVideoRendererControl*>(m_videoOutput);
         if (renderControl)
             renderControl->setSurface(0);
+#endif
         m_videoOutput = 0;
         m_session->setVideoOutput(0);
+
         delete control;
     }
-#endif
 }
diff --git a/src/plugins/avfoundation/mediaplayer/avfvideowidget.mm b/src/plugins/avfoundation/mediaplayer/avfvideowidget.mm
index d4fa7c4c6faa89afe257674355c5b406eb0e3952..2893921f3d6adc3e2b027a65f7b1f54d48553784 100644
--- a/src/plugins/avfoundation/mediaplayer/avfvideowidget.mm
+++ b/src/plugins/avfoundation/mediaplayer/avfvideowidget.mm
@@ -64,8 +64,10 @@ AVFVideoWidget::~AVFVideoWidget()
     qDebug() << Q_FUNC_INFO;
 #endif
 
-    if (m_playerLayer)
+    if (m_playerLayer) {
+        [m_playerLayer removeFromSuperlayer];
         [m_playerLayer release];
+    }
 }
 
 QSize AVFVideoWidget::sizeHint() const
diff --git a/src/plugins/avfoundation/mediaplayer/avfvideowindowcontrol.mm b/src/plugins/avfoundation/mediaplayer/avfvideowindowcontrol.mm
index 17fc94de767353c2ab078e8c76dd22d504656a5e..8e96d732f7c890972d7c170306f84002e272a424 100644
--- a/src/plugins/avfoundation/mediaplayer/avfvideowindowcontrol.mm
+++ b/src/plugins/avfoundation/mediaplayer/avfvideowindowcontrol.mm
@@ -61,8 +61,10 @@ AVFVideoWindowControl::AVFVideoWindowControl(QObject *parent)
 
 AVFVideoWindowControl::~AVFVideoWindowControl()
 {
-    if (m_playerLayer)
+    if (m_playerLayer) {
+        [m_playerLayer removeFromSuperlayer];
         [m_playerLayer release];
+    }
 }
 
 WId AVFVideoWindowControl::winId() const