diff --git a/code/modules/surgery/advanced/brainwashing.dm b/code/modules/surgery/advanced/brainwashing.dm
index bc397b7c66..79fd65ad6d 100644
--- a/code/modules/surgery/advanced/brainwashing.dm
+++ b/code/modules/surgery/advanced/brainwashing.dm
@@ -25,7 +25,7 @@
/datum/surgery_step/brainwash
name = "brainwash"
- implements = list(/obj/item/hemostat = 85, /obj/item/wirecutters = 50, /obj/item/stack/packageWrap = 35, /obj/item/stack/cable_coil = 15)
+ implements = list(/obj/item/hemostat = 85, TOOL_WIRECUTTER = 50, /obj/item/stack/packageWrap = 35, /obj/item/stack/cable_coil = 15)
time = 200
var/objective
diff --git a/code/modules/surgery/advanced/necrotic_revival.dm b/code/modules/surgery/advanced/necrotic_revival.dm
index 877fd40adf..1574725565 100644
--- a/code/modules/surgery/advanced/necrotic_revival.dm
+++ b/code/modules/surgery/advanced/necrotic_revival.dm
@@ -21,7 +21,7 @@
/datum/surgery_step/bionecrosis
name = "start bionecrosis"
- implements = list(/obj/item/hemostat = 100, /obj/item/screwdriver = 35, /obj/item/pen = 15)
+ implements = list(/obj/item/hemostat = 100, TOOL_SCREWDRIVER = 35, /obj/item/pen = 15)
time = 50
/datum/surgery_step/bionecrosis/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
diff --git a/code/modules/surgery/advanced/pacification.dm b/code/modules/surgery/advanced/pacification.dm
index f692e12fce..15fd74388c 100644
--- a/code/modules/surgery/advanced/pacification.dm
+++ b/code/modules/surgery/advanced/pacification.dm
@@ -23,7 +23,7 @@
/datum/surgery_step/pacify
name = "rewire brain"
- implements = list(/obj/item/hemostat = 100, /obj/item/screwdriver = 35, /obj/item/pen = 15)
+ implements = list(/obj/item/hemostat = 100, TOOL_SCREWDRIVER = 35, /obj/item/pen = 15)
time = 40
/datum/surgery_step/pacify/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
diff --git a/code/modules/surgery/advanced/reconstruction.dm b/code/modules/surgery/advanced/reconstruction.dm
index 39758a4b98..21e9d8afea 100644
--- a/code/modules/surgery/advanced/reconstruction.dm
+++ b/code/modules/surgery/advanced/reconstruction.dm
@@ -20,7 +20,7 @@
/datum/surgery_step/reconstruct
name = "repair body"
- implements = list(/obj/item/hemostat = 100, /obj/item/screwdriver = 35, /obj/item/pen = 15)
+ implements = list(/obj/item/hemostat = 100, TOOL_SCREWDRIVER = 35, /obj/item/pen = 15)
repeatable = TRUE
time = 25
diff --git a/code/modules/surgery/advanced/viral_bonding.dm b/code/modules/surgery/advanced/viral_bonding.dm
index bf1e90622b..aa8996d048 100644
--- a/code/modules/surgery/advanced/viral_bonding.dm
+++ b/code/modules/surgery/advanced/viral_bonding.dm
@@ -23,29 +23,14 @@
/datum/surgery_step/viral_bond
name = "viral bond"
- implements = list(/obj/item/cautery = 100, /obj/item/weldingtool = 50,
- /obj/item/lighter = 35, /obj/item/match = 30)
+ implements = list(/obj/item/cautery = 100, TOOL_WELDER = 50, /obj/item = 30) // 30% success with any hot item.
time = 100
/datum/surgery_step/viral_bond/tool_check(mob/user, obj/item/tool)
- if(istype(tool, /obj/item/cautery))
- return TRUE
+ if(implement_type == TOOL_WELDER || implement_type == /obj/item)
+ return tool.is_hot()
- if(istype(tool, /obj/item/weldingtool))
- var/obj/item/weldingtool/WT = tool
- if(WT.isOn())
- return TRUE
-
- else if(istype(tool, /obj/item/lighter))
- var/obj/item/lighter/L = tool
- if(L.lit)
- return TRUE
-
- else if(istype(tool, /obj/item/match))
- var/obj/item/match/M = tool
- if(M.lit)
- return TRUE
- return FALSE
+ return TRUE
/datum/surgery_step/viral_bond/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
user.visible_message("[user] starts heating [target]'s bone marrow with [tool]...", "You start heating [target]'s bone marrow with [tool]...")
diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm
index 51449976cc..ef0101d36a 100644
--- a/code/modules/surgery/organs/augments_arms.dm
+++ b/code/modules/surgery/organs/augments_arms.dm
@@ -41,16 +41,15 @@
..()
to_chat(user, "[src] is assembled in the [zone == "r_arm" ? "right" : "left"] arm configuration. You can use a screwdriver to reassemble it.")
-/obj/item/organ/cyberimp/arm/attackby(obj/item/W, mob/user, params)
- ..()
- if(istype(W, /obj/item/screwdriver))
- if(zone == "r_arm")
- zone = "l_arm"
- else
- zone = "r_arm"
- SetSlotFromZone()
- to_chat(user, "You modify [src] to be installed on the [zone == "r_arm" ? "right" : "left"] arm.")
- update_icon()
+/obj/item/organ/cyberimp/arm/screwdriver_act(mob/living/user, obj/item/I)
+ I.play_tool_sound(src)
+ if(zone == "r_arm")
+ zone = "l_arm"
+ else
+ zone = "r_arm"
+ SetSlotFromZone()
+ to_chat(user, "You modify [src] to be installed on the [zone == "r_arm" ? "right" : "left"] arm.")
+ update_icon()
/obj/item/organ/cyberimp/arm/Remove(mob/living/carbon/M, special = 0)
Retract()
diff --git a/code/modules/surgery/organs/autosurgeon.dm b/code/modules/surgery/organs/autosurgeon.dm
index b7d4a77f72..136310e9a2 100644
--- a/code/modules/surgery/organs/autosurgeon.dm
+++ b/code/modules/surgery/organs/autosurgeon.dm
@@ -53,19 +53,26 @@
return
storedorgan = I
to_chat(user, "You insert the [I] into [src].")
- else if(istype(I, /obj/item/screwdriver))
- if(!storedorgan)
- to_chat(user, "There's no implant in [src] for you to remove.")
- else
- var/turf/open/floorloc = get_turf(user)
- floorloc.contents += contents
- to_chat(user, "You remove the [storedorgan] from [src].")
- I.play_tool_sound(src)
- storedorgan = null
- if(uses != INFINITE)
- uses--
- if(!uses)
- desc = "[initial(desc)] Looks like it's been used up."
+ else
+ return ..()
+
+/obj/item/device/autosurgeon/screwdriver_act(mob/living/user, obj/item/I)
+ if(!storedorgan)
+ to_chat(user, "There's no implant in [src] for you to remove.")
+ else
+ var/atom/drop_loc = user.drop_location()
+ for(var/J in src)
+ var/atom/movable/AM = J
+ AM.forceMove(drop_loc)
+
+ to_chat(user, "You remove the [storedorgan] from [src].")
+ I.play_tool_sound(src)
+ storedorgan = null
+ if(uses != INFINITE)
+ uses--
+ if(!uses)
+ desc = "[initial(desc)] Looks like it's been used up."
+ return TRUE
/obj/item/device/autosurgeon/cmo
desc = "A single use autosurgeon that contains a medical heads-up display augment. A screwdriver can be used to remove it, but implants can't be placed back in."