diff --git a/src/api/conversationmodel.h b/src/api/conversationmodel.h
index fb3bfe275aa853c2faea20a043b775353ec78b28..b49b2b7b58419cd8d2821ca8dbd8ae68fdeeb6b7 100644
--- a/src/api/conversationmodel.h
+++ b/src/api/conversationmodel.h
@@ -79,6 +79,12 @@ public:
      * @return conversations filtered
      */
     const ConversationQueue& getFilteredConversations(const profile::Type& filter = profile::Type::INVALID, bool forceUpdate = false, const bool includeBanned = false) const;
+    /**
+     * Get a conversation copy
+     * @param uid of the conversation
+     * @return a copy of the conversation
+     */
+    const conversation::Info getConversation(const std::string& uid) const;
     /**
      * Get the conversation at row in the filtered conversations
      * @param  row
diff --git a/src/conversationmodel.cpp b/src/conversationmodel.cpp
index 92f0502953bce37c11195f2244a7b51431d6fb8f..c0cee725cc4cdb6a72388c8ba2a8f244c6ef354d 100644
--- a/src/conversationmodel.cpp
+++ b/src/conversationmodel.cpp
@@ -346,6 +346,19 @@ ConversationModel::getFilteredConversations(const profile::Type& filter, bool fo
     return pimpl_->customFilteredConversations;
 }
 
+const conversation::Info
+ConversationModel::getConversation(const std::string& uid) const
+{
+    auto row = pimpl_->indexOf(uid);
+    if (row >= pimpl_->conversations.size())
+        return conversation::Info();
+
+    auto conversationInfo = pimpl_->conversations.at(row);
+    conversationInfo.unreadMessages = pimpl_->getNumberOfUnreadMessagesFor(conversationInfo.uid);
+
+    return conversationInfo;
+}
+
 conversation::Info
 ConversationModel::filteredConversation(const unsigned int row) const
 {