diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
index 68c9dddb122..84477048670 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
@@ -87,7 +87,8 @@
new /obj/item/clothing/gloves/color/latex/nitrile(src)
new /obj/item/healthanalyzer/advanced(src)
new /obj/item/assembly/flash/handheld(src)
- new /obj/item/reagent_containers/hypospray/cmo(src)
+ //new /obj/item/reagent_containers/hypospray/cmo(src) - SKYRAT REMOVAL - New Hyposprays
+ new /obj/item/storage/hypospraykit/cmo(src) //SKYRAT ADDITION - New Hyposprays
new /obj/item/autosurgeon/organ/cmo(src)
new /obj/item/door_remote/chief_medical_officer(src)
new /obj/item/clothing/neck/petcollar(src)
diff --git a/code/modules/jobs/job_types/medical_doctor.dm b/code/modules/jobs/job_types/medical_doctor.dm
index 27000068f62..ed2eed42ec3 100644
--- a/code/modules/jobs/job_types/medical_doctor.dm
+++ b/code/modules/jobs/job_types/medical_doctor.dm
@@ -28,6 +28,7 @@
suit = /obj/item/clothing/suit/toggle/labcoat
l_hand = /obj/item/storage/firstaid/medical
suit_store = /obj/item/flashlight/pen
+ backpack_contents = list(/obj/item/storage/hypospraykit/regular=1) //SKYRAT ADDITION - Hypospray Kit addition
backpack = /obj/item/storage/backpack/medic
satchel = /obj/item/storage/backpack/satchel/med
diff --git a/code/modules/jobs/job_types/paramedic.dm b/code/modules/jobs/job_types/paramedic.dm
index b271864279d..6ca86520360 100644
--- a/code/modules/jobs/job_types/paramedic.dm
+++ b/code/modules/jobs/job_types/paramedic.dm
@@ -33,7 +33,7 @@
id = /obj/item/card/id
l_pocket = /obj/item/pda/medical
suit_store = /obj/item/flashlight/pen/paramedic
- backpack_contents = list(/obj/item/roller=1)
+ backpack_contents = list(/obj/item/roller=1,/obj/item/storage/hypospraykit/regular=1) //SKYRAT EDIT - Hypospray Kit addition
pda_slot = ITEM_SLOT_LPOCKET
backpack = /obj/item/storage/backpack/medic
diff --git a/modular_skyrat/modules/hyposprays/code/game/autolathe_designs.dm b/modular_skyrat/modules/hyposprays/code/game/autolathe_designs.dm
new file mode 100644
index 00000000000..0bdb5ab7f11
--- /dev/null
+++ b/modular_skyrat/modules/hyposprays/code/game/autolathe_designs.dm
@@ -0,0 +1,17 @@
+/datum/design/hypovialsmall
+ name = "Hypovial"
+ id = "hypovial"
+ build_type = AUTOLATHE | PROTOLATHE
+ materials = list(/datum/material/iron = 500)
+ build_path = /obj/item/reagent_containers/glass/bottle/vial/small
+ category = list("initial","Medical","Medical Designs")
+ departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
+
+/datum/design/hypoviallarge
+ name = "Large Hypovial"
+ id = "large_hypovial"
+ build_type = AUTOLATHE | PROTOLATHE
+ materials = list(/datum/material/iron = 2500)
+ build_path = /obj/item/reagent_containers/glass/bottle/vial/large
+ category = list("initial","Medical","Medical Designs")
+ departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
diff --git a/modular_skyrat/modules/hyposprays/code/game/hypospray_kits.dm b/modular_skyrat/modules/hyposprays/code/game/hypospray_kits.dm
new file mode 100644
index 00000000000..bc81dbe375d
--- /dev/null
+++ b/modular_skyrat/modules/hyposprays/code/game/hypospray_kits.dm
@@ -0,0 +1,62 @@
+/obj/item/storage/hypospraykit
+ name = "hypospray kit"
+ desc = "It's a kit containing a hypospray and specific treatment chemical-filled vials."
+ icon = 'modular_skyrat/modules/hyposprays/icons/hypokits.dmi'
+ icon_state = "firstaid-mini"
+ lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
+ throw_speed = 3
+ throw_range = 7
+ var/empty = FALSE
+
+/obj/item/storage/hypospraykit/ComponentInitialize()
+ . = ..()
+ var/datum/component/storage/STR = GetComponent(/datum/component/storage)
+ STR.max_items = 12
+ STR.can_hold = typecacheof(list(
+ /obj/item/hypospray/mkii,
+ /obj/item/reagent_containers/glass/bottle/vial))
+
+/obj/item/storage/hypospraykit/empty
+ desc = "A hypospray kit with general use vials."
+
+/obj/item/storage/hypospraykit/empty/PopulateContents()
+ if(empty)
+ return
+ new /obj/item/hypospray/mkii(src)
+ new /obj/item/reagent_containers/glass/bottle/vial/small(src)
+ new /obj/item/reagent_containers/glass/bottle/vial/small(src)
+ new /obj/item/reagent_containers/glass/bottle/vial/small(src)
+
+/obj/item/storage/hypospraykit/regular
+ icon_state = "firstaid-mini"
+ desc = "A hypospray kit with general use vials."
+
+/obj/item/storage/hypospraykit/regular/PopulateContents()
+ if(empty)
+ return
+ new /obj/item/hypospray/mkii/tricord(src)
+ new /obj/item/reagent_containers/glass/bottle/vial/small/tricord(src)
+ new /obj/item/reagent_containers/glass/bottle/vial/small/tricord(src)
+
+/obj/item/storage/hypospraykit/cmo
+ name = "deluxe hypospray kit"
+ desc = "A kit containing a Deluxe hypospray and Vials."
+ icon_state = "tactical-mini"
+
+/obj/item/storage/hypospraykit/cmo/PopulateContents()
+ if(empty)
+ return
+ new /obj/item/hypospray/mkii/CMO(src)
+ new /obj/item/reagent_containers/glass/bottle/vial/large/tricord(src)
+ new /obj/item/reagent_containers/glass/bottle/vial/large/charcoal(src)
+ new /obj/item/reagent_containers/glass/bottle/vial/large/salglu(src)
+ new /obj/item/reagent_containers/glass/bottle/vial/large/dexalin(src)
+ new /obj/item/reagent_containers/glass/bottle/vial/large/synthflesh(src)
+
+/obj/item/storage/box/vials
+ name = "box of hypovials"
+
+/obj/item/storage/box/vials/PopulateContents()
+ for(var/i in 1 to 7)
+ new /obj/item/reagent_containers/glass/bottle/vial/small( src )
diff --git a/modular_skyrat/modules/hyposprays/code/game/hyposprays_II.dm b/modular_skyrat/modules/hyposprays/code/game/hyposprays_II.dm
new file mode 100644
index 00000000000..f53797189dc
--- /dev/null
+++ b/modular_skyrat/modules/hyposprays/code/game/hyposprays_II.dm
@@ -0,0 +1,241 @@
+//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+#define HYPO_SPRAY 0
+#define HYPO_INJECT 1
+
+#define WAIT_SPRAY 25
+#define WAIT_INJECT 25
+#define SELF_SPRAY 15
+#define SELF_INJECT 15
+
+#define DELUXE_WAIT_SPRAY 0
+#define DELUXE_WAIT_INJECT 5
+#define DELUXE_SELF_SPRAY 10
+#define DELUXE_SELF_INJECT 10
+
+#define COMBAT_WAIT_SPRAY 0
+#define COMBAT_WAIT_INJECT 0
+#define COMBAT_SELF_SPRAY 0
+#define COMBAT_SELF_INJECT 0
+
+/obj/item/hypospray/mkii
+ name = "hypospray mk.II"
+ icon_state = "hypo2"
+ icon = 'modular_skyrat/modules/hyposprays/icons/hyposprays.dmi'
+ desc = "A new development from DeForest Medical, this hypospray takes 60-unit vials as the drug supply for easy swapping."
+ w_class = WEIGHT_CLASS_TINY
+ var/list/allowed_containers = list(/obj/item/reagent_containers/glass/bottle/vial/small)
+ var/mode = HYPO_INJECT
+ var/obj/item/reagent_containers/glass/bottle/vial/vial
+ var/start_vial = /obj/item/reagent_containers/glass/bottle/vial/small
+ var/spawnwithvial = TRUE
+ var/inject_wait = WAIT_INJECT
+ var/spray_wait = WAIT_SPRAY
+ var/spray_self = SELF_SPRAY
+ var/inject_self = SELF_INJECT
+ var/quickload = FALSE
+ var/penetrates = FALSE
+
+/obj/item/hypospray/mkii/brute
+ start_vial = /obj/item/reagent_containers/glass/bottle/vial/small/bicaridine
+
+/obj/item/hypospray/mkii/toxin
+ start_vial = /obj/item/reagent_containers/glass/bottle/vial/small/antitoxin
+
+/obj/item/hypospray/mkii/oxygen
+ start_vial = /obj/item/reagent_containers/glass/bottle/vial/small/dexalin
+
+/obj/item/hypospray/mkii/burn
+ start_vial = /obj/item/reagent_containers/glass/bottle/vial/small/kelotane
+
+/obj/item/hypospray/mkii/tricord
+ start_vial = /obj/item/reagent_containers/glass/bottle/vial/small/tricord
+
+/obj/item/hypospray/mkii/enlarge
+ spawnwithvial = FALSE
+
+/obj/item/hypospray/mkii/CMO
+ name = "hypospray mk.II deluxe"
+ allowed_containers = list(/obj/item/reagent_containers/glass/bottle/vial/small, /obj/item/reagent_containers/glass/bottle/vial/large)
+ icon_state = "cmo2"
+ desc = "The Deluxe Hypospray can take larger-size vials. It also acts faster and delivers more reagents per spray."
+ resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
+ start_vial = /obj/item/reagent_containers/glass/bottle/vial/large/cmo
+ inject_wait = DELUXE_WAIT_INJECT
+ spray_wait = DELUXE_WAIT_SPRAY
+ spray_self = DELUXE_SELF_SPRAY
+ inject_self = DELUXE_SELF_INJECT
+
+/obj/item/hypospray/mkii/Initialize()
+ . = ..()
+ if(!spawnwithvial)
+ update_icon()
+ return
+ if(start_vial)
+ vial = new start_vial
+ update_icon()
+
+/obj/item/hypospray/mkii/ComponentInitialize()
+ . = ..()
+ AddElement(/datum/element/update_icon_updates_onmob)
+
+/obj/item/hypospray/mkii/update_icon_state()
+ icon_state = "[initial(icon_state)][vial ? "" : "-e"]"
+
+/obj/item/hypospray/mkii/examine(mob/user)
+ . = ..()
+ if(vial)
+ . += "[vial] has [vial.reagents.total_volume]u remaining."
+ else
+ . += "It has no vial loaded in."
+ . += "[src] is set to [mode ? "Inject" : "Spray"] contents on application."
+
+/obj/item/hypospray/mkii/proc/unload_hypo(obj/item/I, mob/user)
+ if((istype(I, /obj/item/reagent_containers/glass/bottle/vial)))
+ var/obj/item/reagent_containers/glass/bottle/vial/V = I
+ V.forceMove(user.loc)
+ user.put_in_hands(V)
+ to_chat(user, "You remove [vial] from [src].")
+ vial = null
+ update_icon()
+ playsound(loc, 'sound/weapons/empty.ogg', 50, 1)
+ else
+ to_chat(user, "This hypo isn't loaded!")
+ return
+
+/obj/item/hypospray/mkii/attackby(obj/item/I, mob/living/user)
+ if((istype(I, /obj/item/reagent_containers/glass/bottle/vial) && vial != null))
+ if(!quickload)
+ to_chat(user, "[src] can not hold more than one vial!")
+ return FALSE
+ unload_hypo(vial, user)
+ if((istype(I, /obj/item/reagent_containers/glass/bottle/vial)))
+ var/obj/item/reagent_containers/glass/bottle/vial/V = I
+ if(!is_type_in_list(V, allowed_containers))
+ to_chat(user, "[src] doesn't accept this type of vial.")
+ return FALSE
+ if(!user.transferItemToLoc(V,src))
+ return FALSE
+ vial = V
+ user.visible_message("[user] has loaded a vial into [src].","You have loaded [vial] into [src].")
+ update_icon()
+ playsound(loc, 'sound/weapons/autoguninsert.ogg', 35, 1)
+ return TRUE
+ else
+ to_chat(user, "This doesn't fit in [src].")
+ return FALSE
+
+/obj/item/hypospray/mkii/AltClick(mob/user)
+ . = ..()
+ if(vial)
+ vial.attack_self(user)
+ return TRUE
+
+/obj/item/hypospray/mkii/emag_act(mob/user)
+ . = ..()
+ if(obj_flags & EMAGGED)
+ to_chat(user, "[src] happens to be already overcharged.")
+ return
+ inject_wait = COMBAT_WAIT_INJECT
+ spray_wait = COMBAT_WAIT_SPRAY
+ spray_self = COMBAT_SELF_INJECT
+ inject_self = COMBAT_SELF_SPRAY
+ penetrates = TRUE
+ to_chat(user, "You overcharge [src]'s control circuit.")
+ obj_flags |= EMAGGED
+ return TRUE
+
+/obj/item/hypospray/mkii/attack_hand(mob/user)
+ . = ..() //Don't bother changing this or removing it from containers will break.
+
+/obj/item/hypospray/mkii/attack(obj/item/I, mob/user, params)
+ return
+
+/obj/item/hypospray/mkii/afterattack(atom/target, mob/user, proximity)
+ if(!vial || !proximity || !isliving(target))
+ return
+ var/mob/living/L = target
+
+ if(!L.reagents || !L.can_inject(user, TRUE, user.zone_selected, penetrates))
+ return
+
+ if(iscarbon(L))
+ var/obj/item/bodypart/affecting = L.get_bodypart(check_zone(user.zone_selected))
+ if(!affecting)
+ to_chat(user, "The limb is missing!")
+ return
+ //Always log attemped injections for admins
+ var/contained = vial.reagents.log_list()
+ log_combat(user, L, "attemped to inject", src, addition="which had [contained]")
+
+ if(!vial)
+ to_chat(user, "[src] doesn't have any vial installed!")
+ return
+ if(!vial.reagents.total_volume)
+ to_chat(user, "[src]'s vial is empty!")
+ return
+
+ var/fp_verb = mode == HYPO_SPRAY ? "spray" : "inject"
+ //var/method = mode == HYPO_SPRAY ? TOUCH : INJECT
+
+ if(L != user)
+ L.visible_message("[user] is trying to [fp_verb] [L] with [src]!", \
+ "[user] is trying to [fp_verb] you with [src]!")
+ if(!do_mob(user, L, inject_wait, extra_checks = CALLBACK(L, /mob/living/proc/can_inject, user, FALSE, user.zone_selected, penetrates)))
+ return
+ if(!vial.reagents.total_volume)
+ return
+ log_attack("[user.name] ([user.ckey]) applied [src] to [L.name] ([L.ckey]), which had [contained] (INTENT: [uppertext(user.a_intent)]) (MODE: [mode])")
+ if(L != user)
+ L.visible_message("[user] uses the [src] on [L]!", \
+ "[user] uses the [src] on you!")
+ else
+ L.log_message("applied [src] to themselves ([contained]).", INDIVIDUAL_ATTACK_LOG)
+
+ //var/fraction = min(vial.amount_per_transfer_from_this/vial.reagents.total_volume, 1)
+ //vial.reagents.reaction(L, method, fraction)
+ vial.reagents.trans_to(target, vial.amount_per_transfer_from_this)
+ var/long_sound = vial.amount_per_transfer_from_this >= 15
+ playsound(loc, long_sound ? 'modular_skyrat/modules/hyposprays/sound/hypospray_long.ogg' : pick('modular_skyrat/modules/hyposprays/sound/hypospray.ogg','modular_skyrat/modules/hyposprays/sound/hypospray2.ogg'), 50, 1, -1)
+ to_chat(user, "You [fp_verb] [vial.amount_per_transfer_from_this] units of the solution. The hypospray's cartridge now contains [vial.reagents.total_volume] units.")
+
+/obj/item/hypospray/mkii/attack_self(mob/living/user)
+ if(user)
+ if(user.incapacitated())
+ return
+ else if(!vial)
+ to_chat(user, "This Hypo needs to be loaded first!")
+ return
+ else
+ unload_hypo(vial,user)
+
+/obj/item/hypospray/mkii/CtrlClick(mob/living/user)
+ . = ..()
+ if(user.canUseTopic(src, FALSE) && user.get_active_held_item(src))
+ switch(mode)
+ if(HYPO_SPRAY)
+ mode = HYPO_INJECT
+ to_chat(user, "[src] is now set to inject contents on application.")
+ if(HYPO_INJECT)
+ mode = HYPO_SPRAY
+ to_chat(user, "[src] is now set to spray contents on application.")
+ return TRUE
+
+/obj/item/hypospray/mkii/examine(mob/user)
+ . = ..()
+ . += "Ctrl-Click it to toggle its mode from spraying to injecting and vice versa."
+//I need a drink.
+
+#undef HYPO_SPRAY
+#undef HYPO_INJECT
+#undef WAIT_SPRAY
+#undef WAIT_INJECT
+#undef SELF_SPRAY
+#undef SELF_INJECT
+#undef DELUXE_WAIT_SPRAY
+#undef DELUXE_WAIT_INJECT
+#undef DELUXE_SELF_SPRAY
+#undef DELUXE_SELF_INJECT
+#undef COMBAT_WAIT_SPRAY
+#undef COMBAT_WAIT_INJECT
+#undef COMBAT_SELF_SPRAY
+#undef COMBAT_SELF_INJECT
diff --git a/modular_skyrat/modules/hyposprays/code/game/hypovials.dm b/modular_skyrat/modules/hyposprays/code/game/hypovials.dm
new file mode 100644
index 00000000000..eaf3b57ccac
--- /dev/null
+++ b/modular_skyrat/modules/hyposprays/code/game/hypovials.dm
@@ -0,0 +1,108 @@
+/obj/item/reagent_containers/glass/bottle/vial
+ name = "broken hypovial"
+ desc = "A hypovial compatible with most hyposprays."
+ icon = 'modular_skyrat/modules/hyposprays/icons/vials.dmi'
+ icon_state = "hypovial"
+ spillable = FALSE
+ volume = 10
+ possible_transfer_amounts = list(1,2,5,10)
+
+/obj/item/reagent_containers/glass/bottle/vial/update_overlays()
+ . = ..()
+ if(!fill_icon_thresholds)
+ return
+ if(reagents.total_volume)
+ var/fill_name = fill_icon_state? fill_icon_state : icon_state
+ var/fill_overlay = 10
+ switch(round((reagents.total_volume / volume)*100))
+ if(1 to 24)
+ fill_overlay = 10
+ if(25 to 49)
+ fill_overlay = 25
+ if(50 to 74)
+ fill_overlay = 50
+ if(75 to 89)
+ fill_overlay = 75
+ if(89 to 100)
+ fill_overlay = 100
+ var/mutable_appearance/filling = mutable_appearance('modular_skyrat/modules/hyposprays/icons/hypospray_fillings.dmi', "[fill_name][fill_overlay]")
+
+ filling.color = mix_color_from_reagents(reagents.reagent_list)
+ . += filling
+
+/obj/item/reagent_containers/glass/bottle/vial/Initialize()
+ . = ..()
+ update_icon()
+
+/obj/item/reagent_containers/glass/bottle/vial/on_reagent_change()
+ update_icon()
+
+/obj/item/reagent_containers/glass/bottle/vial/small
+ name = "hypovial"
+ volume = 60
+ possible_transfer_amounts = list(1,2,5,10,20)
+
+/obj/item/reagent_containers/glass/bottle/vial/large
+ volume = 120
+ possible_transfer_amounts = list(1,2,5,10,20,30,40,50,100,120)
+
+/obj/item/reagent_containers/glass/bottle/vial/small/bicaridine
+ name = "red hypovial (bicaridine)"
+ icon_state = "hypovial-b"
+ list_reagents = list(/datum/reagent/medicine/bicaridine = 30)
+
+/obj/item/reagent_containers/glass/bottle/vial/small/antitoxin
+ name = "green hypovial (Anti-Tox)"
+ icon_state = "hypovial-a"
+ list_reagents = list(/datum/reagent/medicine/antitoxin = 30)
+
+/obj/item/reagent_containers/glass/bottle/vial/small/kelotane
+ name = "orange hypovial (kelotane)"
+ icon_state = "hypovial-k"
+ list_reagents = list(/datum/reagent/medicine/kelotane = 30)
+
+/obj/item/reagent_containers/glass/bottle/vial/small/dexalin
+ name = "blue hypovial (dexalin)"
+ icon_state = "hypovial-d"
+ list_reagents = list(/datum/reagent/medicine/dexalin = 30)
+
+/obj/item/reagent_containers/glass/bottle/vial/small/tricord
+ name = "hypovial (tricordrazine)"
+ icon_state = "hypovial"
+ list_reagents = list(/datum/reagent/medicine/tricordrazine = 30)
+
+/obj/item/reagent_containers/glass/bottle/vial/large/cmo
+ name = "deluxe hypovial"
+ list_reagents = list(/datum/reagent/medicine/omnizine = 20, /datum/reagent/medicine/leporazine = 20, /datum/reagent/medicine/atropine = 20)
+
+/obj/item/reagent_containers/glass/bottle/vial/large/bicaridine
+ name = "large red hypovial (bicaridine)"
+ list_reagents = list(/datum/reagent/medicine/bicaridine = 60)
+
+/obj/item/reagent_containers/glass/bottle/vial/large/antitoxin
+ name = "large green hypovial (anti-tox)"
+ list_reagents = list(/datum/reagent/medicine/antitoxin = 60)
+
+/obj/item/reagent_containers/glass/bottle/vial/large/kelotane
+ name = "large orange hypovial (kelotane)"
+ list_reagents = list(/datum/reagent/medicine/kelotane = 60)
+
+/obj/item/reagent_containers/glass/bottle/vial/large/dexalin
+ name = "large blue hypovial (dexalin)"
+ list_reagents = list(/datum/reagent/medicine/dexalin = 60)
+
+/obj/item/reagent_containers/glass/bottle/vial/large/charcoal
+ name = "large black hypovial (multiver)"
+ list_reagents = list(/datum/reagent/medicine/c2/multiver = 60)
+
+/obj/item/reagent_containers/glass/bottle/vial/large/tricord
+ name = "large hypovial (tricord)"
+ list_reagents = list(/datum/reagent/medicine/tricordrazine = 60)
+
+/obj/item/reagent_containers/glass/bottle/vial/large/salglu
+ name = "large green hypovial (salglu)"
+ list_reagents = list(/datum/reagent/medicine/salglu_solution = 60)
+
+/obj/item/reagent_containers/glass/bottle/vial/large/synthflesh
+ name = "large orange hypovial (synthflesh)"
+ list_reagents = list(/datum/reagent/medicine/c2/synthflesh = 60)
diff --git a/modular_skyrat/modules/hyposprays/code/game/vending_hypospray.dm b/modular_skyrat/modules/hyposprays/code/game/vending_hypospray.dm
new file mode 100644
index 00000000000..90782f2376f
--- /dev/null
+++ b/modular_skyrat/modules/hyposprays/code/game/vending_hypospray.dm
@@ -0,0 +1,3 @@
+/obj/machinery/vending/drugs/Initialize()
+ products[/obj/item/storage/hypospraykit/empty] = 5
+ . = ..()
diff --git a/modular_skyrat/modules/hyposprays/icons/hypokits.dmi b/modular_skyrat/modules/hyposprays/icons/hypokits.dmi
new file mode 100644
index 00000000000..08eae135821
Binary files /dev/null and b/modular_skyrat/modules/hyposprays/icons/hypokits.dmi differ
diff --git a/modular_skyrat/modules/hyposprays/icons/hypospray_fillings.dmi b/modular_skyrat/modules/hyposprays/icons/hypospray_fillings.dmi
new file mode 100644
index 00000000000..901a9fd4c45
Binary files /dev/null and b/modular_skyrat/modules/hyposprays/icons/hypospray_fillings.dmi differ
diff --git a/modular_skyrat/modules/hyposprays/icons/hyposprays.dmi b/modular_skyrat/modules/hyposprays/icons/hyposprays.dmi
new file mode 100644
index 00000000000..3f32219d84e
Binary files /dev/null and b/modular_skyrat/modules/hyposprays/icons/hyposprays.dmi differ
diff --git a/modular_skyrat/modules/hyposprays/icons/vials.dmi b/modular_skyrat/modules/hyposprays/icons/vials.dmi
new file mode 100644
index 00000000000..a960cdc9610
Binary files /dev/null and b/modular_skyrat/modules/hyposprays/icons/vials.dmi differ
diff --git a/modular_skyrat/modules/hyposprays/readme.md b/modular_skyrat/modules/hyposprays/readme.md
new file mode 100644
index 00000000000..f90fe04d096
--- /dev/null
+++ b/modular_skyrat/modules/hyposprays/readme.md
@@ -0,0 +1,43 @@
+https://github.com/Skyrat-SS13/Skyrat-tg/pull/1929
+
+## Title: Hyposprays
+
+MODULE ID: HYPOSPRAYS
+
+### Description:
+
+Gives Medical back its Hyposprays. Oldbase stuff is good.
+
+### TG Proc Changes:
+
+- CMO's locker now contains a new object, the CMO's Hypospray Kit. Old Hypospray has been commented out.
+- Medical Doctor and Paramedic jobs now spawn with a standard Hypospray kit in backpack_contents
+
+### Defines:
+
+- #define HYPO_SPRAY 0
+- #define HYPO_INJECT 1
+- #define WAIT_SPRAY 25
+- #define WAIT_INJECT 25
+- #define SELF_SPRAY 15
+- #define SELF_INJECT 15
+- #define DELUXE_WAIT_SPRAY 0
+- #define DELUXE_WAIT_INJECT 5
+- #define DELUXE_SELF_SPRAY 10
+- #define DELUXE_SELF_INJECT 10
+- #define COMBAT_WAIT_SPRAY 0
+- #define COMBAT_WAIT_INJECT 0
+- #define COMBAT_SELF_SPRAY 0
+- #define COMBAT_SELF_INJECT 0
+
+### Master file additions
+
+- N/A
+
+### Included files that are not contained in this module:
+
+- N/A
+
+### Credits:
+
+ShadeAware - Porting
diff --git a/modular_skyrat/modules/hyposprays/sound/hypospray.ogg b/modular_skyrat/modules/hyposprays/sound/hypospray.ogg
new file mode 100644
index 00000000000..b70d3fd5b58
Binary files /dev/null and b/modular_skyrat/modules/hyposprays/sound/hypospray.ogg differ
diff --git a/modular_skyrat/modules/hyposprays/sound/hypospray2.ogg b/modular_skyrat/modules/hyposprays/sound/hypospray2.ogg
new file mode 100644
index 00000000000..14835e9bb6a
Binary files /dev/null and b/modular_skyrat/modules/hyposprays/sound/hypospray2.ogg differ
diff --git a/modular_skyrat/modules/hyposprays/sound/hypospray_long.ogg b/modular_skyrat/modules/hyposprays/sound/hypospray_long.ogg
new file mode 100644
index 00000000000..d7da6c839f3
Binary files /dev/null and b/modular_skyrat/modules/hyposprays/sound/hypospray_long.ogg differ
diff --git a/tgstation.dme b/tgstation.dme
index f74b2f6049a..14608f0e953 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -3572,6 +3572,11 @@
#include "modular_skyrat\modules\horrorform\code\modules\mob\hostile\true_changeling.dm"
#include "modular_skyrat\modules\huds\code\glasses\HUD_Glasses.dm"
#include "modular_skyrat\modules\huds\code\loadout\glasses_loadout.dm"
+#include "modular_skyrat\modules\hyposprays\code\game\autolathe_designs.dm"
+#include "modular_skyrat\modules\hyposprays\code\game\hypospray_kits.dm"
+#include "modular_skyrat\modules\hyposprays\code\game\hyposprays_II.dm"
+#include "modular_skyrat\modules\hyposprays\code\game\hypovials.dm"
+#include "modular_skyrat\modules\hyposprays\code\game\vending_hypospray.dm"
#include "modular_skyrat\modules\icspawning\code\_onclick\observer.dm"
#include "modular_skyrat\modules\icspawning\code\game\objects\items\cards_ids.dm"
#include "modular_skyrat\modules\icspawning\code\modules\clothing\outfits\standard.dm"