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 0895d8c0eda6254d45a533fc2c336784f7f6bc39..19cf45c49e248c5c87d31ed1e7f239e634f4f60e 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
@@ -30,6 +30,7 @@ import de.kuschku.libquassel.util.and
 import de.kuschku.libquassel.util.or
 import de.kuschku.quasseldroid.Keys
 import de.kuschku.quasseldroid.R
+import de.kuschku.quasseldroid.persistence.AccountDatabase
 import de.kuschku.quasseldroid.persistence.QuasselDatabase
 import de.kuschku.quasseldroid.settings.Settings
 import de.kuschku.quasseldroid.ui.chat.input.Editor
@@ -68,6 +69,9 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
   @Inject
   lateinit var database: QuasselDatabase
 
+  @Inject
+  lateinit var accountDatabase: AccountDatabase
+
   private lateinit var editor: Editor
 
   private val panelSlideListener: SlidingUpPanelLayout.PanelSlideListener = object :
@@ -194,27 +198,41 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
                 disconnect()
               }
               .onPositive { _, _ ->
-                MaterialDialog.Builder(this)
-                  .title("Login Required")
-                  .customView(R.layout.setup_account_user, false)
-                  .negativeText(R.string.label_disconnect)
-                  .positiveText(R.string.label_save)
-                  .onNegative { _, _ ->
-                    disconnect()
-                  }
-                  .onPositive { dialog, _ ->
+                runInBackground {
+                  val account = accountDatabase.accounts().findById(accountId)
+
+                  runOnUiThread {
+                    val dialog = MaterialDialog.Builder(this)
+                      .title("Login Required")
+                      .customView(R.layout.setup_account_user, false)
+                      .negativeText(R.string.label_disconnect)
+                      .positiveText(R.string.label_save)
+                      .onNegative { _, _ ->
+                        disconnect()
+                      }
+                      .onPositive { dialog, _ ->
+                        dialog.customView?.run {
+                          val userField = findViewById<EditText>(R.id.user)
+                          val passField = findViewById<EditText>(R.id.pass)
+
+                          val user = userField.text.toString()
+                          val pass = passField.text.toString()
+
+                          backend.value.orNull()?.updateUserDataAndLogin(user, pass)
+                        }
+                      }
+                      .build()
                     dialog.customView?.run {
                       val userField = findViewById<EditText>(R.id.user)
                       val passField = findViewById<EditText>(R.id.pass)
 
-                      val user = userField.text.toString()
-                      val pass = passField.text.toString()
-
-                      backend.value.orNull()?.updateUserDataAndLogin(user, pass)
+                      account?.let {
+                        userField.setText(it.user)
+                      }
                     }
+                    dialog.show()
                   }
-                  .build()
-                  .show()
+                }
               }
               .build()
               .show()
@@ -249,7 +267,10 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
   }
 
   override fun onActionModeStarted(mode: ActionMode?) {
-    mode?.menu?.retint(toolbar.context)
+    when (mode?.tag) {
+      "BUFFER",
+      "MESSAGES" -> mode.menu?.retint(toolbar.context)
+    }
     super.onActionModeStarted(mode)
   }
 
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 ee95141591bc048b821deb4e479d8e3f3de02711..823c1981aec5dd52c06f782bec7e91bf92ac8b5f 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
@@ -4,7 +4,6 @@ import android.arch.lifecycle.LifecycleOwner
 import android.arch.lifecycle.LiveData
 import android.arch.lifecycle.Observer
 import android.graphics.drawable.Drawable
-import android.support.v4.graphics.drawable.DrawableCompat
 import android.support.v7.util.DiffUtil
 import android.support.v7.widget.RecyclerView
 import android.view.LayoutInflater
@@ -220,9 +219,9 @@ class BufferListAdapter(
         itemView.isSelected = state.selected
 
         if (state.networkExpanded) {
-          status.setImageDrawable(itemView.context.getCompatDrawable(R.drawable.ic_chevron_up))
+          status.setImageDrawable(itemView.context.getDrawableCompat(R.drawable.ic_chevron_up))
         } else {
-          status.setImageDrawable(itemView.context.getCompatDrawable(R.drawable.ic_chevron_down))
+          status.setImageDrawable(itemView.context.getDrawableCompat(R.drawable.ic_chevron_down))
         }
       }
     }
