diff --git a/app/src/main/java/de/kuschku/quasseldroid/service/BacklogRequester.kt b/app/src/main/java/de/kuschku/quasseldroid/service/BacklogRequester.kt
index 7ee4ddaa96bb90e46b4b5c0ae890b51d6a205da1..d044c3e88d95adb3abaef15b504d205ae50c38cb 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/service/BacklogRequester.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/service/BacklogRequester.kt
@@ -32,7 +32,7 @@ class BacklogRequester(
 ) {
   fun loadMore(accountId: Long, buffer: BufferId, amount: Int, pageSize: Int,
                lastMessageId: MsgId? = null,
-               untilVisible: Boolean = false,
+               untilAllVisible: Boolean = false,
                finishCallback: () -> Unit) {
     var missing = amount
     viewModel.session.value?.orNull()?.backlogManager?.let {
@@ -43,14 +43,22 @@ class BacklogRequester(
         )?.messageId ?: -1,
         limit = amount
       ) {
-        if (untilVisible && it.isNotEmpty()) {
+        if (it.isNotEmpty()) {
           val filtered = database.filtered().get(accountId, buffer) ?: 0
           missing -= it.count {
             (it.type.value and filtered.inv()) != 0
           }
-          val messageId = it.map(Message::messageId).min()
-          if (missing > 0) {
-            loadMore(accountId, buffer, missing, pageSize, messageId, untilVisible, finishCallback)
+          val hasLoadedAll = missing == 0
+          val hasLoadedAny = missing < amount
+          if (untilAllVisible && !hasLoadedAll || !untilAllVisible && !hasLoadedAny) {
+            val messageId = it.map(Message::messageId).min()
+            loadMore(accountId,
+                     buffer,
+                     missing,
+                     pageSize,
+                     messageId,
+                     untilAllVisible,
+                     finishCallback)
           } else {
             finishCallback()
           }
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 7603078bf54ab0fcb28558158564b6aa014d1c78..d0e6f0ba8a7721ad8180013fe7bc8c1f7701f192 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
@@ -470,7 +470,7 @@ class MessageListFragment : ServiceBoundFragment() {
               pageSize = backlogSettings.pageSize,
               lastMessageId = lastMessageId
                               ?: database.message().findFirstByBufferId(bufferId)?.messageId ?: -1,
-              untilVisible = initial
+              untilAllVisible = initial
             ) {
               activity?.runOnUiThread {
                 swipeRefreshLayout.isRefreshing = false