diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt
index d5be1e3fc90b9faaf0aa237ea5fbfcf9caceec8d..fb854582a8f4e5454d8c200e7e8911900373e727 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt
@@ -21,12 +21,14 @@ import butterknife.BindView
 import butterknife.ButterKnife
 import com.afollestad.materialdialogs.MaterialDialog
 import com.sothree.slidinguppanel.SlidingUpPanelLayout
+import de.kuschku.libquassel.protocol.Buffer_Type
 import de.kuschku.libquassel.protocol.Message
 import de.kuschku.libquassel.protocol.Message_Type
 import de.kuschku.libquassel.protocol.message.HandshakeMessage
 import de.kuschku.libquassel.quassel.syncables.interfaces.IAliasManager
 import de.kuschku.libquassel.session.ConnectionState
 import de.kuschku.libquassel.util.flag.and
+import de.kuschku.libquassel.util.flag.hasFlag
 import de.kuschku.libquassel.util.flag.or
 import de.kuschku.quasseldroid.Keys
 import de.kuschku.quasseldroid.R
@@ -46,6 +48,7 @@ import de.kuschku.quasseldroid.util.irc.format.IrcFormatDeserializer
 import de.kuschku.quasseldroid.util.service.ServiceBoundActivity
 import de.kuschku.quasseldroid.util.ui.MaterialContentLoadingProgressBar
 import de.kuschku.quasseldroid.viewmodel.data.AutoCompleteItem
+import de.kuschku.quasseldroid.viewmodel.data.BufferData
 import javax.inject.Inject
 
 class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenceChangeListener {
@@ -158,8 +161,8 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
       historyPanel.panelState = SlidingUpPanelLayout.PanelState.COLLAPSED
     }
     msgHistory.adapter = messageHistoryAdapter
-    viewModel.recentlySentMessages_liveData.observe(this,
-                                                    Observer(messageHistoryAdapter::submitList))
+    viewModel.recentlySentMessages_liveData
+      .observe(this, Observer(messageHistoryAdapter::submitList))
 
     setSupportActionBar(toolbar)
 
@@ -181,6 +184,21 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
       drawerToggle.syncState()
     }
 
+    drawerLayout.addDrawerListener(object : DrawerLayout.DrawerListener {
+      override fun onDrawerStateChanged(newState: Int) = Unit
+      override fun onDrawerSlide(drawerView: View, slideOffset: Float) {
+        actionMode?.finish()
+      }
+
+      override fun onDrawerClosed(drawerView: View) {
+        actionMode?.finish()
+      }
+
+      override fun onDrawerOpened(drawerView: View) {
+        actionMode?.finish()
+      }
+    })
+
     viewModel.errors.observe(this, Observer { error ->
       error?.let {
         when (it) {
@@ -262,7 +280,7 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
       }
     })
 
-    viewModel.connectionProgress_liveData.observe(this, Observer { it ->
+    viewModel.connectionProgress_liveData.observe(this, Observer {
       val (state, progress, max) = it ?: Triple(ConnectionState.DISCONNECTED, 0, 0)
       when (state) {
         ConnectionState.CONNECTED,
@@ -284,18 +302,38 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
       }
     })
 
+    viewModel.bufferData.distinctUntilChanged().toLiveData().observe(this, Observer {
+      bufferData = it
+      if (bufferData?.info?.type?.hasFlag(Buffer_Type.ChannelBuffer) == true) {
+        drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED, Gravity.END)
+      } else {
+        drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, Gravity.END)
+      }
+
+      invalidateOptionsMenu()
+    })
+
     editorPanel.addPanelSlideListener(panelSlideListener)
     editorPanel.panelState = SlidingUpPanelLayout.PanelState.COLLAPSED
   }
 
+  var bufferData: BufferData? = null
+  var actionMode: ActionMode? = null
+
   override fun onActionModeStarted(mode: ActionMode?) {
     when (mode?.tag) {
       "BUFFER",
       "MESSAGES" -> mode.menu?.retint(toolbar.context)
     }
+    actionMode = mode
     super.onActionModeStarted(mode)
   }
 
