diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BufferSyncer.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BufferSyncer.kt
index 20279400ac28c09413083a3b2740b934f873ed6c..003897236a2dbac9b57e48622eaf6d08a9b9b1d0 100644
--- a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BufferSyncer.kt
+++ b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BufferSyncer.kt
@@ -4,12 +4,14 @@ import de.kuschku.libquassel.protocol.*
 import de.kuschku.libquassel.protocol.Type
 import de.kuschku.libquassel.quassel.BufferInfo
 import de.kuschku.libquassel.quassel.syncables.interfaces.IBufferSyncer
+import de.kuschku.libquassel.session.ISession
 import de.kuschku.libquassel.session.SignalProxy
 import io.reactivex.Observable
 import io.reactivex.subjects.BehaviorSubject
 
 class BufferSyncer constructor(
-  proxy: SignalProxy
+  proxy: SignalProxy,
+  private val session: ISession
 ) : SyncableObject(proxy, "BufferSyncer"), IBufferSyncer {
   fun lastSeenMsg(buffer: BufferId): MsgId = _lastSeenMsg[buffer] ?: 0
   fun liveLastSeenMsg(buffer: BufferId): Observable<MsgId>
@@ -39,6 +41,7 @@ class BufferSyncer constructor(
   fun liveBufferInfo(bufferId: BufferId)
     = live_bufferInfos.map { bufferInfo(bufferId) }.distinctUntilChanged()
 
+  fun bufferInfos(): Collection<BufferInfo> = _bufferInfos.values
   fun liveBufferInfos(): Observable<Map<BufferId, BufferInfo>> = live_bufferInfos
 
   override fun toVariantMap(): QVariantMap = mapOf(
@@ -158,9 +161,14 @@ class BufferSyncer constructor(
   }
 
   fun bufferInfoUpdated(info: BufferInfo) {
-    if (info != _bufferInfos[info.bufferId]) {
+    val oldInfo = _bufferInfos[info.bufferId]
+    if (info != oldInfo) {
       _bufferInfos[info.bufferId] = info
       live_bufferInfos.onNext(_bufferInfos)
+
+      if (oldInfo == null) {
+        session.bufferViewManager?.handleBuffer(info, this)
+      }
     }
   }
 
diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BufferViewConfig.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BufferViewConfig.kt
index e93ce16b35f621213de91cea17396b5ed5bba63c..d5781d6820e40f95a06d6b5f47e4a35480ac9b8b 100644
--- a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BufferViewConfig.kt
+++ b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BufferViewConfig.kt
@@ -3,13 +3,16 @@ package de.kuschku.libquassel.quassel.syncables
 import clamp
 import de.kuschku.libquassel.protocol.*
 import de.kuschku.libquassel.protocol.Type
+import de.kuschku.libquassel.quassel.BufferInfo
 import de.kuschku.libquassel.quassel.syncables.interfaces.IBufferViewConfig
+import de.kuschku.libquassel.session.ISession
 import de.kuschku.libquassel.session.SignalProxy
 import io.reactivex.subjects.BehaviorSubject
 
 class BufferViewConfig constructor(
   bufferViewId: Int,
-  proxy: SignalProxy
+  proxy: SignalProxy,
+  private val session: ISession
 ) : SyncableObject(proxy, "BufferViewConfig"), IBufferViewConfig {
   override fun init() {
     renameObject("$_bufferViewId")
@@ -26,6 +29,13 @@ class BufferViewConfig constructor(
     initSetRemovedBuffers(properties["RemovedBuffers"].valueOr(::emptyList))
     initSetTemporarilyRemovedBuffers(properties["TemporarilyRemovedBuffers"].valueOr(::emptyList))
     initSetProperties(properties)
+
+    val bufferSyncer = session.bufferSyncer
+    if (bufferSyncer != null) {
+      for (info in bufferSyncer.bufferInfos()) {
+        handleBuffer(info, bufferSyncer)
+      }
+    }
   }
 
   override fun initBufferList(): QVariantList = _buffers.map {
@@ -253,4 +263,19 @@ class BufferViewConfig constructor(
     override fun compare(a: BufferViewConfig?, b: BufferViewConfig?)
       = (a?.bufferViewName() ?: "").compareTo((b?.bufferViewName() ?: ""), true)
   }
+
+  fun handleBuffer(info: BufferInfo, bufferSyncer: BufferSyncer) {
+    if (_addNewBuffersAutomatically &&
+        !_buffers.contains(info.bufferId) &&
+        !_temporarilyRemovedBuffers.contains(info.bufferId) &&
+        !_removedBuffers.contains(info.bufferId)) {
+      val position = if (_sortAlphabetically) {
+        val sortedBuffers = _buffers.mapNotNull { bufferSyncer.bufferInfo(it)?.bufferName }
+        -sortedBuffers.binarySearch(info.bufferName)
+      } else {
+        _buffers.size
+      }
+      requestAddBuffer(info.bufferId, position)
+    }
+  }
 }
diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BufferViewManager.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BufferViewManager.kt
index 49f16ebbbed1c02013e77a7cc683e0da06f688bd..ee717379d914746423ac8f7b96db97b8a933ac77 100644
--- a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BufferViewManager.kt
+++ b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BufferViewManager.kt
@@ -1,13 +1,16 @@
 package de.kuschku.libquassel.quassel.syncables
 
 import de.kuschku.libquassel.protocol.*
+import de.kuschku.libquassel.quassel.BufferInfo
 import de.kuschku.libquassel.quassel.syncables.interfaces.IBufferViewManager
+import de.kuschku.libquassel.session.ISession
 import de.kuschku.libquassel.session.SignalProxy
 import io.reactivex.Observable
 import io.reactivex.subjects.BehaviorSubject
 
 class BufferViewManager constructor(
-  proxy: SignalProxy
+  proxy: SignalProxy,
+  private val session: ISession
 ) : SyncableObject(proxy, "BufferViewManager"), IBufferViewManager {
   override fun toVariantMap(): QVariantMap = mapOf(
     "BufferViewIds" to QVariant_(initBufferViewIds(), Type.QVariantList)
@@ -46,7 +49,7 @@ class BufferViewManager constructor(
     if (_bufferViewConfigs.contains(bufferViewConfigId))
       return
 
-    addBufferViewConfig(BufferViewConfig(bufferViewConfigId, proxy))
+    addBufferViewConfig(BufferViewConfig(bufferViewConfigId, proxy, session))
   }
 
   override fun deleteBufferViewConfig(bufferViewConfigId: Int) {
@@ -62,4 +65,10 @@ class BufferViewManager constructor(
 
   private val live_bufferViewConfigs: BehaviorSubject<Set<Int>>
     = BehaviorSubject.createDefault<Set<Int>>(emptySet())
+
+  fun handleBuffer(info: BufferInfo, bufferSyncer: BufferSyncer) {
+    for (bufferViewConfig in bufferViewConfigs()) {
+      bufferViewConfig.handleBuffer(info, bufferSyncer)
+    }
+  }
 }
diff --git a/lib/src/main/java/de/kuschku/libquassel/session/Session.kt b/lib/src/main/java/de/kuschku/libquassel/session/Session.kt
index 841d9d6bba84406f9f44fc0b12fef68fd3d2ae6f..7fc5c5e613edc090b9fc38fde54a414b6697949b 100644
--- a/lib/src/main/java/de/kuschku/libquassel/session/Session.kt
+++ b/lib/src/main/java/de/kuschku/libquassel/session/Session.kt
@@ -35,8 +35,8 @@ class Session(
 
   override val aliasManager = AliasManager(this)
   override val backlogManager = BacklogManager(this, backlogStorage)
-  override val bufferSyncer = BufferSyncer(this)
-  override val bufferViewManager = BufferViewManager(this)
+  override val bufferViewManager = BufferViewManager(this, this)
+  override val bufferSyncer = BufferSyncer(this, this)
   override val certManagers = mutableMapOf<IdentityId, CertManager>()
   override val coreInfo = CoreInfo(this)
   override val dccConfig = DccConfig(this)
@@ -76,17 +76,17 @@ class Session(
 
     f.networkIds?.forEach {
       val network = Network(it.value(-1), this)
-      networks.put(network.networkId(), network)
+      networks[network.networkId()] = network
     }
 
     f.identities?.forEach {
       val identity = Identity(this)
       identity.fromVariantMap(it.valueOr(::emptyMap))
       identity.initialized = true
-      identities.put(identity.id(), identity)
+      identities[identity.id()] = identity
 
       val certManager = CertManager(identity.id(), this)
-      certManagers.put(identity.id(), certManager)
+      certManagers[identity.id()] = certManager
     }
 
     isInitializing = true