diff --git a/src/contactmodel.cpp b/src/contactmodel.cpp
index 2a716dcff86840e83a6df04300c892300ab0dd23..554310168a02cdc4782493ee6d3288602996c384 100644
--- a/src/contactmodel.cpp
+++ b/src/contactmodel.cpp
@@ -530,7 +530,7 @@ ContactModel::bestNameForContact(const QString& contactUri) const
             return bestIdFromContactInfo(contact);
         }
         return alias;
-    } catch(const std::out_of_range&) {
+    } catch (const std::out_of_range&) {
     }
     return contactUri;
 }
@@ -538,6 +538,15 @@ ContactModel::bestNameForContact(const QString& contactUri) const
 QString
 ContactModel::avatar(const QString& uri) const
 {
+    {
+        std::lock_guard<std::mutex> lk(pimpl_->contactsMtx_);
+        // For search results it's loaded and not in storage yet.
+        if (pimpl_->searchResult.contains(uri)) {
+            auto contact = pimpl_->searchResult.value(uri);
+            return contact.profileInfo.avatar;
+        }
+    }
+    // Else search in storage
     return storage::avatar(owner.id, uri);
 }
 
diff --git a/src/conversationmodel.cpp b/src/conversationmodel.cpp
index c53f000aa8f5aabd79fb813caac15d1da6fb252b..9df2a400dd7c37ccb0d21a7b1bd22e4ba641d039 100644
--- a/src/conversationmodel.cpp
+++ b/src/conversationmodel.cpp
@@ -1101,6 +1101,13 @@ ConversationModel::avatar(const QString& conversationId) const
         return {};
     }
     auto& conversation = conversationOpt->get();
+    if (conversation.isCoreDialog()) {
+        auto peer = pimpl_->peersForConversation(conversation);
+        if (peer.isEmpty())
+            return {};
+        // In this case, we can just display contact name
+        return owner.contactModel->avatar(peer.at(0));
+    }
     return conversation.infos["avatar"];
 }