diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index bfad590948ce88b1e9715975f72f688445555c9d..6caf75e7f77c9e3ad86e476abf2ca0055e9dc563 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -79,7 +79,6 @@
 
     <!-- Info -->
 
-
     <activity
       android:name="de.kuschku.quasseldroid.ui.info.user.UserInfoActivity"
       android:exported="false"
diff --git a/app/src/main/java/de/kuschku/quasseldroid/service/QuasselNotificationBackend.kt b/app/src/main/java/de/kuschku/quasseldroid/service/QuasselNotificationBackend.kt
index c5876e6bac5338c70cec8665404f4080336216bc..6818bdf08555b36fe7bfb1e94bce44f3632ee8e5 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/service/QuasselNotificationBackend.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/service/QuasselNotificationBackend.kt
@@ -54,7 +54,7 @@ import de.kuschku.quasseldroid.util.helper.letIf
 import de.kuschku.quasseldroid.util.helper.loadWithFallbacks
 import de.kuschku.quasseldroid.util.helper.styledAttributes
 import de.kuschku.quasseldroid.util.irc.format.ContentFormatter
-import de.kuschku.quasseldroid.util.ui.TextDrawable
+import de.kuschku.quasseldroid.util.ui.drawable.TextDrawable
 import de.kuschku.quasseldroid.viewmodel.EditorViewModel
 import org.threeten.bp.Instant
 import java.util.concurrent.Executors
diff --git a/app/src/main/java/de/kuschku/quasseldroid/settings/NotificationSettings.kt b/app/src/main/java/de/kuschku/quasseldroid/settings/NotificationSettings.kt
index 8f73a0f2666b534a6799e63f35e23626034b6526..d033f816f94fb75d3fd604d9ab9166ae07c88def 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/settings/NotificationSettings.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/settings/NotificationSettings.kt
@@ -27,7 +27,8 @@ data class NotificationSettings(
   val vibrate: Boolean = true,
   val light: Boolean = true,
   val markReadOnSwipe: Boolean = true,
-  val networkNameInNotificationTitle: Boolean = false
+  val networkNameInNotificationTitle: Boolean = false,
+  val showAllActivitiesInToolbar: Boolean = false
 ) {
   enum class Level {
     ALL,
diff --git a/app/src/main/java/de/kuschku/quasseldroid/settings/Settings.kt b/app/src/main/java/de/kuschku/quasseldroid/settings/Settings.kt
index 638755126445e04f7fda070312557f4a2e73e46e..90b4d170109ebd737fb2938452a8e1a0e296940e 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/settings/Settings.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/settings/Settings.kt
@@ -175,6 +175,10 @@ object Settings {
       networkNameInNotificationTitle = getBoolean(
         context.getString(R.string.preference_notification_network_name_in_notification_title_key),
         NotificationSettings.DEFAULT.networkNameInNotificationTitle
+      ),
+      showAllActivitiesInToolbar = getBoolean(
+        context.getString(R.string.preference_notification_show_all_activities_in_toolbar_key),
+        NotificationSettings.DEFAULT.showAllActivitiesInToolbar
       )
     )
   }
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 61c4db0e197f26a3d0115ff12aa1552c4f553c60..ddd522db5a81e9927ac4fd8074769653964edf82 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
@@ -58,6 +58,7 @@ import de.kuschku.libquassel.session.ISession
 import de.kuschku.libquassel.util.Optional
 import de.kuschku.libquassel.util.flag.and
 import de.kuschku.libquassel.util.flag.hasFlag
+import de.kuschku.libquassel.util.flag.minus
 import de.kuschku.libquassel.util.flag.or
 import de.kuschku.libquassel.util.helpers.nullIf
 import de.kuschku.libquassel.util.helpers.value
@@ -74,6 +75,7 @@ import de.kuschku.quasseldroid.persistence.models.SslHostnameWhitelistEntry
 import de.kuschku.quasseldroid.persistence.models.SslValidityWhitelistEntry
 import de.kuschku.quasseldroid.settings.AutoCompleteSettings
 import de.kuschku.quasseldroid.settings.MessageSettings
+import de.kuschku.quasseldroid.settings.NotificationSettings
 import de.kuschku.quasseldroid.settings.Settings
 import de.kuschku.quasseldroid.ui.chat.input.AutoCompleteAdapter
 import de.kuschku.quasseldroid.ui.chat.input.ChatlineFragment
@@ -92,9 +94,10 @@ import de.kuschku.quasseldroid.util.missingfeatures.MissingFeaturesDialog
 import de.kuschku.quasseldroid.util.missingfeatures.RequiredFeatures
 import de.kuschku.quasseldroid.util.service.ServiceBoundActivity
 import de.kuschku.quasseldroid.util.ui.DragInterceptBottomSheetBehavior
-import de.kuschku.quasseldroid.util.ui.MaterialContentLoadingProgressBar
-import de.kuschku.quasseldroid.util.ui.NickCountDrawable
-import de.kuschku.quasseldroid.util.ui.WarningBarView
+import de.kuschku.quasseldroid.util.ui.drawable.DrawerToggleActivityDrawable
+import de.kuschku.quasseldroid.util.ui.drawable.NickCountDrawable
+import de.kuschku.quasseldroid.util.ui.view.MaterialContentLoadingProgressBar
+import de.kuschku.quasseldroid.util.ui.view.WarningBarView
 import de.kuschku.quasseldroid.viewmodel.data.BufferData
 import io.reactivex.BackpressureStrategy
 import org.threeten.bp.Instant
@@ -135,6 +138,9 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
   @Inject
   lateinit var messageSettings: MessageSettings
 
+  @Inject
+  lateinit var notificationSettings: NotificationSettings
+
   @Inject
   lateinit var ircFormatDeserializer: IrcFormatDeserializer
 
@@ -296,6 +302,84 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
       }
     })
 
+    val maxBufferActivity = combineLatest(
+      viewModel.bufferList,
+      database.filtered().listenRx(accountId).toObservable().map {
+        it.associateBy(Filtered::bufferId, Filtered::filtered)
+      },
+      accountDatabase.accounts().listenDefaultFiltered(accountId, 0).toObservable()
+    ).map { (info, filteredList, defaultFiltered) ->
+      val (config, bufferList) = info
+
+      val minimumActivity = config?.minimumActivity()?.enabledValues()?.max()
+                            ?: Buffer_Activity.NoActivity
+
+      val maxActivity = bufferList.asSequence().map { props ->
+        val activity = props.activity - Message_Type.of(filteredList[props.info.bufferId]?.toUInt()
+                                                        ?: defaultFiltered?.toUInt()
+                                                        ?: 0u)
+        when {
+          props.highlights > 0                  -> Buffer_Activity.Highlight
+          activity.hasFlag(Message_Type.Plain) ||
+          activity.hasFlag(Message_Type.Notice) ||
+          activity.hasFlag(Message_Type.Action) -> Buffer_Activity.NewMessage
+          activity.isNotEmpty()                 -> Buffer_Activity.OtherActivity
+          else                                  -> Buffer_Activity.NoActivity
+        }
+      }.max() ?: Buffer_Activity.NoActivity
+
+      val hasNotifications = bufferList.any { props ->
+        val activity = props.activity - Message_Type.of(filteredList[props.info.bufferId]?.toUInt()
+                                                        ?: defaultFiltered?.toUInt()
+                                                        ?: 0u)
+        when {
+          props.info.type hasFlag Buffer_Type.QueryBuffer   ->
+            activity.hasFlag(Message_Type.Plain) ||
+            activity.hasFlag(Message_Type.Notice) ||
+            activity.hasFlag(Message_Type.Action)
+          props.info.type hasFlag Buffer_Type.ChannelBuffer ->
+            props.highlights > 0
+          else                                              -> false
+        }
+      }
+
+      Pair(
+        if (maxActivity < minimumActivity) Buffer_Activity.NoActivity
+        else maxActivity,
+        hasNotifications
+      )
+    }
+
+    supportActionBar?.apply {
+      val toggleDefault = DrawerToggleActivityDrawable(themedContext, 0)
+      val toggleOtherActivity = DrawerToggleActivityDrawable(themedContext,
+                                                             R.attr.colorTintActivity)
+      val toggleNewMessage = DrawerToggleActivityDrawable(themedContext, R.attr.colorTintMessage)
+      val toggleHighlight = DrawerToggleActivityDrawable(themedContext, R.attr.colorTintHighlight)
+      val toggleNotification = DrawerToggleActivityDrawable(themedContext,
+                                                            R.attr.colorTintNotification)
+      maxBufferActivity.toLiveData().observe(this@ChatActivity,
+                                             Observer { (activity, hasNotifications) ->
+        setHomeAsUpIndicator(
+          when {
+            notificationSettings.showAllActivitiesInToolbar &&
+            activity == Buffer_Activity.Highlight     ->
+              toggleHighlight
+            notificationSettings.showAllActivitiesInToolbar &&
+            activity == Buffer_Activity.NewMessage    ->
+              toggleNewMessage
+            notificationSettings.showAllActivitiesInToolbar &&
+            activity == Buffer_Activity.OtherActivity ->
+              toggleOtherActivity
+            hasNotifications                          ->
+              toggleNotification
+            else                                      ->
+              toggleDefault
+          }
+        )
+      })
+    }
+
     if (autoCompleteSettings.prefix || autoCompleteSettings.auto) {
       val autoCompleteBottomSheet = BottomSheetBehavior.from(autoCompleteList)
       chatlineFragment?.let {
@@ -780,6 +864,9 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
     if (Settings.message(this) != messageSettings) {
       recreate()
     }
+    if (Settings.notification(this) != notificationSettings) {
+      recreate()
+    }
     super.onStart()
   }
 
@@ -825,9 +912,10 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
       (bufferData?.info?.type?.hasFlag(Buffer_Type.ChannelBuffer) ?: false ||
        bufferData?.info?.type?.hasFlag(Buffer_Type.QueryBuffer) ?: false)
     menu?.retint(toolbar.context)
-    menu?.findItem(R.id.action_nicklist)?.icon = NickCountDrawable(bufferData?.userCount ?: 0,
-                                                                   nickCountDrawableSize,
-                                                                   nickCountDrawableColor)
+    menu?.findItem(R.id.action_nicklist)?.icon = NickCountDrawable(
+      bufferData?.userCount ?: 0,
+      nickCountDrawableSize,
+      nickCountDrawableColor)
     return super.onCreateOptionsMenu(menu)
   }
 
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 80ebec8a88cc5892b5e10b1fb9c5e9b04294a687..2acc5cbca503d97d84f187c0d17d7fa8c9a41fd0 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
@@ -63,7 +63,7 @@ import de.kuschku.quasseldroid.util.avatars.AvatarHelper
 import de.kuschku.quasseldroid.util.helper.*
 import de.kuschku.quasseldroid.util.irc.format.IrcFormatDeserializer
 import de.kuschku.quasseldroid.util.service.ServiceBoundFragment
