diff --git a/src/contactadapter.cpp b/src/contactadapter.cpp
index 354b4745f822813702c4a0df553f975374667f18..2a7169c6d039517102e38bf58a67caf1ea1f33ad 100644
--- a/src/contactadapter.cpp
+++ b/src/contactadapter.cpp
@@ -93,7 +93,7 @@ ContactAdapter::setSearchFilter(const QString& filter)
         selectableProxyModel_->setPredicate(
             [this, filter](const QModelIndex& index, const QRegExp&) {
                 return (!defaultModerators_.contains(index.data(Role::URI).toString())
-                        && index.data(Role::BestName).toString().contains(filter));
+                        && index.data(Role::Title).toString().contains(filter));
             });
     }
     selectableProxyModel_->setFilterRegExp(
diff --git a/src/conversationlistmodelbase.cpp b/src/conversationlistmodelbase.cpp
index 7a05374091c33911e752cc99f37dce43514a35f5..6921dafbb66905919c981a04fba6fe8c7169b6b8 100644
--- a/src/conversationlistmodelbase.cpp
+++ b/src/conversationlistmodelbase.cpp
@@ -59,14 +59,13 @@ ConversationListModelBase::dataForItem(item_t item, int role) const
         contactModel = accountInfo.contactModel.get();
         contact = contactModel->getContact(peerUri);
     } catch (...) {
-        return QVariant(false);
     }
 
     // Since we are using image provider right now, image url representation should be unique to
     // be able to use the image cache, account avatar will only be updated once PictureUid changed
     switch (role) {
-    case Role::BestName:
-        return QVariant(contactModel->bestNameForContact(peerUri));
+    case Role::Title:
+        return QVariant(model_->title(item.uid));
     case Role::BestId:
         return QVariant(contactModel->bestIdForContact(peerUri));
     case Role::Presence:
diff --git a/src/conversationlistmodelbase.h b/src/conversationlistmodelbase.h
index 45ef4c912b63e9bbd5575ced9567c74e139f082b..9a988bbdc5a71e871de850dc092aa88a88e3ba5f 100644
--- a/src/conversationlistmodelbase.h
+++ b/src/conversationlistmodelbase.h
@@ -23,7 +23,7 @@
 
 // TODO: many of these roles should probably be factored out
 #define CONV_ROLES \
-    X(BestName) \
+    X(Title) \
     X(BestId) \
     X(Presence) \
     X(Alias) \
diff --git a/src/conversationsadapter.cpp b/src/conversationsadapter.cpp
index 7967b63ac016592e829a5ac10bda0ce36c279841..8bda692be1042b9bc488418f984adb4829bde753 100644
--- a/src/conversationsadapter.cpp
+++ b/src/conversationsadapter.cpp
@@ -384,7 +384,6 @@ ConversationsAdapter::getConvInfoMap(const QString& convId)
         contactModel = accountInfo.contactModel.get();
         contact = contactModel->getContact(peerUri);
     } catch (...) {
-        return {};
     }
     bool isAudioOnly {false};
     if (!convInfo.uid.isEmpty()) {
diff --git a/src/mainview/components/ContactPickerItemDelegate.qml b/src/mainview/components/ContactPickerItemDelegate.qml
index e92d6ae56d8c505579f6f4fd5356ae1618136c26..0714f7f489cd918a53d0283f3845ea12cd975723 100644
--- a/src/mainview/components/ContactPickerItemDelegate.qml
+++ b/src/mainview/components/ContactPickerItemDelegate.qml
@@ -68,7 +68,7 @@ ItemDelegate {
                 font: contactPickerContactName.font
                 elide: Text.ElideMiddle
                 elideWidth: contactPickerContactInfoRect.width
-                text: BestName
+                text: Title
             }
 
             color: JamiTheme.textColor
@@ -90,7 +90,7 @@ ItemDelegate {
                 font: contactPickerContactId.font
                 elide: Text.ElideMiddle
                 elideWidth: contactPickerContactInfoRect.width
-                text: BestId == BestName ? "" : BestId
+                text: BestId == Title ? "" : BestId
             }
 
             text: textMetricsContactPickerContactId.elidedText
diff --git a/src/mainview/components/SmartListItemDelegate.qml b/src/mainview/components/SmartListItemDelegate.qml
index 263d9981d55319eae21bcdaaa7b829f0a69f5abf..28ac45cb802982df74de731587615920fd6ed0e5 100644
--- a/src/mainview/components/SmartListItemDelegate.qml
+++ b/src/mainview/components/SmartListItemDelegate.qml
@@ -83,7 +83,7 @@ ItemDelegate {
                 Layout.preferredHeight: 20
                 Layout.alignment: Qt.AlignVCenter
                 elide: Text.ElideRight
-                text: BestName === undefined ? "" : BestName
+                text: Title === undefined ? "" : Title
                 font.pointSize: JamiTheme.smartlistItemFontSize
                 font.weight: UnreadMessagesCount ? Font.Bold : Font.Normal
                 color: JamiTheme.textColor
diff --git a/src/messagesadapter.cpp b/src/messagesadapter.cpp
index f36293b5b865915f482027259095ff9c3bdb238d..0a9dc2158a9bf06db5e05ef7d6b09f28cb290497 100644
--- a/src/messagesadapter.cpp
+++ b/src/messagesadapter.cpp
@@ -90,7 +90,7 @@ MessagesAdapter::setupChatView(const QString& convUid)
 
     QMetaObject::invokeMethod(qmlObj_,
                               "setSendContactRequestButtonVisible",
-                              Q_ARG(QVariant, convInfo.isNotASwarm() && isPending));
+                              Q_ARG(QVariant, convInfo.isNotASwarm() && convInfo.isRequest));
     QMetaObject::invokeMethod(qmlObj_,
                               "setMessagingHeaderButtonsVisible",
                               Q_ARG(QVariant,
@@ -510,13 +510,7 @@ MessagesAdapter::setConversationProfileData(const lrc::api::conversation::Info&
         return;
     }
     try {
-        auto& contact = accInfo->contactModel->getContact(contactUri);
-        auto bestName = accInfo->contactModel->bestNameForContact(contactUri);
-        bool isPending = contact.profileInfo.type == profile::Type::TEMPORARY;
-
-        QMetaObject::invokeMethod(qmlObj_,
-                                  "setSendContactRequestButtonVisible",
-                                  Q_ARG(QVariant, convInfo.isNotASwarm() && isPending));
+        auto title = accInfo->conversationModel->title(convInfo.uid);
         QMetaObject::invokeMethod(qmlObj_,
                                   "setMessagingHeaderButtonsVisible",
                                   Q_ARG(QVariant,
@@ -524,10 +518,17 @@ MessagesAdapter::setConversationProfileData(const lrc::api::conversation::Info&
                                           && (convInfo.isRequest || convInfo.needsSyncing))));
 
         setInvitation(convInfo.isRequest or convInfo.needsSyncing,
-                      bestName,
+                      title,
                       contactUri,
                       !convInfo.isNotASwarm(),
                       convInfo.needsSyncing);
+        if (!convInfo.isNotASwarm())
+            return;
+        auto& contact = accInfo->contactModel->getContact(contactUri);
+        bool isPending = contact.profileInfo.type == profile::Type::TEMPORARY;
+        QMetaObject::invokeMethod(qmlObj_,
+                                  "setSendContactRequestButtonVisible",
+                                  Q_ARG(QVariant, isPending));
         if (!contact.profileInfo.avatar.isEmpty()) {
             setSenderImage(contactUri, contact.profileInfo.avatar);
         } else {