diff --git a/code/game/machinery/biogenerator.dm b/code/game/machinery/biogenerator.dm
index 34fa34e1188..c91fa3a8597 100644
--- a/code/game/machinery/biogenerator.dm
+++ b/code/game/machinery/biogenerator.dm
@@ -176,7 +176,9 @@
dat += "Wallet: Make ([100/efficiency])
"
dat += "Book bag: Make ([200/efficiency])
"
dat += "Plant bag: Make ([200/efficiency])
"
+ dat += "Rag: Make ([200/efficiency])
"
dat += "Mining satchel: Make ([200/efficiency])
"
+ dat += "Chemistry bag: Make ([200/efficiency])
"
dat += "Botanical gloves: Make ([250/efficiency])
"
dat += "Leather Satchel: Make ([400/efficiency])
"
dat += "Cash Bag: Make ([400/efficiency])
"
@@ -303,6 +305,12 @@
if("mnbag")
if (check_cost(200/efficiency)) return 0
else new/obj/item/weapon/storage/bag/ore(src.loc)
+ if("chbag")
+ if (check_cost(200/efficiency)) return 0
+ else new/obj/item/weapon/storage/bag/chemistry(src.loc)
+ if("rag")
+ if (check_cost(200/efficiency)) return 0
+ else new/obj/item/weapon/reagent_containers/glass/rag(src.loc)
if("gloves")
if (check_cost(250/efficiency)) return 0
else new/obj/item/clothing/gloves/botanic_leather(src.loc)
diff --git a/code/game/machinery/kitchen/monkeyrecycler.dm b/code/game/machinery/kitchen/monkeyrecycler.dm
index 810143f6583..cb8947d20a5 100644
--- a/code/game/machinery/kitchen/monkeyrecycler.dm
+++ b/code/game/machinery/kitchen/monkeyrecycler.dm
@@ -80,7 +80,7 @@
playsound(src.loc, 'sound/machines/hiss.ogg', 50, 1)
grinded -= required_grind
for(var/i = 0, i < cube_production, i++) // Forgot to fix this bit the first time through
- new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped(src.loc)
+ new /obj/item/weapon/reagent_containers/food/snacks/monkeycube(src.loc)
user << "The machine's display flashes that it has [grinded] monkey\s worth of material left."
else // I'm not sure if the \s macro works with a word in between; I'll play it safe
user << "The machine needs at least [required_grind] monkey\s worth of material to compress [cube_production] monkey\s. It only has [grinded]."
diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm
index bd4dd452887..4e9d555f768 100644
--- a/code/game/objects/items/weapons/storage/bags.dm
+++ b/code/game/objects/items/weapons/storage/bags.dm
@@ -450,3 +450,32 @@
user.visible_message("\blue [user] drops all the items on their tray.")
return ..()
+
+
+/*
+ * Chemistry bag
+ */
+
+/obj/item/weapon/storage/bag/chemistry
+ name = "chemistry bag"
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bag"
+ desc = "A bag for storing pills, patches, and bottles."
+ storage_slots = 50
+ max_combined_w_class = 200
+ w_class = 1
+ can_hold = list("/obj/item/weapon/reagent_containers/pill","/obj/item/weapon/reagent_containers/glass/beaker","/obj/item/weapon/reagent_containers/glass/bottle")
+
+/*
+ * Biowaste bag (mostly for xenobiologists)
+ */
+
+/obj/item/weapon/storage/bag/bio
+ name = "bio bag"
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "biobag"
+ desc = "A bag for the safe transportation and disposal of biowaste and other biological materials."
+ storage_slots = 25
+ max_combined_w_class = 200
+ w_class = 1
+ can_hold = list("/obj/item/slime_extract","/obj/item/weapon/reagent_containers/food/snacks/monkeycube","/obj/item/weapon/reagent_containers/syringe","/obj/item/weapon/reagent_containers/glass/beaker","/obj/item/weapon/reagent_containers/glass/bottle","/obj/item/weapon/reagent_containers/blood","/obj/item/weapon/reagent_containers/hypospray/autoinjector")
\ No newline at end of file
diff --git a/code/game/objects/structures/crates_lockers/closets/l3closet.dm b/code/game/objects/structures/crates_lockers/closets/l3closet.dm
index 97062911dd8..5100e2170f0 100644
--- a/code/game/objects/structures/crates_lockers/closets/l3closet.dm
+++ b/code/game/objects/structures/crates_lockers/closets/l3closet.dm
@@ -8,6 +8,7 @@
/obj/structure/closet/l3closet/New()
..()
sleep(2)
+ new /obj/item/weapon/storage/bag/bio( src )
new /obj/item/clothing/suit/bio_suit/general( src )
new /obj/item/clothing/head/bio_hood/general( src )
@@ -34,6 +35,7 @@
..()
sleep(2)
contents = list()
+ new /obj/item/weapon/storage/bag/bio( src )
new /obj/item/clothing/suit/bio_suit/virology( src )
new /obj/item/clothing/head/bio_hood/virology( src )
new /obj/item/clothing/mask/breath(src)
@@ -75,5 +77,6 @@
..()
sleep(2)
contents = list()
+ new /obj/item/weapon/storage/bag/bio( src )
new /obj/item/clothing/suit/bio_suit/scientist( src )
new /obj/item/clothing/head/bio_hood/scientist( src )
\ No newline at end of file
diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
index 08130cac90a..b5680be43bc 100644
--- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
+++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
@@ -373,6 +373,10 @@
new /obj/item/clothing/shoes/white(src)
new /obj/item/clothing/suit/storage/labcoat/chemist(src)
new /obj/item/clothing/suit/storage/labcoat/chemist(src)
+ new /obj/item/weapon/storage/backpack/satchel_chem(src)
+ new /obj/item/weapon/storage/backpack/satchel_chem(src)
+ new /obj/item/weapon/storage/bag/chemistry(src)
+ new /obj/item/weapon/storage/bag/chemistry(src)
return
diff --git a/code/modules/mob/living/carbon/metroid/metroid.dm b/code/modules/mob/living/carbon/metroid/metroid.dm
index d6c1e083176..6e1a3616a4c 100644
--- a/code/modules/mob/living/carbon/metroid/metroid.dm
+++ b/code/modules/mob/living/carbon/metroid/metroid.dm
@@ -602,6 +602,8 @@ mob/living/carbon/slime/var/temperature_resistance = T0C+75
Uses = 3
enhanced = 1
qdel(O)
+ if(istype(O,/obj/item/weapon/storage/bag))
+ ..()
/obj/item/slime_extract/New()
..()
diff --git a/code/modules/reagents/reagent_containers/glass_containers.dm b/code/modules/reagents/reagent_containers/glass_containers.dm
index 1245bfe4e01..3e64245d2c5 100644
--- a/code/modules/reagents/reagent_containers/glass_containers.dm
+++ b/code/modules/reagents/reagent_containers/glass_containers.dm
@@ -161,7 +161,8 @@
user << "\blue You set the label to \"[tmp_label]\"."
src.label_text = tmp_label
src.update_name_label()
-
+ if(istype(I,/obj/item/weapon/storage/bag))
+ ..()
proc/update_name_label()
if(src.label_text == "")
diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm
index 2a0d82d3a03..a9bbdb68de6 100644
--- a/code/modules/reagents/reagent_containers/syringes.dm
+++ b/code/modules/reagents/reagent_containers/syringes.dm
@@ -46,7 +46,8 @@
attackby(obj/item/I as obj, mob/user as mob, params)
-
+ if(istype(I,/obj/item/weapon/storage/bag))
+ ..()
return
afterattack(obj/target, mob/user, proximity)
diff --git a/icons/obj/chemical.dmi b/icons/obj/chemical.dmi
index b00fca709c5..afe27ae192d 100644
Binary files a/icons/obj/chemical.dmi and b/icons/obj/chemical.dmi differ