-import de.kuschku.quasseldroid.util.ui.WarningBarView
+import de.kuschku.quasseldroid.util.ui.view.WarningBarView
 import de.kuschku.quasseldroid.viewmodel.data.BufferHiddenState
 import de.kuschku.quasseldroid.viewmodel.data.BufferListItem
 import de.kuschku.quasseldroid.viewmodel.data.BufferState
@@ -317,24 +317,22 @@ class BufferViewConfigFragment : ServiceBoundFragment() {
 
     combineLatest(viewModel.bufferList,
                   viewModel.expandedNetworks,
-                  viewModel.selectedBuffer).toLiveData().switchMapNotNull { a ->
-      database.filtered().listen(accountId).zip(accountDatabase.accounts().listen(accountId)).map { (b, c) ->
-        Triple(a, b, c)
-      }
-    }.observe(this, Observer { it ->
-      it?.let { (data, activityList, account) ->
+                  viewModel.selectedBuffer,
+                  database.filtered().listenRx(accountId).toObservable(),
+                  accountDatabase.accounts().listenDefaultFiltered(accountId, 0).toObservable()
+    ).toLiveData().observe(this, Observer { it ->
+      it?.let { (info, expandedNetworks, selected, filteredList, defaultFiltered) ->
         runInBackground {
-          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.toUInt() }
+          val activities = filteredList.associate { it.bufferId to it.filtered.toUInt() }
           val processedList = list.asSequence().sortedBy { props ->
             !props.info.type.hasFlag(Buffer_Type.StatusBuffer)
           }.sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER) { props ->
             props.network.networkName
           }).map { props ->
             val activity = props.activity - (activities[props.info.bufferId]
-                                             ?: account?.defaultFiltered?.toUInt()
+                                             ?: defaultFiltered?.toUInt()
                                              ?: 0u)
             BufferListItem(
               props.copy(
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/CoreSettingsFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/CoreSettingsFragment.kt
index 33ce7072662fae0fbc9b844f9d40feac8debfa7a..d1c2c46abaeab3963193de3dc46965ddf35d0430 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/CoreSettingsFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/CoreSettingsFragment.kt
@@ -56,7 +56,7 @@ import de.kuschku.quasseldroid.util.missingfeatures.MissingFeature
 import de.kuschku.quasseldroid.util.missingfeatures.MissingFeaturesDialog
 import de.kuschku.quasseldroid.util.missingfeatures.RequiredFeatures
 import de.kuschku.quasseldroid.util.service.ServiceBoundFragment
-import de.kuschku.quasseldroid.util.ui.BannerView
+import de.kuschku.quasseldroid.util.ui.view.BannerView
 import io.reactivex.Observable
 
 class CoreSettingsFragment : ServiceBoundFragment() {
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/highlightlist/HighlightListFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/highlightlist/HighlightListFragment.kt
index a7e1d76464a6aa9c07a0219f44eefabf379e1708..eb777d056abaf7f991ccf389c2f69ca50052d452 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/highlightlist/HighlightListFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/highlightlist/HighlightListFragment.kt
@@ -42,10 +42,10 @@ import de.kuschku.libquassel.util.Optional
 import de.kuschku.quasseldroid.R
 import de.kuschku.quasseldroid.ui.coresettings.highlightrule.HighlightRuleActivity
 import de.kuschku.quasseldroid.util.helper.toLiveData
-import de.kuschku.quasseldroid.util.ui.WarningBarView
 import de.kuschku.quasseldroid.util.ui.settings.fragment.Changeable
 import de.kuschku.quasseldroid.util.ui.settings.fragment.Savable
 import de.kuschku.quasseldroid.util.ui.settings.fragment.ServiceBoundSettingsFragment
+import de.kuschku.quasseldroid.util.ui.view.WarningBarView
 
 class HighlightListFragment : ServiceBoundSettingsFragment(), Savable, Changeable {
   @BindView(R.id.feature_context_coresidehighlights)
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/info/channellist/ChannelListFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/info/channellist/ChannelListFragment.kt
index b8e1baf97223bed9604ab9812692768d0177f6d3..5ceb32c8f8f2d4cb1286896a2248012a8e969cfc 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/info/channellist/ChannelListFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/info/channellist/ChannelListFragment.kt
@@ -40,9 +40,9 @@ import de.kuschku.quasseldroid.R
 import de.kuschku.quasseldroid.util.helper.combineLatest
 import de.kuschku.quasseldroid.util.helper.retint
 import de.kuschku.quasseldroid.util.helper.toLiveData
-import de.kuschku.quasseldroid.util.ui.MaterialContentLoadingProgressBar
-import de.kuschku.quasseldroid.util.ui.WarningBarView
 import de.kuschku.quasseldroid.util.ui.settings.fragment.ServiceBoundSettingsFragment
+import de.kuschku.quasseldroid.util.ui.view.MaterialContentLoadingProgressBar
+import de.kuschku.quasseldroid.util.ui.view.WarningBarView
 import io.reactivex.subjects.BehaviorSubject
 import javax.inject.Inject
 
diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/ColorContext.kt b/app/src/main/java/de/kuschku/quasseldroid/util/ColorContext.kt
index 5f6be2fad54914ea65ba205c673603d1750241ba..1d575c0a493a406caa75b4b8f35dfb5393b54ae3 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/util/ColorContext.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/util/ColorContext.kt
@@ -26,7 +26,7 @@ import de.kuschku.libquassel.util.irc.SenderColorUtil
 import de.kuschku.quasseldroid.R
 import de.kuschku.quasseldroid.settings.MessageSettings
 import de.kuschku.quasseldroid.util.helper.styledAttributes
-import de.kuschku.quasseldroid.util.ui.TextDrawable
+import de.kuschku.quasseldroid.util.ui.drawable.TextDrawable
 import de.kuschku.quasseldroid.viewmodel.EditorViewModel
 import javax.inject.Inject
 
diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/ui/drawable/DrawerToggleActivityDrawable.kt b/app/src/main/java/de/kuschku/quasseldroid/util/ui/drawable/DrawerToggleActivityDrawable.kt
new file mode 100644
index 0000000000000000000000000000000000000000..a7568a11cb241e206b460102498dd7857beb0c72
--- /dev/null
+++ b/app/src/main/java/de/kuschku/quasseldroid/util/ui/drawable/DrawerToggleActivityDrawable.kt
@@ -0,0 +1,116 @@
+/*
+ * Quasseldroid - Quassel client for Android
+ *
+ * Copyright (c) 2019 Janne Koschinski
+ * Copyright (c) 2019 The Quassel Project
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 3 as published
+ * by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package de.kuschku.quasseldroid.util.ui.drawable
+
+import android.content.Context
+import android.graphics.*
+import android.graphics.drawable.Drawable
+import androidx.annotation.ColorRes
+import de.kuschku.quasseldroid.R
+import de.kuschku.quasseldroid.util.helper.styledAttributes
+
+class DrawerToggleActivityDrawable(context: Context, @ColorRes colorAttribute: Int) : Drawable() {
+  private val size = context.resources.getDimensionPixelSize(R.dimen.drawer_toggle_size)
+  private val thickness = context.resources.getDimension(R.dimen.drawer_toggle_thickness)
+
+  private val overlayPaint = Paint().apply {
+    color = context.theme.styledAttributes(colorAttribute) {
+      getColor(0, 0)
+    }
+    style = Paint.Style.FILL
+    isAntiAlias = true
+  }
+
+  private val togglePaint = Paint().apply {
+    color = context.theme.styledAttributes(R.attr.colorControlNormal) {
+      getColor(0, 0)
+    }
+    style = Paint.Style.STROKE
+    strokeJoin = Paint.Join.MITER
+    strokeCap = Paint.Cap.BUTT
+    isAntiAlias = true
+    strokeWidth = thickness
+  }
+
+
+  private val overlayPath = Path().apply {
+    arcTo(RectF(22f, 22f, 24f, 24f), 0f, 90f)
+    arcTo(RectF(16f, 22f, 18f, 24f), 90f, 90f)
+    arcTo(RectF(16f, 16f, 18f, 18f), 180f, 90f)
+    arcTo(RectF(22f, 16f, 24f, 18f), 270f, 90f)
+    close()
+  }
+
+  private val togglePath = Path().apply {
+    // top bar
+    moveTo(3f, 7f)
+    rLineTo(18f, 0f)
+
+    // draw middle bar
+    moveTo(3f, 12f)
+    rLineTo(18f, 0f)
+
+    // bottom bar
+    moveTo(3f, 17f)
+    rLineTo(18f, 0f)
+  }
+
+  override fun getIntrinsicHeight() = size
+  override fun getIntrinsicWidth() = size
+
+  // Not supported
+  override fun setAlpha(alpha: Int) = Unit
+
+  override fun getOpacity(): Int = PixelFormat.TRANSLUCENT
+
+  // Not supported
+  override fun setColorFilter(colorFilter: ColorFilter?) = Unit
+
+  private val transformationMatrix = Matrix()
+  private val transformedOverlayPath = Path()
+  private val transformedTogglePath = Path()
+
+  private fun transformPaths() {
+    transformationMatrix.reset()
+    transformationMatrix.apply {
+      val smallestDimension = Math.min(bounds.width(), bounds.height())
+      preScale(smallestDimension / 24f, smallestDimension / 24f, 0f, 0f)
+    }
+
+    transformedOverlayPath.set(overlayPath)
+    transformedOverlayPath.transform(transformationMatrix)
+    transformedTogglePath.set(togglePath)
+    transformedTogglePath.transform(transformationMatrix)
+  }
+
+  override fun onBoundsChange(bounds: Rect?) {
+    transformPaths()
+  }
+
+  override fun draw(canvas: Canvas) {
+    if (bounds.width() <= 0 || bounds.height() <= 0) {
+      // Nothing to draw
+      return
+    }
+
+    canvas.drawPath(transformedTogglePath, togglePaint)
+    canvas.drawPath(transformedOverlayPath, overlayPaint)
+  }
+}
diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/ui/NickCountDrawable.kt b/app/src/main/java/de/kuschku/quasseldroid/util/ui/drawable/NickCountDrawable.kt
similarity index 98%
rename from app/src/main/java/de/kuschku/quasseldroid/util/ui/NickCountDrawable.kt
rename to app/src/main/java/de/kuschku/quasseldroid/util/ui/drawable/NickCountDrawable.kt
index 6fcb4f2044d26f46d037d70fe7aba7e12dcbc879..0083c09436be3b3555d002ba0dd7153a0480ffe6 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/util/ui/NickCountDrawable.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/util/ui/drawable/NickCountDrawable.kt
@@ -17,7 +17,7 @@
  * with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
-package de.kuschku.quasseldroid.util.ui
+package de.kuschku.quasseldroid.util.ui.drawable
 
 import android.graphics.*
 import android.graphics.drawable.Drawable
diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/ui/TextDrawable.java b/app/src/main/java/de/kuschku/quasseldroid/util/ui/drawable/TextDrawable.java
similarity index 99%
rename from app/src/main/java/de/kuschku/quasseldroid/util/ui/TextDrawable.java
rename to app/src/main/java/de/kuschku/quasseldroid/util/ui/drawable/TextDrawable.java
index 7372d0e1446f64c7a208dbd547bd76c4b68d9af3..fb7de1424310c04b1323ed540db27eb2c48035e2 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/util/ui/TextDrawable.java
+++ b/app/src/main/java/de/kuschku/quasseldroid/util/ui/drawable/TextDrawable.java
@@ -17,7 +17,7 @@
  * with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
-package de.kuschku.quasseldroid.util.ui;
+package de.kuschku.quasseldroid.util.ui.drawable;
 
 import android.graphics.Canvas;
 import android.graphics.Color;
diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/ui/BannerView.kt b/app/src/main/java/de/kuschku/quasseldroid/util/ui/view/BannerView.kt
similarity index 98%
rename from app/src/main/java/de/kuschku/quasseldroid/util/ui/BannerView.kt
rename to app/src/main/java/de/kuschku/quasseldroid/util/ui/view/BannerView.kt
index 75d874afe691100b5d2a57cdc25d2964dfb1899e..49ab369a7a8aaf970e793888abca66ab463c02d0 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/util/ui/BannerView.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/util/ui/view/BannerView.kt
@@ -17,7 +17,7 @@
  * with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
-package de.kuschku.quasseldroid.util.ui
+package de.kuschku.quasseldroid.util.ui.view
 
 import android.content.Context
 import android.util.AttributeSet
diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/ui/DrawerRecyclerView.kt b/app/src/main/java/de/kuschku/quasseldroid/util/ui/view/DrawerRecyclerView.kt
similarity index 98%
rename from app/src/main/java/de/kuschku/quasseldroid/util/ui/DrawerRecyclerView.kt
rename to app/src/main/java/de/kuschku/quasseldroid/util/ui/view/DrawerRecyclerView.kt
index 95c9fe4e23b5153676ae13eda69910b1ba3ae6e9..9477fae25bb7b89683e440d7ec82160f14a20b9e 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/util/ui/DrawerRecyclerView.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/util/ui/view/DrawerRecyclerView.kt
@@ -17,7 +17,7 @@
  * with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
-package de.kuschku.quasseldroid.util.ui
+package de.kuschku.quasseldroid.util.ui.view
 
 import android.content.Context
 import android.graphics.Canvas
diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/ui/MaterialContentLoadingProgressBar.kt b/app/src/main/java/de/kuschku/quasseldroid/util/ui/view/MaterialContentLoadingProgressBar.kt
similarity index 98%
rename from app/src/main/java/de/kuschku/quasseldroid/util/ui/MaterialContentLoadingProgressBar.kt
rename to app/src/main/java/de/kuschku/quasseldroid/util/ui/view/MaterialContentLoadingProgressBar.kt
index 36141fd17da0511996c8d1fb80526ac9c65a1e41..9b68afc56a3d16f2f15a0a06f8893ae7ebc5684a 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/util/ui/MaterialContentLoadingProgressBar.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/util/ui/view/MaterialContentLoadingProgressBar.kt
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package de.kuschku.quasseldroid.util.ui
+package de.kuschku.quasseldroid.util.ui.view
 
 import android.content.Context
 import android.util.AttributeSet
diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/ui/NavigationDrawerLayout.kt b/app/src/main/java/de/kuschku/quasseldroid/util/ui/view/NavigationDrawerLayout.kt
similarity index 98%
rename from app/src/main/java/de/kuschku/quasseldroid/util/ui/NavigationDrawerLayout.kt
rename to app/src/main/java/de/kuschku/quasseldroid/util/ui/view/NavigationDrawerLayout.kt
index c8050e50958849aa34abcee6f04c3801d6af3393..14dcca5120df05a60c3f0fee0117c7e555e697c2 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/util/ui/NavigationDrawerLayout.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/util/ui/view/NavigationDrawerLayout.kt
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package de.kuschku.quasseldroid.util.ui
+package de.kuschku.quasseldroid.util.ui.view
 
 import android.content.Context
 import android.graphics.Canvas
diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/ui/RipplePassthroughTextView.kt b/app/src/main/java/de/kuschku/quasseldroid/util/ui/view/RipplePassthroughTextView.kt
similarity index 97%
rename from app/src/main/java/de/kuschku/quasseldroid/util/ui/RipplePassthroughTextView.kt
rename to app/src/main/java/de/kuschku/quasseldroid/util/ui/view/RipplePassthroughTextView.kt
index 1121d22f9ceebe8a18af48c4c633d701a90e41e6..2a16bd876a04cadd1f576849ce35cf4a8400ad31 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/util/ui/RipplePassthroughTextView.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/util/ui/view/RipplePassthroughTextView.kt
@@ -17,7 +17,7 @@
  * with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
-package de.kuschku.quasseldroid.util.ui
+package de.kuschku.quasseldroid.util.ui.view
 
 import android.annotation.SuppressLint
 import android.content.Context
diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/ui/ShadowView.kt b/app/src/main/java/de/kuschku/quasseldroid/util/ui/view/ShadowView.kt
similarity index 97%
rename from app/src/main/java/de/kuschku/quasseldroid/util/ui/ShadowView.kt
rename to app/src/main/java/de/kuschku/quasseldroid/util/ui/view/ShadowView.kt
index a79345e8655c65c938d015a130fba8d9857e4ea0..89636356e4667731a8df4201829ae06e3f3bfdae 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/util/ui/ShadowView.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/util/ui/view/ShadowView.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package de.kuschku.quasseldroid.util.ui
+package de.kuschku.quasseldroid.util.ui.view
 
 import android.annotation.SuppressLint
 import android.content.Context
@@ -153,7 +153,12 @@ class ShadowView : View {
       }
     }
 
-    paintDrawable.shaderFactory = ShadowShaderFactory(x0, y0, x1, y1, stopColors)
+    paintDrawable.shaderFactory = ShadowShaderFactory(
+      x0,
+      y0,
+      x1,
+      y1,
+      stopColors)
     cubicGradientScrimCache.put(cacheKeyHash, paintDrawable)
     return paintDrawable
   }
diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/ui/TouchInterceptingFrameLayout.kt b/app/src/main/java/de/kuschku/quasseldroid/util/ui/view/TouchInterceptingFrameLayout.kt
similarity index 96%
rename from app/src/main/java/de/kuschku/quasseldroid/util/ui/TouchInterceptingFrameLayout.kt
rename to app/src/main/java/de/kuschku/quasseldroid/util/ui/view/TouchInterceptingFrameLayout.kt
index ec65b304952ebbcb010dc2d2235d360bda5c342b..dd2408c48f2174b278ff7a65d297138f22007de0 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/util/ui/TouchInterceptingFrameLayout.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/util/ui/view/TouchInterceptingFrameLayout.kt
@@ -17,7 +17,7 @@
  * with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
-package de.kuschku.quasseldroid.util.ui
+package de.kuschku.quasseldroid.util.ui.view
 
 import android.annotation.SuppressLint
 import android.content.Context
diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/ui/WarningBarView.kt b/app/src/main/java/de/kuschku/quasseldroid/util/ui/view/WarningBarView.kt
similarity index 95%
rename from app/src/main/java/de/kuschku/quasseldroid/util/ui/WarningBarView.kt
rename to app/src/main/java/de/kuschku/quasseldroid/util/ui/view/WarningBarView.kt
index 77338642cab3ea8031aa617224178722d9d845f3..414559ff37902ed6acc41a55f7812562ea74a9fc 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/util/ui/WarningBarView.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/util/ui/view/WarningBarView.kt
@@ -17,7 +17,7 @@
  * with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
-package de.kuschku.quasseldroid.util.ui
+package de.kuschku.quasseldroid.util.ui.view
 
 import android.annotation.SuppressLint
 import android.content.Context
@@ -64,7 +64,8 @@ class WarningBarView : FrameLayout {
         text.text = it.getString(R.styleable.WarningBarView_text)
 
       if (it.hasValue(R.styleable.WarningBarView_mode))
-        setMode(it.getInt(R.styleable.WarningBarView_mode, MODE_NONE))
+        setMode(it.getInt(R.styleable.WarningBarView_mode,
+                          MODE_NONE))
     }
   }
 
diff --git a/app/src/main/res/drawable/ic_drawer_toggle.xml b/app/src/main/res/drawable/ic_drawer_toggle.xml
new file mode 100644
index 0000000000000000000000000000000000000000..536cfaf9fc0500e82a57d6d160f830540c50d66d
--- /dev/null
+++ b/app/src/main/res/drawable/ic_drawer_toggle.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  Quasseldroid - Quassel client for Android
+
+  Copyright (c) 2019 Janne Koschinski
+  Copyright (c) 2019 The Quassel Project
+
+  This program is free software: you can redistribute it and/or modify it
+  under the terms of the GNU General Public License version 3 as published
+  by the Free Software Foundation.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License along
+  with this program. If not, see <http://www.gnu.org/licenses/>.
+  -->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+  android:width="24dp"
+  android:height="24dp"
+  android:viewportWidth="24"
+  android:viewportHeight="24">
+  <path
+    android:fillColor="#000"
+    android:pathData="
+    M20,6 a-1,1 0 0,0 1,1 a-1,1 0 0,0 -1,1 l -16,0 a-1,1 0 0,0 -1,-1 a-1,1 0 0,0 1,-1Z
+    M20,11 a-1,1 0 0,0 1,1 a-1,1 0 0,0 -1,1 l -16,0 a-1,1 0 0,0 -1,-1 a-1,1 0 0,0 1,-1Z
+    M20,16 a-1,1 0 0,0 1,1 a-1,1 0 0,0 -1,1 l -16,0 a-1,1 0 0,0 -1,-1 a-1,1 0 0,0 1,-1Z" />
+  <path
+    android:fillColor="#f00"
+    android:pathData="M16,17 16,23 A1,1 0 0,0 17,24 L 23,24 A1,1 0 0,0 24,23 L 24,17 A1,1 0 0,0 23,16 L 17,16 A1,1 0 0,0 16,17" />
+</vector>
diff --git a/app/src/main/res/layout-land/layout_main.xml b/app/src/main/res/layout-land/layout_main.xml
index 32ca88aead17e9bf0058d4a9b0fc940e831e7c57..d985f496f0cc0c317d6b1ddc15c86d5b87836910 100644
--- a/app/src/main/res/layout-land/layout_main.xml
+++ b/app/src/main/res/layout-land/layout_main.xml
@@ -44,7 +44,7 @@
         android:layout_height="match_parent"
         tools:layout="@layout/chat_messages" />
 
-      <de.kuschku.quasseldroid.util.ui.WarningBarView
+      <de.kuschku.quasseldroid.util.ui.view.WarningBarView
         android:id="@+id/connection_status"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
@@ -70,7 +70,7 @@
     app:layout_anchor="@id/fragment_chatline"
     app:layout_anchorGravity="top">
 
-    <de.kuschku.quasseldroid.util.ui.ShadowView
+    <de.kuschku.quasseldroid.util.ui.view.ShadowView
       android:layout_width="match_parent"
       android:layout_height="@dimen/shadow_height"
       android:gravity="bottom" />
diff --git a/app/src/main/res/layout-sw600dp-land/layout_main.xml b/app/src/main/res/layout-sw600dp-land/layout_main.xml
index 544a7eba4cb517c4f36fda67b69f78be04fe3750..c7b87d074f4ef9cccdd027be3b0895dc63f43b29 100644
--- a/app/src/main/res/layout-sw600dp-land/layout_main.xml
+++ b/app/src/main/res/layout-sw600dp-land/layout_main.xml
@@ -50,7 +50,7 @@
           android:layout_height="match_parent"
           tools:layout="@layout/chat_messages" />
 
-        <de.kuschku.quasseldroid.util.ui.WarningBarView
+        <de.kuschku.quasseldroid.util.ui.view.WarningBarView
           android:id="@+id/connection_status"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
@@ -76,7 +76,7 @@
       app:layout_anchor="@id/fragment_chatline"
       app:layout_anchorGravity="top">
 
-      <de.kuschku.quasseldroid.util.ui.ShadowView
+      <de.kuschku.quasseldroid.util.ui.view.ShadowView
         android:layout_width="match_parent"
         android:layout_height="@dimen/shadow_height"
         android:gravity="bottom" />
diff --git a/app/src/main/res/layout/activity_drawable.xml b/app/src/main/res/layout/activity_drawable.xml
new file mode 100644
index 0000000000000000000000000000000000000000..77b93d314f36e45513ce1c61f936d7f24fe593ac
--- /dev/null
+++ b/app/src/main/res/layout/activity_drawable.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  Quasseldroid - Quassel client for Android
+
+  Copyright (c) 2019 Janne Koschinski
+  Copyright (c) 2019 The Quassel Project
+
+  This program is free software: you can redistribute it and/or modify it
+  under the terms of the GNU General Public License version 3 as published
+  by the Free Software Foundation.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License along
+  with this program. If not, see <http://www.gnu.org/licenses/>.
+  -->
+
+<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
+  xmlns:app="http://schemas.android.com/apk/res-auto"
+  xmlns:tools="http://schemas.android.com/tools"
+  android:id="@+id/drawer_layout"
+  android:layout_width="match_parent"
+  android:layout_height="match_parent"
+  android:fitsSystemWindows="true">
+
+  <LinearLayout
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:fitsSystemWindows="true"
+    android:orientation="vertical">
+
+    <com.google.android.material.appbar.AppBarLayout
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"
+      android:theme="?attr/actionBarTheme"
+      tools:showIn="@layout/activity_main">
+
+      <androidx.appcompat.widget.Toolbar
+        android:id="@+id/toolbar"
+        android:layout_width="match_parent"
+        android:layout_height="?attr/actionBarSize"
+        app:popupTheme="?attr/actionBarPopupTheme" />
+
+    </com.google.android.material.appbar.AppBarLayout>
+
+    <androidx.appcompat.widget.AppCompatImageView
+      android:id="@+id/imageView"
+      android:layout_width="match_parent"
+      android:layout_height="match_parent"
+      android:layout_gravity="center"
+      android:scaleType="fitCenter" />
+  </LinearLayout>
+
+  <de.kuschku.quasseldroid.util.ui.view.NavigationDrawerLayout
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:layout_gravity="start"
+    android:background="?attr/colorBackground"
+    android:fitsSystemWindows="true"
+    app:insetBackground="?attr/colorPrimaryDark" />
+</androidx.drawerlayout.widget.DrawerLayout>
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 26d3f2772889b9a40a8db868ef88c2e6f3764c52..2fb95e4db22ee7e307ecadbfd6dfa167b7d0c858 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -35,7 +35,7 @@
     android:layout_gravity="end"
     tools:layout="@layout/chat_nicklist" />
 
-  <de.kuschku.quasseldroid.util.ui.NavigationDrawerLayout
+  <de.kuschku.quasseldroid.util.ui.view.NavigationDrawerLayout
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:layout_gravity="start"
@@ -49,5 +49,5 @@
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       tools:layout="@layout/chat_chatlist" />
-  </de.kuschku.quasseldroid.util.ui.NavigationDrawerLayout>
+  </de.kuschku.quasseldroid.util.ui.view.NavigationDrawerLayout>
 </androidx.drawerlayout.widget.DrawerLayout>
diff --git a/app/src/main/res/layout/chat_chatlist.xml b/app/src/main/res/layout/chat_chatlist.xml
index ac57993a109c02dfe3ba0d12711a044e6cfc55ba..75ebdd6adb9220f7ecb57a98f52a602ddee51530 100644
--- a/app/src/main/res/layout/chat_chatlist.xml
+++ b/app/src/main/res/layout/chat_chatlist.xml
@@ -52,7 +52,7 @@
 
   <include layout="@layout/widget_search" />
 
-  <de.kuschku.quasseldroid.util.ui.WarningBarView
+  <de.kuschku.quasseldroid.util.ui.view.WarningBarView
     android:id="@+id/feature_context_bufferactivitysync"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
diff --git a/app/src/main/res/layout/chat_nicklist.xml b/app/src/main/res/layout/chat_nicklist.xml
index a887208776ed888a88e6629edc7c8d6d19db4831..aea2498ebeaea307bc757cf39be6b833e248a54b 100644
--- a/app/src/main/res/layout/chat_nicklist.xml
+++ b/app/src/main/res/layout/chat_nicklist.xml
@@ -17,7 +17,7 @@
   with this program. If not, see <http://www.gnu.org/licenses/>.
   -->
 
-<de.kuschku.quasseldroid.util.ui.DrawerRecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
+<de.kuschku.quasseldroid.util.ui.view.DrawerRecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:id="@+id/nickList"
   style="@style/Widget.FastScroller"
diff --git a/app/src/main/res/layout/info_channellist.xml b/app/src/main/res/layout/info_channellist.xml
index 8f5c8517850c7c7fa4c3a760ea9da79da603acc4..b65732687ff4e4f83ebc37a985df4fef375cff70 100644
--- a/app/src/main/res/layout/info_channellist.xml
+++ b/app/src/main/res/layout/info_channellist.xml
@@ -70,7 +70,7 @@
 
       </LinearLayout>
 
-      <de.kuschku.quasseldroid.util.ui.MaterialContentLoadingProgressBar
+      <de.kuschku.quasseldroid.util.ui.view.MaterialContentLoadingProgressBar
         android:id="@+id/progress"
         style="@style/Widget.MaterialProgressBar.ProgressBar.Horizontal.NoPadding"
         android:layout_width="match_parent"
@@ -86,7 +86,7 @@
 
   </androidx.cardview.widget.CardView>
 
-  <de.kuschku.quasseldroid.util.ui.WarningBarView
+  <de.kuschku.quasseldroid.util.ui.view.WarningBarView
     android:id="@+id/error"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
diff --git a/app/src/main/res/layout/layout_history.xml b/app/src/main/res/layout/layout_history.xml
index 5f394dda6718676908cf23d8137d403144d8bd58..81533b8eadf5accb45127b85d1be7cb0dd9afb73 100644
--- a/app/src/main/res/layout/layout_history.xml
+++ b/app/src/main/res/layout/layout_history.xml
@@ -17,7 +17,7 @@
   with this program. If not, see <http://www.gnu.org/licenses/>.
   -->
 
-<de.kuschku.quasseldroid.util.ui.TouchInterceptingFrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<de.kuschku.quasseldroid.util.ui.view.TouchInterceptingFrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto"
   xmlns:tools="http://schemas.android.com/tools"
   android:id="@+id/card_panel"
@@ -84,4 +84,4 @@
         tools:listitem="@layout/widget_history_message" />
     </LinearLayout>
   </com.google.android.material.card.MaterialCardView>
-</de.kuschku.quasseldroid.util.ui.TouchInterceptingFrameLayout>
+</de.kuschku.quasseldroid.util.ui.view.TouchInterceptingFrameLayout>
diff --git a/app/src/main/res/layout/layout_main.xml b/app/src/main/res/layout/layout_main.xml
index 814ffe99a3abaa63f83baf64e99e079361213bfb..4debac099949983304911b5aa87bba57c76109ae 100644
--- a/app/src/main/res/layout/layout_main.xml
+++ b/app/src/main/res/layout/layout_main.xml
@@ -50,7 +50,7 @@
           android:layout_height="match_parent"
           tools:layout="@layout/chat_messages" />
 
-        <de.kuschku.quasseldroid.util.ui.WarningBarView
+        <de.kuschku.quasseldroid.util.ui.view.WarningBarView
           android:id="@+id/connection_status"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
@@ -77,7 +77,7 @@
       app:layout_anchor="@id/fragment_chatline"
       app:layout_anchorGravity="top">
 
-      <de.kuschku.quasseldroid.util.ui.ShadowView
+      <de.kuschku.quasseldroid.util.ui.view.ShadowView
         android:layout_width="match_parent"
         android:layout_height="@dimen/shadow_height"
         android:gravity="bottom" />
diff --git a/app/src/main/res/layout/layout_toolbar.xml b/app/src/main/res/layout/layout_toolbar.xml
index a76ad7d5a06564f3a6a86cbe56a0c135a7e891e6..6f9a1ca5652b26e49b11e8ebf3940c82c82be7fb 100644
--- a/app/src/main/res/layout/layout_toolbar.xml
+++ b/app/src/main/res/layout/layout_toolbar.xml
@@ -45,7 +45,7 @@
 
     </androidx.appcompat.widget.Toolbar>
 
-    <de.kuschku.quasseldroid.util.ui.MaterialContentLoadingProgressBar
+    <de.kuschku.quasseldroid.util.ui.view.MaterialContentLoadingProgressBar
       android:id="@+id/progress_bar"
       style="@style/Widget.MaterialProgressBar.ProgressBar.Horizontal.NoPadding"
       android:layout_width="match_parent"
diff --git a/app/src/main/res/layout/settings_highlightlist.xml b/app/src/main/res/layout/settings_highlightlist.xml
index f9a6d8d155c8c205521f50301a1b9b7b4a205e80..98a68545c8ed2ca0175dc4a3bf987bdb1a9b61b4 100644
--- a/app/src/main/res/layout/settings_highlightlist.xml
+++ b/app/src/main/res/layout/settings_highlightlist.xml
@@ -29,7 +29,7 @@
     android:layout_height="wrap_content"
     android:orientation="vertical">
 
-    <de.kuschku.quasseldroid.util.ui.WarningBarView
+    <de.kuschku.quasseldroid.util.ui.view.WarningBarView
       android:id="@+id/feature_context_coresidehighlights"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
diff --git a/app/src/main/res/layout/settings_list.xml b/app/src/main/res/layout/settings_list.xml
index ed9e18d6eceb5f328c444df14e77c24cfe70c7b8..bd04bb2f77df1560d6ab02509d3fe00dc7e68236 100644
--- a/app/src/main/res/layout/settings_list.xml
+++ b/app/src/main/res/layout/settings_list.xml
@@ -29,7 +29,7 @@
     android:layout_height="wrap_content"
     android:orientation="vertical">
 
-    <de.kuschku.quasseldroid.util.ui.BannerView
+    <de.kuschku.quasseldroid.util.ui.view.BannerView
       android:id="@+id/feature_context_missing"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
diff --git a/app/src/main/res/layout/widget_advertisement_support_patreon.xml b/app/src/main/res/layout/widget_advertisement_support_patreon.xml
index cba45df7a00abc7558849cb2f7dc1739cd06f8df..d632687ac225dc054ca6a01f2466bcdcfceefce0 100644
--- a/app/src/main/res/layout/widget_advertisement_support_patreon.xml
+++ b/app/src/main/res/layout/widget_advertisement_support_patreon.xml
@@ -17,7 +17,7 @@
   with this program. If not, see <http://www.gnu.org/licenses/>.
   -->
 
-<de.kuschku.quasseldroid.util.ui.BannerView xmlns:android="http://schemas.android.com/apk/res/android"
+<de.kuschku.quasseldroid.util.ui.view.BannerView xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
diff --git a/app/src/main/res/layout/widget_chatmessage_action.xml b/app/src/main/res/layout/widget_chatmessage_action.xml
index 920bbfff2bd83a6bf3b595d05290ee01d26af81b..6247fb6d25a80290ed4ffb2fafc431f81476830e 100644
--- a/app/src/main/res/layout/widget_chatmessage_action.xml
+++ b/app/src/main/res/layout/widget_chatmessage_action.xml
@@ -82,7 +82,7 @@
         android:layout_weight="1"
         android:orientation="vertical">
 
-        <de.kuschku.quasseldroid.util.ui.RipplePassthroughTextView
+        <de.kuschku.quasseldroid.util.ui.view.RipplePassthroughTextView
           android:id="@+id/combined"
           style="@style/Widget.RtlConformTextView"
           android:layout_width="match_parent"
diff --git a/app/src/main/res/layout/widget_chatmessage_daychange.xml b/app/src/main/res/layout/widget_chatmessage_daychange.xml
index 2e42f5fa1bb2461c0704047e3f7525d4586e3a02..a726aa38cb30ac0c193911903d4ae4f63d2c74f0 100644
--- a/app/src/main/res/layout/widget_chatmessage_daychange.xml
+++ b/app/src/main/res/layout/widget_chatmessage_daychange.xml
@@ -44,7 +44,7 @@
       android:layout_weight="1"
       android:background="?colorDivider" />
 
-    <de.kuschku.quasseldroid.util.ui.RipplePassthroughTextView
+    <de.kuschku.quasseldroid.util.ui.view.RipplePassthroughTextView
       android:id="@+id/daychange"
       style="@style/Widget.RtlConformTextView"
       android:layout_width="wrap_content"
diff --git a/app/src/main/res/layout/widget_chatmessage_error.xml b/app/src/main/res/layout/widget_chatmessage_error.xml
index ab8642bebc4a61160eeb097d7f58d52e66582538..3de2ee8ac7dde41304457eb0c304b7538b897fa5 100644
--- a/app/src/main/res/layout/widget_chatmessage_error.xml
+++ b/app/src/main/res/layout/widget_chatmessage_error.xml
@@ -59,7 +59,7 @@
       android:layout_marginRight="@dimen/message_horizontal"
       android:visibility="gone" />
 
-    <de.kuschku.quasseldroid.util.ui.RipplePassthroughTextView
+    <de.kuschku.quasseldroid.util.ui.view.RipplePassthroughTextView
       android:id="@+id/combined"
       style="@style/Widget.RtlConformTextView"
       android:layout_width="0dip"
diff --git a/app/src/main/res/layout/widget_chatmessage_info.xml b/app/src/main/res/layout/widget_chatmessage_info.xml
index a0fdb566495971581a2735612ddb5af87ffcacf8..343ba2e65aac04128d937fe28cce73fe22bb2920 100644
--- a/app/src/main/res/layout/widget_chatmessage_info.xml
+++ b/app/src/main/res/layout/widget_chatmessage_info.xml
@@ -59,7 +59,7 @@
       android:layout_marginRight="@dimen/message_horizontal"
       android:visibility="gone" />
 
-    <de.kuschku.quasseldroid.util.ui.RipplePassthroughTextView
+    <de.kuschku.quasseldroid.util.ui.view.RipplePassthroughTextView
       android:id="@+id/combined"
       style="@style/Widget.RtlConformTextView"
       android:layout_width="0dip"
diff --git a/app/src/main/res/layout/widget_chatmessage_notice.xml b/app/src/main/res/layout/widget_chatmessage_notice.xml
index 18c602811384cfc43ae51dd3702a2e805966c8a6..86b8dad5eec1869b732f84c6e1ca02aaba069295 100644
--- a/app/src/main/res/layout/widget_chatmessage_notice.xml
+++ b/app/src/main/res/layout/widget_chatmessage_notice.xml
@@ -59,7 +59,7 @@
       android:layout_marginRight="@dimen/message_horizontal"
       android:visibility="gone" />
 
-    <de.kuschku.quasseldroid.util.ui.RipplePassthroughTextView
+    <de.kuschku.quasseldroid.util.ui.view.RipplePassthroughTextView
       android:id="@+id/combined"
       style="@style/Widget.RtlConformTextView"
       android:layout_width="0dip"
diff --git a/app/src/main/res/layout/widget_chatmessage_plain.xml b/app/src/main/res/layout/widget_chatmessage_plain.xml
index 78871b4b7d0d3b2b230de4caf973edf50bead072..3ead811a1b64aab49c5554ad666df867e1196537 100644
--- a/app/src/main/res/layout/widget_chatmessage_plain.xml
+++ b/app/src/main/res/layout/widget_chatmessage_plain.xml
@@ -120,7 +120,7 @@
           android:layout_weight="1"
           android:orientation="vertical">
 
-          <de.kuschku.quasseldroid.util.ui.RipplePassthroughTextView
+          <de.kuschku.quasseldroid.util.ui.view.RipplePassthroughTextView
             android:id="@+id/content"
             style="@style/Widget.RtlConformTextView"
             android:layout_width="match_parent"
@@ -130,7 +130,7 @@
             tools:text="@sample/messages.json/data/content"
             tools:visibility="visible" />
 
-          <de.kuschku.quasseldroid.util.ui.RipplePassthroughTextView
+          <de.kuschku.quasseldroid.util.ui.view.RipplePassthroughTextView
             android:id="@+id/combined"
             style="@style/Widget.RtlConformTextView"
             android:layout_width="match_parent"
diff --git a/app/src/main/res/layout/widget_chatmessage_server.xml b/app/src/main/res/layout/widget_chatmessage_server.xml
index 2d86eabcbaa36479b2f8b5b87de4a04cccd740e8..1d37298d0486d77429fd2ac05f22b8cd9164ab51 100644
--- a/app/src/main/res/layout/widget_chatmessage_server.xml
+++ b/app/src/main/res/layout/widget_chatmessage_server.xml
@@ -59,7 +59,7 @@
       android:layout_marginRight="@dimen/message_horizontal"
       android:visibility="gone" />
 
-    <de.kuschku.quasseldroid.util.ui.RipplePassthroughTextView
+    <de.kuschku.quasseldroid.util.ui.view.RipplePassthroughTextView
       android:id="@+id/combined"
       style="@style/Widget.RtlConformTextView"
       android:layout_width="0dip"
diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml
index 8f69f8835ca4f4ee8889799d168501a266d1408e..d5376574b1ef35811017f7ff3238793cf247aab3 100644
--- a/app/src/main/res/values/attrs.xml
+++ b/app/src/main/res/values/attrs.xml
@@ -71,6 +71,7 @@
   <attr name="colorTintActivity" format="color" />
   <attr name="colorTintMessage" format="color" />
   <attr name="colorTintHighlight" format="color" />
+  <attr name="colorTintNotification" format="color" />
 
   <!-- Icons -->
   <attr name="colorOffline" format="color" />
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
index 4b547ceca48012ae4c27b706d34f68acb7a0df91..605437ff6a45e2aa542d7f67dd2ce075935fc423 100644
--- a/app/src/main/res/values/dimens.xml
+++ b/app/src/main/res/values/dimens.xml
@@ -44,4 +44,7 @@
   <dimen name="notification_avatar_width">64dp</dimen>
   <dimen name="notification_avatar_height">64dp</dimen>
   <dimen name="size_nick_count">24dp</dimen>
+
+  <dimen name="drawer_toggle_size">24dp</dimen>
+  <dimen name="drawer_toggle_thickness">2dp</dimen>
 </resources>
diff --git a/app/src/main/res/values/strings_preferences.xml b/app/src/main/res/values/strings_preferences.xml
index 67f2b67d5cc6975ae2646c857005cd08d6cfe1a5..0eb4239803abc884ec7a65d6c6de249b79cd2674 100644
--- a/app/src/main/res/values/strings_preferences.xml
+++ b/app/src/main/res/values/strings_preferences.xml
@@ -142,6 +142,10 @@
   <string name="preference_notification_network_name_in_notification_title_key" translatable="false">network_name_in_notification_title</string>
   <string name="preference_notification_network_name_in_notification_title_title">Show network name in notifications title</string>
 
+  <string name="preference_notification_show_all_activities_in_toolbar_key" translatable="false">show_all_activities_in_toolbar</string>
+  <string name="preference_notification_show_all_activities_in_toolbar_title">Mark all activities in toolbar</string>
+  <string name="preference_notification_show_all_activities_in_toolbar_summary">Displays a colored bubble in the toolbar for all chat activities</string>
+
   <string name="preference_notification_configure_key" translatable="false">notification_configure</string>
   <string name="preference_notification_configure_title">Configure Notifications</string>
 
diff --git a/app/src/main/res/values/themes_amoled.xml b/app/src/main/res/values/themes_amoled.xml
index 12cb0535bb8aa50b103f4f7f90f3dfe1ad94ceec..ad82f60e14f38011795160461158c240a84d9b36 100644
--- a/app/src/main/res/values/themes_amoled.xml
+++ b/app/src/main/res/values/themes_amoled.xml
@@ -74,6 +74,7 @@
     <item name="colorTintActivity">#88cc33</item>
     <item name="colorTintMessage">#2277dd</item>
     <item name="colorTintHighlight">#ff8811</item>
+    <item name="colorTintNotification">#D32F2F</item>
 
     <item name="colorTintSecure">#88cc33</item>
     <item name="colorTintPartiallySecure">#ffaf3b</item>
diff --git a/app/src/main/res/values/themes_dracula.xml b/app/src/main/res/values/themes_dracula.xml
index c92f2fd14807b4339ed5f749f4216b05edf27954..59b0adba4c8851184c0e7b2e6647bc55c9655c31 100644
--- a/app/src/main/res/values/themes_dracula.xml
+++ b/app/src/main/res/values/themes_dracula.xml
@@ -78,6 +78,7 @@
     <item name="colorTintActivity">#6272a4</item>
     <item name="colorTintMessage">#acb2b7</item>
     <item name="colorTintHighlight">#f8f8f2</item>
+    <item name="colorTintNotification">#ff5555</item>
 
     <item name="colorTintSecure">#50fa7b</item>
     <item name="colorTintPartiallySecure">#ffb86c</item>
diff --git a/app/src/main/res/values/themes_gruvbox.xml b/app/src/main/res/values/themes_gruvbox.xml
index 87db8b04b70921ad983999160f0aec2cbe00fe86..f107b8fb9dfb2f770a7efcabfa9f3f10514e658b 100644
--- a/app/src/main/res/values/themes_gruvbox.xml
+++ b/app/src/main/res/values/themes_gruvbox.xml
@@ -77,6 +77,7 @@
     <item name="colorTintActivity">#98971a</item>
     <item name="colorTintMessage">#458588</item>
     <item name="colorTintHighlight">#d65d0e</item>
+    <item name="colorTintNotification">#cc241d</item>
 
     <item name="colorTintSecure">#98971a</item>
     <item name="colorTintPartiallySecure">#d79921</item>
@@ -140,6 +141,7 @@
     <item name="colorTintActivity">#98971a</item>
     <item name="colorTintMessage">#458588</item>
     <item name="colorTintHighlight">#d65d0e</item>
+    <item name="colorTintNotification">#cc241d</item>
 
     <item name="colorTintSecure">#98971a</item>
     <item name="colorTintPartiallySecure">#d79921</item>
diff --git a/app/src/main/res/values/themes_material.xml b/app/src/main/res/values/themes_material.xml
index 2338b21dd210491acd2fca85acdbeecee9032ec3..55511afe570e20e76279911689b4fa5879e53b3e 100644
--- a/app/src/main/res/values/themes_material.xml
+++ b/app/src/main/res/values/themes_material.xml
@@ -68,6 +68,7 @@
     <item name="colorTintActivity">#AFB42B</item>
     <item name="colorTintMessage">#1976D2</item>
     <item name="colorTintHighlight">#FFAB00</item>
+    <item name="colorTintNotification">#D32F2F</item>
 
     <item name="colorTintSecure">#4CAF50</item>
     <item name="colorTintPartiallySecure">#FFC107</item>
@@ -123,6 +124,7 @@
     <item name="colorTintActivity">#AFB42B</item>
     <item name="colorTintMessage">#42A5F5</item>
     <item name="colorTintHighlight">#FFAB00</item>
+    <item name="colorTintNotification">#D32F2F</item>
 
     <item name="colorTintSecure">#4CAF50</item>
     <item name="colorTintPartiallySecure">#FFC107</item>
diff --git a/app/src/main/res/values/themes_quassel.xml b/app/src/main/res/values/themes_quassel.xml
index d100967cd0ef5d0532b1d4ebd20b03cb1584604a..2fb569c0381e63588307402d42e7c44f5f6a1b2c 100644
--- a/app/src/main/res/values/themes_quassel.xml
+++ b/app/src/main/res/values/themes_quassel.xml
@@ -70,6 +70,7 @@
     <item name="colorTintActivity">#88cc33</item>
     <item name="colorTintMessage">#2277dd</item>
     <item name="colorTintHighlight">#ff8811</item>
+    <item name="colorTintNotification">#BB2222</item>
 
     <item name="colorTintSecure">#88cc33</item>
     <item name="colorTintPartiallySecure">#ffaf3b</item>
@@ -127,6 +128,7 @@
     <item name="colorTintActivity">#88cc33</item>
     <item name="colorTintMessage">#2277dd</item>
     <item name="colorTintHighlight">#ff8811</item>
+    <item name="colorTintNotification">#BB2222</item>
 
     <item name="colorTintSecure">#88cc33</item>
     <item name="colorTintPartiallySecure">#ffaf3b</item>
diff --git a/app/src/main/res/values/themes_solarized.xml b/app/src/main/res/values/themes_solarized.xml
index 384e939093328183f416cd8d3ed14012a31b23aa..33383cc3971253fb0750fdb504e6123acd4f5455 100644
--- a/app/src/main/res/values/themes_solarized.xml
+++ b/app/src/main/res/values/themes_solarized.xml
@@ -77,6 +77,7 @@
     <item name="colorTintActivity">#859900</item>
     <item name="colorTintMessage">#268BD2</item>
     <item name="colorTintHighlight">#EB6B36</item>
+    <item name="colorTintNotification">#DC322f</item>
 
     <item name="colorTintSecure">#859900</item>
     <item name="colorTintPartiallySecure">#D5A920</item>
@@ -141,6 +142,7 @@
     <item name="colorTintActivity">#859900</item>
     <item name="colorTintMessage">#268BD2</item>
     <item name="colorTintHighlight">#EB6B36</item>
+    <item name="colorTintNotification">#DC322f</item>
 
     <item name="colorTintSecure">#859900</item>
     <item name="colorTintPartiallySecure">#B58900</item>
diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml
index 4609d67a2f797129ccd319957f3411b561cbf86c..ef32d4780c6c3453ad776519df5206017ce53c8b 100644
--- a/app/src/main/res/xml/preferences.xml
+++ b/app/src/main/res/xml/preferences.xml
@@ -95,6 +95,12 @@
       android:key="@string/preference_notification_network_name_in_notification_title_key"
       android:title="@string/preference_notification_network_name_in_notification_title_title" />
 
+    <SwitchPreference
+      android:defaultValue="false"
+      android:key="@string/preference_notification_show_all_activities_in_toolbar_key"
+      android:summary="@string/preference_notification_show_all_activities_in_toolbar_summary"
+      android:title="@string/preference_notification_show_all_activities_in_toolbar_title" />
+
     <de.kuschku.quasseldroid.util.ui.settings.RingtonePreference
       android:defaultValue="content://settings/system/notification_sound"
       android:key="@string/preference_notification_sound_key"
diff --git a/persistence/src/main/java/de/kuschku/quasseldroid/persistence/dao/AccountDao.kt b/persistence/src/main/java/de/kuschku/quasseldroid/persistence/dao/AccountDao.kt
index 0489423b53b0eabe093f144cd3d46cc78e49647a..8d6a438df0a52efdd3cf774ef9ab3209f6ecc50b 100644
--- a/persistence/src/main/java/de/kuschku/quasseldroid/persistence/dao/AccountDao.kt
+++ b/persistence/src/main/java/de/kuschku/quasseldroid/persistence/dao/AccountDao.kt
@@ -22,6 +22,7 @@ package de.kuschku.quasseldroid.persistence.dao
 import androidx.lifecycle.LiveData
 import androidx.room.*
 import de.kuschku.quasseldroid.persistence.models.Account
+import io.reactivex.Flowable
 
 @Dao
 interface AccountDao {
@@ -37,6 +38,9 @@ interface AccountDao {
   @Query("SELECT * FROM account WHERE id = :id")
   fun listen(id: Long): LiveData<Account?>
 
+  @Query("SELECT IFNULL(t.defaultFiltered, :defaultValue) FROM (SELECT defaultFiltered FROM account WHERE id = :id UNION SELECT NULL ORDER BY defaultFiltered DESC LIMIT 1) t")
+  fun listenDefaultFiltered(id: Long, defaultValue: Int): Flowable<Int>
+
   @Query("SELECT * FROM account ORDER BY lastUsed DESC")
   fun all(): LiveData<List<Account>>
 
diff --git a/persistence/src/main/java/de/kuschku/quasseldroid/persistence/dao/FilteredDao.kt b/persistence/src/main/java/de/kuschku/quasseldroid/persistence/dao/FilteredDao.kt
index 186346c194459dc249917666d14772b34498560b..482547cc686e4e00c0de160672c4dae2ed0107f2 100644
--- a/persistence/src/main/java/de/kuschku/quasseldroid/persistence/dao/FilteredDao.kt
+++ b/persistence/src/main/java/de/kuschku/quasseldroid/persistence/dao/FilteredDao.kt
@@ -28,6 +28,7 @@ import androidx.room.Query
 import de.kuschku.libquassel.protocol.BufferId
 import de.kuschku.libquassel.protocol.BufferId_Type
 import de.kuschku.quasseldroid.persistence.models.Filtered
+import io.reactivex.Flowable
 
 @Dao
 interface FilteredDao {
@@ -49,6 +50,9 @@ interface FilteredDao {
   @Query("SELECT * FROM filtered WHERE accountId = :accountId")
   fun listen(accountId: Long): LiveData<List<Filtered>>
 
+  @Query("SELECT * FROM filtered WHERE accountId = :accountId")
+  fun listenRx(accountId: Long): Flowable<List<Filtered>>
+
   @Query("DELETE FROM filtered")
   fun clear()
 
diff --git a/viewmodel/src/main/java/de/kuschku/quasseldroid/util/helper/ObservableHelper.kt b/viewmodel/src/main/java/de/kuschku/quasseldroid/util/helper/ObservableHelper.kt
index c28eab4ca3824f212b20f08896cc296d5acfa778..92edd739a2d693952c61e6569c4e115030d9bb62 100644
--- a/viewmodel/src/main/java/de/kuschku/quasseldroid/util/helper/ObservableHelper.kt
+++ b/viewmodel/src/main/java/de/kuschku/quasseldroid/util/helper/ObservableHelper.kt
@@ -55,8 +55,8 @@ inline fun <reified A, B, C> combineLatest(
   b: ObservableSource<B>,
   c: ObservableSource<C>
 ): Observable<Triple<A, B, C>> =
-  Observable.combineLatest(listOf(a, b, c)) { (t0, t1, t2) ->
-    Triple(t0, t1, t2) as Triple<A, B, C>
+  Observable.combineLatest(listOf(a, b, c)) {
+    Triple(it[0], it[1], it[2]) as Triple<A, B, C>
   }
 
 inline fun <reified A, B, C, D> combineLatest(
@@ -65,8 +65,31 @@ inline fun <reified A, B, C, D> combineLatest(
   c: ObservableSource<C>,
   d: ObservableSource<D>
 ): Observable<Tuple4<A, B, C, D>> =
-  Observable.combineLatest(listOf(a, b, c, d)) { (t0, t1, t2, t3) ->
-    Tuple4(t0, t1, t2, t3) as Tuple4<A, B, C, D>
+  Observable.combineLatest(listOf(a, b, c, d)) {
+    Tuple4(it[0], it[1], it[2], it[3]) as Tuple4<A, B, C, D>
+  }
+
+inline fun <reified A, B, C, D, E> combineLatest(
+  a: ObservableSource<A>,
+  b: ObservableSource<B>,
+  c: ObservableSource<C>,
+  d: ObservableSource<D>,
+  e: ObservableSource<E>
+): Observable<Tuple5<A, B, C, D, E>> =
+  Observable.combineLatest(listOf(a, b, c, d, e)) {
+    Tuple5(it[0], it[1], it[2], it[3], it[4]) as Tuple5<A, B, C, D, E>
+  }
+
+inline fun <reified A, B, C, D, E, F> combineLatest(
+  a: ObservableSource<A>,
+  b: ObservableSource<B>,
+  c: ObservableSource<C>,
+  d: ObservableSource<D>,
+  e: ObservableSource<E>,
+  f: ObservableSource<F>
+): Observable<Tuple6<A, B, C, D, E, F>> =
+  Observable.combineLatest(listOf(a, b, c, d, e, f)) {
+    Tuple6(it[0], it[1], it[2], it[3], it[4], it[5]) as Tuple6<A, B, C, D, E, F>
   }
 
 inline fun <reified T> combineLatest(sources: Iterable<ObservableSource<out T>?>) =
@@ -81,3 +104,20 @@ data class Tuple4<out A, out B, out C, out D>(
   val third: C,
   val fourth: D
 )
+
+data class Tuple5<out A, out B, out C, out D, out E>(
+  val first: A,
+  val second: B,
+  val third: C,
+  val fourth: D,
+  val fifth: E
+)
+
+data class Tuple6<out A, out B, out C, out D, out E, out F>(
+  val first: A,
+  val second: B,
+  val third: C,
+  val fourth: D,
+  val fifth: E,
+  val sixth: F
+)
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 c72c955608d26d2278ed2ae16c7078a01f0c6430..1c24428510bb1d9ac95c54530720d76435a8c953 100644
--- a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/QuasselViewModel.kt
+++ b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/QuasselViewModel.kt
@@ -174,7 +174,6 @@ class QuasselViewModel : ViewModel() {
     }
   }
 
-  // Remove orElse
   val lag: Observable<Long> = session.mapSwitchMap(ISession::lag).mapOrElse(0)
 
   val bufferData = combineLatest(session, buffer).switchMap { (sessionOptional, id) ->