diff --git a/src/api/conversationmodel.h b/src/api/conversationmodel.h
index fe229198926fc4d1615f362925fc90ab8e2cdf37..26db622e984b12453c3960145c6e10987eaea05f 100644
--- a/src/api/conversationmodel.h
+++ b/src/api/conversationmodel.h
@@ -358,6 +358,10 @@ public:
      * @return number of conversations requests
      */
     int pendingRequestCount() const;
+    /**
+     * @return number of conversations requests + unread
+     */
+    int notificationsCount() const;
     const VectorString peersForConversation(const QString& conversationId);
 
     // Presentation
diff --git a/src/api/newaccountmodel.h b/src/api/newaccountmodel.h
index bd65a2f4b8bbd10b3853f5fc21fdd950ce7e7815..0d1c23c6a1114e85ea6f419b154fd64382062614 100644
--- a/src/api/newaccountmodel.h
+++ b/src/api/newaccountmodel.h
@@ -255,6 +255,10 @@ public:
      * @return if all moderator is enabled
      */
     bool isAllModerators(const QString& accountID);
+    /**
+     * Get notifications count across accounts
+     */
+    int notificationsCount() const;
 
 Q_SIGNALS:
     /**
diff --git a/src/conversationmodel.cpp b/src/conversationmodel.cpp
index 18d6ba4bd437e932b2e04907f09c89b5a22f20a5..efe545321261d482f7184ae767817dd86da43099 100644
--- a/src/conversationmodel.cpp
+++ b/src/conversationmodel.cpp
@@ -992,6 +992,22 @@ ConversationModel::pendingRequestCount() const
     return pendingRequestCount;
 }
 
+int
+ConversationModel::notificationsCount() const
+{
+    int notificationsCount = 0;
+    std::for_each(pimpl_->conversations.begin(),
+                  pimpl_->conversations.end(),
+                  [&notificationsCount](const auto& c) {
+                      if (c.isRequest)
+                          notificationsCount += 1;
+                      else {
+                          notificationsCount += c.unreadMessages;
+                      }
+                  });
+    return notificationsCount;
+}
+
 QString
 ConversationModel::title(const QString& conversationId) const
 {
@@ -2872,7 +2888,10 @@ ConversationModelPimpl::indexOfContact(const QString& uri) const
         if (!conversations.at(i).isCoreDialog()) {
             continue;
         }
-        if (peersForConversation(conversations.at(i)).front() == uri)
+        auto peers = peersForConversation(conversations.at(i));
+        if (peers.isEmpty())
+            continue;
+        if (peers.front() == uri)
             return i;
     }
     return -1;
diff --git a/src/newaccountmodel.cpp b/src/newaccountmodel.cpp
index 230c096758b61dcc32c35619c16a6bb9e526f2b8..3b1b67ed7e899fae6d20ffa76f6177d33921cc26 100644
--- a/src/newaccountmodel.cpp
+++ b/src/newaccountmodel.cpp
@@ -1209,6 +1209,16 @@ NewAccountModel::isAllModerators(const QString& accountID)
     return ConfigurationManager::instance().isAllModerators(accountID);
 }
 
+int
+NewAccountModel::notificationsCount() const
+{
+    auto total = 0;
+    for (const auto& [_id, account] : pimpl_->accounts) {
+        total += account.first.conversationModel->notificationsCount();
+    }
+    return total;
+}
+
 } // namespace lrc
 
 #include "api/moc_newaccountmodel.cpp"