diff --git a/CHANGES.md b/CHANGES.md
index e0a0085af5..0be18b8927 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -14,6 +14,7 @@ Bugfix 🐛:
  - Regression Composer does not grow, crops out text (#1650)
  - Bug / Unwanted draft (#698)
  - All users seems to be able to see the enable encryption option in room settings (#1341)
+ - Leave room only leaves the current version (#1656)
 
 Translations 🗣:
  -
diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/membership/leaving/LeaveRoomTask.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/membership/leaving/LeaveRoomTask.kt
index 08eb71fc89..2d56e5bd47 100644
--- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/membership/leaving/LeaveRoomTask.kt
+++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/membership/leaving/LeaveRoomTask.kt
@@ -16,8 +16,13 @@
 
 package im.vector.matrix.android.internal.session.room.membership.leaving
 
+import im.vector.matrix.android.api.query.QueryStringValue
+import im.vector.matrix.android.api.session.events.model.EventType
+import im.vector.matrix.android.api.session.events.model.toModel
+import im.vector.matrix.android.api.session.room.model.create.RoomCreateContent
 import im.vector.matrix.android.internal.network.executeRequest
 import im.vector.matrix.android.internal.session.room.RoomAPI
+import im.vector.matrix.android.internal.session.room.state.StateEventDataSource
 import im.vector.matrix.android.internal.task.Task
 import org.greenrobot.eventbus.EventBus
 import javax.inject.Inject
@@ -31,12 +36,22 @@ internal interface LeaveRoomTask : Task<LeaveRoomTask.Params, Unit> {
 
 internal class DefaultLeaveRoomTask @Inject constructor(
         private val roomAPI: RoomAPI,
-        private val eventBus: EventBus
+        private val eventBus: EventBus,
+        private val stateEventDataSource: StateEventDataSource
 ) : LeaveRoomTask {
 
     override suspend fun execute(params: LeaveRoomTask.Params) {
-        return executeRequest(eventBus) {
-            apiCall = roomAPI.leave(params.roomId, mapOf("reason" to params.reason))
+        leaveRoom(params.roomId, params.reason)
+    }
+
+    private suspend fun leaveRoom(roomId: String, reason: String?) {
+        val roomCreateStateEvent = stateEventDataSource.getStateEvent(roomId, eventType = EventType.STATE_ROOM_CREATE, stateKey = QueryStringValue.NoCondition)
+        val predecessorRoomId = roomCreateStateEvent?.getClearContent()?.toModel<RoomCreateContent>()?.predecessor?.roomId
+        executeRequest<Unit>(eventBus) {
+            apiCall = roomAPI.leave(roomId, mapOf("reason" to reason))
+        }
+        if (predecessorRoomId != null) {
+            leaveRoom(predecessorRoomId, reason)
         }
     }
 }