diff --git a/src/components/emoji_input/emoji_input.js b/src/components/emoji_input/emoji_input.js
index 78e75880..846274b8 100644
--- a/src/components/emoji_input/emoji_input.js
+++ b/src/components/emoji_input/emoji_input.js
@@ -178,7 +178,7 @@ const EmojiInput = {
     textAtCaret: async function (newWord) {
       const firstchar = newWord.charAt(0)
       this.suggestions = []
-      if (newWord === firstchar) return
+      if (newWord === firstchar && firstchar !== '$') return
       const matchedSuggestions = await this.suggest(newWord)
       // Async: cancel if textAtCaret has changed during wait
       if (this.textAtCaret !== newWord) return
@@ -277,7 +277,6 @@ const EmojiInput = {
     },
     replaceText (e, suggestion) {
       const len = this.suggestions.length || 0
-      if (this.textAtCaret.length === 1) { return }
       if (len > 0 || suggestion) {
         const chosenSuggestion = suggestion || this.suggestions[this.highlighted]
         const replacement = chosenSuggestion.replacement
diff --git a/src/components/emoji_input/emoji_input.vue b/src/components/emoji_input/emoji_input.vue
index 7d95ab7e..078253c2 100644
--- a/src/components/emoji_input/emoji_input.vue
+++ b/src/components/emoji_input/emoji_input.vue
@@ -42,7 +42,7 @@
           :class="{ highlighted: index === highlighted }"
           @click.stop.prevent="onClick($event, suggestion)"
         >
-          <span class="image">
+          <span v-if="!suggestion.mfm" class="image">
             <img
               v-if="suggestion.img"
               :src="suggestion.img"
diff --git a/src/components/emoji_input/suggestor.js b/src/components/emoji_input/suggestor.js
index e8efbd1e..a0fe7a5b 100644
--- a/src/components/emoji_input/suggestor.js
+++ b/src/components/emoji_input/suggestor.js
@@ -1,3 +1,6 @@
+const MFM_TAGS = ['blur', 'bounce', 'flip', 'font', 'jelly', 'jump', 'rainbow', 'rotate', 'shake', 'sparkle', 'spin', 'tada', 'twitch', 'x2', 'x3', 'x4']
+  .map(tag => ({ displayText: tag, detailText: '$[' + tag + ' ]', replacement: '$[' + tag + ' ]', mfm: true }))
+
 /**
  * suggest - generates a suggestor function to be used by emoji-input
  * data: object providing source information for specific types of suggestions:
@@ -21,6 +24,10 @@ export default data => {
     if (firstChar === '@' && usersCurry) {
       return usersCurry(input)
     }
+    if (firstChar === '$') {
+      return MFM_TAGS
+        .filter(({ replacement }) => replacement.toLowerCase().indexOf(input) !== -1)
+    }
     return []
   }
 }