diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm
index a59bb5cfb54..62ff77a0a9d 100644
--- a/code/game/machinery/constructable_frame.dm
+++ b/code/game/machinery/constructable_frame.dm
@@ -333,7 +333,7 @@ to destroy them and players will be able to make replacements.
return
S.playtoolsound(loc, 50)
soldering = 1
- if(do_after(user, src,40))
+ if(do_after(user, src,4 SECONDS * S.work_speed))
var/boardType = allowed_boards[t]
var/obj/item/I = new boardType(get_turf(user))
to_chat(user, "You fashion a crude [I] from the blank circuitboard.")
diff --git a/code/game/machinery/doors/airlock_electronics.dm b/code/game/machinery/doors/airlock_electronics.dm
index 586393b03d8..5d06ca66b72 100644
--- a/code/game/machinery/doors/airlock_electronics.dm
+++ b/code/game/machinery/doors/airlock_electronics.dm
@@ -33,7 +33,7 @@
if(!S.remove_fuel(4,user))
return
S.playtoolsound(loc, 100)
- if(do_after(user, src,40))
+ if(do_after(user, src,4 SECONDS * S.work_speed))
S.playtoolsound(loc, 100)
icon_state = "door_electronics"
to_chat(user, "You repair the blown fuses on the circuitboard.")
diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm
index fe8091e5384..b75750e5fed 100644
--- a/code/game/machinery/suit_storage_unit.dm
+++ b/code/game/machinery/suit_storage_unit.dm
@@ -639,7 +639,7 @@
if(!S.remove_fuel(4,user))
return
S.playtoolsound(loc, 100)
- if(do_after(user, src,40))
+ if(do_after(user, src,4 SECONDS * S.work_speed))
S.playtoolsound(loc, 100)
stat &= !BROKEN
emagged = FALSE
diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm
index 0046cd08d38..3fe5e362410 100644
--- a/code/game/objects/items/weapons/tools.dm
+++ b/code/game/objects/items/weapons/tools.dm
@@ -769,6 +769,7 @@
melt_temperature = MELTPOINT_STEEL
origin_tech = Tc_ENGINEERING + "=1"
var/max_fuel = 20 //The max amount of acid stored
+ var/work_speed = 1 //multiplier
toolsounds = list('sound/items/Welder.ogg')
/obj/item/tool/solder/splashable()
@@ -843,6 +844,37 @@
reagents.add_reagent(SACID, 50)
update_icon()
+/obj/item/tool/solder/screw
+ name = "screwsolder"
+ desc = "An advanced soldering tool with a screwdriver head. Use in hand to swap to and from the screwhead."
+ max_fuel = 32
+ work_speed = 0.5 //2x faster
+ icon_state = "ssolder-0"
+ origin_tech = Tc_ENGINEERING + "=6"
+ var/screwmode = TRUE
+
+/obj/item/tool/solder/screw/attack_self(mob/user)
+ playsound(src,'sound/items/Screwdriver.ogg',40, 1)
+ screwmode = !screwmode
+ to_chat(user, "You toggle the screwhead [screwmode ? "on":"off"].")
+
+/obj/item/tool/solder/screw/is_screwdriver(mob/user)
+ return screwmode
+
+/obj/item/tool/solder/screw/update_icon()
+ ..()
+ switch(reagents.get_reagent_amount(SACID) + reagents.get_reagent_amount(FORMIC_ACID))
+ if(22 to INFINITY)
+ icon_state = "ssolder-20"
+ if(15 to 21)
+ icon_state = "ssolder-15"
+ if(8 to 14)
+ icon_state = "ssolder-10"
+ if(1 to 7)
+ icon_state = "ssolder-5"
+ if(0)
+ icon_state = "ssolder-0"
+
/*
* Fuel Can
* A special, large container that fits on the belt
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
index 51cfd221cfa..034f0c5cf88 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
@@ -37,7 +37,8 @@
/obj/item/weapon/storage/belt/utility/chief,
/obj/item/clothing/glasses/scanner/material,
/obj/item/weapon/card/debit/preferred/department/engineering,
- /obj/item/weapon/reagent_containers/food/snacks/monkeycube/gourmonger
+ /obj/item/weapon/reagent_containers/food/snacks/monkeycube/gourmonger,
+ /obj/item/tool/solder/screw
)
/obj/structure/closet/secure_closet/engineering_electrical
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm
index 943d5c60e77..e49dfab569e 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm
@@ -77,7 +77,7 @@
if(!S.remove_fuel(4,user))
return
S.playtoolsound(loc, 100)
- if(do_after(user, src,40))
+ if(do_after(user, src,4 SECONDS * S.work_speed))
S.playtoolsound(loc, 100)
broken = 0
to_chat(user, "You repair the electronics inside the locking mechanism!")
diff --git a/code/modules/media/broadcast/transmitters/broadcast.dm b/code/modules/media/broadcast/transmitters/broadcast.dm
index 812204d412d..2eb7a04a6b7 100644
--- a/code/modules/media/broadcast/transmitters/broadcast.dm
+++ b/code/modules/media/broadcast/transmitters/broadcast.dm
@@ -103,7 +103,7 @@
if(!S.remove_fuel(4,user))
return
playsound(loc, 'sound/items/Welder.ogg', 100, 1)
- if(do_after(user, src,40))
+ if(do_after(user, src,4 SECONDS * S.work_speed))
playsound(loc, 'sound/items/Welder.ogg', 100, 1)
integrity = 100
to_chat(user, "You repair the blown fuses on [src].")
diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi
index 9073902f74d..9d1c91bc20f 100644
Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