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 51dace5c3fbdad858002a949eb6db456e46b46b6..7bed5e754fad77ac8436b25a51cee9954c319fc2 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
@@ -134,7 +134,10 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
           drawerLayout.closeDrawers()
         }
         intent.hasExtra(KEY_AUTOCOMPLETE_TEXT) -> {
-          chatlineFragment?.editorHelper?.appendText(intent.getStringExtra(KEY_AUTOCOMPLETE_TEXT))
+          chatlineFragment?.editorHelper?.appendText(
+            intent.getStringExtra(KEY_AUTOCOMPLETE_TEXT),
+            intent.getStringExtra(KEY_AUTOCOMPLETE_SUFFIX)
+          )
           drawerLayout.closeDrawers()
         }
       }
@@ -715,19 +718,24 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
 
   companion object {
     private val KEY_AUTOCOMPLETE_TEXT = "autocomplete_text"
+    private val KEY_AUTOCOMPLETE_SUFFIX = "autocomplete_suffix"
     private val KEY_BUFFER_ID = "buffer_id"
 
     fun launch(
       context: Context,
       sharedText: CharSequence? = null,
       autoCompleteText: CharSequence? = null,
+      autoCompleteSuffix: String? = null,
       bufferId: Int? = null
-    ) = context.startActivity(intent(context, sharedText, autoCompleteText, bufferId))
+    ) = context.startActivity(
+      intent(context, sharedText, autoCompleteText, autoCompleteSuffix, bufferId)
+    )
 
     fun intent(
       context: Context,
       sharedText: CharSequence? = null,
       autoCompleteText: CharSequence? = null,
+      autoCompleteSuffix: String? = null,
       bufferId: Int? = null
     ) = Intent(context, ChatActivity::class.java).apply {
       if (sharedText != null) {
@@ -736,6 +744,9 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc
       }
       if (autoCompleteText != null) {
         putExtra(KEY_AUTOCOMPLETE_TEXT, autoCompleteText)
+        if (autoCompleteSuffix != null) {
+          putExtra(KEY_AUTOCOMPLETE_SUFFIX, autoCompleteSuffix)
+        }
       }
       if (bufferId != null) {
         putExtra(KEY_BUFFER_ID, bufferId)
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 7bb373c4885aa4b95ae12dfd9d76c30d19dda990..943ff633a5dfe2c7b577ef1d5a56432a77831e1f 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
@@ -49,9 +49,9 @@ class AutoCompleteAdapter @Inject constructor(
     override fun areContentsTheSame(oldItem: AutoCompleteItem, newItem: AutoCompleteItem) =
       oldItem == newItem
   }) {
-  private var clickListener: ((String) -> Unit)? = null
+  private var clickListener: ((String, String) -> Unit)? = null
 
-  fun setOnClickListener(listener: ((String) -> Unit)?) {
+  fun setOnClickListener(listener: ((String, String) -> Unit)?) {
     this.clickListener = listener
   }
 
@@ -110,7 +110,7 @@ class AutoCompleteAdapter @Inject constructor(
 
     class NickViewHolder(
       itemView: View,
-      private val clickListener: ((String) -> Unit)? = null
+      private val clickListener: ((String, String) -> Unit)? = null
     ) : AutoCompleteViewHolder(itemView) {
       @BindView(R.id.avatar)
       lateinit var avatar: ImageView
@@ -121,19 +121,19 @@ class AutoCompleteAdapter @Inject constructor(
       @BindView(R.id.realname)
       lateinit var realname: TextView
 
-      var value: String? = null
+      var value: AutoCompleteItem? = null
 
       init {
         ButterKnife.bind(this, itemView)
         itemView.setOnClickListener {
           val value = value
           if (value != null)
-            clickListener?.invoke(value)
+            clickListener?.invoke(value.name, value.suffix)
         }
       }
 
       fun bindImpl(data: AutoCompleteItem.UserItem) {
-        value = data.name
+        value = data
 
         nick.text = SpanFormatter.format("%s%s", data.modes, data.displayNick ?: data.nick)
         realname.text = data.realname
@@ -144,7 +144,7 @@ class AutoCompleteAdapter @Inject constructor(
 
     class ChannelViewHolder(
       itemView: View,
-      private val clickListener: ((String) -> Unit)? = null
+      private val clickListener: ((String, String) -> Unit)? = null
     ) : AutoCompleteViewHolder(itemView) {
       @BindView(R.id.status)
       lateinit var status: ImageView
@@ -155,7 +155,7 @@ class AutoCompleteAdapter @Inject constructor(
       @BindView(R.id.description)
       lateinit var description: TextView
 
-      var value: String? = null
+      var value: AutoCompleteItem? = null
 
       private val online: Drawable?
       private val offline: Drawable?
@@ -165,7 +165,7 @@ class AutoCompleteAdapter @Inject constructor(
         itemView.setOnClickListener {
           val value = value
           if (value != null)
-            clickListener?.invoke(value)
+            clickListener?.invoke(value.name, value.suffix)
         }
 
         online = itemView.context.getVectorDrawableCompat(R.drawable.ic_status_channel)?.mutate()
@@ -180,7 +180,7 @@ class AutoCompleteAdapter @Inject constructor(
       }
 
       fun bindImpl(data: AutoCompleteItem.ChannelItem) {
-        value = data.name
+        value = data
 
         name.text = data.info.bufferName
         description.text = data.description
@@ -198,7 +198,7 @@ class AutoCompleteAdapter @Inject constructor(
 
     class AliasViewHolder(
       itemView: View,
-      private val clickListener: ((String) -> Unit)? = null
+      private val clickListener: ((String, String) -> Unit)? = null
     ) : AutoCompleteViewHolder(itemView) {
       @BindView(R.id.alias)
       lateinit var alias: TextView
@@ -206,19 +206,19 @@ class AutoCompleteAdapter @Inject constructor(
       @BindView(R.id.expansion)
       lateinit var expansion: TextView
 
-      var value: String? = null
+      var value: AutoCompleteItem? = null
 
       init {
         ButterKnife.bind(this, itemView)
         itemView.setOnClickListener {
           val value = value
           if (value != null)
-            clickListener?.invoke(value)
+            clickListener?.invoke(value.name, value.suffix)
         }
       }
 
       fun bindImpl(data: AutoCompleteItem.AliasItem) {
-        value = data.name
+        value = data
 
         alias.text = data.alias
         expansion.text = data.expansion
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 d71ceae2d647a7292972da9be0ba8315944d4eaf..0c759f91e2ee7f16232c6f4e190e7b666f0361c4 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
@@ -60,13 +60,13 @@ class EditorHelper(
     getColor(0, 0)
   }
 
-  val lastWord: BehaviorSubject<Pair<String, IntRange>> = BehaviorSubject.createDefault(Pair("",
-                                                                                             IntRange.EMPTY))
+  val lastWord: BehaviorSubject<Pair<String, IntRange>> =
+    BehaviorSubject.createDefault(Pair("", IntRange.EMPTY))
   private val textWatcher = object : TextWatcher {
     override fun afterTextChanged(s: Editable?) {
       val previous = autoCompleteHelper.autoCompletionState
       val next = if (previous != null && s != null) {
-        val suffix = if (previous.range.start == 0) ": " else " "
+        val suffix = if (previous.range.start == 0) previous.completion.suffix else " "
         val sequence = if (s.length < previous.range.start) ""
         else s.substring(previous.range.start)
         if (sequence == previous.completion.name + suffix) {
@@ -191,7 +191,7 @@ class EditorHelper(
 
   fun replaceText(text: CharSequence?) = editText.replaceText(text)
 
-  fun appendText(text: CharSequence?) = editText.appendText(text)
+  fun appendText(text: CharSequence?, suffix: String?) = editText.appendText(text, suffix)
 
   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 b7340045672b8c44f03e40a28c022b2688f5c33f..6b859773c1338659b73e62a343bfe092bf48c329 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
@@ -287,10 +287,10 @@ class RichEditText : EditTextSelectionChange {
     setSelection(selectionStart, selectionEnd)
   }
 
-  fun autoComplete(text: CharSequence) {
+  fun autoComplete(text: CharSequence, suffix: String) {
     val range = this.text.lastWordIndices(this.selection.start, true)
     val replacement = if (range?.start == 0) {
-      "$text: "
+      "$text$suffix"
     } else {
       "$text "
     }
@@ -305,7 +305,7 @@ class RichEditText : EditTextSelectionChange {
   }
 
   fun autoComplete(item: AutoCompletionState) {
-    val suffix = if (item.range.start == 0) ": " else " "
+    val suffix = if (item.range.start == 0) item.completion.suffix else " "
     val replacement = "${item.completion.name}$suffix"
     val previousReplacement = item.lastCompletion?.let { "${item.lastCompletion.name}$suffix" }
 
@@ -329,10 +329,13 @@ class RichEditText : EditTextSelectionChange {
     this.setSelection(this.text.length)
   }
 
-  fun appendText(text: CharSequence?) {
+  fun appendText(text: CharSequence?, suffix: String?) {
+    val shouldAddSuffix = this.text.isEmpty()
     if (!this.text.endsWith(" "))
       this.text.append(" ")
     this.text.append(text)
+    if (shouldAddSuffix)
+      this.text.append(suffix)
     this.setSelection(this.text.length)
   }
 
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 07fbae84786f0af4ed70788c5e5d0d7790a8c26b..17ee1a1babce23ab1269ab202619f57e4fc67f1a 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
@@ -232,8 +232,11 @@ class MessageListFragment : ServiceBoundFragment() {
     }
     if (autoCompleteSettings.senderDoubleClick)
       adapter.setOnDoubleClickListener { msg ->
-        ChatActivity.launch(requireContext(),
-                            autoCompleteText = "${HostmaskHelper.nick(msg.sender)}: ")
+        ChatActivity.launch(
+          requireContext(),
+          autoCompleteText = HostmaskHelper.nick(msg.sender),
+          autoCompleteSuffix = ": "
+        )
       }
     adapter.setOnUrlLongClickListener(LinkLongClickMenuHelper())
 
diff --git a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/data/AutoCompleteItem.kt b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/data/AutoCompleteItem.kt
index 2e7d7fc7b741ac082532de286edac0c9b01686f2..c292aabad0a4d5eac923a2520600c902d25e851a 100644
--- a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/data/AutoCompleteItem.kt
+++ b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/data/AutoCompleteItem.kt
@@ -23,7 +23,7 @@ import android.graphics.drawable.Drawable
 import de.kuschku.libquassel.quassel.BufferInfo
 import de.kuschku.libquassel.quassel.syncables.interfaces.INetwork
 
-sealed class AutoCompleteItem(open val name: String, private val type: Int) :
+sealed class AutoCompleteItem(open val name: String, val suffix: String, private val type: Int) :
   Comparable<AutoCompleteItem> {
   override fun compareTo(other: AutoCompleteItem) = when {
     this.type != other.type -> this.type.compareTo(other.type)
@@ -41,17 +41,17 @@ sealed class AutoCompleteItem(open val name: String, private val type: Int) :
     val avatarUrls: List<Avatar> = emptyList(),
     val fallbackDrawable: Drawable? = null,
     val displayNick: CharSequence? = null
-  ) : AutoCompleteItem(nick, 0)
+  ) : AutoCompleteItem(nick, ": ", 0)
 
   data class AliasItem(
     val alias: String,
     val expansion: String
-  ) : AutoCompleteItem(alias, 1)
+  ) : AutoCompleteItem("/$alias", " ", 1)
 
   data class ChannelItem(
     val info: BufferInfo,
     val network: INetwork.NetworkInfo,
     val bufferStatus: BufferStatus,
     val description: CharSequence
-  ) : AutoCompleteItem(info.bufferName ?: "", 2)
+  ) : AutoCompleteItem(info.bufferName ?: "", " ", 2)
 }