diff --git a/src/mainview/components/ChatViewFooter.qml b/src/mainview/components/ChatViewFooter.qml
index 8afa71d16783a94d694d7f148d3dd55f454f9f75..b0f58069d21f3b8f2b43fda570477b7a73225a0a 100644
--- a/src/mainview/components/ChatViewFooter.qml
+++ b/src/mainview/components/ChatViewFooter.qml
@@ -89,11 +89,6 @@ Rectangle {
 
         visible: false
     }
-    onVisibleChanged: {
-        if (!visible) {
-            recordBox.visible = false
-        }
-    }
 
     EmojiPicker {
         id: emojiPicker
diff --git a/src/mainview/components/RecordBox.qml b/src/mainview/components/RecordBox.qml
index bc997db9ba4c19f2e0c0b25c9942aaf1003c9f4b..b1740a1f7aaf1eb03b6f1f971e99898c2c02d4e7 100644
--- a/src/mainview/components/RecordBox.qml
+++ b/src/mainview/components/RecordBox.qml
@@ -41,6 +41,7 @@ Rectangle {
     property int duration: 0
     property int state: RecordBox.States.INIT
     property bool isVideo: false
+    property bool previewAvailable: false
     property int preferredWidth: 320
     property int preferredHeight: 240
     property int btnSize: 40
@@ -60,6 +61,7 @@ Rectangle {
         if (isVideo) {
             previewWidget.deviceId = VideoDevices.getDefaultDevice()
             previewWidget.rendererId = VideoDevices.startDevice(previewWidget.deviceId)
+            previewAvailable = true
         }
     }
 
@@ -241,7 +243,7 @@ Rectangle {
 
         anchors.fill: parent
 
-        visible: (isVideo && VideoDevices.listSize !== 0) 
+        visible: (isVideo && previewAvailable)
         color: JamiTheme.blackColor
         radius: 5
 
@@ -260,13 +262,6 @@ Rectangle {
                 maskSource: rectBox
             }
         }
-
-        onVisibleChanged: {
-            if (visible) {
-                openRecorder(true)
-            } else
-                VideoDevices.stopDevice(previewWidget.deviceId)
-        }
     }
 
     Label {
@@ -274,14 +269,11 @@ Rectangle {
 
         width: root.width
 
-        visible: (isVideo && VideoDevices.listSize === 0)
+        visible: (isVideo && !previewAvailable)
 
-        text: JamiStrings.previewUnavailable
-        font.pointSize: JamiTheme.settingsFontSize
+        text: qsTr("Preview unavailable")
+        font.pointSize: 10
         font.kerning: true
-        color: JamiTheme.primaryForegroundColor
-        horizontalAlignment: Text.AlignHCenter
-        verticalAlignment: Text.AlignVCenter
     }
 
     Timer {
diff --git a/src/settingsview/components/AudioSettings.qml b/src/settingsview/components/AudioSettings.qml
index 578aabca875cfb430d40a95c1a410b3880706ebd..34649f31412551164e2783216ca81f9e30a09f4f 100644
--- a/src/settingsview/components/AudioSettings.qml
+++ b/src/settingsview/components/AudioSettings.qml
@@ -30,7 +30,6 @@ ColumnLayout {
     id:root
 
     property int itemWidth
-    property int videoDevicesListSize: VideoDevices.listSize
 
     enum Setting {
         AUDIOINPUT,
@@ -39,19 +38,6 @@ ColumnLayout {
         AUDIOMANAGER
     }
 
-    onVisibleChanged: {
-        if (visible)
-            populateAudioSettings()
-    }
-
-    onVideoDevicesListSizeChanged: {
-        AvAdapter.stopAudioMeter()
-        var selectedAudioManager = inputComboBoxSetting.comboModel.data(
-                    inputComboBoxSetting.comboModel.index(inputComboBoxSetting.modelIndex, 0), AudioDeviceModel.RawDeviceName)
-        AVModel.setInputDevice(selectedAudioManager)
-        AvAdapter.startAudioMeter()
-    }
-
     function populateAudioSettings() {
         inputComboBoxSetting.modelIndex = inputComboBoxSetting.comboModel.getCurrentIndex()
         outputComboBoxSetting.modelIndex = outputComboBoxSetting.comboModel.getCurrentIndex()
diff --git a/src/settingsview/components/AvSettingPage.qml b/src/settingsview/components/AvSettingPage.qml
index 38003fb2b278acfe52a59c85ba280bd08c6f6817..52cd2b50ffb5449abdfa899b91e4a8d0ac44ae3f 100644
--- a/src/settingsview/components/AvSettingPage.qml
+++ b/src/settingsview/components/AvSettingPage.qml
@@ -32,6 +32,10 @@ Rectangle {
     property int contentWidth: avSettingsColumnLayout.width
     property int preferredHeight: avSettingsColumnLayout.implicitHeight
 
+    function populateAVSettings() {
+        audioSettings.populateAudioSettings()
+    }
+
     color: JamiTheme.secondaryBackgroundColor
 
     ColumnLayout {
diff --git a/src/settingsview/components/VideoSettings.qml b/src/settingsview/components/VideoSettings.qml
index c6c705c1c9b2f14b77760de1ccb748e6282454e1..19afe5ef0b87bf5beaf8344308563ea20c4e23ef 100644
--- a/src/settingsview/components/VideoSettings.qml
+++ b/src/settingsview/components/VideoSettings.qml
@@ -32,12 +32,14 @@ ColumnLayout {
     id: root
 
     property real aspectRatio: 0.75
+    property bool previewAvailable: false
     property int itemWidth
 
     function startPreviewing(force = false) {
         if (root.visible) {
             previewWidget.deviceId = VideoDevices.getDefaultDevice()
             previewWidget.rendererId = VideoDevices.startDevice(previewWidget.deviceId, force)
+            previewAvailable = true
         }
     }
 
@@ -194,7 +196,7 @@ ColumnLayout {
 
         onSwitchToggled: {
             AvAdapter.setHardwareAcceleration(checked)
-            startPreviewing()
+            startPreviewing(true)
         }
     }
 
@@ -228,18 +230,11 @@ ColumnLayout {
                 maskSource: rectBox
             }
         }
-
-        onVisibleChanged: {
-            if (visible) {
-                VideoDevices.stopDevice(previewWidget.deviceId)
-                startPreviewing(true)
-            } else
-                VideoDevices.stopDevice(previewWidget.deviceId)
-        }
     }
-    
+
     Label {
-        visible: VideoDevices.listSize === 0
+        // TODO: proper use of previewAvailable
+        visible: !previewAvailable
 
         Layout.fillWidth: true
         Layout.preferredHeight: JamiTheme.preferredFieldHeight
@@ -248,7 +243,6 @@ ColumnLayout {
         text: JamiStrings.previewUnavailable
         font.pointSize: JamiTheme.settingsFontSize
         font.kerning: true
-        color: JamiTheme.primaryForegroundColor
 
         horizontalAlignment: Text.AlignHCenter
         verticalAlignment: Text.AlignVCenter