diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm
index 79bff2d1417..2d0b06c4ca9 100644
--- a/code/game/objects/items/bodybag.dm
+++ b/code/game/objects/items/bodybag.dm
@@ -43,3 +43,38 @@
w_class = WEIGHT_CLASS_SMALL
origin_tech = "bluespace=4;materials=4;plasmatech=4"
+/obj/item/bodybag/bluespace/examine(mob/user)
+ ..()
+ if(contents.len)
+ user << "You can make out the shapes of [contents.len] objects through the fabric."
+
+/obj/item/bodybag/bluespace/Destroy()
+ for(var/atom/movable/A in contents)
+ A.forceMove(get_turf(src))
+ if(isliving(A))
+ A << "You suddenly feel the space around you torn apart! You're free!"
+ return ..()
+
+/obj/item/bodybag/bluespace/deploy_bodybag(mob/user, atom/location)
+ var/obj/structure/closet/body_bag/R = new unfoldedbag_path(location)
+ for(var/atom/movable/A in contents)
+ A.forceMove(R)
+ if(isliving(A))
+ A << "You suddenly feel air around you! You're free!"
+ R.open(user)
+ R.add_fingerprint(user)
+ qdel(src)
+
+/obj/item/bodybag/bluespace/container_resist(mob/living/user)
+ if(user.incapacitated())
+ user << "You can't get out while you're restrained like this!"
+ return
+ user.changeNext_move(CLICK_CD_BREAKOUT)
+ user.last_special = world.time + CLICK_CD_BREAKOUT
+ user << "You claw at the fabric of [src], trying to tear it open..."
+ loc << "Someone starts trying to break free of [src]!"
+ if(!do_after(user, 200, target = src))
+ loc << "The pressure subsides. It seems that they've stopped resisting..."
+ return
+ loc.visible_message("[user] suddenly appears in front of [loc]!", "[user] breaks free of [src]!")
+ qdel(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/bodybag.dm b/code/game/objects/structures/crates_lockers/closets/bodybag.dm
index 122f2872506..033473eed4f 100644
--- a/code/game/objects/structures/crates_lockers/closets/bodybag.dm
+++ b/code/game/objects/structures/crates_lockers/closets/bodybag.dm
@@ -67,4 +67,26 @@
icon_state = "bluebodybag"
foldedbag_path = /obj/item/bodybag/bluespace
mob_storage_capacity = 15
- max_mob_size = MOB_SIZE_LARGE
\ No newline at end of file
+ max_mob_size = MOB_SIZE_LARGE
+
+/obj/structure/closet/body_bag/bluespace/MouseDrop(over_object, src_location, over_location)
+ ..()
+ if(over_object == usr && Adjacent(usr) && (in_range(src, usr) || usr.contents.Find(src)))
+ if(!ishuman(usr))
+ return 0
+ if(opened)
+ return 0
+ if(contents.len >= mob_storage_capacity / 2)
+ usr << "There are too many things inside of [src] to fold it up!"
+ return 0
+ for(var/obj/item/bodybag/bluespace/B in src)
+ usr << "You can't recursively fold bluespace body bags!" //Nice try
+ return 0
+ visible_message("[usr] folds up [src].")
+ var/obj/item/bodybag/B = new foldedbag_path(get_turf(src))
+ usr.put_in_hands(B)
+ for(var/atom/movable/A in contents)
+ A.forceMove(B)
+ if(isliving(A))
+ A << "You're suddenly forced into a tiny, compressed space!"
+ qdel(src)