diff --git a/modular_ss220/objects/_objects.dme b/modular_ss220/objects/_objects.dme
index 697afd755731..56083ab10a68 100644
--- a/modular_ss220/objects/_objects.dme
+++ b/modular_ss220/objects/_objects.dme
@@ -1,5 +1,9 @@
#include "_objects.dm"
+// Mechs
+#include "code/mecha/lockermech.dm"
+
+// Miscellaneous
#include "code/beach_umbrella.dm"
#include "code/beretta.dm"
#include "code/big_bed.dm"
diff --git a/modular_ss220/objects/code/mecha/lockermech.dm b/modular_ss220/objects/code/mecha/lockermech.dm
new file mode 100644
index 000000000000..0f4dfe8be19e
--- /dev/null
+++ b/modular_ss220/objects/code/mecha/lockermech.dm
@@ -0,0 +1,176 @@
+// Makeshift (Lockermech)
+/obj/mecha/lockermech
+ name = "Шкафомех"
+ desc = "Шкафчик с украденными проводами, стойками, электроникой и шлюзовыми сервоприводами, грубо собранными в нечто, напоминающее мех."
+ icon = 'modular_ss220/objects/icons/mech.dmi'
+ icon_state = "lockermech"
+ initial_icon = "lockermech"
+ // It's made of scraps
+ max_integrity = 100
+ lights_power = 5
+ // Same speed as Ripley
+ step_in = 4
+ armor = list(melee = 20, bullet = 10, laser = 10, energy = 0, bomb = 10, rad = 0, fire = 70, acid = 60)
+ internal_damage_threshold = 30
+ max_equip = 2
+ wreckage = /obj/structure/mecha_wreckage/lockermech
+ /// step_in while in normal pressure conditions
+ var/fast_pressure_step_in = 2
+ /// step_in while in better pressure conditions
+ var/slow_pressure_step_in = 4
+ var/list/cargo
+ /// You can fit a few things in this locker but not much.
+ var/cargo_capacity = 5
+
+/obj/mecha/lockermech/go_out()
+ ..()
+ update_icon(UPDATE_OVERLAYS)
+
+/obj/mecha/lockermech/moved_inside(mob/living/carbon/human/H)
+ ..()
+ update_icon(UPDATE_OVERLAYS)
+
+/obj/mecha/lockermech/mmi_moved_inside(obj/item/mmi/mmi_as_oc, mob/user)
+ ..()
+ update_icon(UPDATE_OVERLAYS)
+
+/obj/mecha/lockermech/Move()
+ . = ..()
+ update_pressure()
+
+/obj/mecha/lockermech/proc/update_pressure()
+ if(thrusters_active)
+ return // Don't calculate this if they have thrusters on, this is calculated right after domove because of course it is
+
+ var/turf/target_turf = get_turf(loc)
+
+ if(lavaland_equipment_pressure_check(target_turf))
+ step_in = fast_pressure_step_in
+ for(var/obj/item/mecha_parts/mecha_equipment/drill/lockermech/drill in equipment)
+ drill.equip_cooldown = initial(drill.equip_cooldown)/2
+ else
+ step_in = slow_pressure_step_in
+ for(var/obj/item/mecha_parts/mecha_equipment/drill/lockermech/drill in equipment)
+ drill.equip_cooldown = initial(drill.equip_cooldown)
+
+/obj/mecha/lockermech/Exit(atom/movable/object)
+ LAZYINITLIST(cargo)
+ if(object in cargo)
+ return FALSE
+ return ..()
+
+/obj/mecha/lockermech/get_stats_part()
+ LAZYINITLIST(cargo)
+ var/output = ..()
+ output += "Cargo Compartment Contents:
"
+ if(length(cargo))
+ for(var/obj/cargo_item as anything in cargo)
+ output += "
Unload : [cargo_item]
"
+ else
+ output += "Nothing"
+ output += "
"
+ return output
+
+/obj/mecha/lockermech/Topic(href, href_list)
+ . = ..()
+ LAZYINITLIST(cargo)
+ if(!href_list["drop_from_cargo"])
+ return
+
+ var/obj/cargo_to_unload = locateUID(href_list["drop_from_cargo"])
+ if(!cargo_to_unload || !(cargo_to_unload in cargo))
+ return
+
+ occupant_message("You unload [cargo_to_unload].")
+ cargo_to_unload.forceMove(get_turf(src))
+ cargo -= cargo_to_unload
+ log_message("Unloaded [cargo_to_unload]. Cargo compartment capacity: [cargo_capacity - length(cargo)]")
+
+/obj/mecha/lockermech/Destroy()
+ LAZYINITLIST(cargo)
+ for(var/atom/movable/thing in cargo)
+ thing.forceMove(loc)
+ step_rand(thing)
+ cargo.Cut()
+ return ..()
+
+/obj/mecha/lockermech/ex_act(severity)
+ . = ..()
+ LAZYINITLIST(cargo)
+ for(var/thing in cargo)
+ var/obj/object = thing
+ if(prob(30 / severity))
+ cargo -= object
+ object.forceMove(drop_location())
+
+/obj/mecha/lockermech/emag_act(mob/user)
+ if(!emagged)
+ emagged = TRUE
+ desc += "The mech's equipment slots spark dangerously!"
+ return ..()
+
+// Crafting
+/datum/crafting_recipe/lockermech
+ name = "Locker Mech"
+ result = list(/obj/mecha/lockermech)
+ reqs = list(/obj/item/stack/cable_coil = 20,
+ /obj/item/stack/sheet/metal = 10,
+ /obj/item/storage/toolbox = 2, // For feet
+ /obj/item/tank/internals/oxygen = 1, // For air
+ /obj/item/airlock_electronics = 1, // You are stealing the motors from airlocks
+ /obj/item/extinguisher = 1, // For bastard pnumatics
+ /obj/item/c_tube = 1, // To make it airtight
+ /obj/item/flashlight = 1, // For the mech light
+ /obj/item/stack/tape_roll = 25, // ¯\_(ツ)_/¯
+ /obj/item/stock_parts/cell/high = 1,
+ /obj/item/stack/rods = 4) // To mount the equipment
+ tools = list(TOOL_WELDER, TOOL_SCREWDRIVER)
+ time = 200
+ category = CAT_ROBOT
+
+/datum/crafting_recipe/lockermech_drill
+ name = "Locker Mech Exosuit Drill"
+ result = list(/obj/item/mecha_parts/mecha_equipment/drill/lockermech)
+ reqs = list(/obj/item/stack/cable_coil = 5,
+ /obj/item/stack/sheet/metal = 2,
+ /obj/item/surgicaldrill = 1)
+ tools = list(TOOL_SCREWDRIVER)
+ time = 50
+ category = CAT_ROBOT
+
+/datum/crafting_recipe/lockermech_clamp
+ name = "Locker Mech Exosuit Clamp"
+ result = list(/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/lockermech)
+ reqs = list(/obj/item/stack/cable_coil = 5,
+ /obj/item/stack/sheet/metal = 2,
+ /obj/item/wirecutters = 1) // Don't ask, its just for the grabby grabby thing
+ tools = list(TOOL_SCREWDRIVER)
+ time = 50
+ category = CAT_ROBOT
+
+// Wreckage
+/obj/structure/mecha_wreckage/lockermech
+ name = "\improper Обломки Шкафомеха"
+ desc = "Владелец данного изделия, на что он надеялся?..."
+ icon = 'modular_ss220/objects/icons/mech.dmi'
+ icon_state = "lockermech-broken"
+
+// Equipment
+/obj/item/mecha_parts/mecha_equipment/drill/lockermech
+ name = "locker mech exosuit drill"
+ desc = "Собранная из, скорее всего, краденых деталей, эта дрель не сравнится по эффективности с настоящей."
+ equip_cooldown = 60 // Its slow as shit
+ force = 10 // Its not very strong
+ drill_delay = 15
+
+/obj/item/mecha_parts/mecha_equipment/drill/lockermech/can_attach(obj/mecha/M)
+ return istype(M, /obj/mecha/lockermech) && M.equipment.len < M.max_equip
+
+/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/lockermech
+ name = "locker mech clamp"
+ desc = "Беспорядочное расположение собранных вместе деталей, напоминающее зажим."
+ equip_cooldown = 25
+ dam_force = 10
+
+/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/lockermech/can_attach(obj/mecha/M)
+ return istype(M, /obj/mecha/lockermech) && M.equipment.len < M.max_equip
diff --git a/modular_ss220/objects/icons/mech.dmi b/modular_ss220/objects/icons/mech.dmi
new file mode 100644
index 000000000000..0bf1578d0628
Binary files /dev/null and b/modular_ss220/objects/icons/mech.dmi differ