diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm
index e9d813c1439..68a2155da69 100644
--- a/code/modules/admin/verbs/adminpm.dm
+++ b/code/modules/admin/verbs/adminpm.dm
@@ -130,6 +130,9 @@
var/recieve_message = ""
+ pm_tracker.add_message(C, src, msg, mob)
+ C.pm_tracker.add_message(src, src, msg, C.mob)
+
if(holder && !C.holder)
recieve_message = "-- Click the [recieve_pm_type]'s name to reply --\n"
if(C.adminhelped)
@@ -233,3 +236,72 @@
continue
if(check_rights(R_ADMIN|R_MOD|R_MENTOR, 0, X.mob))
to_chat(X, "PM: [key_name(src, TRUE, 0)]->IRC-Admins: [msg]")
+
+/client/verb/open_pms_ui()
+ set name = "My PMs"
+ set category = "OOC"
+ pm_tracker.show_ui(usr)
+
+/datum/pm_tracker
+ var/list/pms = list()
+ var/current_title = ""
+ var/open = FALSE
+ var/window_id = "pms_window"
+
+/datum/pm_tracker/proc/add_message(var/client/title, var/client/sender, var/message, mob/user)
+ if(!pms[title.key])
+ pms[title.key] = list()
+ pms[title.key].Add("[sender]: [message]")
+
+ if(!open)
+ // The next time the window's opened, it'll be open to the most recent message
+ current_title = title.key
+ return
+
+ // If it's already opened, it'll refresh
+ show_ui(user)
+
+/datum/pm_tracker/proc/show_ui(mob/user)
+ var/dat = ""
+
+ dat += "Refresh"
+ dat += "
"
+ for(var/title in pms)
+ var/label = "[title]"
+ if(title == current_title)
+ label = "[label]"
+ dat += "[label]"
+
+ dat += "
| [message] |