diff --git a/src/client/videomanager.cpp b/src/client/videomanager.cpp
index c85a694c028c18ea7d0225f4c65434f46a37e3da..cc92f9e1671dd59225710219a47915034ac5b144 100644
--- a/src/client/videomanager.cpp
+++ b/src/client/videomanager.cpp
@@ -79,6 +79,7 @@ setDefaultDevice(const std::string& name)
 {
     RING_DBG("Setting default device to %s", name.c_str());
     ring::Manager::instance().getVideoManager().videoDeviceMonitor.setDefaultDevice(name);
+    ring::Manager::instance().saveConfig();
 }
 
 std::map<std::string, std::string>
diff --git a/src/media/video/video_device_monitor.cpp b/src/media/video/video_device_monitor.cpp
index d5465fc9826bfed73faea8bf1aa5111763d5ce7a..ba1cff48e74f0f211a24cdc07395e754d7170eb5 100644
--- a/src/media/video/video_device_monitor.cpp
+++ b/src/media/video/video_device_monitor.cpp
@@ -109,9 +109,20 @@ VideoDeviceMonitor::getMRLForDefaultDevice() const
 void
 VideoDeviceMonitor::setDefaultDevice(const std::string& name)
 {
-    const auto it = findDeviceByName(name);
-    if (it != devices_.end())
-        defaultDevice_ = it->name;
+    const auto itDev = findDeviceByName(name);
+    if (itDev != devices_.end()) {
+        defaultDevice_ = itDev->name;
+
+        // place it at the begining of the prefs
+        auto itPref = findPreferencesByName(name);
+        if (itPref != preferences_.end()) {
+            auto settings = *itPref;
+            preferences_.erase(itPref);
+            preferences_.insert(preferences_.begin(), settings);
+        } else {
+            preferences_.insert(preferences_.begin(), itDev->getSettings());
+        }
+    }
 }
 
 DeviceParams