diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm
index d54311921fd..050e01dcf61 100644
--- a/code/datums/uplink_item.dm
+++ b/code/datums/uplink_item.dm
@@ -347,6 +347,17 @@ var/list/uplink_items = list()
cost = 2
job = list("Research Director","Chief Medical Officer","Medical Doctor","Psychiatrist","Paramedic","Virologist","Bartender")
+// Paper contact poison pen
+
+/datum/uplink_item/stealthy_weapons/poison_pen
+ name = "Poison Pen"
+ desc = "Cutting edge of deadly writing implements technology, this gadget will infuse any piece of paper with delayed contact poison."
+ item = /obj/item/weapon/pen/poison
+ cost = 5
+ excludefrom = list(/datum/game_mode/nuclear)
+ job = list("Head of Personnel", "Quartermaster", "Cargo Technician")
+
+
// DANGEROUS WEAPONS
/datum/uplink_item/dangerous
diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm
index a5f04461551..7a2ae8b8e96 100644
--- a/code/modules/paperwork/paper.dm
+++ b/code/modules/paperwork/paper.dm
@@ -31,6 +31,8 @@
var/offset_y[0] //usage by the photocopier
var/rigged = 0
var/spam_flag = 0
+ var/contact_poison // Reagent ID to transfer on contact
+ var/contact_poison_volume = 0
var/const/deffont = "Verdana"
var/const/signfont = "Times New Roman"
@@ -278,6 +280,8 @@
info += t // Oh, he wants to edit to the end of the file, let him.
updateinfolinks()
+ i.on_write(src,usr)
+
show_content(usr, forceshow = 1, infolinks = 1)
update_icon()
@@ -653,3 +657,12 @@
/obj/item/weapon/paper/evilfax/proc/evilpaper_selfdestruct()
visible_message("[src] spontaneously catches fire, and burns up!")
qdel(src)
+
+/obj/item/weapon/paper/pickup(user)
+ if(contact_poison && ishuman(user))
+ var/mob/living/carbon/human/H = user
+ var/obj/item/clothing/gloves/G = H.gloves
+ if(!istype(G) || G.transfer_prints)
+ H.reagents.add_reagent(contact_poison, contact_poison_volume)
+ contact_poison = null
+ ..()
\ No newline at end of file
diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm
index d7f86727d87..72fd065af3b 100644
--- a/code/modules/paperwork/pen.dm
+++ b/code/modules/paperwork/pen.dm
@@ -182,3 +182,21 @@
else
icon_state = initial(icon_state) //looks like a normal pen when off.
item_state = initial(item_state)
+
+/obj/item/proc/on_write(obj/item/weapon/paper/P, mob/user)
+ return
+
+/obj/item/weapon/pen/poison
+ var/uses_left = 3
+
+/obj/item/weapon/pen/poison/on_write(obj/item/weapon/paper/P, mob/user)
+ if(P.contact_poison_volume)
+ to_chat(user, "[P] is already coated.")
+ else if(uses_left)
+ uses_left--
+ P.contact_poison = "sarin"
+ P.contact_poison_volume = 15
+ add_logs(user, P, "used poison pen on")
+ to_chat(user, "You apply the poison to [P].")
+ else
+ to_chat(user, "[src] clicks. It seems to be depleted.")
\ No newline at end of file