diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/AutoCompleteAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/AutoCompleteAdapter.kt
index b722544e707394d141977abece3ba21a123d9492..6c3b8a1e3647345e086123b7a65d6c5e1ff67dc4 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/AutoCompleteAdapter.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/AutoCompleteAdapter.kt
@@ -25,7 +25,7 @@ import de.kuschku.quasseldroid_ng.util.helper.visibleIf
 
 class AutoCompleteAdapter(
   lifecycleOwner: LifecycleOwner,
-  liveData: LiveData<List<AutoCompleteItem>?>,
+  liveData: LiveData<Pair<String, List<AutoCompleteItem>>?>,
   runInBackground: (() -> Unit) -> Any,
   runOnUiThread: (Runnable) -> Any,
   private val clickListener: ((String) -> Unit)? = null
@@ -34,10 +34,11 @@ class AutoCompleteAdapter(
 
   init {
     liveData.observe(
-      lifecycleOwner, Observer { it: List<AutoCompleteItem>? ->
+      lifecycleOwner, Observer { it: Pair<String, List<AutoCompleteItem>>? ->
       runInBackground {
-        val list = it ?: emptyList()
-        val old: List<AutoCompleteItem> = data
+        val word = it?.first ?: ""
+        val list = it?.second ?: emptyList()
+        val old: List<AutoCompleteItem> = if (word.length >= 3) list else emptyList()
         val new: List<AutoCompleteItem> = list
         val result = DiffUtil.calculateDiff(
           object : DiffUtil.Callback() {
@@ -50,16 +51,13 @@ class AutoCompleteAdapter(
               old[oldItemPosition] == new[newItemPosition]
           }, true
         )
-        runOnUiThread(
-          Runnable {
-            data.clear()
-            data.addAll(new)
-            result.dispatchUpdatesTo(this@AutoCompleteAdapter)
-          }
-        )
+        runOnUiThread(Runnable {
+          data.clear()
+          data.addAll(new)
+          result.dispatchUpdatesTo(this@AutoCompleteAdapter)
+        })
       }
-    }
-    )
+    })
   }
 
   override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = when (viewType) {
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ChatActivity.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ChatActivity.kt
index 8d18fac04a80a7e261bb6e989b8f9255e1d24453..23c844a41dd9daa1b5065fd03c8c47926e183225 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ChatActivity.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ChatActivity.kt
@@ -304,7 +304,7 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
 
     val previous = autocompletionState
     if (!originalWord.second.isEmpty()) {
-      val autoCompletedWords = viewModel.autoCompleteData.value.orEmpty()
+      val autoCompletedWords = viewModel.autoCompleteData.value?.second.orEmpty()
       if (previous != null && lastWord.value.first == previous.originalWord && lastWord.value.second.start == previous.range.start) {
         val previousIndex = autoCompletedWords.indexOf(previous.completion)
         val autoCompletedWord = if (previousIndex != -1) {
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/viewmodel/QuasselViewModel.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/viewmodel/QuasselViewModel.kt
index 32baa2206aff31d10ef24c3b8336a9d12c4621f9..bf21f0e79b46f08ee56a71e9274b936db0013da9 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/viewmodel/QuasselViewModel.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/viewmodel/QuasselViewModel.kt
@@ -197,16 +197,16 @@ class QuasselViewModel : ViewModel() {
 
   val lastWord = MutableLiveData<Observable<Pair<String, IntRange>>>()
 
-  val autoCompleteData: LiveData<List<AutoCompleteAdapter.AutoCompleteItem>?> = session.zip(
+  val autoCompleteData: LiveData<Pair<String, List<AutoCompleteAdapter.AutoCompleteItem>>?> = session.zip(
     buffer, lastWord
   ).switchMapRx { (session, id, lastWordWrapper) ->
     lastWordWrapper
       .distinctUntilChanged()
-      .debounce(16, TimeUnit.MILLISECONDS)
+      .debounce(300, TimeUnit.MILLISECONDS)
       .switchMap { lastWord ->
         val bufferSyncer = session?.bufferSyncer
         val bufferInfo = bufferSyncer?.bufferInfo(id)
-        if (bufferSyncer != null && lastWord.second.length >= 3) {
+        if (bufferSyncer != null) {
           bufferSyncer.liveBufferInfos().switchMap { infos ->
             if (bufferInfo?.type?.hasFlag(
                 Buffer_Type.ChannelBuffer
@@ -276,30 +276,32 @@ class QuasselViewModel : ViewModel() {
                       val ignoredStartingCharacters = charArrayOf(
                         '-', '_', '[', ']', '{', '}', '|', '`', '^', '.', '\\'
                       )
-                      list
-                        .filter {
+                      Pair(
+                        lastWord.first,
+                        list.filter {
                           it.name.trimStart(*ignoredStartingCharacters)
                             .startsWith(
                               lastWord.first.trimStart(*ignoredStartingCharacters),
                               ignoreCase = true
                             )
                         }.sorted()
+                      )
                     }
                 }
               } else {
                 Observable.just(
-                  emptyList()
+                  Pair(lastWord.first, emptyList())
                 )
               }
             } else {
               Observable.just(
-                emptyList()
+                Pair(lastWord.first, emptyList())
               )
             }
           }
         } else {
           Observable.just(
-            emptyList()
+            Pair(lastWord.first, emptyList())
           )
         }
       }