diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageListFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageListFragment.kt
index d0e6f0ba8a7721ad8180013fe7bc8c1f7701f192..35a0dd92deb9c20b66705cddd416ca7d16a0de54 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageListFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageListFragment.kt
@@ -325,8 +325,9 @@ class MessageListFragment : ServiceBoundFragment() {
       if (it?.orNull() == ConnectionState.CONNECTED) {
         runInBackgroundDelayed(16) {
           viewModel.buffer { bufferId ->
+            val filtered = database.filtered().get(accountId, bufferId)
             // Try loading messages when switching to isEmpty buffer
-            if (database.message().bufferSize(bufferId) == 0) {
+            if (!database.message().hasVisibleMessages(bufferId, filtered ?: 0)) {
               if (bufferId > 0 && bufferId != Int.MAX_VALUE) {
                 loadMore(initial = true)
               }
@@ -438,7 +439,8 @@ class MessageListFragment : ServiceBoundFragment() {
       bufferSyncer.requestSetMarkerLine(previous, lastMessageId)
     }
     // Try loading messages when switching to isEmpty buffer
-    if (database.message().bufferSize(current) == 0) {
+    val filtered = database.filtered().get(accountId, current)
+    if (!database.message().hasVisibleMessages(current, filtered ?: 0)) {
       if (current > 0 && current != Int.MAX_VALUE) {
         loadMore(initial = true)
       }
diff --git a/persistence/src/main/java/de/kuschku/quasseldroid/persistence/QuasselDatabase.kt b/persistence/src/main/java/de/kuschku/quasseldroid/persistence/QuasselDatabase.kt
index 7f4f76c227586200d0bae3330194154d2cd69810..7a6433b8a751ab6dea2a563d5cd520d4fba89993 100644
--- a/persistence/src/main/java/de/kuschku/quasseldroid/persistence/QuasselDatabase.kt
+++ b/persistence/src/main/java/de/kuschku/quasseldroid/persistence/QuasselDatabase.kt
@@ -111,6 +111,9 @@ abstract class QuasselDatabase : RoomDatabase() {
     @Query("SELECT * FROM message WHERE bufferId = :bufferId ORDER BY messageId ASC LIMIT 1")
     fun findFirstByBufferId(bufferId: Int): MessageData?
 
+    @Query("SELECT EXISTS(SELECT 1 FROM message WHERE bufferId = :bufferId AND type & ~ :type > 0 AND ignored = 0)")
+    fun hasVisibleMessages(bufferId: Int, type: Int): Boolean
+
     @Insert(onConflict = OnConflictStrategy.REPLACE)
     fun save(vararg entities: MessageData)