+  override fun onActionModeFinished(mode: ActionMode?) {
+    actionMode = null
+    super.onActionModeFinished(mode)
+  }
+
   override fun onStart() {
     if (Settings.autoComplete(this) != autoCompleteSettings) {
       recreate()
@@ -348,6 +386,9 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
 
   override fun onCreateOptionsMenu(menu: Menu?): Boolean {
     menuInflater.inflate(R.menu.activity_main, menu)
+    menu?.findItem(R.id.action_nicklist)?.isVisible = bufferData?.info?.type?.hasFlag(Buffer_Type.ChannelBuffer) ?: false
+    menu?.findItem(R.id.action_filter_messages)?.isVisible = bufferData != null
+    menu?.retint(toolbar.context)
     return super.onCreateOptionsMenu(menu)
   }
 
@@ -355,7 +396,14 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
     android.R.id.home           -> {
       drawerToggle.onOptionsItemSelected(item)
     }
-
+    R.id.action_nicklist        -> {
+      if (drawerLayout.isDrawerVisible(Gravity.END)) {
+        drawerLayout.closeDrawer(Gravity.END)
+      } else {
+        drawerLayout.openDrawer(Gravity.END)
+      }
+      true
+    }
     R.id.action_filter_messages -> {
       runInBackground {
         viewModel.buffer { buffer ->
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferViewConfigAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferViewConfigAdapter.kt
index df415e13a457c09baafa5a5cdc2f49ffd137d61f..8c425e2d0cc036b3484081983213ab42f8e69562 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferViewConfigAdapter.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferViewConfigAdapter.kt
@@ -1,8 +1,5 @@
 package de.kuschku.quasseldroid.ui.chat.buffers
 
-import android.arch.lifecycle.LifecycleOwner
-import android.arch.lifecycle.LiveData
-import android.arch.lifecycle.Observer
 import android.support.v7.widget.RecyclerView
 import android.support.v7.widget.ThemedSpinnerAdapter
 import android.view.LayoutInflater
@@ -16,22 +13,14 @@ import de.kuschku.quasseldroid.R
 import de.kuschku.quasseldroid.util.ui.ContextThemeWrapper
 import de.kuschku.quasseldroid.util.ui.RecyclerSpinnerAdapter
 
-class BufferViewConfigAdapter(
-  lifecycleOwner: LifecycleOwner,
-  liveData: LiveData<List<BufferViewConfig>?>
-) : RecyclerSpinnerAdapter<BufferViewConfigAdapter.BufferViewConfigViewHolder>(),
-    ThemedSpinnerAdapter {
-  val data = mutableListOf<BufferViewConfig>()
+class BufferViewConfigAdapter :
+  RecyclerSpinnerAdapter<BufferViewConfigAdapter.BufferViewConfigViewHolder>(),
+  ThemedSpinnerAdapter {
+  var data = emptyList<BufferViewConfig>()
 
-  init {
-    liveData.observe(
-      lifecycleOwner, Observer { list: List<BufferViewConfig>? ->
-      data.clear()
-      if (list != null) {
-        data.addAll(list)
-      }
-      notifyDataSetChanged()
-    })
+  fun submitList(list: List<BufferViewConfig>) {
+    data = list
+    notifyDataSetChanged()
   }
 
   override fun isEmpty() = data.isEmpty()
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 a568631db3821244daf3375d9288d6c447004bb1..f1c23c4ffb64792c0ff147d4715a74a65107415f 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
@@ -12,6 +12,7 @@ import de.kuschku.libquassel.protocol.BufferId
 import de.kuschku.libquassel.protocol.Buffer_Activity
 import de.kuschku.libquassel.protocol.Buffer_Type
 import de.kuschku.libquassel.protocol.Message_Type
+import de.kuschku.libquassel.quassel.syncables.BufferViewConfig
 import de.kuschku.libquassel.quassel.syncables.interfaces.INetwork
 import de.kuschku.libquassel.util.flag.hasFlag
 import de.kuschku.libquassel.util.flag.minus
@@ -20,6 +21,7 @@ import de.kuschku.quasseldroid.R
 import de.kuschku.quasseldroid.persistence.QuasselDatabase
 import de.kuschku.quasseldroid.settings.AppearanceSettings
 import de.kuschku.quasseldroid.settings.MessageSettings
+import de.kuschku.quasseldroid.util.helper.combineLatest
 import de.kuschku.quasseldroid.util.helper.map
 import de.kuschku.quasseldroid.util.helper.toLiveData
 import de.kuschku.quasseldroid.util.helper.zip
@@ -169,7 +171,14 @@ class BufferViewConfigFragment : ServiceBoundFragment() {
     val view = inflater.inflate(R.layout.fragment_chat_list, container, false)
     ButterKnife.bind(this, view)
 
-    val adapter = BufferViewConfigAdapter(this, viewModel.bufferViewConfigs.toLiveData())
+    val adapter = BufferViewConfigAdapter()
+    viewModel.bufferViewConfigs.switchMap {
+      combineLatest(it.map(BufferViewConfig::liveUpdates))
+    }.toLiveData().observe(this, Observer {
+      if (it != null) {
+        adapter.submitList(it)
+      }
+    })
 
     chatListSpinner.adapter = adapter
     chatListSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
diff --git a/app/src/main/res/drawable/ic_account_multiple.xml b/app/src/main/res/drawable/ic_account_multiple.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b08b58c33255019a9b1513186d23560211511be0
--- /dev/null
+++ b/app/src/main/res/drawable/ic_account_multiple.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+  android:width="24dp"
+  android:height="24dp"
+  android:viewportHeight="24"
+  android:viewportWidth="24">
+  <path
+    android:fillColor="#000"
+    android:pathData="M16,13C15.71,13 15.38,13 15.03,13.05C16.19,13.89 17,15 17,16.5V19H23V16.5C23,14.17 18.33,13 16,13M8,13C5.67,13 1,14.17 1,16.5V19H15V16.5C15,14.17 10.33,13 8,13M8,11A3,3 0 0,0 11,8A3,3 0 0,0 8,5A3,3 0 0,0 5,8A3,3 0 0,0 8,11M16,11A3,3 0 0,0 19,8A3,3 0 0,0 16,5A3,3 0 0,0 13,8A3,3 0 0,0 16,11Z" />
+</vector>
diff --git a/app/src/main/res/menu/activity_main.xml b/app/src/main/res/menu/activity_main.xml
index 31588b1be1945552498ef613bb364e58feaab064..04af1c3eb58c33092ee1903505475bf35df0ce86 100644
--- a/app/src/main/res/menu/activity_main.xml
+++ b/app/src/main/res/menu/activity_main.xml
@@ -1,5 +1,11 @@
 <?xml version="1.0" encoding="utf-8"?>
-<menu xmlns:android="http://schemas.android.com/apk/res/android">
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+  xmlns:app="http://schemas.android.com/apk/res-auto">
+  <item
+    android:id="@+id/action_nicklist"
+    android:icon="@drawable/ic_account_multiple"
+    android:title="@string/label_nicklist"
+    app:showAsAction="always" />
   <item
     android:id="@+id/action_filter_messages"
     android:title="@string/label_filter_messages" />
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index e8c655bd028ca66b8156a4840717df66f7d41871..503ddec9ac71cab2d29aeec3c1848e97b84c46ba 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -37,6 +37,7 @@
   <string name="label_new_identity">Identität hinzufügen</string>
   <string name="label_new_network">Netzwerk hinzufügen</string>
   <string name="label_new_nick">Spitzname hinzufügen</string>
+  <string name="label_nicklist">Benutzerliste</string>
   <string name="label_no">Nein</string>
   <string name="label_reset">Zurücksetzen</string>
   <string name="label_open">Öffnen</string>
@@ -59,4 +60,4 @@
   <string name="notification_channel_highlight_title">Erwähnungen</string>
 
   <string name="buffer_delete_confirmation">Bist du sicher, dass du diesen Chat auf ewig löschen möchtest?</string>
-</resources>
\ No newline at end of file
+</resources>
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 5ced578d3030333dcb91ca6b02d4b49d7a534484..64d745e20aa50d851ef333d34af19b001eeb504b 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -37,6 +37,7 @@
   <string name="label_new_identity">New Identity</string>
   <string name="label_new_network">New Network</string>
   <string name="label_new_nick">New Nick</string>
+  <string name="label_nicklist">Nick List</string>
   <string name="label_no">No</string>
   <string name="label_reset">Reset</string>
   <string name="label_open">Open</string>