diff --git a/code/game/gamemodes/nuclear/pinpointer.dm b/code/game/gamemodes/nuclear/pinpointer.dm
index 13d4d9c4465..5054122fe14 100644
--- a/code/game/gamemodes/nuclear/pinpointer.dm
+++ b/code/game/gamemodes/nuclear/pinpointer.dm
@@ -361,6 +361,13 @@
if(istype(I, /obj/item/gun/energy/detective))
link_gun(I.UID())
+/obj/item/pinpointer/crew/emp_act(severity)
+ var/obj/item/gun/energy/detective/D = locateUID(linked_gun_UID)
+ if(!D)
+ return
+ D.unlink()
+ atom_say("EMP detected. Connection to revolver tracking system lost.")
+
/obj/item/pinpointer/crew/proc/link_gun(gun_UID)
var/obj/item/gun/energy/detective/D = locateUID(gun_UID)
if(!D)
diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm
index d7d9309fc90..13a1040fd26 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -792,6 +792,12 @@
. = ..()
. += "Ctrl-click to clear active tracked target or clear linked pinpointer."
+/obj/item/gun/energy/detective/emp_act(severity)
+ . = ..()
+ unlink()
+ atom_say("EMP detected. Pinpointer and tracker system reset.")
+
+
/obj/item/gun/energy/detective/CtrlClick(mob/user)
. = ..()
if(!isliving(loc)) //don't do this next bit if this gun is on the floor
@@ -804,15 +810,21 @@
if(linked_pinpointer_UID)
if(alert("Do you want to clear the linked pinpointer?", "Pinpointer reset", "Yes", "No") == "Yes")
to_chat(user, "[src] is ready to be linked to a new pinpointer.")
- var/obj/item/pinpointer/crew/C = locateUID(linked_pinpointer_UID)
- C.linked_gun_UID = null
- if(C.mode == MODE_DET)
- C.stop_tracking()
- linked_pinpointer_UID = null
+ unlink()
/obj/item/gun/energy/detective/proc/link_pinpointer(pinpointer_UID)
linked_pinpointer_UID = pinpointer_UID
+/obj/item/gun/energy/detective/proc/unlink()
+ var/obj/item/pinpointer/crew/C = locateUID(linked_pinpointer_UID)
+ if(!C)
+ return
+ C.linked_gun_UID = null
+ if(C.mode == MODE_DET)
+ C.stop_tracking()
+ linked_pinpointer_UID = null
+ tracking_target_UID = null
+
/obj/item/gun/energy/detective/multitool_act(mob/living/user, obj/item/I)
. = TRUE
user.visible_message("[user] starts [overcharged ? "restoring" : "removing"] the safety limits on [src].", "You start [overcharged ? "restoring" : "removing"] the safety limits on [src]")