diff --git a/src/accountadapter.cpp b/src/accountadapter.cpp
index 24fe6e0596bc5a77ef00c3d9286634b428e825ab..18477fd0f6b26dacf8906b42041c59976584842a 100644
--- a/src/accountadapter.cpp
+++ b/src/accountadapter.cpp
@@ -272,7 +272,7 @@ AccountAdapter::setCurrAccDisplayName(const QString& text)
 void
 AccountAdapter::setSelectedConvId(const QString& convId)
 {
-    lrcInstance_->setSelectedConvId(convId);
+    lrcInstance_->set_selectedConvUid(convId);
 }
 
 lrc::api::profile::Type
@@ -350,7 +350,7 @@ AccountAdapter::passwordSetStatusMessageBox(bool success, QString title, QString
 void
 AccountAdapter::deselectConversation()
 {
-    if (lrcInstance_->getCurrentConvUid().isEmpty()) {
+    if (lrcInstance_->get_selectedConvUid().isEmpty()) {
         return;
     }
 
@@ -361,7 +361,7 @@ AccountAdapter::deselectConversation()
         return;
     }
 
-    lrcInstance_->setSelectedConvId();
+    lrcInstance_->set_selectedConvUid();
 }
 
 void
@@ -395,7 +395,7 @@ AccountAdapter::connectAccount(const QString& accountId)
                                &lrc::api::ContactModel::contactAdded,
                                [this, accountId](const QString& contactUri) {
                                    const auto& convInfo = lrcInstance_->getConversationFromConvUid(
-                                       lrcInstance_->getCurrentConvUid());
+                                       lrcInstance_->get_selectedConvUid());
                                    if (convInfo.uid.isEmpty()) {
                                        return;
                                    }
diff --git a/src/avadapter.cpp b/src/avadapter.cpp
index 7b0898cbe5642cc78ef408cf4a4353fcecdb7cf0..2d56b0c3f22df6a89b23f6d19adc58768ca10b31 100644
--- a/src/avadapter.cpp
+++ b/src/avadapter.cpp
@@ -214,7 +214,7 @@ QString
 AvAdapter::getCurrentCallId()
 {
     const auto& convInfo = lrcInstance_->getConversationFromConvUid(
-        lrcInstance_->getCurrentConvUid());
+        lrcInstance_->get_selectedConvUid());
     auto call = lrcInstance_->getCallInfoForConversation(convInfo);
     return call ? call->id : QString();
 }
