diff --git a/src/mail_event.rs b/src/mail_event.rs
index bfc2142..9f0ef13 100644
--- a/src/mail_event.rs
+++ b/src/mail_event.rs
@@ -1,4 +1,4 @@
-use nostr::{Event, EventBuilder, Keys, Kind, PublicKey, Tag, TagKind, TagStandard};
+use nostr::{Event, EventBuilder, Keys, Kind, PublicKey, Tag, TagKind, TagStandard, EventId};
 use pollster::FutureExt as _;
 use std::collections::HashMap;
 
@@ -8,6 +8,8 @@ pub struct MailMessage {
     pub to: Vec<PublicKey>,
     pub cc: Vec<PublicKey>,
     pub bcc: Vec<PublicKey>,
+    /// The events that this message references, uses to keep track of threads.
+    pub parent_events: Vec<EventId>,
     pub subject: String,
     pub content: String,
 }
@@ -29,6 +31,10 @@ impl MailMessage {
             ));
             pubkeys_to_send_to.push(*pubkey);
         }
+        
+        for event in &self.parent_events {
+            tags.push(Tag::event(*event));
+        }
 
         tags.push(Tag::from_standardized(TagStandard::Subject(
             self.subject.clone(),
diff --git a/src/main.rs b/src/main.rs
index 8b26f43..9ea3710 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -5,7 +5,8 @@ use egui::FontFamily::Proportional;
 use egui_extras::{Column, TableBuilder};
 use relay::RelayMessage;
 use std::collections::HashMap;
-use nostr::{SingleLetterTag, TagKind};
+use std::str::FromStr;
+use nostr::{EventId, SingleLetterTag, TagKind};
 use tracing::{debug, error, info, Level};
 
 mod account_manager;
@@ -223,6 +224,7 @@ fn render_app(app: &mut Hoot, ctx: &egui::Context) {
                         subject: String::new(),
                         to_field: String::new(),
                         content: String::new(),
+                        parent_events: Vec::new(),
                         selected_account: None,
                         minimized: false,
                     };
@@ -416,10 +418,23 @@ fn render_app(app: &mut Hoot, ctx: &egui::Context) {
                                 // TODO: Handle delete
                             }
                             if ui.button("↩️ Reply").clicked() {
+                                let mut parent_events: Vec<EventId> = Vec::new();
+                                parent_events.push(unwrapped.rumor.id.unwrap());
+                                for tag in unwrapped.rumor.tags {
+                                    if tag.kind() == TagKind::SingleLetter(SingleLetterTag::from_char('e').unwrap()) {
+                                        if let Some(content) = tag.content() {
+                                            match EventId::from_str(content) {
+                                                Ok(id) => parent_events.push(id),
+                                                Err(e) => error!("Error trying to add event to compose_window parent_events vec: {}", e),
+                                            }
+                                        }
+                                    }
+                                }
                                 let state = ui::compose_window::ComposeWindowState {
                                     subject: format!("Re: {}", subject),
                                     to_field: unwrapped.sender.to_string(),
                                     content: String::new(),
+                                    parent_events,
                                     selected_account: None,
                                     minimized: false,
                                 };
diff --git a/src/ui/compose_window.rs b/src/ui/compose_window.rs
index 5fd9a76..588f86d 100644
--- a/src/ui/compose_window.rs
+++ b/src/ui/compose_window.rs
@@ -1,13 +1,14 @@
 use crate::mail_event::MailMessage;
 use crate::relay::ClientMessage;
 use eframe::egui::{self, RichText};
-use nostr::{Keys, PublicKey};
+use nostr::{EventId, Keys, PublicKey};
 use tracing::{debug, error, info};
 
 #[derive(Debug, Clone)]
 pub struct ComposeWindowState {
     pub subject: String,
     pub to_field: String,
+    pub parent_events: Vec<EventId>,
     pub content: String,
     pub selected_account: Option<Keys>,
     pub minimized: bool,
@@ -106,6 +107,7 @@ impl ComposeWindow {
                                     to: recipient_keys,
                                     cc: vec![],
                                     bcc: vec![],
+                                    parent_events: state.parent_events.clone(),
                                     subject: state.subject.clone(),
                                     content: state.content.clone(),
                                 };