diff --git a/src/utils.cpp b/src/utils.cpp
index 68a313974856555fad0782a30d89fdd5953195cf..31c4e75d9c66efd7617438f869c6104770116b95 100644
--- a/src/utils.cpp
+++ b/src/utils.cpp
@@ -396,10 +396,23 @@ Utils::conversationAvatar(LRCInstance* instance,
         auto& accInfo = instance->accountModel().getAccountInfo(
             accountId.isEmpty() ? instance->get_currentAccountId() : accountId);
         auto* convModel = accInfo.conversationModel.get();
-        Q_FOREACH (const auto peerUri, convModel->peersForConversation(convId)) {
-            auto peerAvatar = Utils::contactPhoto(instance, peerUri, size);
+        auto members = convModel->peersForConversation(convId);
+        if (members.size() < 1)
+            return avatar;
+        if (members.size() == 1) {
+            // Only member in the swarm or 1:1, draw only peer's avatar
+            auto peerAvatar = Utils::contactPhoto(instance, members[0], size);
             painter.drawImage(avatar.rect(), peerAvatar);
+            return avatar;
         }
+        // Else, combine avatars
+        auto idx = 0;
+        auto peerAAvatar = Utils::contactPhoto(instance, members[0], size);
+        auto peerBAvatar = Utils::contactPhoto(instance, members[1], size);
+        peerAAvatar = Utils::halfCrop(peerAAvatar, true);
+        peerBAvatar = Utils::halfCrop(peerBAvatar, false);
+        painter.drawImage(avatar.rect(), peerAAvatar);
+        painter.drawImage(avatar.rect(), peerBAvatar);
     } catch (const std::exception& e) {
         qDebug() << Q_FUNC_INFO << e.what();
     }
@@ -453,6 +466,23 @@ Utils::getCirclePhoto(const QImage original, int sizePhoto)
     return target;
 }
 
+QImage
+Utils::halfCrop(const QImage original, bool leftSide)
+{
+    auto width = original.size().width();
+    auto height = original.size().height();
+    QImage target(width, height, QImage::Format_ARGB32_Premultiplied);
+    target.fill(Qt::transparent);
+
+    QPainter painter(&target);
+    painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
+    painter.setBrush(QBrush(Qt::white));
+    painter.drawRect(leftSide ? 0 : width / 2 + 2, 0, width / 2 - (leftSide ? 2 : 0), height);
+    painter.setCompositionMode(QPainter::CompositionMode_SourceIn);
+    painter.drawImage(0, 0, original, 0, 0);
+    return target;
+}
+
 QSize
 Utils::getRealSize(QScreen* screen)
 {
diff --git a/src/utils.h b/src/utils.h
index af20999e615debea21f7ad80b426821d2ead201f..1b4f9ae047c61e85a45f5e80b1dc8c904c08a451 100644
--- a/src/utils.h
+++ b/src/utils.h
@@ -95,6 +95,7 @@ QImage conversationAvatar(LRCInstance* instance,
                           const QSize& size = defaultAvatarSize,
                           const QString& accountId = {});
 QImage getCirclePhoto(const QImage original, int sizePhoto);
+QImage halfCrop(const QImage original, bool leftSide);
 QColor getAvatarColor(const QString& canonicalUri);
 QImage fallbackAvatar(const QString& canonicalUriStr,
                       const QString& letterStr = {},