diff --git a/src/matrixeventprocessor.ts b/src/matrixeventprocessor.ts
index 55061171406ef273b1b3273900aa359d7ccb8e18..3d6aeea9e00d3ef2cb632309bec77269283e96d2 100644
--- a/src/matrixeventprocessor.ts
+++ b/src/matrixeventprocessor.ts
@@ -11,6 +11,8 @@ import * as log from "npmlog";
 const MaxFileSize = 8000000;
 const MIN_NAME_LENGTH = 2;
 const MAX_NAME_LENGTH = 32;
+const DISCORD_EMOJI_REGEX = /:(\w+):/g;
+
 export class MatrixEventProcessorOpts {
     constructor(
         readonly config: DiscordBridgeConfig,
@@ -45,6 +47,10 @@ export class MatrixEventProcessor {
         if (this.config.bridge.disableHereMention) {
             body = body.replace(new RegExp(`@here`, "g"), "@ here");
         }
+
+        // Handle discord custom emoji
+        body = this.ReplaceDiscordEmoji(body, channel.guild);
+
         let displayName = event.sender;
         let avatarUrl = undefined;
         if (profile) {
@@ -92,6 +98,25 @@ export class MatrixEventProcessor {
         return body;
     }
 
+    public ReplaceDiscordEmoji(content: string, guild: Discord.Guild): string {
+        console.log("Gonna replace")
+        let results = DISCORD_EMOJI_REGEX.exec(content);
+        while (results !== null) {
+            const emojiName = results[1];
+            const emojiNameWithColons = results[0];
+
+            // Check if this emoji exists in the guild
+            if(guild.emojis[emojiName] !== null) {
+                // Replace :a: with <:a:123ID123>
+                const emojiID = guild.emojis.find((emoji) => { return emoji.name === emojiName }).id;
+                content = content.replace(emojiNameWithColons, `<${emojiNameWithColons}${emojiID}>`);
+            }
+
+            results = DISCORD_EMOJI_REGEX.exec(content);
+        }
+        return content;
+    }
+
     public async HandleAttachment(event: any, mxClient: any): Promise<string|Discord.FileOptions> {
         const hasAttachment = [
             "m.image",
diff --git a/src/messageprocessor.ts b/src/messageprocessor.ts
index f02893357d4fd442546ed0a3beb85fae02053163..919322fbd232b33f166d814f8c5e0d4718e947f0 100644
--- a/src/messageprocessor.ts
+++ b/src/messageprocessor.ts
@@ -25,7 +25,6 @@ export class MessageProcessorOpts {
     constructor (readonly domain: string, readonly bot: DiscordBot = null) {
 
     }
-
 }
 
 export class MessageProcessorMatrixResult {
@@ -163,7 +162,9 @@ export class MessageProcessor {
                     `Could not insert emoji ${id} for msg ${msg.id} in guild ${msg.guild.id}: ${ex}`,
                 );
             }
+
             results = EMOJI_REGEX.exec(content);
+
         }
         return content;
     }
diff --git a/test/test_matrixeventprocessor.ts b/test/test_matrixeventprocessor.ts
index 07c4efe7e547e2182702ed939ed9236bfe992a98..f4e032e164d9c1257f035a8d62e8ba15bcc01d96 100644
--- a/test/test_matrixeventprocessor.ts
+++ b/test/test_matrixeventprocessor.ts
@@ -204,6 +204,7 @@ describe("MatrixEventProcessor", () => {
             }, {avatar_url: "test"}, mockChannel as any);
             Chai.assert.equal(evt.description, "@ here Hello!");
         });
+        // TODO: Add a test for replaceDiscordEmoji
     });
     describe("FindMentionsInPlainBody", () => {
         it("processes mentioned username correctly", async () => {