diff --git a/src/org/thoughtcrime/securesms/components/emoji/EmojiSpan.java b/src/org/thoughtcrime/securesms/components/emoji/EmojiSpan.java
index 5a15d78f3f..d784165a51 100644
--- a/src/org/thoughtcrime/securesms/components/emoji/EmojiSpan.java
+++ b/src/org/thoughtcrime/securesms/components/emoji/EmojiSpan.java
@@ -1,5 +1,6 @@
 package org.thoughtcrime.securesms.components.emoji;
 
+import android.graphics.Canvas;
 import android.graphics.Paint;
 import android.graphics.Paint.FontMetricsInt;
 import android.graphics.drawable.Drawable;
@@ -9,6 +10,9 @@ import android.widget.TextView;
 import org.thoughtcrime.securesms.R;
 
 public class EmojiSpan extends AnimatingImageSpan {
+
+  private final float SHIFT_FACTOR = 1.5f;
+
   private final int            size;
   private final FontMetricsInt fm;
 
@@ -20,17 +24,25 @@ public class EmojiSpan extends AnimatingImageSpan {
     getDrawable().setBounds(0, 0, size, size);
   }
 
-  @Override public int getSize(Paint paint, CharSequence text, int start, int end,
-                               FontMetricsInt fm)
-  {
+  @Override
+  public int getSize(Paint paint, CharSequence text, int start, int end, FontMetricsInt fm) {
     if (fm != null && this.fm != null) {
       fm.ascent  = this.fm.ascent;
       fm.descent = this.fm.descent;
       fm.top     = this.fm.top;
       fm.bottom  = this.fm.bottom;
+      fm.leading = this.fm.leading;
       return size;
     } else {
       return super.getSize(paint, text, start, end, fm);
     }
   }
+
+  @Override
+  public void draw(Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, Paint paint) {
+    int height          = bottom - top;
+    int centeringMargin = (height - size) / 2;
+    int adjustedMargin  = (int) (centeringMargin * SHIFT_FACTOR);
+    super.draw(canvas, text, start, end, x, top, y, bottom - adjustedMargin, paint);
+  }
 }