@@ -243,8 +242,8 @@ class BufferListAdapter(
 
       var bufferId: BufferId? = null
 
-      private val online: Drawable
-      private val offline: Drawable
+      private val online: Drawable?
+      private val offline: Drawable?
 
       private var none: Int = 0
       private var activity: Int = 0
@@ -269,16 +268,16 @@ class BufferListAdapter(
           }
         }
 
-        online = itemView.context.getCompatDrawable(R.drawable.ic_status).mutate()
-        offline = itemView.context.getCompatDrawable(R.drawable.ic_status_offline).mutate()
+        online = itemView.context.getDrawableCompat(R.drawable.ic_status)?.mutate()
+        offline = itemView.context.getDrawableCompat(R.drawable.ic_status_offline)?.mutate()
 
         itemView.context.theme.styledAttributes(
           R.attr.colorAccent, R.attr.colorAway,
           R.attr.colorTextPrimary, R.attr.colorTintActivity, R.attr.colorTintMessage,
           R.attr.colorTintHighlight
         ) {
-          DrawableCompat.setTint(online, getColor(0, 0))
-          DrawableCompat.setTint(offline, getColor(1, 0))
+          online?.tint(getColor(0, 0))
+          offline?.tint(getColor(1, 0))
 
           none = getColor(2, 0)
           activity = getColor(3, 0)
@@ -331,8 +330,8 @@ class BufferListAdapter(
 
       var bufferId: BufferId? = null
 
-      private val online: Drawable
-      private val offline: Drawable
+      private val online: Drawable?
+      private val offline: Drawable?
 
       private var none: Int = 0
       private var activity: Int = 0
@@ -357,16 +356,16 @@ class BufferListAdapter(
           }
         }
 
-        online = itemView.context.getCompatDrawable(R.drawable.ic_status_channel).mutate()
-        offline = itemView.context.getCompatDrawable(R.drawable.ic_status_channel_offline).mutate()
+        online = itemView.context.getDrawableCompat(R.drawable.ic_status_channel)?.mutate()
+        offline = itemView.context.getDrawableCompat(R.drawable.ic_status_channel_offline)?.mutate()
 
         itemView.context.theme.styledAttributes(
           R.attr.colorAccent, R.attr.colorAway,
           R.attr.colorTextPrimary, R.attr.colorTintActivity, R.attr.colorTintMessage,
           R.attr.colorTintHighlight
         ) {
-          DrawableCompat.setTint(online, getColor(0, 0))
-          DrawableCompat.setTint(offline, getColor(1, 0))
+          online?.tint(getColor(0, 0))
+          offline?.tint(getColor(1, 0))
 
           none = getColor(2, 0)
           activity = getColor(3, 0)
@@ -419,9 +418,9 @@ class BufferListAdapter(
 
       var bufferId: BufferId? = null
 
-      private val online: Drawable
-      private val away: Drawable
-      private val offline: Drawable
+      private val online: Drawable?
+      private val away: Drawable?
+      private val offline: Drawable?
 
       private var none: Int = 0
       private var activity: Int = 0
@@ -446,18 +445,18 @@ class BufferListAdapter(
           }
         }
 
-        online = itemView.context.getCompatDrawable(R.drawable.ic_status).mutate()
-        away = itemView.context.getCompatDrawable(R.drawable.ic_status).mutate()
-        offline = itemView.context.getCompatDrawable(R.drawable.ic_status_offline).mutate()
+        online = itemView.context.getDrawableCompat(R.drawable.ic_status)?.mutate()
+        away = itemView.context.getDrawableCompat(R.drawable.ic_status)?.mutate()
+        offline = itemView.context.getDrawableCompat(R.drawable.ic_status_offline)?.mutate()
 
         itemView.context.theme.styledAttributes(
           R.attr.colorAccent, R.attr.colorAway,
           R.attr.colorTextPrimary, R.attr.colorTintActivity, R.attr.colorTintMessage,
           R.attr.colorTintHighlight
         ) {
-          DrawableCompat.setTint(online, getColor(0, 0))
-          DrawableCompat.setTint(away, getColor(1, 0))
-          DrawableCompat.setTint(offline, getColor(1, 0))
+          online?.tint(getColor(0, 0))
+          away?.tint(getColor(1, 0))
+          offline?.tint(getColor(1, 0))
 
           none = getColor(2, 0)
           activity = getColor(3, 0)
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 048cd05ff528ed8250a99071ddc6a8f6fc5a0386..fab3a894beb732442782bc6780e669035dd225fc 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
@@ -1,6 +1,7 @@
 package de.kuschku.quasseldroid.ui.chat.buffers
 
 import android.arch.lifecycle.Observer
+import android.os.Build
 import android.os.Bundle
 import android.support.v7.widget.*
 import android.view.*
@@ -146,7 +147,11 @@ class BufferViewConfigFragment : ServiceBoundFragment() {
     }
 
     override fun onPrepareActionMode(mode: ActionMode?, menu: Menu?): Boolean {
-      return false
+      mode?.tag = "MESSAGES"
+      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+        mode?.type = ActionMode.TYPE_FLOATING
+      }
+      return true
     }
 
     override fun onDestroyActionMode(mode: ActionMode?) {
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/AutoCompleteAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/AutoCompleteAdapter.kt
index b0d61f044b5e8607600913224dc834aa62c467cf..0f1903e0098b6fffe171b6d3ec47bb86d9711d38 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/AutoCompleteAdapter.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/AutoCompleteAdapter.kt
@@ -1,7 +1,6 @@
 package de.kuschku.quasseldroid.ui.chat.input
 
 import android.graphics.drawable.Drawable
-import android.support.v4.graphics.drawable.DrawableCompat
 import android.support.v7.recyclerview.extensions.ListAdapter
 import android.support.v7.util.DiffUtil
 import android.support.v7.widget.RecyclerView
@@ -14,8 +13,9 @@ import butterknife.BindView
 import butterknife.ButterKnife
 import de.kuschku.quasseldroid.R
 import de.kuschku.quasseldroid.ui.chat.nicks.NickListAdapter.Companion.VIEWTYPE_AWAY
-import de.kuschku.quasseldroid.util.helper.getCompatDrawable
+import de.kuschku.quasseldroid.util.helper.getDrawableCompat
 import de.kuschku.quasseldroid.util.helper.styledAttributes
+import de.kuschku.quasseldroid.util.helper.tint
 import de.kuschku.quasseldroid.util.helper.visibleIf
 import de.kuschku.quasseldroid.viewmodel.data.AutoCompleteItem
 import de.kuschku.quasseldroid.viewmodel.data.BufferStatus
@@ -124,8 +124,8 @@ class AutoCompleteAdapter(
 
       var value: String? = null
 
-      private val online: Drawable
-      private val offline: Drawable
+      private val online: Drawable?
+      private val offline: Drawable?
 
       init {
         ButterKnife.bind(this, itemView)
@@ -135,14 +135,14 @@ class AutoCompleteAdapter(
             clickListener?.invoke(value)
         }
 
-        online = itemView.context.getCompatDrawable(R.drawable.ic_status_channel).mutate()
-        offline = itemView.context.getCompatDrawable(R.drawable.ic_status_channel_offline).mutate()
+        online = itemView.context.getDrawableCompat(R.drawable.ic_status_channel)?.mutate()
+        offline = itemView.context.getDrawableCompat(R.drawable.ic_status_channel_offline)?.mutate()
 
         itemView.context.theme.styledAttributes(
           R.attr.colorAccent, R.attr.colorAway
         ) {
-          DrawableCompat.setTint(online, getColor(0, 0))
-          DrawableCompat.setTint(offline, getColor(1, 0))
+          online?.tint(getColor(0, 0))
+          offline?.tint(getColor(1, 0))
         }
       }
 
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageListFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageListFragment.kt
index 60e006d67d6f5869394254aa31c383977564d8ce..7e0ef657707a718de34b17a2873ffbd64ae25f7f 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageListFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageListFragment.kt
@@ -112,7 +112,8 @@ class MessageListFragment : ServiceBoundFragment() {
     }
 
     override fun onPrepareActionMode(mode: ActionMode?, menu: Menu?): Boolean {
-      return false
+      mode?.tag = "MESSAGES"
+      return true
     }
 
     override fun onDestroyActionMode(mode: ActionMode?) {
diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/QuasseldroidNotificationManager.kt b/app/src/main/java/de/kuschku/quasseldroid/util/QuasseldroidNotificationManager.kt
index 4e27ecfd98f9c9ea696123250e696a056763ca3e..799414c5ce804c40309408a7427e25c80702055b 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/util/QuasseldroidNotificationManager.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/util/QuasseldroidNotificationManager.kt
@@ -13,6 +13,7 @@ import de.kuschku.quasseldroid.R
 import de.kuschku.quasseldroid.service.QuasselService
 import de.kuschku.quasseldroid.ui.chat.ChatActivity
 import de.kuschku.quasseldroid.util.helper.editApply
+import de.kuschku.quasseldroid.util.helper.getColorCompat
 import de.kuschku.quasseldroid.util.helper.sharedPreferences
 import de.kuschku.quasseldroid.util.helper.systemService
 
@@ -69,7 +70,7 @@ class QuasseldroidNotificationManager(private val context: Context) {
       .addAction(0, context.getString(R.string.label_open), pendingIntentOpen)
       .addAction(0, context.getString(R.string.label_disconnect), pendingIntentDisconnect)
       .setSmallIcon(R.drawable.ic_logo)
-      .setColor(context.resources.getColor(R.color.colorPrimary))
+      .setColor(context.getColorCompat(R.color.colorPrimary))
       .setPriority(NotificationCompat.PRIORITY_MIN)
     return Handle(BACKGROUND_NOTIFICATION_ID, notification)
   }
diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/helper/ContextHelper.kt b/app/src/main/java/de/kuschku/quasseldroid/util/helper/ContextHelper.kt
index df66c4fe5d585cefc00ed2b728bba53f1221aa41..e1f1a11afef33ea444ddf7f6d18a38402c24aebc 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/util/helper/ContextHelper.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/util/helper/ContextHelper.kt
@@ -2,21 +2,12 @@ package de.kuschku.quasseldroid.util.helper
 
 import android.content.Context
 import android.content.SharedPreferences
-import android.graphics.drawable.Drawable
 import android.os.Build
 import android.preference.PreferenceManager
 import android.support.annotation.ColorInt
 import android.support.annotation.ColorRes
 import android.support.annotation.DrawableRes
-
-fun Context.getStatusBarHeight(): Int {
-  var result = 0
-  val resourceId = resources.getIdentifier("status_bar_height", "dimen", "android")
-  if (resourceId > 0) {
-    result = resources.getDimensionPixelSize(resourceId)
-  }
-  return result
-}
+import android.support.v4.content.ContextCompat
 
 inline fun <reified T> Context.systemService(): T =
   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
@@ -25,22 +16,10 @@ inline fun <reified T> Context.systemService(): T =
     getSystemService(T::class.java.simpleName) as T
   }
 
-fun Context.getCompatDrawable(@DrawableRes id: Int): Drawable {
-  return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
-    this.resources.getDrawable(id, this.theme)
-  } else {
-    this.resources.getDrawable(id)
-  }
-}
+fun Context.getDrawableCompat(@DrawableRes id: Int) = ContextCompat.getDrawable(this, id)
 
 @ColorInt
-fun Context.getCompatColor(@ColorRes id: Int): Int {
-  return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
-    this.resources.getColor(id, this.theme)
-  } else {
-    this.resources.getColor(id)
-  }
-}
+fun Context.getColorCompat(@ColorRes id: Int) = ContextCompat.getColor(this, id)
 
 
 fun <T> Context.sharedPreferences(name: String? = null, mode: Int = 0,
diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/helper/DrawableHelper.kt b/app/src/main/java/de/kuschku/quasseldroid/util/helper/DrawableHelper.kt
new file mode 100644
index 0000000000000000000000000000000000000000..90047347c1ccb41d250f90de710b707b944fc151
--- /dev/null
+++ b/app/src/main/java/de/kuschku/quasseldroid/util/helper/DrawableHelper.kt
@@ -0,0 +1,7 @@
+package de.kuschku.quasseldroid.util.helper
+
+import android.graphics.drawable.Drawable
+import android.support.annotation.ColorInt
+import android.support.v4.graphics.drawable.DrawableCompat
+
+fun Drawable.tint(@ColorInt tint: Int) = DrawableCompat.setTint(this, tint)
\ No newline at end of file
diff --git a/app/src/main/res/layout/setup_account_connection.xml b/app/src/main/res/layout/setup_account_connection.xml
index d193007176471468ccba2ec4d835b6dc5ca76b0b..328f2cb3283c7b87e5a9ca32e69008db6fff8bfd 100644
--- a/app/src/main/res/layout/setup_account_connection.xml
+++ b/app/src/main/res/layout/setup_account_connection.xml
@@ -18,7 +18,6 @@
       android:id="@+id/host"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
-      android:hint="@string/label_connection_host"
       android:inputType="textUri" />
   </android.support.design.widget.TextInputLayout>
 
@@ -34,7 +33,6 @@
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:inputType="number"
-      android:hint="@string/labelConnectionPort"
       android:text="@string/defaultConnectionPort" />
   </android.support.design.widget.TextInputLayout>
 
diff --git a/app/src/main/res/layout/setup_account_edit.xml b/app/src/main/res/layout/setup_account_edit.xml
index 471051625ff0a9c4870a49105da79c265e7f0af5..b95d98987eee13a6cb2d0050c30588d1791b28f3 100644
--- a/app/src/main/res/layout/setup_account_edit.xml
+++ b/app/src/main/res/layout/setup_account_edit.xml
@@ -43,7 +43,6 @@
           android:id="@+id/name"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
-          android:hint="@string/label_account_name"
           android:inputType="text" />
       </android.support.design.widget.TextInputLayout>
     </LinearLayout>
@@ -87,7 +86,6 @@
             android:id="@+id/host"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:hint="@string/label_connection_host"
             android:inputType="textUri" />
         </android.support.design.widget.TextInputLayout>
 
@@ -107,7 +105,6 @@
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:inputType="number"
-            android:hint="@string/labelConnectionPort"
             android:text="@string/defaultConnectionPort" />
         </android.support.design.widget.TextInputLayout>
       </LinearLayout>
@@ -153,7 +150,6 @@
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:inputType="textVisiblePassword|textNoSuggestions"
-            android:hint="@string/label_account_user"
             app:errorEnabled="true" />
         </android.support.design.widget.TextInputLayout>
 
@@ -169,7 +165,6 @@
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:inputType="textPassword"
-            android:hint="@string/label_account_pass"
             app:errorEnabled="true" />
         </android.support.design.widget.TextInputLayout>
 
diff --git a/app/src/main/res/layout/setup_account_name.xml b/app/src/main/res/layout/setup_account_name.xml
index 4b027e387e69524c2aa591abdcd70dc2c20bc842..7321ec065a4564e95f3f2adef275ebd36faf38b6 100644
--- a/app/src/main/res/layout/setup_account_name.xml
+++ b/app/src/main/res/layout/setup_account_name.xml
@@ -16,7 +16,6 @@
       android:id="@+id/name"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
-      android:hint="@string/label_account_name"
       android:inputType="text" />
   </android.support.design.widget.TextInputLayout>
 
diff --git a/app/src/main/res/layout/setup_account_user.xml b/app/src/main/res/layout/setup_account_user.xml
index 0ca50d27146751f197cec1efeb2dc9de1229892e..60214fa1df96c1389ddff97f841a5bebac4a2d04 100644
--- a/app/src/main/res/layout/setup_account_user.xml
+++ b/app/src/main/res/layout/setup_account_user.xml
@@ -16,7 +16,6 @@
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:inputType="textVisiblePassword|textNoSuggestions"
-      android:hint="@string/label_account_user"
       app:errorEnabled="true" />
   </android.support.design.widget.TextInputLayout>
 
@@ -32,7 +31,6 @@
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:inputType="textPassword"
-      android:hint="@string/label_account_pass"
       app:errorEnabled="true" />
   </android.support.design.widget.TextInputLayout>