diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index 137e9b8574fa..1c19a96cd32b 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -427,6 +427,25 @@ GENE SCANNER
icon_state = "health_adv"
desc = "A hand-held body scanner able to distinguish vital signs of the subject with high accuracy."
advanced = TRUE
+ var/list/advanced_surgeries = list()
+
+/obj/item/healthanalyzer/advanced/afterattack(obj/item/O, mob/user, proximity)
+ . = ..()
+ if(!proximity)
+ return
+ if(istype(O, /obj/item/disk/surgery))
+ to_chat(user, "You load the surgery protocol from [O] into [src].")
+ var/obj/item/disk/surgery/D = O
+ if(do_after(user, 10, target = O))
+ advanced_surgeries |= D.surgeries
+ return TRUE
+ if(istype(O, /obj/machinery/computer/operating))
+ to_chat(user, "You copy surgery protocols from [O] into [src].")
+ var/obj/machinery/computer/operating/OC = O
+ if(do_after(user, 10, target = O))
+ advanced_surgeries |= OC.advanced_surgeries
+ return TRUE
+ return
/obj/item/analyzer
desc = "A hand-held environmental scanner which reports current gas levels. Alt-Click to use the built in barometer function."
diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm
index 913e094def3c..d5ca4814c197 100644
--- a/code/modules/surgery/surgery.dm
+++ b/code/modules/surgery/surgery.dm
@@ -63,6 +63,13 @@
return FALSE
if(type in SP.advanced_surgeries)
return TRUE
+ else
+ var/mob/living/carbon/human/R = user
+ var/obj/item/healthanalyzer/advanced/adv = locate() in R.GetAllContents()
+ if(!adv || (replaced_by in adv.advanced_surgeries))
+ return FALSE
+ if(type in adv.advanced_surgeries)
+ return TRUE
var/turf/T = get_turf(target)