diff --git a/src/database/entities/message.rs b/src/database/entities/message.rs
index 4de99ff9dba54ab866b8b6920998cff440ab56e1..34b3bbfeebee40492dc4479652484e02e9706e00 100644
--- a/src/database/entities/message.rs
+++ b/src/database/entities/message.rs
@@ -268,7 +268,7 @@ impl Message {
         ClientboundNotification::MessageUpdate {
             id: self.id.clone(),
             channel: self.channel.clone(),
-            data,
+            data
         }
         .publish(channel);
         self.process_embed();
@@ -282,6 +282,8 @@ impl Message {
         }
 
         if let Content::Text(text) = &self.content {
+            // ! FIXME: re-write this at some point,
+            // ! or just before we allow user generated embeds
             let id = self.id.clone();
             let content = text.clone();
             let channel = self.channel.clone();
@@ -305,7 +307,7 @@ impl Message {
                             ClientboundNotification::MessageUpdate {
                                 id,
                                 channel: channel.clone(),
-                                data: json!({ "embeds": embeds }),
+                                data: json!({ "embeds": embeds })
                             }
                             .publish(channel);
                         }
diff --git a/src/notifications/events.rs b/src/notifications/events.rs
index 4a105dc84c07e34c543fb3d8dd1d85c75e8604ac..6ed1aaa897b8f59fc9eeda0258845aa9a1cbfbb4 100644
--- a/src/notifications/events.rs
+++ b/src/notifications/events.rs
@@ -70,7 +70,7 @@ pub enum ClientboundNotification {
     MessageUpdate {
         id: String,
         channel: String,
-        data: JsonValue,
+        data: JsonValue
     },
     MessageDelete {
         id: String,
diff --git a/src/routes/channels/message_edit.rs b/src/routes/channels/message_edit.rs
index 15cdc48d8f91133e5d7736f8a0774b24cb356fd3..d33d60bda243557182611a897b5490a43025d821 100644
--- a/src/routes/channels/message_edit.rs
+++ b/src/routes/channels/message_edit.rs
@@ -2,7 +2,7 @@ use crate::database::*;
 use crate::util::result::{Error, Result};
 
 use chrono::Utc;
-use mongodb::bson::{doc, Bson, DateTime};
+use mongodb::bson::{Bson, DateTime, Document, doc};
 use rocket_contrib::json::Json;
 use serde::{Deserialize, Serialize};
 use validator::Validate;
@@ -33,16 +33,37 @@ pub async fn req(user: User, target: Ref, msg: Ref, edit: Json<Data>) -> Result<
     }
 
     let edited = Utc::now();
+    let mut set = doc! {
+        "content": &edit.content,
+        "edited": Bson::DateTime(edited)
+    };
+
+    let mut update = json!({ "content": edit.content, "edited": DateTime(edited) });
+
+    if let Some(embeds) = &message.embeds {
+        let new_embeds: Vec<Document> = vec![];
+
+        for embed in embeds {
+            match embed {
+                Embed::Website(_) |
+                Embed::Image(_) |
+                Embed::None => { }
+                // Otherwise push to new_embeds.
+            }
+        }
+
+        let obj = update.as_object_mut().unwrap();
+        obj.insert("embeds".to_string(), json!(new_embeds).0);
+        set.insert("embeds", new_embeds);
+    }
+
     get_collection("messages")
         .update_one(
             doc! {
                 "_id": &message.id
             },
             doc! {
-                "$set": {
-                    "content": &edit.content,
-                    "edited": Bson::DateTime(edited)
-                }
+                "$set": set
             },
             None,
         )
@@ -53,6 +74,6 @@ pub async fn req(user: User, target: Ref, msg: Ref, edit: Json<Data>) -> Result<
         })?;
 
     message
-        .publish_update(json!({ "content": edit.content, "edited": DateTime(edited) }))
+        .publish_update(update)
         .await
 }