diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferListAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferListAdapter.kt
index b8f769479381f1dd9ca6466fd0038923d45435d5..749a8669c7aa05574e2cd6c5054cc94c6af64426 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferListAdapter.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferListAdapter.kt
@@ -49,7 +49,7 @@ import io.reactivex.subjects.BehaviorSubject
 
 class BufferListAdapter(
   private val selectedBuffer: BehaviorSubject<BufferId>,
-  private val collapsedNetworks: BehaviorSubject<Set<NetworkId>>
+  private val expandedNetworks: BehaviorSubject<Map<NetworkId, Boolean>>
 ) : ListAdapter<BufferListItem, BufferListAdapter.BufferViewHolder>(
   object : DiffUtil.ItemCallback<BufferListItem>() {
     override fun areItemsTheSame(oldItem: BufferListItem, newItem: BufferListItem) =
@@ -80,11 +80,8 @@ class BufferListAdapter(
     this.updateFinishedListener?.invoke(list)
   }
 
-  fun expandListener(networkId: NetworkId) {
-    if (collapsedNetworks.value.orEmpty().contains(networkId))
-      collapsedNetworks.onNext(collapsedNetworks.value.orEmpty() - networkId)
-    else
-      collapsedNetworks.onNext(collapsedNetworks.value.orEmpty() + networkId)
+  fun expandListener(networkId: NetworkId, expand: Boolean) {
+    expandedNetworks.onNext(expandedNetworks.value.orEmpty() + Pair(networkId, expand))
   }
 
   fun toggleSelection(buffer: BufferId): Boolean {
@@ -143,7 +140,7 @@ class BufferListAdapter(
       itemView: View,
       private val clickListener: ((BufferId) -> Unit)? = null,
       private val longClickListener: ((BufferId) -> Unit)? = null,
-      private val expansionListener: ((NetworkId) -> Unit)? = null
+      private val expansionListener: ((NetworkId, Boolean) -> Unit)? = null
     ) : BufferViewHolder(itemView) {
       @BindView(R.id.status)
       lateinit var status: ImageView
@@ -159,6 +156,8 @@ class BufferListAdapter(
       private var message: Int = 0
       private var highlight: Int = 0
 
+      private var expanded: Boolean = false
+
       init {
         ButterKnife.bind(this, itemView)
         itemView.setOnClickListener {
@@ -180,7 +179,7 @@ class BufferListAdapter(
         status.setOnClickListener {
           val network = networkId
           if (network != null)
-            expansionListener?.invoke(network)
+            expansionListener?.invoke(network, !expanded)
         }
 
         itemView.context.theme.styledAttributes(
@@ -208,6 +207,8 @@ class BufferListAdapter(
           }
         )
 
+        this.expanded = state.networkExpanded
+
         itemView.isSelected = state.selected
 
         if (state.networkExpanded) {
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferViewConfigFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferViewConfigFragment.kt
index 814b968babe84c89511c65389c1ecd30d20dbdaf..da67e284a7ae5b2b0ef281af569bf03fff8cd06f 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferViewConfigFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferViewConfigFragment.kt
@@ -246,14 +246,14 @@ class BufferViewConfigFragment : ServiceBoundFragment() {
 
     listAdapter = BufferListAdapter(
       viewModel.selectedBufferId,
-      viewModel.collapsedNetworks
+      viewModel.expandedNetworks
     )
-    combineLatest(viewModel.bufferList, viewModel.collapsedNetworks, viewModel.selectedBuffer)
+    combineLatest(viewModel.bufferList, viewModel.expandedNetworks, viewModel.selectedBuffer)
       .toLiveData().zip(database.filtered().listen(accountId))
       .observe(this, Observer { it ->
         it?.let { (data, activityList) ->
           runInBackground {
-            val (info, collapsedNetworks, selected) = data
+            val (info, expandedNetworks, selected) = data
             val (config, list) = info ?: Pair(null, emptyList())
             val minimumActivity = config?.minimumActivity() ?: Buffer_Activity.NONE
             val activities = activityList.associate { it.bufferId to it.filtered }
@@ -282,7 +282,8 @@ class BufferViewConfigFragment : ServiceBoundFragment() {
                   )
                 ),
                 BufferState(
-                  networkExpanded = !collapsedNetworks.contains(props.network.networkId),
+                  networkExpanded = expandedNetworks[props.network.networkId]
+                                    ?: (props.networkConnectionState == INetwork.ConnectionState.Initialized),
                   selected = selected.info?.bufferId == props.info.bufferId
                 )
               )
diff --git a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/QuasselViewModel.kt b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/QuasselViewModel.kt
index 7c4dbf0a9cf9d8eba8e1791a30b3cb4e180e5986..d2681f79d8f449bc7a032494f6a06dc1ddc68928 100644
--- a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/QuasselViewModel.kt
+++ b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/QuasselViewModel.kt
@@ -261,7 +261,7 @@ class QuasselViewModel : ViewModel() {
   }
 
   val showHidden = BehaviorSubject.createDefault(false)
-  val collapsedNetworks = BehaviorSubject.createDefault(emptySet<NetworkId>())
+  val expandedNetworks = BehaviorSubject.createDefault(emptyMap<NetworkId, Boolean>())
   val selectedBufferId = BehaviorSubject.createDefault(Int.MAX_VALUE)
   val selectedBuffer = combineLatest(session, selectedBufferId, bufferViewConfig)
     .switchMap { (sessionOptional, buffer, bufferViewConfigOptional) ->