diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm
index 534d1a9a419..0d64e1718e8 100644
--- a/code/game/machinery/cell_charger.dm
+++ b/code/game/machinery/cell_charger.dm
@@ -101,13 +101,7 @@
if(charging)
to_chat(user, "Remove the cell first!")
return
- if(!I.use_tool(src, user, 0, volume = I.tool_volume))
- return
- anchored = !anchored
- if(anchored)
- WRENCH_ANCHOR_MESSAGE
- else
- WRENCH_UNANCHOR_MESSAGE
+ default_unfasten_wrench(user, I, 0)
/obj/machinery/cell_charger/proc/removecell()
charging.update_icon()
diff --git a/code/game/machinery/computer/ai_core.dm b/code/game/machinery/computer/ai_core.dm
index c4cc59cfa0c..f7aad9e1845 100644
--- a/code/game/machinery/computer/ai_core.dm
+++ b/code/game/machinery/computer/ai_core.dm
@@ -205,8 +205,6 @@
/obj/structure/AIcore/wrench_act(mob/living/user, obj/item/I)
. = TRUE
- if(!I.tool_use_check(user, 0))
- return
default_unfasten_wrench(user, I, 20)
/obj/structure/AIcore/update_icon_state()
diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm
index ec64bbc5128..baf96d4111c 100644
--- a/code/game/machinery/computer/buildandrepair.dm
+++ b/code/game/machinery/computer/buildandrepair.dm
@@ -632,15 +632,7 @@
/obj/structure/computerframe/wrench_act(mob/living/user, obj/item/I)
. = TRUE
- if(!I.use_tool(src, user, 2 SECONDS, volume = I.tool_volume))
- return
-
- if(anchored)
- to_chat(user, "You unfasten the frame.")
- anchored = FALSE
- else
- to_chat(user, "You wrench the frame into place.")
- anchored = TRUE
+ default_unfasten_wrench(user, I, 2 SECONDS)
/obj/structure/computerframe/crowbar_act(mob/living/user, obj/item/I)
. = TRUE
diff --git a/code/game/machinery/doppler_array.dm b/code/game/machinery/doppler_array.dm
index 750026ad908..21117233e45 100644
--- a/code/game/machinery/doppler_array.dm
+++ b/code/game/machinery/doppler_array.dm
@@ -47,15 +47,8 @@ GLOBAL_LIST_EMPTY(doppler_arrays)
/obj/machinery/doppler_array/wrench_act(mob/user, obj/item/I)
. = TRUE
- if(!I.use_tool(src, user, 0, volume = I.tool_volume))
+ if(!default_unfasten_wrench(user, I, 0))
return
- if(!anchored && !isinspace())
- anchored = TRUE
- WRENCH_ANCHOR_MESSAGE
- else if(anchored)
- anchored = FALSE
- WRENCH_UNANCHOR_MESSAGE
- power_change()
update_icon(UPDATE_ICON_STATE)
/obj/machinery/doppler_array/attack_hand(mob/user)
diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm
index c1cd7049fd0..0603664c3f3 100644
--- a/code/game/machinery/machinery.dm
+++ b/code/game/machinery/machinery.dm
@@ -131,6 +131,14 @@
stat |= NOPOWER
return old_stat != stat //performance saving for machines that use power_change() to update icons!
+/obj/machinery/proc/reregister_machine()
+ if(machine_powernet?.powernet_area != get_area(src))
+ var/area/machine_area = get_area(src)
+ if(machine_area)
+ machine_powernet?.unregister_machine(src)
+ machine_powernet = machine_area.powernet
+ machine_powernet.register_machine(src)
+
/// Helper proc to change the machines power usage mode, automatically adjusts static power usage to maintain perfect parity
/obj/machinery/proc/change_power_mode(use_type = IDLE_POWER_USE)
if(isnull(use_type) || use_type == power_state || !machine_powernet || !power_channel) //if there is no powernet/channel, just end it here
@@ -320,6 +328,7 @@
/obj/machinery/default_unfasten_wrench(mob/user, obj/item/I, time)
. = ..()
if(.)
+ reregister_machine()
power_change()
/obj/machinery/attackby(obj/item/O, mob/user, params)
diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm
index fc88f1f51ad..0d899321dec 100644
--- a/code/game/machinery/recharger.dm
+++ b/code/game/machinery/recharger.dm
@@ -97,13 +97,7 @@
if(charging)
to_chat(user, "Remove the charging item first!")
return
- if(!I.use_tool(src, user, 0, volume = I.tool_volume))
- return
- anchored = !anchored
- if(anchored)
- WRENCH_ANCHOR_MESSAGE
- else
- WRENCH_UNANCHOR_MESSAGE
+ default_unfasten_wrench(user, I, 0)
/obj/machinery/recharger/attack_hand(mob/user)
if(issilicon(user))
diff --git a/code/game/machinery/snow_machine.dm b/code/game/machinery/snow_machine.dm
index d55ccb6366b..b5c4be8434a 100644
--- a/code/game/machinery/snow_machine.dm
+++ b/code/game/machinery/snow_machine.dm
@@ -54,7 +54,7 @@
/obj/machinery/snow_machine/wrench_act(mob/user, obj/item/I)
. = TRUE
- if(!I.use_tool(src, user, 0, volume = I.tool_volume))
+ if(!default_unfasten_wrench(user, I, 0))
return
anchored = !anchored
to_chat(user, "You [anchored ? "tighten" : "loosen"] [src]'s wheels.")
diff --git a/code/modules/atmospherics/machinery/portable/scrubber.dm b/code/modules/atmospherics/machinery/portable/scrubber.dm
index e7a90ce337f..9a798b8ef06 100644
--- a/code/modules/atmospherics/machinery/portable/scrubber.dm
+++ b/code/modules/atmospherics/machinery/portable/scrubber.dm
@@ -202,10 +202,7 @@
if(on)
to_chat(user, "Turn it off first!")
return
- if(!I.use_tool(src, user, 0, volume = I.tool_volume))
- return
- anchored = !anchored
- to_chat(user, "You [anchored ? "wrench" : "unwrench"] [src].")
+ default_unfasten_wrench(user, I, 4 SECONDS)
/obj/machinery/atmospherics/portable/scrubber/huge/stationary
name = "Stationary Air Scrubber"
diff --git a/code/modules/food_and_drinks/drinks/bottler/bottler.dm b/code/modules/food_and_drinks/drinks/bottler/bottler.dm
index 2e5e2ac8e3b..55150c6e769 100644
--- a/code/modules/food_and_drinks/drinks/bottler/bottler.dm
+++ b/code/modules/food_and_drinks/drinks/bottler/bottler.dm
@@ -86,13 +86,7 @@
/obj/machinery/bottler/wrench_act(mob/user, obj/item/I)
. = TRUE
- if(!I.use_tool(src, user, 0, volume = I.tool_volume))
- return
- anchored = !anchored
- if(anchored)
- WRENCH_ANCHOR_MESSAGE
- else
- WRENCH_UNANCHOR_MESSAGE
+ default_unfasten_wrench(user, I, 0)
/obj/machinery/bottler/proc/insert_item(obj/item/O, mob/user)
if(!O || !user)
diff --git a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
index fff98c5a86e..ea92ab36e5e 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
@@ -203,6 +203,4 @@
/obj/machinery/cooker/deepfryer/wrench_act(mob/user, obj/item/I)
. = TRUE
- if(!I.tool_use_check(user, 0))
- return
default_unfasten_wrench(user, I, 30)
diff --git a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm b/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm
index 0b5b2fe16cf..d66fcbac0f2 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm
@@ -263,7 +263,5 @@
/obj/machinery/icemachine/wrench_act(mob/user, obj/item/I)
. = TRUE
- if(!I.tool_use_check(user, 0))
- return
default_unfasten_wrench(user, I, 30)
diff --git a/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm b/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm
index 36f707765e6..fc4a4fe7859 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm
@@ -129,12 +129,7 @@
if(operating)
return
- I.play_tool_sound(src)
- if(anchored)
- to_chat(user, "[src] can now be moved.")
- else
- to_chat(user, "[src] is now secured.")
- anchored = !anchored
+ default_unfasten_wrench(user, I, 0)
return TRUE
/obj/machinery/kitchen_machine/proc/add_item(obj/item/I, mob/user)
diff --git a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
index a4aa0fc0c61..bcfb364c33c 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm
@@ -158,8 +158,6 @@
/obj/machinery/smartfridge/wrench_act(mob/living/user, obj/item/I)
. = default_unfasten_wrench(user, I, time = 4 SECONDS)
- if(.)
- power_change()
/obj/machinery/smartfridge/crowbar_act(mob/living/user, obj/item/I)
. = default_deconstruction_crowbar(user, I)
diff --git a/code/modules/hydroponics/hydroponics_tray.dm b/code/modules/hydroponics/hydroponics_tray.dm
index f75d2a7a6f9..c284393cfbf 100644
--- a/code/modules/hydroponics/hydroponics_tray.dm
+++ b/code/modules/hydroponics/hydroponics_tray.dm
@@ -901,24 +901,7 @@
if(using_irrigation)
to_chat(user, "Disconnect the hoses first!")
return
-
- if(!anchored && !isinspace())
- user.visible_message("[user] begins to wrench [src] into place.", "You begin to wrench [src] in place...")
- if(I.use_tool(src, user, 20, volume = I.tool_volume))
- if(anchored)
- return
- anchored = TRUE
- user.visible_message("[user] wrenches [src] into place.", \
- "You wrench [src] in place.")
- else if(anchored)
- user.visible_message("[user] begins to unwrench [src].", \
- "You begin to unwrench [src]...")
- if(I.use_tool(src, user, 20, volume = I.tool_volume))
- if(!anchored)
- return
- anchored = FALSE
- user.visible_message("[user] unwrenches [src].", \
- "You unwrench [src].")
+ default_unfasten_wrench(user, I)
/obj/machinery/hydroponics/attack_hand(mob/user)
if(issilicon(user)) //How does AI know what plant is?
diff --git a/code/modules/power/generators/thermo_electric_generator.dm b/code/modules/power/generators/thermo_electric_generator.dm
index 9edacf5a153..e052cf96bdc 100644
--- a/code/modules/power/generators/thermo_electric_generator.dm
+++ b/code/modules/power/generators/thermo_electric_generator.dm
@@ -191,7 +191,7 @@
/obj/machinery/power/teg/wrench_act(mob/user, obj/item/I)
. = TRUE
- if(!I.use_tool(src, user, 0, volume = I.tool_volume))
+ if(!default_unfasten_wrench(user, I, 0))
return
anchored = !anchored
if(!anchored)
diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
index 7829480846e..f1ea39e8b04 100644
--- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm
@@ -294,14 +294,7 @@
/obj/machinery/chem_dispenser/wrench_act(mob/user, obj/item/I)
. = TRUE
- if(!I.use_tool(src, user, 4 SECONDS, volume = I.tool_volume))
- return
- if(anchored)
- anchored = FALSE
- WRENCH_UNANCHOR_MESSAGE
- else if(!anchored)
- anchored = TRUE
- WRENCH_ANCHOR_MESSAGE
+ default_unfasten_wrench(user, I, 4 SECONDS)
/obj/machinery/chem_dispenser/attack_ai(mob/user)
return attack_hand(user)
diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm
index 487a7b56a6a..3d5d5cdfdb2 100644
--- a/code/modules/reagents/chemistry/machinery/chem_master.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_master.dm
@@ -148,9 +148,7 @@
/obj/machinery/chem_master/wrench_act(mob/user, obj/item/I)
if(panel_open)
return
- if(default_unfasten_wrench(user, I, time = 4 SECONDS))
- power_change()
- return TRUE
+ default_unfasten_wrench(user, I, 4 SECONDS)
/obj/machinery/chem_master/ui_act(action, params, datum/tgui/ui, datum/ui_state/state)
if(..())