diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/network/NetworkEditFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/network/NetworkEditFragment.kt
index 194e884e90ba6fb1db1192ffffc52e9e15931a43..c38836d1e50d932a107bf6c8c293c24153fd80a5 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/network/NetworkEditFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/network/NetworkEditFragment.kt
@@ -25,7 +25,7 @@ import de.kuschku.quasseldroid.util.ui.settings.fragment.Deletable
 class NetworkEditFragment : NetworkBaseFragment(false), Deletable {
   override fun onSave() = network?.let { (it, data) ->
     applyChanges(data)
-    it?.requestSetNetworkInfo(data.networkInfo())
+    it?.requestSetNetworkInfo(data.networkInfo().toVariantMap())
     true
   } ?: false
 
diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/Network.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/Network.kt
index 6368f37264851258e892ffc8e4f621507682102f..b6dfa02b7cbb6cc986a057e028a84296ae42a707 100644
--- a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/Network.kt
+++ b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/Network.kt
@@ -20,14 +20,12 @@
 package de.kuschku.libquassel.quassel.syncables
 
 import de.kuschku.libquassel.protocol.*
-import de.kuschku.libquassel.protocol.QtType
 import de.kuschku.libquassel.protocol.primitive.serializer.StringSerializer
 import de.kuschku.libquassel.quassel.syncables.interfaces.INetwork
 import de.kuschku.libquassel.quassel.syncables.interfaces.INetwork.*
 import de.kuschku.libquassel.session.SignalProxy
 import de.kuschku.libquassel.util.helper.getOr
 import de.kuschku.libquassel.util.helper.serializeString
-import de.kuschku.libquassel.util.helper.value
 import de.kuschku.libquassel.util.irc.HostmaskHelper
 import de.kuschku.libquassel.util.irc.IrcCaseMappers
 import io.reactivex.Observable
@@ -188,56 +186,57 @@ class Network constructor(
 
   fun liveNetworkInfo(): Observable<NetworkInfo> = live_networkInfo.map { networkInfo() }
 
-  override fun setNetworkInfo(info: NetworkInfo) {
+  override fun setNetworkInfo(info: QVariantMap) {
+    val networkInfo = NetworkInfo().apply { fromVariantMap(info) }
     // we don't set our ID!
-    if (info.networkName.isNotEmpty() && info.networkName != networkName())
-      setNetworkName(info.networkName)
-    if (info.identity.isValidId() && info.identity != identity())
-      setIdentity(info.identity)
-    if (info.codecForServer != codecForServer())
-      setCodecForServer(info.codecForServer)
-    if (info.codecForEncoding != codecForEncoding())
-      setCodecForEncoding(info.codecForEncoding)
-    if (info.codecForDecoding != codecForDecoding())
-      setCodecForDecoding(info.codecForDecoding)
+    if (networkInfo.networkName.isNotEmpty() && networkInfo.networkName != networkName())
+      setNetworkName(networkInfo.networkName)
+    if (networkInfo.identity.isValidId() && networkInfo.identity != identity())
+      setIdentity(networkInfo.identity)
+    if (networkInfo.codecForServer != codecForServer())
+      setCodecForServer(networkInfo.codecForServer)
+    if (networkInfo.codecForEncoding != codecForEncoding())
+      setCodecForEncoding(networkInfo.codecForEncoding)
+    if (networkInfo.codecForDecoding != codecForDecoding())
+      setCodecForDecoding(networkInfo.codecForDecoding)
     // FIXME compare components
-    if (info.serverList.isNotEmpty())
-      setServerList(info.serverList.map { QVariant.of(it.toVariantMap(), QuasselType.Network_Server) })
-    if (info.useRandomServer != useRandomServer())
-      setUseRandomServer(info.useRandomServer)
-    if (info.perform != perform())
-      setPerform(info.perform)
-    if (info.useAutoIdentify != useAutoIdentify())
-      setUseAutoIdentify(info.useAutoIdentify)
-    if (info.autoIdentifyService != autoIdentifyService())
-      setAutoIdentifyService(info.autoIdentifyService)
-    if (info.autoIdentifyPassword != autoIdentifyPassword())
-      setAutoIdentifyPassword(info.autoIdentifyPassword)
-    if (info.useSasl != useSasl())
-      setUseSasl(info.useSasl)
-    if (info.saslAccount != saslAccount())
-      setSaslAccount(info.saslAccount)
-    if (info.saslPassword != saslPassword())
-      setSaslPassword(info.saslPassword)
-    if (info.useAutoReconnect != useAutoReconnect())
-      setUseAutoReconnect(info.useAutoReconnect)
-    if (info.autoReconnectInterval != autoReconnectInterval())
-      setAutoReconnectInterval(info.autoReconnectInterval)
-    if (info.autoReconnectRetries != autoReconnectRetries())
-      setAutoReconnectRetries(info.autoReconnectRetries)
-    if (info.unlimitedReconnectRetries != unlimitedReconnectRetries())
-      setUnlimitedReconnectRetries(info.unlimitedReconnectRetries)
-    if (info.rejoinChannels != rejoinChannels())
-      setRejoinChannels(info.rejoinChannels)
+    if (networkInfo.serverList.isNotEmpty())
+      setServerList(networkInfo.serverList.map { QVariant.of(it.toVariantMap(), QuasselType.Network_Server) })
+    if (networkInfo.useRandomServer != useRandomServer())
+      setUseRandomServer(networkInfo.useRandomServer)
+    if (networkInfo.perform != perform())
+      setPerform(networkInfo.perform)
+    if (networkInfo.useAutoIdentify != useAutoIdentify())
+      setUseAutoIdentify(networkInfo.useAutoIdentify)
+    if (networkInfo.autoIdentifyService != autoIdentifyService())
+      setAutoIdentifyService(networkInfo.autoIdentifyService)
+    if (networkInfo.autoIdentifyPassword != autoIdentifyPassword())
+      setAutoIdentifyPassword(networkInfo.autoIdentifyPassword)
+    if (networkInfo.useSasl != useSasl())
+      setUseSasl(networkInfo.useSasl)
+    if (networkInfo.saslAccount != saslAccount())
+      setSaslAccount(networkInfo.saslAccount)
+    if (networkInfo.saslPassword != saslPassword())
+      setSaslPassword(networkInfo.saslPassword)
+    if (networkInfo.useAutoReconnect != useAutoReconnect())
+      setUseAutoReconnect(networkInfo.useAutoReconnect)
+    if (networkInfo.autoReconnectInterval != autoReconnectInterval())
+      setAutoReconnectInterval(networkInfo.autoReconnectInterval)
+    if (networkInfo.autoReconnectRetries != autoReconnectRetries())
+      setAutoReconnectRetries(networkInfo.autoReconnectRetries)
+    if (networkInfo.unlimitedReconnectRetries != unlimitedReconnectRetries())
+      setUnlimitedReconnectRetries(networkInfo.unlimitedReconnectRetries)
+    if (networkInfo.rejoinChannels != rejoinChannels())
+      setRejoinChannels(networkInfo.rejoinChannels)
     // Custom rate limiting
-    if (info.useCustomMessageRate != useCustomMessageRate())
-      setUseCustomMessageRate(info.useCustomMessageRate)
-    if (info.messageRateBurstSize != messageRateBurstSize())
-      setMessageRateBurstSize(info.messageRateBurstSize)
-    if (info.messageRateDelay != messageRateDelay())
-      setMessageRateDelay(info.messageRateDelay)
-    if (info.unlimitedMessageRate != unlimitedMessageRate())
-      setUnlimitedMessageRate(info.unlimitedMessageRate)
+    if (networkInfo.useCustomMessageRate != useCustomMessageRate())
+      setUseCustomMessageRate(networkInfo.useCustomMessageRate)
+    if (networkInfo.messageRateBurstSize != messageRateBurstSize())
+      setMessageRateBurstSize(networkInfo.messageRateBurstSize)
+    if (networkInfo.messageRateDelay != messageRateDelay())
+      setMessageRateDelay(networkInfo.messageRateDelay)
+    if (networkInfo.unlimitedMessageRate != unlimitedMessageRate())
+      setUnlimitedMessageRate(networkInfo.unlimitedMessageRate)
   }
 
   fun prefixes(): List<Char> {
diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/interfaces/INetwork.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/interfaces/INetwork.kt
index ee24a0213adae4e962f307cd5f9c6b7076ed7ac9..4b967d3b52d60472af5d3e5ad27bd08862031c74 100644
--- a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/interfaces/INetwork.kt
+++ b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/interfaces/INetwork.kt
@@ -411,7 +411,7 @@ interface INetwork : ISyncableObject {
   }
 
   @SyncedCall(target = ProtocolSide.CORE)
-  fun requestSetNetworkInfo(info: NetworkInfo) {
+  fun requestSetNetworkInfo(info: QVariantMap) {
     sync(
       target = ProtocolSide.CORE,
       "requestSetNetworkInfo",
@@ -420,7 +420,7 @@ interface INetwork : ISyncableObject {
   }
 
   @SyncedCall(target = ProtocolSide.CLIENT)
-  fun setNetworkInfo(info: NetworkInfo) {
+  fun setNetworkInfo(info: QVariantMap) {
     sync(
       target = ProtocolSide.CLIENT,
       "setNetworkInfo",