diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
index ebb4982130..7c191cdac0 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
@@ -136,6 +136,8 @@
closet_appearance = /decl/closet_appearance/secure_closet/security/warden
starts_with = list(
+ /obj/item/clothing/under/rank/security/aces,
+ /obj/item/clothing/suit/storage/vest/aces,
/obj/item/clothing/suit/storage/vest/warden,
/obj/item/clothing/under/rank/warden,
/obj/item/clothing/under/rank/warden/corp,
@@ -189,6 +191,8 @@
closet_appearance = /decl/closet_appearance/secure_closet/security
starts_with = list(
+ /obj/item/clothing/under/rank/security/aces,
+ /obj/item/clothing/suit/storage/vest/aces,
/obj/item/clothing/suit/storage/vest/officer,
/obj/item/clothing/head/helmet,
/obj/item/cartridge/security,
diff --git a/code/modules/client/preference_setup/loadout/loadout_uni_selector.dm b/code/modules/client/preference_setup/loadout/loadout_uni_selector.dm
index a97cb1ff24..377bb84c98 100644
--- a/code/modules/client/preference_setup/loadout/loadout_uni_selector.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_uni_selector.dm
@@ -234,7 +234,8 @@
"TG&C bodyguard's skirt"=/obj/item/clothing/under/rank/bodyguard_skirt,
"TG&C bodyguard's turtleneck"=/obj/item/clothing/under/rank/bodyguard_turtleneck,
"TG&C bodyguard's turtleneck w/ skirt"=/obj/item/clothing/under/rank/bodyguard_turtleskirt,
- "TG&C gorka suit"=/obj/item/clothing/under/rank/neo_gorka/sec
+ "TG&C gorka suit"=/obj/item/clothing/under/rank/neo_gorka/sec,
+ "ACE security undersuit"=/obj/item/clothing/under/rank/security/aces
)
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(selector_uniforms))
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
index d6847f2284..937808ca65 100644
--- a/code/modules/clothing/suits/armor.dm
+++ b/code/modules/clothing/suits/armor.dm
@@ -300,6 +300,15 @@
icon_badge = "officervest_badge"
icon_nobadge = "officervest_nobadge"
+/obj/item/clothing/suit/storage/vest/aces
+ name = "ACE security rig"
+ desc = "A set of lightweight armor designed to be worn over the matching ACE security undersuit. Includes thigh, shin, and forearm protectors in addition to standard torso and groin guards."
+ icon_state = "aces_armor"
+ item_state_slots = list(slot_r_hand_str = "armor", slot_l_hand_str = "armor")
+ body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
+ cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
+ heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
+
/obj/item/clothing/suit/storage/vest/warden
name = "warden armor vest"
desc = "A simple kevlar plate carrier. This one has a silver badge clipped to the chest."
diff --git a/code/modules/clothing/under/jobs/security.dm b/code/modules/clothing/under/jobs/security.dm
index fe985023cc..52f58e5037 100644
--- a/code/modules/clothing/under/jobs/security.dm
+++ b/code/modules/clothing/under/jobs/security.dm
@@ -26,6 +26,27 @@
siemens_coefficient = 0.9
rolled_sleeves = 0
+/obj/item/clothing/under/rank/security/aces
+ name = "ACE security undersuit"
+ desc = "A snug but comfortable undersuit with removable arm sleeves, originally developed for the ACE Security Group. Includes a wrist-mounted minicomp."
+ icon_state = "aces_undersuit"
+ item_state_slots = list(slot_r_hand_str = "black", slot_l_hand_str = "black")
+ armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
+ siemens_coefficient = 0.9
+ rolled_sleeves = 0 //sleeves can be removed, but this disables the minicomp
+ rolled_down = -1 //can't be rolled down
+
+/obj/item/clothing/under/rank/security/aces/examine(mob/user)
+ . = ..()
+
+ if(!rolled_sleeves && Adjacent(user)) //can't see the comp if you've taken the sleeves off, or if you're not adjacent
+ . += "The minicomp reports that the current station time is [stationtime2text()] and that it is [stationdate2text()]."
+ var/TB = src.loc.loc
+ if(istype(TB, /turf/simulated)) //no point returning atmospheric data from unsimulated tiles (they don't track pressure anyway, only temperature)
+ var/turf/simulated/T = TB
+ var/datum/gas_mixture/env = T.return_air()
+ . += "The minicomp reports the current atmospheric pressure: [env.return_pressure()]kPa, and temperature: [env.temperature]K "
+
/obj/item/clothing/under/rank/security/modern
name = "modernized security officer's jumpsuit"
desc = "A recent redesign of the classic Security jumpsuit, featuring sturdy materials, joint padding, one giant zipper, and tight-fitting synthleather."
diff --git a/code/modules/economy/vending_machines.dm b/code/modules/economy/vending_machines.dm
index ea27ba6594..7bf525a8c7 100644
--- a/code/modules/economy/vending_machines.dm
+++ b/code/modules/economy/vending_machines.dm
@@ -1243,6 +1243,7 @@
/obj/item/clothing/under/rank/security2 = 5,
/obj/item/clothing/under/rank/security/turtleneck = 5,
/obj/item/clothing/under/rank/security/modern = 5,
+ /obj/item/clothing/under/rank/security/aces = 5,
/obj/item/clothing/under/rank/security/skirt = 5,
/obj/item/clothing/shoes/boots/jackboots = 5,
/obj/item/clothing/head/soft/sec = 5,
diff --git a/icons/inventory/suit/item.dmi b/icons/inventory/suit/item.dmi
index 9edf9a2347..a70d14644e 100644
Binary files a/icons/inventory/suit/item.dmi and b/icons/inventory/suit/item.dmi differ
diff --git a/icons/inventory/suit/mob.dmi b/icons/inventory/suit/mob.dmi
index a00ed6076d..9df5af58d7 100644
Binary files a/icons/inventory/suit/mob.dmi and b/icons/inventory/suit/mob.dmi differ
diff --git a/icons/inventory/suit/mob_digi.dmi b/icons/inventory/suit/mob_digi.dmi
index 43ec6bc337..b6f707a58a 100644
Binary files a/icons/inventory/suit/mob_digi.dmi and b/icons/inventory/suit/mob_digi.dmi differ
diff --git a/icons/inventory/uniform/item.dmi b/icons/inventory/uniform/item.dmi
index 1a95521195..7c614c40d4 100644
Binary files a/icons/inventory/uniform/item.dmi and b/icons/inventory/uniform/item.dmi differ
diff --git a/icons/inventory/uniform/mob.dmi b/icons/inventory/uniform/mob.dmi
index 98adc2a7f2..2eb49fee96 100644
Binary files a/icons/inventory/uniform/mob.dmi and b/icons/inventory/uniform/mob.dmi differ
diff --git a/icons/inventory/uniform/mob_digi.dmi b/icons/inventory/uniform/mob_digi.dmi
index a288202cdc..a0bc74e754 100644
Binary files a/icons/inventory/uniform/mob_digi.dmi and b/icons/inventory/uniform/mob_digi.dmi differ
diff --git a/icons/inventory/uniform/mob_sleeves_rolled.dmi b/icons/inventory/uniform/mob_sleeves_rolled.dmi
index 88ccb64ad1..81d8e0b474 100644
Binary files a/icons/inventory/uniform/mob_sleeves_rolled.dmi and b/icons/inventory/uniform/mob_sleeves_rolled.dmi differ