diff --git a/src/audio/alsapluginmodel.cpp b/src/audio/alsapluginmodel.cpp
index e2da2b52f107d7a2e0f508996c442b160827b4ca..b99af3a924b0eb359ecb225d5d2c437fb0293cb9 100644
--- a/src/audio/alsapluginmodel.cpp
+++ b/src/audio/alsapluginmodel.cpp
@@ -36,7 +36,6 @@ private:
 
 public Q_SLOTS:
    void setCurrentPlugin(const QModelIndex& idx);
-   void setCurrentPlugin(int idx);
 };
 
 AlsaPluginModelPrivate::AlsaPluginModelPrivate(Audio::AlsaPluginModel* parent) : q_ptr(parent),
@@ -113,7 +112,7 @@ QItemSelectionModel* Audio::AlsaPluginModel::selectionModel() const
 
       d_ptr->m_pSelectionModel->setCurrentIndex(currentPlugin(), QItemSelectionModel::ClearAndSelect);
 
-      connect(d_ptr->m_pSelectionModel, SIGNAL(currentChanged(QModelIndex,QModelIndex)), d_ptr.data(), SLOT(setCurrentPlugin(QModelIndex)));
+      connect(d_ptr->m_pSelectionModel, &QItemSelectionModel::currentChanged, d_ptr.data(), &AlsaPluginModelPrivate::setCurrentPlugin);
    }
 
    return d_ptr->m_pSelectionModel;
@@ -141,21 +140,21 @@ void AlsaPluginModelPrivate::setCurrentPlugin(const QModelIndex& idx)
    configurationManager.setAudioPlugin(m_lDeviceList[idx.row()]);
 }
 
-///Set the current index (qcombobox compatibility shim)
-void AlsaPluginModelPrivate::setCurrentPlugin(int idx)
-{
-   setCurrentPlugin(q_ptr->index(idx,0));
-}
-
 ///Reload to current daemon state
 void Audio::AlsaPluginModel::reload()
 {
+   const int currentRow = selectionModel()->currentIndex().row();
+
    ConfigurationManagerInterface& configurationManager = ConfigurationManager::instance();
    beginResetModel();
    d_ptr->m_lDeviceList = configurationManager.getAudioPluginList();
    endResetModel();
    emit layoutChanged();
    emit dataChanged(index(0,0),index(d_ptr->m_lDeviceList.size()-1,0));
+
+   // Restore the selection
+   d_ptr->m_pSelectionModel->setCurrentIndex(index(currentRow,0), QItemSelectionModel::ClearAndSelect);
+
 }
 
 #include <alsapluginmodel.moc>
diff --git a/src/audio/inputdevicemodel.cpp b/src/audio/inputdevicemodel.cpp
index 60dea5b585e65d05f0d729f798692f7415f73a84..decbcf0ec1fd10b2a2f489fad6f4b5756f5af095 100644
--- a/src/audio/inputdevicemodel.cpp
+++ b/src/audio/inputdevicemodel.cpp
@@ -37,7 +37,6 @@ private:
 
 public Q_SLOTS:
    void setCurrentDevice(const QModelIndex& index);
-   void setCurrentDevice(int idx);
 };
 
 InputDeviceModelPrivate::InputDeviceModelPrivate(Audio::InputDeviceModel* parent) : q_ptr(parent),
@@ -118,7 +117,7 @@ QItemSelectionModel* Audio::InputDeviceModel::selectionModel() const
       if (!(idx >= d_ptr->m_lDeviceList.size()))
          d_ptr->m_pSelectionModel->setCurrentIndex(index(idx,0), QItemSelectionModel::ClearAndSelect);
 
-      connect(d_ptr->m_pSelectionModel, SIGNAL(currentChanged(QModelIndex,QModelIndex)), d_ptr.data(), SLOT(setCurrentDevice(QModelIndex)));
+      connect(d_ptr->m_pSelectionModel, &QItemSelectionModel::currentChanged, d_ptr.data(), &InputDeviceModelPrivate::setCurrentDevice);
    }
 
    return d_ptr->m_pSelectionModel;
@@ -133,21 +132,19 @@ void InputDeviceModelPrivate::setCurrentDevice(const QModelIndex& index)
    }
 }
 
