diff --git a/persistence/src/main/java/de/kuschku/quasseldroid/persistence/dao/MessageDao.kt b/persistence/src/main/java/de/kuschku/quasseldroid/persistence/dao/MessageDao.kt
index a28e46b587873ee509f6f005fa2cc76ffd3d3243..5e4ec9dbe34b669105766825ee80208e81008e33 100644
--- a/persistence/src/main/java/de/kuschku/quasseldroid/persistence/dao/MessageDao.kt
+++ b/persistence/src/main/java/de/kuschku/quasseldroid/persistence/dao/MessageDao.kt
@@ -44,7 +44,7 @@ interface MessageDao {
   @Query("SELECT * FROM message WHERE bufferId = :bufferId ORDER BY messageId ASC")
   fun _findByBufferId(bufferId: BufferId_Type): List<MessageData>
 
-  @Query("SELECT * FROM message WHERE (bufferId = :bufferId AND type & ~ :type > 0 AND ignored = 0) OR (networkId = :networkId AND type & 2 > 0 AND ignored = 0 AND currentBufferId = :bufferId AND :showUserNotices != 0) OR (bufferId = :serverBufferId AND type & 2 > 0 AND ignored = 0 AND currentBufferId = :bufferId AND :showServerNotices != 0) OR (bufferId = :serverBufferId AND type & 4096 > 0 AND ignored = 0 AND currentBufferId = :bufferId AND :showErrors != 0) ORDER BY messageId DESC")
+  @Query("SELECT * FROM message WHERE (bufferId = :bufferId AND type & ~ :type > 0 AND ignored = 0) OR (networkId = :networkId AND type & 2 > 0 AND ignored = 0 AND currentBufferId = :bufferId AND currentBufferType = 4 AND :showUserNotices != 0) OR (bufferId = :serverBufferId AND type & 2 > 0 AND ignored = 0 AND currentBufferId = :bufferId AND currentBufferType = 1 AND :showServerNotices != 0) OR (bufferId = :serverBufferId AND type & 4096 > 0 AND ignored = 0 AND currentBufferId = :bufferId AND :showErrors != 0) ORDER BY messageId DESC")
   fun _findByBufferIdPaged(networkId: NetworkId_Type, serverBufferId: BufferId_Type,
                            bufferId: BufferId_Type, type: Int,
                            showUserNotices: Boolean, showServerNotices: Boolean,
@@ -59,7 +59,7 @@ interface MessageDao {
   @Query("SELECT messageId FROM message WHERE bufferId = :bufferId ORDER BY messageId ASC LIMIT 1")
   fun _firstMsgId(bufferId: BufferId_Type): Flowable<MsgId_Type>
 
-  @Query("SELECT messageId FROM message WHERE (bufferId = :bufferId AND type & ~ :type > 0 AND ignored = 0) OR (networkId = :networkId AND type & 2 > 0 AND ignored = 0 AND currentBufferId = :bufferId AND :showUserNotices != 0) OR (bufferId = :serverBufferId AND type & 2 > 0 AND ignored = 0 AND currentBufferId = :bufferId AND :showServerNotices != 0) OR (bufferId = :serverBufferId AND type & 4096 > 0 AND ignored = 0 AND currentBufferId = :bufferId AND :showErrors != 0) ORDER BY messageId ASC LIMIT 1")
+  @Query("SELECT messageId FROM message WHERE (bufferId = :bufferId AND type & ~ :type > 0 AND ignored = 0) OR (networkId = :networkId AND type & 2 > 0 AND ignored = 0 AND currentBufferId = :bufferId AND currentBufferType = 4 AND :showUserNotices != 0) OR (bufferId = :serverBufferId AND type & 2 > 0 AND ignored = 0 AND currentBufferId = :bufferId AND currentBufferType = 1 AND :showServerNotices != 0) OR (bufferId = :serverBufferId AND type & 4096 > 0 AND ignored = 0 AND currentBufferId = :bufferId AND :showErrors != 0) ORDER BY messageId ASC LIMIT 1")
   fun _firstVisibleMsgId(networkId: NetworkId_Type, serverBufferId: BufferId_Type,
                          bufferId: BufferId_Type, type: Int,
                          showUserNotices: Boolean, showServerNotices: Boolean,
@@ -68,7 +68,7 @@ interface MessageDao {
   @Query("SELECT * FROM message WHERE bufferId = :bufferId ORDER BY messageId ASC LIMIT 1")
   fun _findFirstByBufferId(bufferId: BufferId_Type): MessageData?
 
-  @Query("SELECT EXISTS(SELECT 1 FROM message WHERE (bufferId = :bufferId AND type & ~ :type > 0 AND ignored = 0) OR (networkId = :networkId AND type & 2 > 0 AND ignored = 0 AND currentBufferId = :bufferId AND :showUserNotices != 0) OR (bufferId = :serverBufferId AND type & 2 > 0 AND ignored = 0 AND currentBufferId = :bufferId AND :showServerNotices != 0) OR (bufferId = :serverBufferId AND type & 4096 > 0 AND ignored = 0 AND currentBufferId = :bufferId AND :showErrors != 0))")
+  @Query("SELECT EXISTS(SELECT 1 FROM message WHERE (bufferId = :bufferId AND type & ~ :type > 0 AND ignored = 0) OR (networkId = :networkId AND type & 2 > 0 AND ignored = 0 AND currentBufferId = :bufferId AND currentBufferType = 4 AND :showUserNotices != 0) OR (bufferId = :serverBufferId AND type & 2 > 0 AND ignored = 0 AND currentBufferId = :bufferId AND currentBufferType = 1 AND :showServerNotices != 0) OR (bufferId = :serverBufferId AND type & 4096 > 0 AND ignored = 0 AND currentBufferId = :bufferId AND :showErrors != 0))")
   fun _hasVisibleMessages(networkId: NetworkId_Type, serverBufferId: BufferId_Type,
                           bufferId: BufferId_Type, type: Int,
                           showUserNotices: Boolean, showServerNotices: Boolean,
diff --git a/persistence/src/main/java/de/kuschku/quasseldroid/persistence/db/QuasselDatabase.kt b/persistence/src/main/java/de/kuschku/quasseldroid/persistence/db/QuasselDatabase.kt
index 3fe069ad214377f9dc7aeb6adab6d0465cd43db6..1707b832f7bef202e30e29cc68c60bf4ec0b17d7 100644
--- a/persistence/src/main/java/de/kuschku/quasseldroid/persistence/db/QuasselDatabase.kt
+++ b/persistence/src/main/java/de/kuschku/quasseldroid/persistence/db/QuasselDatabase.kt
@@ -30,7 +30,7 @@ import de.kuschku.quasseldroid.persistence.models.*
 import de.kuschku.quasseldroid.persistence.util.MessageTypeConverter
 
 @Database(entities = [MessageData::class, Filtered::class, SslValidityWhitelistEntry::class, SslHostnameWhitelistEntry::class, NotificationData::class],
-          version = 20)
+          version = 21)
 @TypeConverters(MessageTypeConverter::class)
 abstract class QuasselDatabase : RoomDatabase() {
   abstract fun message(): MessageDao
@@ -164,6 +164,12 @@ abstract class QuasselDatabase : RoomDatabase() {
                   database.execSQL("CREATE INDEX index_message_currentBufferId ON message(currentBufferId);")
                   database.execSQL("CREATE INDEX index_message_networkId ON message(networkId);")
                 }
+              },
+              object : Migration(20, 21) {
+                override fun migrate(database: SupportSQLiteDatabase) {
+                  database.execSQL("ALTER TABLE message ADD currentBufferType INT DEFAULT 0 NOT NULL;")
+                  database.execSQL("CREATE INDEX index_message_currentBufferType ON message(currentBufferType);")
+                }
               }
             ).build()
           }
diff --git a/persistence/src/main/java/de/kuschku/quasseldroid/persistence/models/MessageData.kt b/persistence/src/main/java/de/kuschku/quasseldroid/persistence/models/MessageData.kt
index 292aacbb47906d54873cf32728d1ba49915a21e8..a4baf1ce2df1c062edcf60c3b79df827fd4b49e8 100644
--- a/persistence/src/main/java/de/kuschku/quasseldroid/persistence/models/MessageData.kt
+++ b/persistence/src/main/java/de/kuschku/quasseldroid/persistence/models/MessageData.kt
@@ -28,7 +28,14 @@ import de.kuschku.libquassel.protocol.*
 import org.threeten.bp.Instant
 import java.io.Serializable
 
-@Entity(tableName = "message", indices = [Index("bufferId"), Index("ignored"), Index("currentBufferId"), Index("networkId")])
+@Entity(tableName = "message",
+        indices = [
+          Index("bufferId"),
+          Index("ignored"),
+          Index("currentBufferId"),
+          Index("currentBufferType"),
+          Index("networkId")
+        ])
 data class MessageData(
   @PrimaryKey
   @ColumnInfo(name = "messageId")
@@ -40,6 +47,7 @@ data class MessageData(
   var rawBufferId: BufferId_Type,
   @ColumnInfo(name = "currentBufferId")
   var rawCurrentBufferId: BufferId_Type,
+  var currentBufferType: Buffer_Types,
   @ColumnInfo(name = "networkId")
   var rawNetworkId: NetworkId_Type,
   var sender: String,
@@ -65,6 +73,7 @@ data class MessageData(
       type: Message_Types,
       flag: Message_Flags,
       bufferId: BufferId,
+      currentBufferType: Buffer_Types,
       networkId: NetworkId,
       currentBufferId: BufferId,
       sender: String,
@@ -80,6 +89,7 @@ data class MessageData(
       flag,
       bufferId.id,
       currentBufferId.id,
+      currentBufferType,
       networkId.id,
       sender,
       senderPrefixes,
diff --git a/persistence/src/main/java/de/kuschku/quasseldroid/persistence/util/QuasselBacklogStorage.kt b/persistence/src/main/java/de/kuschku/quasseldroid/persistence/util/QuasselBacklogStorage.kt
index 63c22a89943f4a1de8dd93baa17bed5da685ee7b..3eb5e1b524128acb2c12eb74e9eeb311d3fc1e9b 100644
--- a/persistence/src/main/java/de/kuschku/quasseldroid/persistence/util/QuasselBacklogStorage.kt
+++ b/persistence/src/main/java/de/kuschku/quasseldroid/persistence/util/QuasselBacklogStorage.kt
@@ -20,13 +20,11 @@
 package de.kuschku.quasseldroid.persistence.util
 
 import de.kuschku.libquassel.protocol.BufferId
-import de.kuschku.libquassel.protocol.Buffer_Type
 import de.kuschku.libquassel.protocol.Message
 import de.kuschku.libquassel.protocol.NetworkId
 import de.kuschku.libquassel.quassel.syncables.IgnoreListManager
 import de.kuschku.libquassel.session.BacklogStorage
 import de.kuschku.libquassel.session.ISession
-import de.kuschku.libquassel.util.flag.hasFlag
 import de.kuschku.quasseldroid.persistence.db.QuasselDatabase
 import de.kuschku.quasseldroid.persistence.models.MessageData
 import io.reactivex.subjects.BehaviorSubject
@@ -55,10 +53,8 @@ class QuasselBacklogStorage(private val db: QuasselDatabase) : BacklogStorage {
         type = it.type,
         flag = it.flag,
         bufferId = it.bufferInfo.bufferId,
-        currentBufferId =
-        if (it.bufferInfo.type.hasFlag(Buffer_Type.QueryBuffer) ||
-            it.bufferInfo.type.hasFlag(Buffer_Type.StatusBuffer)) currentBuffer.value
-        else BufferId(0),
+        currentBufferId = currentBuffer.value,
+        currentBufferType = it.bufferInfo.type,
         networkId = it.bufferInfo.networkId,
         sender = it.sender,
         senderPrefixes = it.senderPrefixes,