diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt b/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt
index c0fee96f2..d1c993e0d 100644
--- a/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt
+++ b/app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt
@@ -613,13 +613,13 @@ class ConversationInfoController(args: Bundle) :
 
                             setupWebinaryView()
 
-                            if (!conversation!!.canLeave()) {
+                            if (!conversation!!.canLeave(conversationUser)) {
                                 binding.leaveConversationAction.visibility = View.GONE
                             } else {
                                 binding.leaveConversationAction.visibility = View.VISIBLE
                             }
 
-                            if (!conversation!!.canDelete()) {
+                            if (!conversation!!.canDelete(conversationUser)) {
                                 binding.deleteConversationAction.visibility = View.GONE
                             } else {
                                 binding.deleteConversationAction.visibility = View.VISIBLE
diff --git a/app/src/main/java/com/nextcloud/talk/models/json/conversations/Conversation.java b/app/src/main/java/com/nextcloud/talk/models/json/conversations/Conversation.java
index 82e557b29..2888d105d 100644
--- a/app/src/main/java/com/nextcloud/talk/models/json/conversations/Conversation.java
+++ b/app/src/main/java/com/nextcloud/talk/models/json/conversations/Conversation.java
@@ -148,12 +148,23 @@ public class Conversation {
         return (canModerate(conversationUser) && !ConversationType.ROOM_TYPE_ONE_TO_ONE_CALL.equals(type));
     }
 
-    public boolean canLeave() {
-        return canLeaveConversation;
+    public boolean canLeave(UserEntity conversationUser) {
+        if (canLeaveConversation != null) {
+            // Available since APIv2
+            return canLeaveConversation;
+        }
+        // Fallback for APIv1
+        return !canModerate(conversationUser) ||
+            (getType() != ConversationType.ROOM_TYPE_ONE_TO_ONE_CALL && this.participants.size() > 1);
     }
 
-    public boolean canDelete() {
-        return canDeleteConversation;
+    public boolean canDelete(UserEntity conversationUser) {
+        if (canDeleteConversation != null) {
+            // Available since APIv2
+            return canDeleteConversation;
+        }
+        // Fallback for APIv1
+        return canModerate(conversationUser);
     }
 
     public String getRoomId() {
diff --git a/app/src/main/java/com/nextcloud/talk/ui/dialog/ConversationsListBottomDialog.kt b/app/src/main/java/com/nextcloud/talk/ui/dialog/ConversationsListBottomDialog.kt
index ff2b9db97..4679dc4e4 100644
--- a/app/src/main/java/com/nextcloud/talk/ui/dialog/ConversationsListBottomDialog.kt
+++ b/app/src/main/java/com/nextcloud/talk/ui/dialog/ConversationsListBottomDialog.kt
@@ -157,7 +157,7 @@ class ConversationsListBottomDialog(
         )
 
         binding.conversationOperationLeave.visibility = setVisibleIf(
-            conversation.canLeave() &&
+            conversation.canLeave(currentUser) &&
                 // leaving is by api not possible for the last user with moderator permissions.
                 // for now, hide this option for all moderators.
                 !conversation.canModerate(currentUser)