diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/handler/room/RoomSyncHandler.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/handler/room/RoomSyncHandler.kt
index 779d78f8c1..70fcca0a92 100644
--- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/handler/room/RoomSyncHandler.kt
+++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/handler/room/RoomSyncHandler.kt
@@ -129,8 +129,6 @@ internal class RoomSyncHandler @Inject constructor(private val readReceiptHandle
                 } else {
                     handlingStrategy.data.mapWithProgress(reporter, InitSyncStep.ImportingAccountJoinedRooms, 0.6f) {
                         handleJoinedRoom(realm, it.key, it.value, insertType, syncLocalTimeStampMillis, aggregator)
-                    }.also {
-                        fixStuckLocalEcho(it)
                     }
                 }
             }
@@ -428,6 +426,10 @@ internal class RoomSyncHandler @Inject constructor(private val readReceiptHandle
                 }
             }
         }
+
+        // Handle deletion of [stuck] local echos if needed
+         deleteLocalEchosIfNeeded(insertType, roomEntity, eventList)
+
         // posting new events to timeline if any is registered
         timelineInput.onNewTimelineEvents(roomId = roomId, eventIds = eventIds)
         return chunkEntity
@@ -513,17 +515,16 @@ internal class RoomSyncHandler @Inject constructor(private val readReceiptHandle
      * While we cannot know when a specific event arrived from the pagination (no transactionId included), after each room /sync
      * we clear all SENT events, and we are sure that we will receive it from /sync or pagination
      */
-    private fun fixStuckLocalEcho(rooms: List<RoomEntity>) {
-        // when there are not room events, there is no need to delete SENT messages
-        // this might be useful for events like typing etc
-        if (rooms.isNullOrEmpty()) return
-        rooms.forEach { roomEntity ->
-            roomEntity.sendingTimelineEvents.filter {  timelineEvent ->
-                timelineEvent.root?.sendState ==  SendState.SENT
-            }.forEach {
-                roomEntity.sendingTimelineEvents.remove(it)
-                it.deleteOnCascade(true)
-            }
+    private fun deleteLocalEchosIfNeeded(insertType: EventInsertType, roomEntity: RoomEntity, eventList: List<Event>) {
+        // Skip deletion if we are on initial sync
+        if(insertType == EventInsertType.INITIAL_SYNC) return
+        // Skip deletion if there are no timeline events or there is no event received from the current user
+        if(eventList.firstOrNull { it.senderId == userId } == null) return
+        roomEntity.sendingTimelineEvents.filter { timelineEvent ->
+            timelineEvent.root?.sendState == SendState.SENT
+        }.forEach {
+            roomEntity.sendingTimelineEvents.remove(it)
+            it.deleteOnCascade(true)
         }
     }
 }