diff --git a/build.gradle.kts b/build.gradle.kts
index 871c90a9adf5ea5cbc9fbf07e28043728ab66093..fe4a4e5c0934ad94d3deb2cfb6ba395ff74e1c1f 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -15,4 +15,4 @@ plugins {
 }
 
 group = "de.justjanne.libquassel"
-version = "0.9.0"
+version = "0.9.1"
diff --git a/libquassel-client/src/main/kotlin/de/justjanne/libquassel/client/syncables/ClientBacklogManager.kt b/libquassel-client/src/main/kotlin/de/justjanne/libquassel/client/syncables/ClientBacklogManager.kt
index 9bb894a681c1953015eb03e580d0008c07af06fe..3eafa658abedbecbad3e38ac3808969b62d5fc48 100644
--- a/libquassel-client/src/main/kotlin/de/justjanne/libquassel/client/syncables/ClientBacklogManager.kt
+++ b/libquassel-client/src/main/kotlin/de/justjanne/libquassel/client/syncables/ClientBacklogManager.kt
@@ -135,6 +135,29 @@ class ClientBacklogManager(
     super.receiveBacklogFiltered(bufferId, first, last, limit, additional, type, flags, messages)
   }
 
+  override fun receiveBacklogForward(
+    bufferId: BufferId,
+    first: MsgId,
+    last: MsgId,
+    limit: Int,
+    type: Int,
+    flags: Int,
+    messages: QVariantList
+  ) {
+    bufferForwardQueue.resume(
+      BacklogData.BufferForward(
+        bufferId,
+        first,
+        last,
+        limit,
+        MessageType.of(type.toUInt()),
+        MessageFlag.of(flags.toUInt())
+      ),
+      messages
+    )
+    super.receiveBacklogForward(bufferId, first, last, limit, type, flags, messages)
+  }
+
   override fun receiveBacklogAll(first: MsgId, last: MsgId, limit: Int, additional: Int, messages: QVariantList) {
     allQueue.resume(
       BacklogData.All(
diff --git a/libquassel-client/src/main/kotlin/de/justjanne/libquassel/client/util/CoroutineKeyedQueue.kt b/libquassel-client/src/main/kotlin/de/justjanne/libquassel/client/util/CoroutineKeyedQueue.kt
index ae4a2c99eff0389348e9148e1fba34617492e31d..62863cf4dc641e7545003bae1f0c4d3fe6477b36 100644
--- a/libquassel-client/src/main/kotlin/de/justjanne/libquassel/client/util/CoroutineKeyedQueue.kt
+++ b/libquassel-client/src/main/kotlin/de/justjanne/libquassel/client/util/CoroutineKeyedQueue.kt
@@ -9,6 +9,7 @@
 
 package de.justjanne.libquassel.client.util
 
+import org.slf4j.LoggerFactory
 import kotlin.coroutines.Continuation
 import kotlin.coroutines.resume
 import kotlin.coroutines.suspendCoroutine
@@ -22,7 +23,11 @@ class CoroutineKeyedQueue<Key, Value> {
   }
 
   fun resume(key: Key, value: Value) {
-    val continuations = waiting[key].orEmpty().distinct()
+    val queue = waiting[key]
+    if (queue == null) {
+      logger.warn("Trying to resume message with unknown key: $key")
+    }
+    val continuations = queue.orEmpty().distinct()
     for (continuation in continuations) {
       continuation.resume(value)
     }
@@ -30,4 +35,8 @@ class CoroutineKeyedQueue<Key, Value> {
       waiting[it]?.removeAll(continuations)
     }
   }
+
+  companion object {
+    private val logger = LoggerFactory.getLogger(CoroutineKeyedQueue::class.java)
+  }
 }
diff --git a/libquassel-client/src/test/kotlin/de/justjanne/libquassel/client/ClientTest.kt b/libquassel-client/src/test/kotlin/de/justjanne/libquassel/client/ClientTest.kt
index 21b4eaedf06d7c43e039c54e309cc85781f2f378..0d1f3c6e1725ae4e64cc8ff8301b4dc6c4353947 100644
--- a/libquassel-client/src/test/kotlin/de/justjanne/libquassel/client/ClientTest.kt
+++ b/libquassel-client/src/test/kotlin/de/justjanne/libquassel/client/ClientTest.kt
@@ -18,16 +18,21 @@ import de.justjanne.libquassel.protocol.connection.ProtocolVersion
 import de.justjanne.libquassel.protocol.exceptions.HandshakeException
 import de.justjanne.libquassel.protocol.features.FeatureSet
 import de.justjanne.libquassel.protocol.io.CoroutineChannel
+import de.justjanne.libquassel.protocol.models.ids.BufferId
+import de.justjanne.libquassel.protocol.models.ids.MsgId
 import de.justjanne.libquassel.protocol.session.CoreState
 import de.justjanne.testcontainersci.api.providedContainer
 import de.justjanne.testcontainersci.extension.CiContainers
 import kotlinx.coroutines.ExperimentalCoroutinesApi
 import kotlinx.coroutines.runBlocking
+import kotlinx.coroutines.withTimeout
 import org.junit.jupiter.api.Assertions.assertTrue
 import org.junit.jupiter.api.Test
 import org.junit.jupiter.api.assertThrows
 import java.net.InetSocketAddress
+import java.time.Duration
 import javax.net.ssl.SSLContext
+import kotlin.test.assertEquals
 
 @ExperimentalCoroutinesApi
 @CiContainers
@@ -36,8 +41,8 @@ class ClientTest {
     QuasselCoreContainer()
   }
 
-  private val username = "kuschku"
-  private val password = "goalielecturetrawl"
+  private val username = "AzureDiamond"
+  private val password = "hunter2"
 
   @Test
   fun testConnect(): Unit = runBlocking {
@@ -91,6 +96,20 @@ class ClientTest {
     }
     session.handshakeHandler.login(username, password)
     session.baseInitHandler.waitForInitDone()
+    withTimeout(Duration.ofSeconds(5).toMillis()) {
+      assertEquals(
+        emptyList(),
+        session.backlogManager.backlog(bufferId = BufferId(1), limit = 5)
+      )
+      assertEquals(
+        emptyList(),
+        session.backlogManager.backlogAll(limit = 5)
+      )
+      assertEquals(
+        emptyList(),
+        session.backlogManager.backlogForward(bufferId = BufferId(1), limit = 5)
+      )
+    }
     channel.close()
   }
 }