diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm
index df6f51fa9b7..8f95e69a1b0 100644
--- a/code/game/objects/items/bodybag.dm
+++ b/code/game/objects/items/bodybag.dm
@@ -75,3 +75,7 @@
if(loc && (isturf(loc) || istype(loc, /obj/structure/morgue) || istype(loc, /obj/structure/crematorium)))
if(!open())
to_chat(user, "It won't budge!")
+
+/obj/structure/closet/body_bag/shove_impact(mob/living/target, mob/living/attacker)
+ // no, you can't shove people into a body bag
+ return FALSE
diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm
index 09f48cc8fc5..208b39265c5 100644
--- a/code/game/objects/structures/crates_lockers/closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets.dm
@@ -383,6 +383,21 @@
// Its okay to silently teleport mobs out of lockers, since the only thing affected is their contents list.
return
+/obj/structure/closet/shove_impact(mob/living/target, mob/living/attacker)
+ if(opened)
+ target.forceMove(src)
+ visible_message("[attacker] shoves [target] inside [src]!", "You hear a thud, and something clangs shut.")
+ close()
+ add_attack_logs(attacker, target, "shoved into [src]")
+ return TRUE
+
+ if(can_open())
+ open()
+ visible_message("[attacker] shoves [target] against [src], knocking it open!")
+ target.KnockDown(3 SECONDS)
+ return TRUE
+
+ return ..()
/obj/structure/closet/bluespace
name = "bluespace closet"
diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm
index e20a0afff23..5491c0d186d 100644
--- a/code/game/objects/structures/crates_lockers/crates.dm
+++ b/code/game/objects/structures/crates_lockers/crates.dm
@@ -149,6 +149,9 @@
add_fingerprint(user)
toggle(user, by_hand = TRUE)
+/obj/structure/closet/crate/shove_impact(mob/living/target, mob/living/attacker)
+ return FALSE
+
// Called when a crate is delivered by MULE at a location, for notifying purposes
/obj/structure/closet/crate/proc/notifyRecipient(destination)
var/list/msg = list("[capitalize(name)] has arrived at [destination].")