-///QCombobox signals -> QModelIndex shim
-void InputDeviceModelPrivate::setCurrentDevice(int idx)
-{
-   setCurrentDevice(q_ptr->index(idx,0));
-}
-
 ///Reload input device list
 void Audio::InputDeviceModel::reload()
 {
+   const int currentRow = selectionModel()->currentIndex().row();
    ConfigurationManagerInterface& configurationManager = ConfigurationManager::instance();
    beginResetModel();
    d_ptr->m_lDeviceList = configurationManager.getAudioInputDeviceList  ();
    endResetModel();
    emit layoutChanged();
    emit dataChanged(index(0,0),index(d_ptr->m_lDeviceList.size()-1,0));
+
+   // Restore the selection
+   d_ptr->m_pSelectionModel->setCurrentIndex(index(currentRow,0), QItemSelectionModel::ClearAndSelect);
 }
 
 #include <inputdevicemodel.moc>
diff --git a/src/audio/outputdevicemodel.cpp b/src/audio/outputdevicemodel.cpp
index 59ec452d56015c23149050372dc606c38620e9b4..6498af4ea46d7fa5feb5ff77b4b86e496a54ce89 100644
--- a/src/audio/outputdevicemodel.cpp
+++ b/src/audio/outputdevicemodel.cpp
@@ -38,7 +38,6 @@ private:
 
 public Q_SLOTS:
    void setCurrentDevice(const QModelIndex& index);
-   void setCurrentDevice(int idx);
 };
 
 
@@ -135,21 +134,21 @@ void OutputDeviceModelPrivate::setCurrentDevice(const QModelIndex& index)
    }
 }
 
-///QCombobox index -> QModelIndex shim
-void OutputDeviceModelPrivate::setCurrentDevice(int idx)
-{
-   setCurrentDevice(q_ptr->index(idx,0));
-}
-
 ///reload output devices list
 void Audio::OutputDeviceModel::reload()
 {
+   const int currentRow = selectionModel()->currentIndex().row();
+
    ConfigurationManagerInterface& configurationManager = ConfigurationManager::instance();
    beginResetModel();
    d_ptr->m_lDeviceList = configurationManager.getAudioOutputDeviceList();
    endResetModel();
    emit layoutChanged();
    emit dataChanged(index(0,0),index(d_ptr->m_lDeviceList.size()-1,0));
+
+   // Restore the selection
+   d_ptr->m_pSelectionModel->setCurrentIndex(index(currentRow,0), QItemSelectionModel::ClearAndSelect);
+
 }
 
 void Audio::OutputDeviceModel::playDTMF(const QString& str)
diff --git a/src/audio/ringtonedevicemodel.cpp b/src/audio/ringtonedevicemodel.cpp
index 71f38987afb75d54aee6185e51eb8e7cafb8ea22..4b096c12f338a64e8dd8cd2272b61f3ed3132782 100644
--- a/src/audio/ringtonedevicemodel.cpp
+++ b/src/audio/ringtonedevicemodel.cpp
@@ -37,7 +37,6 @@ private:
 
 public Q_SLOTS:
    void setCurrentDevice(const QModelIndex& index);
-   void setCurrentDevice(int idx);
 };
 
 RingtoneDeviceModelPrivate::RingtoneDeviceModelPrivate(Audio::RingtoneDeviceModel* parent) : q_ptr(parent),
@@ -144,21 +143,21 @@ void RingtoneDeviceModelPrivate::setCurrentDevice(const QModelIndex& index)
    }
 }
 
-///QCombobox -> QModelIndex shim
-void RingtoneDeviceModelPrivate::setCurrentDevice(int idx)
-{
-   setCurrentDevice(q_ptr->index(idx,0));
-}
-
 ///Reload ringtone device list
 void Audio::RingtoneDeviceModel::reload()
 {
+   const int currentRow = selectionModel()->currentIndex().row();
+
    ConfigurationManagerInterface& configurationManager = ConfigurationManager::instance();
    beginResetModel();
    d_ptr->m_lDeviceList = configurationManager.getAudioOutputDeviceList();
    endResetModel();
    emit layoutChanged();
    emit dataChanged(index(0,0),index(d_ptr->m_lDeviceList.size()-1,0));
+
+   // Restore the selection
+   d_ptr->m_pSelectionModel->setCurrentIndex(index(currentRow,0), QItemSelectionModel::ClearAndSelect);
+
 }
 
 #include <ringtonedevicemodel.moc>