diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/Editor.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/Editor.kt
index cab18626f8fcdbaf3c920dd1fc08a621807398cc..d3a9f21fb2d0ff810360e848f05c68c80fa36539 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/Editor.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/Editor.kt
@@ -84,8 +84,8 @@ class Editor(
         val end = Math.min(
           s.length, previous.range.start + previous.completion.name.length + suffix.length
         )
-        val sequence = if (end > previous.range.start) "" else s.substring(previous.range.start,
-                                                                           end)
+        val sequence = if (end < previous.range.start) ""
+        else s.substring(previous.range.start, end)
         if (sequence == previous.completion.name + suffix) {
           previous.originalWord to (previous.range.start until end)
         } else {
@@ -319,41 +319,43 @@ class Editor(
     TooltipCompat.setTooltipText(clearButton, clearButton.contentDescription)
 
     chatline.setOnKeyListener { _, keyCode, event ->
-      if (event.isCtrlPressed && !event.isAltPressed && event.action == KeyEvent.ACTION_DOWN) when (keyCode) {
-        KeyEvent.KEYCODE_B -> {
-          formatHandler.toggleBold(chatline.selection)
-          updateButtons(chatline.selection)
-          true
-        }
-        KeyEvent.KEYCODE_I -> {
-          formatHandler.toggleItalic(chatline.selection)
-          updateButtons(chatline.selection)
-          true
-        }
-        KeyEvent.KEYCODE_U -> {
-          formatHandler.toggleUnderline(chatline.selection)
-          updateButtons(chatline.selection)
-          true
-        }
-        else               -> false
-      } else when (keyCode) {
-        KeyEvent.KEYCODE_ENTER,
-        KeyEvent.KEYCODE_NUMPAD_ENTER -> if (event.isShiftPressed) {
-          false
-        } else {
-          send()
-          true
-        }
-        KeyEvent.KEYCODE_TAB          -> {
-          if (!event.isAltPressed && !event.isCtrlPressed) {
-            autoComplete(event.isShiftPressed)
+      if (event.action == KeyEvent.ACTION_DOWN) {
+        if (event.isCtrlPressed && !event.isAltPressed) when (keyCode) {
+          KeyEvent.KEYCODE_B -> {
+            formatHandler.toggleBold(chatline.selection)
+            updateButtons(chatline.selection)
             true
-          } else {
+          }
+          KeyEvent.KEYCODE_I -> {
+            formatHandler.toggleItalic(chatline.selection)
+            updateButtons(chatline.selection)
+            true
+          }
+          KeyEvent.KEYCODE_U -> {
+            formatHandler.toggleUnderline(chatline.selection)
+            updateButtons(chatline.selection)
+            true
+          }
+          else               -> false
+        } else when (keyCode) {
+          KeyEvent.KEYCODE_ENTER,
+          KeyEvent.KEYCODE_NUMPAD_ENTER -> if (event.isShiftPressed) {
             false
+          } else {
+            send()
+            true
+          }
+          KeyEvent.KEYCODE_TAB          -> {
+            if (!event.isAltPressed && !event.isCtrlPressed) {
+              autoComplete(event.isShiftPressed)
+              true
+            } else {
+              false
+            }
           }
+          else                          -> false
         }
-        else                          -> false
-      }
+      } else false
     }
   }
 
diff --git a/lib/src/main/java/de/kuschku/libquassel/util/irc/IrcCaseMappers.kt b/lib/src/main/java/de/kuschku/libquassel/util/irc/IrcCaseMappers.kt
index d184f0122bb7828f709012df81ee1c5277ef5955..0939f7b2bc23a849f149954c2fc6be9d652f6130 100644
--- a/lib/src/main/java/de/kuschku/libquassel/util/irc/IrcCaseMappers.kt
+++ b/lib/src/main/java/de/kuschku/libquassel/util/irc/IrcCaseMappers.kt
@@ -10,8 +10,10 @@ object IrcCaseMappers {
     fun equalsIgnoreCase(a: String, b: String): Boolean
 
     fun toLowerCase(value: String): String
+    fun toLowerCaseNullable(value: String?): String? = value?.let(this@IrcCaseMapper::toLowerCase)
 
     fun toUpperCase(value: String): String
+    fun toUpperCaseNullable(value: String?): String? = value?.let(this@IrcCaseMapper::toUpperCase)
   }
 
   internal class UnicodeCaseMapper : IrcCaseMapper {
@@ -32,11 +34,17 @@ object IrcCaseMappers {
   internal class ClassicalIrcCaseMapper :
     IrcCaseMapper {
     override fun toLowerCase(value: String): String {
-      return value.toLowerCase(Locale.US).replace('[', '{').replace(']', '}').replace('^', '~')
+      return value.toLowerCase(Locale.US)
+        .replace('[', '{')
+        .replace(']', '}')
+        .replace('^', '~')
     }
 
     override fun toUpperCase(value: String): String {
-      return value.toUpperCase(Locale.US).replace('{', '[').replace('}', ']').replace('~', '^')
+      return value.toUpperCase(Locale.US)
+        .replace('{', '[')
+        .replace('}', ']')
+        .replace('~', '^')
     }
 
     override fun equalsIgnoreCase(a: String, b: String): Boolean {
@@ -49,4 +57,4 @@ object IrcCaseMappers {
   } else {
     unicode
   }
-}
\ No newline at end of file
+}
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 cf32d8fd0c17b133c2dd2867cdc387c9211a1856..d6e90f91c964be7c4557c87a5267f7e2fd9adff3 100644
--- a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/QuasselViewModel.kt
+++ b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/QuasselViewModel.kt
@@ -18,6 +18,7 @@ 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.helpers.*
+import de.kuschku.libquassel.util.irc.IrcCaseMappers
 import de.kuschku.quasseldroid.util.helper.combineLatest
 import de.kuschku.quasseldroid.util.helper.switchMapNotNull
 import de.kuschku.quasseldroid.util.helper.toLiveData
@@ -511,7 +512,7 @@ class QuasselViewModel : ViewModel() {
                           it.info.type.hasFlag(Buffer_Type.StatusBuffer)
                         }.let {
                           if (config.sortAlphabetically())
-                            it.sortedBy { it.info.bufferName }
+                            it.sortedBy { IrcCaseMappers.unicode.toLowerCaseNullable(it.info.bufferName) }
                               .sortedByDescending { it.hiddenState == BufferHiddenState.VISIBLE }
                           else it
                         }.distinctBy { it.info.bufferId }