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 d0727f628ef8819acfc06f39dcb72ec76aaaf32b..c93283df54b2b27af68c84ab0665866baf188dd8 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
@@ -117,12 +117,16 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
     super.onNewIntent(intent)
     if (intent != null) {
       when {
-        intent.type == "text/plain" -> {
-          chatlineFragment?.editorHelper?.replaceText(intent.getStringExtra(Intent.EXTRA_TEXT))
+        intent.type == "text/plain"            -> {
+          chatlineFragment?.replaceText(intent.getStringExtra(Intent.EXTRA_TEXT))
           drawerLayout.closeDrawers()
         }
-        intent.hasExtra("bufferId") -> {
-          viewModel.buffer.onNext(intent.getIntExtra("bufferId", -1))
+        intent.hasExtra(KEY_BUFFER_ID)         -> {
+          viewModel.buffer.onNext(intent.getIntExtra(KEY_BUFFER_ID, -1))
+          drawerLayout.closeDrawers()
+        }
+        intent.hasExtra(KEY_AUTOCOMPLETE_TEXT) -> {
+          chatlineFragment?.editorHelper?.appendText(intent.getStringExtra(KEY_AUTOCOMPLETE_TEXT))
           drawerLayout.closeDrawers()
         }
       }
@@ -643,23 +647,31 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
   }
 
   companion object {
+    private val KEY_AUTOCOMPLETE_TEXT = "autocomplete_text"
+    private val KEY_BUFFER_ID = "buffer_id"
+
     fun launch(
       context: Context,
       sharedText: CharSequence? = null,
+      autoCompleteText: CharSequence? = null,
       bufferId: Int? = null
-    ) = context.startActivity(intent(context, sharedText, bufferId))
+    ) = context.startActivity(intent(context, sharedText, autoCompleteText, bufferId))
 
     fun intent(
       context: Context,
       sharedText: CharSequence? = null,
+      autoCompleteText: CharSequence? = null,
       bufferId: Int? = null
     ) = Intent(context, ChatActivity::class.java).apply {
       if (sharedText != null) {
         type = "text/plain"
         putExtra(Intent.EXTRA_TEXT, sharedText)
       }
+      if (autoCompleteText != null) {
+        putExtra(KEY_AUTOCOMPLETE_TEXT, autoCompleteText)
+      }
       if (bufferId != null) {
-        putExtra("bufferId", bufferId)
+        putExtra(KEY_BUFFER_ID, bufferId)
       }
     }
   }
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/ChatlineFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/ChatlineFragment.kt
index 97a05e65ccb0c713e5f3072c9dd7240410faadef..232e4b1e2331347bb40f59f4b2b97bbe216620d1 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/ChatlineFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/ChatlineFragment.kt
@@ -151,7 +151,7 @@ class ChatlineFragment : ServiceBoundFragment() {
     fun send() {
       if (chatline.text.isNotBlank()) {
         val lines = chatline.text.lineSequence().map {
-          it.toString() to ircFormatSerializer.toEscapeCodes(SpannableString(it))
+          it to ircFormatSerializer.toEscapeCodes(SpannableString(it))
         }
 
         viewModel.session { sessionOptional ->
@@ -159,8 +159,8 @@ class ChatlineFragment : ServiceBoundFragment() {
           viewModel.buffer { bufferId ->
             session?.bufferSyncer?.bufferInfo(bufferId)?.also { bufferInfo ->
               val output = mutableListOf<IAliasManager.Command>()
-              for ((stripped, formatted) in lines) {
-                viewModel.addRecentlySentMessage(stripped)
+              for ((raw, formatted) in lines) {
+                viewModel.addRecentlySentMessage(raw)
                 session.aliasManager?.processInput(bufferInfo, formatted, output)
               }
               for (command in output) {
@@ -195,4 +195,11 @@ class ChatlineFragment : ServiceBoundFragment() {
 
     return view
   }
+
+  fun replaceText(text: CharSequence) {
+    if (chatline.text.isNotBlank()) {
+      chatline.text.lineSequence().forEach(viewModel::addRecentlySentMessage)
+    }
+    editorHelper.replaceText(text)
+  }
 }
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/EditorHelper.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/EditorHelper.kt
index d7cdac7d75b98fe9b8031bda82e5085b48147688..d71ceae2d647a7292972da9be0ba8315944d4eaf 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/EditorHelper.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/EditorHelper.kt
@@ -189,7 +189,9 @@ class EditorHelper(
 
   fun setMultiLine(enabled: Boolean) = editText.setMultiLine(enabled)
 
-  fun replaceText(text: CharSequence?) = editText.replace(text)
+  fun replaceText(text: CharSequence?) = editText.replaceText(text)
+
+  fun appendText(text: CharSequence?) = editText.appendText(text)
 
   private fun showColorChooser(
     @StringRes title: Int,
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/RichEditText.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/RichEditText.kt
index 1671d261f20c72835a8746a75bca4f952b9bf89e..a72f0dfd394a5f559346721c907739fdfeffe242 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/RichEditText.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/RichEditText.kt
@@ -324,11 +324,18 @@ class RichEditText : EditTextSelectionChange {
     }
   }
 
-  fun replace(text: CharSequence?) {
+  fun replaceText(text: CharSequence?) {
     this.setText(text)
     this.setSelection(this.text.length)
   }
 
+  fun appendText(text: CharSequence?) {
+    if (!this.text.endsWith(" "))
+      this.text.append(" ")
+    this.text.append(text)
+    this.setSelection(this.text.length)
+  }
+
   private fun selectedFormattingChanged(range: IntRange = selection) {
     formattingListener?.invoke(
       isBold(range),
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 a059ebbc68756f3b797bbdd417c4c8e034242b98..a13c072de4f940fc7850f87a36b916f304a61c4e 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
@@ -224,7 +224,8 @@ class MessageListFragment : ServiceBoundFragment() {
     }
     if (autoCompleteSettings.senderDoubleClick)
       adapter.setOnDoubleClickListener { msg ->
-        ChatActivity.launch(requireContext(), sharedText = "${HostmaskHelper.nick(msg.sender)}: ")
+        ChatActivity.launch(requireContext(),
+                            autoCompleteText = "${HostmaskHelper.nick(msg.sender)}: ")
       }
     adapter.setOnUrlLongClickListener(LinkLongClickMenuHelper())