diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/HandshakeMessage.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/HandshakeMessage.kt
index 87d7b956d518b45207f3fd7ee9d6f330a4af8c65..2f44ba18badc4039a84cf8bc209067ba64635f72 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/HandshakeMessage.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/models/HandshakeMessage.kt
@@ -11,6 +11,7 @@
 package de.justjanne.libquassel.protocol.models
 
 import de.justjanne.libquassel.protocol.features.FeatureSet
+import de.justjanne.libquassel.protocol.models.ids.NetworkId
 import de.justjanne.libquassel.protocol.variant.QVariantList
 import de.justjanne.libquassel.protocol.variant.QVariantMap
 
@@ -190,13 +191,13 @@ sealed class HandshakeMessage {
      * Buffers created or deleted after [SessionInit] will be defined via RPC
      * messages
      */
-    val bufferInfos: QVariantList?,
+    val bufferInfos: List<BufferInfo>,
     /**
      * List of Ids of Network sync objects existing at the current time.
      *
      * Network objects created or modified after [SessionInit] will be defined
      * via sync updates and RPC identity creation messages.
      */
-    val networkIds: QVariantList?
+    val networkIds: List<NetworkId>
   ) : HandshakeMessage()
 }
diff --git a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/SessionInitSerializer.kt b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/SessionInitSerializer.kt
index 109cd9f6c575cfac1bedf13561aec78e3c37185c..4e55b553eda2145d8d6a30395e687f1c556fc33c 100644
--- a/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/SessionInitSerializer.kt
+++ b/libquassel-protocol/src/main/kotlin/de/justjanne/libquassel/protocol/serializers/handshake/SessionInitSerializer.kt
@@ -10,9 +10,13 @@
 
 package de.justjanne.libquassel.protocol.serializers.handshake
 
+import de.justjanne.libquassel.protocol.models.BufferInfo
 import de.justjanne.libquassel.protocol.models.HandshakeMessage
+import de.justjanne.libquassel.protocol.models.ids.NetworkId
 import de.justjanne.libquassel.protocol.models.types.QtType
+import de.justjanne.libquassel.protocol.models.types.QuasselType
 import de.justjanne.libquassel.protocol.serializers.HandshakeSerializer
+import de.justjanne.libquassel.protocol.variant.QVariantList
 import de.justjanne.libquassel.protocol.variant.QVariantMap
 import de.justjanne.libquassel.protocol.variant.into
 import de.justjanne.libquassel.protocol.variant.qVariant
@@ -27,8 +31,18 @@ object SessionInitSerializer : HandshakeSerializer<HandshakeMessage.SessionInit>
     "MsgType" to qVariant(type, QtType.QString),
     "SessionState" to qVariant(
       mapOf(
-        "BufferInfos" to qVariant(data.bufferInfos, QtType.QVariantList),
-        "NetworkIds" to qVariant(data.networkIds, QtType.QVariantList),
+        "BufferInfos" to qVariant<QVariantList>(
+          data.bufferInfos.map {
+            qVariant(it, QuasselType.BufferInfo)
+          },
+          QtType.QVariantList
+        ),
+        "NetworkIds" to qVariant<QVariantList>(
+          data.networkIds.map {
+            qVariant(it, QuasselType.NetworkId)
+          },
+          QtType.QVariantList
+        ),
         "Identities" to qVariant(data.identities, QtType.QVariantList),
       ),
       QtType.QVariantMap
@@ -37,8 +51,12 @@ object SessionInitSerializer : HandshakeSerializer<HandshakeMessage.SessionInit>
 
   override fun deserialize(data: QVariantMap) = data["SessionState"].into<QVariantMap>().let {
     HandshakeMessage.SessionInit(
-      bufferInfos = it?.get("BufferInfos").into(),
-      networkIds = it?.get("NetworkIds").into(),
+      bufferInfos = it?.get("BufferInfos").into<QVariantList>()?.mapNotNull {
+        it.into<BufferInfo>()
+      }.orEmpty(),
+      networkIds = it?.get("NetworkIds").into<QVariantList>()?.mapNotNull {
+        it.into<NetworkId>()
+      }.orEmpty(),
       identities = it?.get("Identities").into(),
     )
   }