diff --git a/changelog.d/8168.bugfix b/changelog.d/8168.bugfix
new file mode 100644
index 0000000000..39baa3f60a
--- /dev/null
+++ b/changelog.d/8168.bugfix
@@ -0,0 +1 @@
+Fix timeline loading a wrong room on permalink if a matching event id is found in a different room
diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/helper/ThreadEventsHelper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/helper/ThreadEventsHelper.kt
index 7999a2ea14..a100741452 100644
--- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/helper/ThreadEventsHelper.kt
+++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/helper/ThreadEventsHelper.kt
@@ -297,7 +297,7 @@ internal fun updateThreadNotifications(roomId: String, realm: Realm, currentUser
     val readReceipt = findMyReadReceipt(realm, roomId, currentUserId, threadId = rootThreadEventId) ?: return
 
     val readReceiptChunk = ChunkEntity
-            .findIncludingEvent(realm, readReceipt) ?: return
+            .findIncludingEvent(realm, roomId, readReceipt) ?: return
 
     val readReceiptChunkThreadEvents = readReceiptChunk
             .timelineEvents
diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/ChunkEntityQueries.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/ChunkEntityQueries.kt
index 1e5d96b496..08c8bcf86e 100644
--- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/ChunkEntityQueries.kt
+++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/ChunkEntityQueries.kt
@@ -72,15 +72,16 @@ internal fun ChunkEntity.Companion.findEventInThreadChunk(realm: Realm, roomId:
             .findFirst()
 }
 
-internal fun ChunkEntity.Companion.findAllIncludingEvents(realm: Realm, eventIds: List<String>): RealmResults<ChunkEntity> {
+internal fun ChunkEntity.Companion.findAllIncludingEvents(realm: Realm, roomId: String, eventIds: List<String>): RealmResults<ChunkEntity> {
     return realm.where<ChunkEntity>()
+            .equalTo(ChunkEntityFields.ROOM.ROOM_ID, roomId)
             .`in`(ChunkEntityFields.TIMELINE_EVENTS.EVENT_ID, eventIds.toTypedArray())
             .isNull(ChunkEntityFields.ROOT_THREAD_EVENT_ID)
             .findAll()
 }
 
-internal fun ChunkEntity.Companion.findIncludingEvent(realm: Realm, eventId: String): ChunkEntity? {
-    return findAllIncludingEvents(realm, listOf(eventId)).firstOrNull()
+internal fun ChunkEntity.Companion.findIncludingEvent(realm: Realm, roomId: String, eventId: String): ChunkEntity? {
+    return findAllIncludingEvents(realm, roomId, listOf(eventId)).firstOrNull()
 }
 
 internal fun ChunkEntity.Companion.create(
diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/ReadQueries.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/ReadQueries.kt
index ebfe23105e..0cc4abcb3d 100644
--- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/ReadQueries.kt
+++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/ReadQueries.kt
@@ -76,11 +76,11 @@ private fun hasReadMissingEvent(realm: Realm,
                                 userId: String,
                                 eventId: String,
                                 threadId: String? = ReadService.THREAD_ID_MAIN): Boolean {
-    return realm.doesEventExistInChunkHistory(eventId) && realm.hasReadReceiptInLatestChunk(latestChunkEntity, roomId, userId, threadId)
+    return realm.doesEventExistInChunkHistory(roomId, eventId) && realm.hasReadReceiptInLatestChunk(latestChunkEntity, roomId, userId, threadId)
 }
 
-private fun Realm.doesEventExistInChunkHistory(eventId: String): Boolean {
-    return ChunkEntity.findIncludingEvent(this, eventId) != null
+private fun Realm.doesEventExistInChunkHistory(roomId: String, eventId: String): Boolean {
+    return ChunkEntity.findIncludingEvent(this, roomId, eventId) != null
 }
 
 private fun Realm.hasReadReceiptInLatestChunk(latestChunkEntity: ChunkEntity, roomId: String, userId: String, threadId: String?): Boolean {
diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/FetchTokenAndPaginateTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/FetchTokenAndPaginateTask.kt
index 9d8d8ecbf1..b73dd8160b 100644
--- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/FetchTokenAndPaginateTask.kt
+++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/FetchTokenAndPaginateTask.kt
@@ -59,7 +59,7 @@ internal class DefaultFetchTokenAndPaginateTask @Inject constructor(
                 ?: throw IllegalStateException("No token found")
 
         monarchy.awaitTransaction { realm ->
-            val chunkToUpdate = ChunkEntity.findIncludingEvent(realm, params.lastKnownEventId)
+            val chunkToUpdate = ChunkEntity.findIncludingEvent(realm, params.roomId, params.lastKnownEventId)
             if (params.direction == PaginationDirection.FORWARDS) {
                 chunkToUpdate?.nextToken = fromToken
             } else {
diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/LoadTimelineStrategy.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/LoadTimelineStrategy.kt
index 6654eeadfc..2143ac1d21 100644
--- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/LoadTimelineStrategy.kt
+++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/LoadTimelineStrategy.kt
@@ -278,7 +278,7 @@ internal class LoadTimelineStrategy constructor(
                         .findAll()
             }
             is Mode.Permalink -> {
-                ChunkEntity.findAllIncludingEvents(realm, listOf(mode.originEventId))
+                ChunkEntity.findAllIncludingEvents(realm, roomId, listOf(mode.originEventId))
             }
             is Mode.Thread -> {
                 recreateThreadChunkEntity(realm, mode.rootThreadEventId)