diff --git a/src/calladapter.cpp b/src/calladapter.cpp
index 6f5cba4fa47ea2239196e068c2cde52d0bb041ad..9775f08616b32912351288c27e9d926ab72ae512 100644
--- a/src/calladapter.cpp
+++ b/src/calladapter.cpp
@@ -125,7 +125,7 @@ CallAdapter::onCallStatusChanged(const QString& accountId, const QString& callId
 void
 CallAdapter::placeAudioOnlyCall()
 {
-    const auto convUid = lrcInstance_->getCurrentConvUid();
+    const auto convUid = lrcInstance_->get_selectedConvUid();
     if (!convUid.isEmpty()) {
         lrcInstance_->getCurrentConversationModel()->placeAudioOnlyCall(convUid);
     }
@@ -134,7 +134,7 @@ CallAdapter::placeAudioOnlyCall()
 void
 CallAdapter::placeCall()
 {
-    const auto convUid = lrcInstance_->getCurrentConvUid();
+    const auto convUid = lrcInstance_->get_selectedConvUid();
     if (!convUid.isEmpty()) {
         lrcInstance_->getCurrentConversationModel()->placeCall(convUid);
     }
@@ -198,7 +198,7 @@ CallAdapter::onShowIncomingCallView(const QString& accountId, const QString& con
         }
 
         const auto& currentConvInfo = lrcInstance_->getConversationFromConvUid(
-            lrcInstance_->getCurrentConvUid());
+            lrcInstance_->get_selectedConvUid());
 
         // Current call
         auto currentConvHasCall = callModel->hasCall(currentConvInfo.callId);
@@ -216,7 +216,7 @@ CallAdapter::onShowIncomingCallView(const QString& accountId, const QString& con
     }
 
     auto call = callModel->getCall(convInfo.callId);
-    auto isCallSelected = lrcInstance_->getCurrentConvUid() == convInfo.uid;
+    auto isCallSelected = lrcInstance_->get_selectedConvUid() == convInfo.uid;
 
     if (call.isOutgoing) {
         if (isCallSelected) {
@@ -232,7 +232,7 @@ CallAdapter::onShowIncomingCallView(const QString& accountId, const QString& con
             }
 
             const auto& currentConvInfo = lrcInstance_->getConversationFromConvUid(
-                lrcInstance_->getCurrentConvUid());
+                lrcInstance_->get_selectedConvUid());
 
             // Call in current conversation
             auto currentConvHasCall = callModel->hasCall(currentConvInfo.callId);
@@ -500,7 +500,7 @@ CallAdapter::connectCallModel(const QString& accountId)
                                 /*
                                  * Reset the call view corresponding accountId, uid.
                                  */
-                                lrcInstance_->setSelectedConvId(otherConv.uid);
+                                lrcInstance_->set_selectedConvUid(otherConv.uid);
                                 updateCall(otherConv.uid, otherConv.accountId, forceCallOnly);
                             }
                         }
@@ -514,7 +514,7 @@ CallAdapter::connectCallModel(const QString& accountId)
             case lrc::api::call::Status::CONNECTED:
             case lrc::api::call::Status::IN_PROGRESS: {
                 const auto& convInfo = lrcInstance_->getConversationFromCallId(callId, accountId);
-                if (!convInfo.uid.isEmpty() && convInfo.uid == lrcInstance_->getCurrentConvUid()) {
+                if (!convInfo.uid.isEmpty() && convInfo.uid == lrcInstance_->get_selectedConvUid()) {
                     accInfo.conversationModel->selectConversation(convInfo.uid);
                 }
                 updateCall(convInfo.uid, accountId);
@@ -633,7 +633,7 @@ CallAdapter::maximizeParticipant(const QString& uri)
 {
     auto* callModel = lrcInstance_->getAccountInfo(accountId_).callModel.get();
     const auto& convInfo
-        = lrcInstance_->getConversationFromConvUid(lrcInstance_->getCurrentConvUid(), accountId_);
+        = lrcInstance_->getConversationFromConvUid(lrcInstance_->get_selectedConvUid(), accountId_);
 
     auto confId = convInfo.confId;
     if (confId.isEmpty())
@@ -666,7 +666,7 @@ CallAdapter::minimizeParticipant(const QString& uri)
 {
     auto* callModel = lrcInstance_->getAccountInfo(accountId_).callModel.get();
     const auto& convInfo
-        = lrcInstance_->getConversationFromConvUid(lrcInstance_->getCurrentConvUid(), accountId_);
+        = lrcInstance_->getConversationFromConvUid(lrcInstance_->get_selectedConvUid(), accountId_);
     auto confId = convInfo.confId;
 
     if (confId.isEmpty())
diff --git a/src/contactadapter.cpp b/src/contactadapter.cpp
index 67880a2f4d8699d6055254b8d21869e417bd09d1..d35cc64f2b522b037bc9099df7d07a4405c0b2a9 100644
--- a/src/contactadapter.cpp
+++ b/src/contactadapter.cpp
@@ -62,7 +62,7 @@ ContactAdapter::getContactSelectableModel(int type)
             // Exclude current sip callee and filtered contact.
             bool match = true;
             const auto& conv = lrcInstance_->getConversationFromConvUid(
-                lrcInstance_->getCurrentConvUid());
+                lrcInstance_->get_selectedConvUid());
             if (!conv.participants.isEmpty()) {
                 QString calleeDisplayId = lrcInstance_->getAccountInfo(lrcInstance_->getCurrAccId())
                                               .contactModel->bestIdForContact(conv.participants[0]);
@@ -109,7 +109,7 @@ ContactAdapter::contactSelected(int index)
     auto contactIndex = selectableProxyModel_->index(index, 0);
     auto* callModel = lrcInstance_->getCurrentCallModel();
     const auto& convInfo = lrcInstance_->getConversationFromConvUid(
-        lrcInstance_->getCurrentConvUid());
+        lrcInstance_->get_selectedConvUid());
     if (contactIndex.isValid()) {
         switch (listModeltype_) {
         case SmartListModel::Type::CONFERENCE: {
diff --git a/src/conversationsadapter.cpp b/src/conversationsadapter.cpp
index 079a260da2c8444d2fe5acfcc506d159bc15e67d..427ae9ebf13ef71728dd8bf7d7816582a1cbfc50 100644
--- a/src/conversationsadapter.cpp
+++ b/src/conversationsadapter.cpp
@@ -40,7 +40,7 @@ ConversationsAdapter::ConversationsAdapter(SystemTray* systemTray,
     });
 
     connect(lrcInstance_, &LRCInstance::conversationSelected, [this]() {
-        auto convUid = lrcInstance_->getCurrentConvUid();
+        auto convUid = lrcInstance_->get_selectedConvUid();
         if (!convUid.isEmpty()) {
             Q_EMIT showConversation(lrcInstance_->getCurrAccId(), convUid);
         }
@@ -139,7 +139,7 @@ ConversationsAdapter::selectConversation(const QString& accountId, const QString
 void
 ConversationsAdapter::deselectConversation()
 {
-    if (lrcInstance_->getCurrentConvUid().isEmpty()) {
+    if (lrcInstance_->get_selectedConvUid().isEmpty()) {
         return;
     }
 
@@ -149,7 +149,7 @@ ConversationsAdapter::deselectConversation()
         return;
     }
 
-    lrcInstance_->setSelectedConvId();
+    lrcInstance_->set_selectedConvUid();
 }
 
 void
@@ -170,7 +170,7 @@ ConversationsAdapter::onNewUnreadInteraction(const QString& accountId,
 {
     if (!interaction.authorUri.isEmpty()
         && (!QApplication::focusWindow() || accountId != lrcInstance_->getCurrAccId()
-            || convUid != lrcInstance_->getCurrentConvUid())) {
+            || convUid != lrcInstance_->get_selectedConvUid())) {
         auto& accountInfo = lrcInstance_->getAccountInfo(accountId);
         auto from = accountInfo.contactModel->bestNameForContact(interaction.authorUri);
 #ifdef Q_OS_LINUX
@@ -272,7 +272,7 @@ ConversationsAdapter::connectConversationModel(bool updateFilter)
 
             auto* convModel = lrcInstance_->getCurrentConversationModel();
             const auto& convInfo = lrcInstance_->getConversationFromConvUid(
-                lrcInstance_->getCurrentConvUid());
+                lrcInstance_->get_selectedConvUid());
 
             if (convInfo.uid.isEmpty() || convInfo.participants.isEmpty()) {
                 return;
@@ -307,7 +307,7 @@ ConversationsAdapter::connectConversationModel(bool updateFilter)
                            [this]() {
                                conversationSmartListModel_->fillConversationsList();
                                updateConversationsFilterWidget();
-                               if (!lrcInstance_->getCurrentConvUid().isEmpty())
+                               if (!lrcInstance_->get_selectedConvUid().isEmpty())
                                    Q_EMIT indexRepositionRequested();
                                Q_EMIT updateListViewRequested();
                            });
@@ -331,7 +331,7 @@ ConversationsAdapter::connectConversationModel(bool updateFilter)
                            [this](const QString& convUid) {
                                // If currently selected, switch to welcome screen (deselecting
                                // current smartlist item).
-                               if (convUid != lrcInstance_->getCurrentConvUid()) {
+                               if (convUid != lrcInstance_->get_selectedConvUid()) {
                                    return;
                                }
                                backToWelcomePage();
@@ -391,8 +391,8 @@ ConversationsAdapter::updateConversationForNewContact(const QString& convUid)
         try {
             const auto contact = convModel->owner.contactModel->getContact(convInfo.participants[0]);
             if (!contact.profileInfo.uri.isEmpty()
-                && contact.profileInfo.uri == lrcInstance_->getCurrentConvUid()) {
-                lrcInstance_->setSelectedConvId(convUid);
+                && contact.profileInfo.uri == lrcInstance_->get_selectedConvUid()) {
+                lrcInstance_->set_selectedConvUid(convUid);
                 convModel->selectConversation(convUid);
             }
         } catch (...) {
diff --git a/src/lrcinstance.cpp b/src/lrcinstance.cpp
index deed90833b61838dbfd5d3ea733f88f87ee67ecd..e7c38fe5a5a4f427bcb0619e812435762808ca60 100644
--- a/src/lrcinstance.cpp
+++ b/src/lrcinstance.cpp
@@ -238,18 +238,6 @@ LRCInstance::setSelectedAccountId(const QString& accountId)
     Q_EMIT currentAccountChanged();
 }
 
-const QString&
-LRCInstance::getCurrentConvUid()
-{
-    return selectedConvUid_;
-}
-
-void
-LRCInstance::setSelectedConvId(const QString& convUid)
-{
-    selectedConvUid_ = convUid;
-}
-
 int
 LRCInstance::getCurrentAccountIndex()
 {
@@ -384,7 +372,7 @@ LRCInstance::selectConversation(const QString& accountId, const QString& convUid
 {
     const auto& convInfo = getConversationFromConvUid(convUid, accountId);
 
-    if (getCurrentConvUid() != convInfo.uid || convInfo.participants.size() > 0) {
+    if (get_selectedConvUid() != convInfo.uid || convInfo.participants.size() > 0) {
         // If the account is not currently selected, do that first, then
         // proceed to select the conversation.
         auto selectConversation = [this, accountId, convUid = convInfo.uid] {
@@ -393,7 +381,7 @@ LRCInstance::selectConversation(const QString& accountId, const QString& convUid
                 return;
             }
             auto& accInfo = getAccountInfo(convInfo.accountId);
-            setSelectedConvId(convInfo.uid);
+            set_selectedConvUid(convInfo.uid);
             accInfo.conversationModel->clearUnreadInteractions(convInfo.uid);
 
             try {
@@ -408,7 +396,7 @@ LRCInstance::selectConversation(const QString& accountId, const QString& convUid
             Utils::oneShotConnect(this, &LRCInstance::currentAccountChanged, [selectConversation] {
                 selectConversation();
             });
-            setSelectedConvId();
+            set_selectedConvUid();
             setSelectedAccountId(convInfo.accountId);
         } else {
             selectConversation();
diff --git a/src/lrcinstance.h b/src/lrcinstance.h
index f50ba8688d87ad0d56f4b5be09aed35cb582f5ec..0532263ffeed1c4bebcbacf8d091a2b9547ff421 100644
--- a/src/lrcinstance.h
+++ b/src/lrcinstance.h
@@ -54,6 +54,7 @@ using getConvPredicate = std::function<bool(const conversation::Info& conv)>;
 class LRCInstance : public QObject
 {
     Q_OBJECT
+    QML_PROPERTY(QString, selectedConvUid)
 
 public:
     explicit LRCInstance(migrateCallback willMigrateCb = {},
@@ -95,9 +96,7 @@ public:
 
     const QString& getCurrAccId();
     void setSelectedAccountId(const QString& accountId = {});
-    const QString& getCurrentConvUid();
     void selectConversation(const QString& accountId, const QString& convUid);
-    void setSelectedConvId(const QString& convUid = {});
     int getCurrentAccountIndex();
     void setAvatarForAccount(const QPixmap& avatarPixmap, const QString& accountID);
     void setCurrAccAvatar(const QPixmap& avatarPixmap);
@@ -130,7 +129,6 @@ private:
     std::unique_ptr<RenderManager> renderer_;
     std::unique_ptr<UpdateManager> updateManager_;
     QString selectedAccountId_ {""};
-    QString selectedConvUid_ {""};
     MapStringString contentDrafts_;
     MapStringString lastConferences_;
 
diff --git a/src/messagesadapter.cpp b/src/messagesadapter.cpp
index a5c6db97b04834b6d4fb1fe3e03b8aa19e445958..3efffb90320f7b3ab8d09a86f341fe4070f848a8 100644
--- a/src/messagesadapter.cpp
+++ b/src/messagesadapter.cpp
@@ -167,7 +167,7 @@ MessagesAdapter::connectConversationModel()
 void
 MessagesAdapter::sendContactRequest()
 {
-    const auto convUid = lrcInstance_->getCurrentConvUid();
+    const auto convUid = lrcInstance_->get_selectedConvUid();
     if (!convUid.isEmpty()) {
         lrcInstance_->getCurrentConversationModel()->makePermanent(convUid);
     }
@@ -178,7 +178,7 @@ MessagesAdapter::updateConversationForAddedContact()
 {
     auto* convModel = lrcInstance_->getCurrentConversationModel();
     const auto& convInfo = lrcInstance_->getConversationFromConvUid(
-        lrcInstance_->getCurrentConvUid());
+        lrcInstance_->get_selectedConvUid());
 
     clear();
     setConversationProfileData(convInfo);
@@ -191,13 +191,13 @@ MessagesAdapter::slotSendMessageContentSaved(const QString& content)
     if (!LastConvUid_.isEmpty()) {
         lrcInstance_->setContentDraft(LastConvUid_, lrcInstance_->getCurrAccId(), content);
     }
-    LastConvUid_ = lrcInstance_->getCurrentConvUid();
+    LastConvUid_ = lrcInstance_->get_selectedConvUid();
 
     Utils::oneShotConnect(qmlObj_, SIGNAL(messagesCleared()), this, SLOT(slotMessagesCleared()));
 
     setInvitation(false);
     clear();
-    auto restoredContent = lrcInstance_->getContentDraft(lrcInstance_->getCurrentConvUid(),
+    auto restoredContent = lrcInstance_->getContentDraft(lrcInstance_->get_selectedConvUid(),
                                                          lrcInstance_->getCurrAccId());
     setSendMessageContent(restoredContent);
     Q_EMIT needToUpdateSmartList();
@@ -217,7 +217,7 @@ MessagesAdapter::slotMessagesCleared()
 {
     auto* convModel = lrcInstance_->getCurrentConversationModel();
     const auto& convInfo = lrcInstance_->getConversationFromConvUid(
-        lrcInstance_->getCurrentConvUid());
+        lrcInstance_->get_selectedConvUid());
 
     printHistory(*convModel, convInfo.interactions);
 
@@ -236,7 +236,7 @@ void
 MessagesAdapter::sendMessage(const QString& message)
 {
     try {
-        const auto convUid = lrcInstance_->getCurrentConvUid();
+        const auto convUid = lrcInstance_->get_selectedConvUid();
         lrcInstance_->getCurrentConversationModel()->sendMessage(convUid, message);
     } catch (...) {
         qDebug() << "Exception during sendMessage:" << message;
@@ -268,7 +268,7 @@ MessagesAdapter::sendImage(const QString& message)
         }
 
         try {
-            auto convUid = lrcInstance_->getCurrentConvUid();
+            auto convUid = lrcInstance_->get_selectedConvUid();
             lrcInstance_->getCurrentConversationModel()->sendFile(convUid, path, fileName);
         } catch (...) {
             qDebug().noquote() << "Exception during sendFile - base64 img"
@@ -291,7 +291,7 @@ MessagesAdapter::sendImage(const QString& message)
         QString fileName = fi.fileName();
 
         try {
-            auto convUid = lrcInstance_->getCurrentConvUid();
+            auto convUid = lrcInstance_->get_selectedConvUid();
             lrcInstance_->getCurrentConversationModel()->sendFile(convUid, msg, fileName);
         } catch (...) {
             qDebug().noquote() << "Exception during sendFile - image from path"
@@ -306,7 +306,7 @@ MessagesAdapter::sendFile(const QString& message)
     QFileInfo fi(message);
     QString fileName = fi.fileName();
     try {
-        auto convUid = lrcInstance_->getCurrentConvUid();
+        auto convUid = lrcInstance_->get_selectedConvUid();
         lrcInstance_->getCurrentConversationModel()->sendFile(convUid, message, fileName);
     } catch (...) {
         qDebug() << "Exception during sendFile";
@@ -320,7 +320,7 @@ MessagesAdapter::retryInteraction(const QString& arg)
     uint64_t interactionUid = arg.toULongLong(&ok);
     if (ok) {
         lrcInstance_->getCurrentConversationModel()
-            ->retryInteraction(lrcInstance_->getCurrentConvUid(), interactionUid);
+            ->retryInteraction(lrcInstance_->get_selectedConvUid(), interactionUid);
     } else {
         qDebug() << "retryInteraction - invalid arg" << arg;
     }
@@ -347,7 +347,7 @@ MessagesAdapter::deleteInteraction(const QString& arg)
     uint64_t interactionUid = arg.toULongLong(&ok);
     if (ok) {
         lrcInstance_->getCurrentConversationModel()
-            ->clearInteractionFromConversation(lrcInstance_->getCurrentConvUid(), interactionUid);
+            ->clearInteractionFromConversation(lrcInstance_->get_selectedConvUid(), interactionUid);
     } else {
         qDebug() << "DeleteInteraction - invalid arg" << arg;
     }
@@ -375,7 +375,7 @@ MessagesAdapter::acceptFile(const QString& arg)
 {
     try {
         auto interactionUid = arg.toLongLong();
-        auto convUid = lrcInstance_->getCurrentConvUid();
+        auto convUid = lrcInstance_->get_selectedConvUid();
         lrcInstance_->getCurrentConversationModel()->acceptTransfer(convUid, interactionUid);
     } catch (...) {
         qDebug() << "JS bridging - exception during acceptFile: " << arg;
@@ -387,7 +387,7 @@ MessagesAdapter::refuseFile(const QString& arg)
 {
     try {
         auto interactionUid = arg.toLongLong();
-        const auto convUid = lrcInstance_->getCurrentConvUid();
+        const auto convUid = lrcInstance_->get_selectedConvUid();
         lrcInstance_->getCurrentConversationModel()->cancelTransfer(convUid, interactionUid);
     } catch (...) {
         qDebug() << "JS bridging - exception during refuseFile:" << arg;
@@ -447,7 +447,7 @@ MessagesAdapter::onComposing(bool isComposing)
     if (!settingsManager_->getValue(Settings::Key::EnableTypingIndicator).toBool()) {
         return;
     }
-    lrcInstance_->getCurrentConversationModel()->setIsComposing(lrcInstance_->getCurrentConvUid(),
+    lrcInstance_->getCurrentConversationModel()->setIsComposing(lrcInstance_->get_selectedConvUid(),
                                                                 isComposing);
 }
 
@@ -493,7 +493,7 @@ MessagesAdapter::newInteraction(const QString& accountId,
 {
     Q_UNUSED(interactionId);
     try {
-        if (convUid.isEmpty() || convUid != lrcInstance_->getCurrentConvUid()) {
+        if (convUid.isEmpty() || convUid != lrcInstance_->get_selectedConvUid()) {
             return;
         }
         auto& accountInfo = lrcInstance_->getAccountInfo(accountId);
@@ -656,7 +656,7 @@ MessagesAdapter::setSendMessageContent(const QString& content)
 void
 MessagesAdapter::contactIsComposing(const QString& uid, const QString& contactUri, bool isComposing)
 {
-    if (lrcInstance_->getCurrentConvUid() == uid) {
+    if (lrcInstance_->get_selectedConvUid() == uid) {
         QString s
             = QString::fromLatin1("showTypingIndicator(`%1`, %2);").arg(contactUri).arg(isComposing);
         QMetaObject::invokeMethod(qmlObj_, "webViewRunJavaScript", Q_ARG(QVariant, s));
@@ -666,7 +666,7 @@ MessagesAdapter::contactIsComposing(const QString& uid, const QString& contactUr
 void
 MessagesAdapter::acceptInvitation(const QString& convUid)
 {
-    const auto currentConvUid = convUid.isEmpty() ? lrcInstance_->getCurrentConvUid() : convUid;
+    const auto currentConvUid = convUid.isEmpty() ? lrcInstance_->get_selectedConvUid() : convUid;
     lrcInstance_->getCurrentConversationModel()->makePermanent(currentConvUid);
     if (convUid == currentConvUid_)
         currentConvUid_.clear();
@@ -676,7 +676,7 @@ MessagesAdapter::acceptInvitation(const QString& convUid)
 void
 MessagesAdapter::refuseInvitation(const QString& convUid)
 {
-    const auto currentConvUid = convUid.isEmpty() ? lrcInstance_->getCurrentConvUid() : convUid;
+    const auto currentConvUid = convUid.isEmpty() ? lrcInstance_->get_selectedConvUid() : convUid;
     lrcInstance_->getCurrentConversationModel()->removeConversation(currentConvUid, false);
     setInvitation(false);
     if (convUid == currentConvUid_)
@@ -687,7 +687,7 @@ MessagesAdapter::refuseInvitation(const QString& convUid)
 void
 MessagesAdapter::blockConversation(const QString& convUid)
 {
-    const auto currentConvUid = convUid.isEmpty() ? lrcInstance_->getCurrentConvUid() : convUid;
+    const auto currentConvUid = convUid.isEmpty() ? lrcInstance_->get_selectedConvUid() : convUid;
     lrcInstance_->getCurrentConversationModel()->removeConversation(currentConvUid, true);
     setInvitation(false);
     if (convUid == currentConvUid_)
diff --git a/src/qtutils.h b/src/qtutils.h
index c496cd24dd27b62d498ac4e5a1e6d12601d34e7e..b6da0213d59d7d7a34aa4232ffbf389a5982a5d5 100644
--- a/src/qtutils.h
+++ b/src/qtutils.h
@@ -1,4 +1,4 @@
-/*!
+/*
  * Copyright (C) 2015-2020 by Savoir-faire Linux
  * Author: Edric Ladent Milaret <edric.ladent-milaret@savoirfairelinux.com>
  * Author: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com>
@@ -24,6 +24,25 @@
 
 #include <QObject>
 
+#define QML_PROPERTY(type, prop) \
+private: \
+    Q_PROPERTY(type prop MEMBER prop##_ NOTIFY prop##Changed); \
+    type prop##_ {}; \
+\
+public: \
+    Q_SIGNAL void prop##Changed(); \
+    type get_##prop() \
+    { \
+        return prop##_; \
+    } \
+    void set_##prop(const type& x = {}) \
+    { \
+        if (prop##_ != x) { \
+            prop##_ = x; \
+            Q_EMIT prop##Changed(); \
+        } \
+    }
+
 namespace Utils {
 
 template<typename Func1, typename Func2>
diff --git a/src/smartlistmodel.cpp b/src/smartlistmodel.cpp
index caf18b0adbd03ff2bc06a59f7815c0879d48679f..e1bc388bcbcd2d44ee09fe9ad46a83cf1eeea4c0 100644
--- a/src/smartlistmodel.cpp
+++ b/src/smartlistmodel.cpp
@@ -174,7 +174,7 @@ SmartListModel::setConferenceableFilter(const QString& filter)
     beginResetModel();
     auto& accountInfo = lrcInstance_->accountModel().getAccountInfo(lrcInstance_->getCurrAccId());
     auto& convModel = accountInfo.conversationModel;
-    conferenceables_ = convModel->getConferenceableConversations(lrcInstance_->getCurrentConvUid(),
+    conferenceables_ = convModel->getConferenceableConversations(lrcInstance_->get_selectedConvUid(),
                                                                  filter);
     sectionState_[tr("Calls")] = true;
     sectionState_[tr("Contacts")] = true;
@@ -242,7 +242,7 @@ SmartListModel::toggleSection(const QString& section)
 int
 SmartListModel::currentUidSmartListModelIndex()
 {
-    const auto convUid = lrcInstance_->getCurrentConvUid();
+    const auto convUid = lrcInstance_->get_selectedConvUid();
     for (int i = 0; i < rowCount(); i++) {
         if (convUid == data(index(i, 0), Role::UID))
             return i;
diff --git a/src/utilsadapter.cpp b/src/utilsadapter.cpp
index 3b983086104ea150a8e74d9d026024092bee43aa..84d900c5d2a9922fc931222b7231755921e4182e 100644
--- a/src/utilsadapter.cpp
+++ b/src/utilsadapter.cpp
@@ -176,13 +176,13 @@ UtilsAdapter::setConversationFilter(const QString& filter)
 const QString
 UtilsAdapter::getCurrConvId()
 {
-    return lrcInstance_->getCurrentConvUid();
+    return lrcInstance_->get_selectedConvUid();
 }
 
 void
 UtilsAdapter::makePermanentCurrentConv()
 {
-    lrcInstance_->getCurrentConversationModel()->makePermanent(lrcInstance_->getCurrentConvUid());
+    lrcInstance_->getCurrentConversationModel()->makePermanent(lrcInstance_->get_selectedConvUid());
 }
 
 const QStringList