diff --git a/_maps/RandomRooms/5x3/sk_rdm061_pubbyclutter4.dmm b/_maps/RandomRooms/5x3/sk_rdm061_pubbyclutter4.dmm
index be79f1651a9ea..86714acd60851 100644
--- a/_maps/RandomRooms/5x3/sk_rdm061_pubbyclutter4.dmm
+++ b/_maps/RandomRooms/5x3/sk_rdm061_pubbyclutter4.dmm
@@ -46,7 +46,7 @@
/turf/open/floor/plating,
/area/template_noop)
"k" = (
-/obj/item/reagent_containers/food/snacks/canned/beans,
+/obj/item/food/canned/beans,
/turf/open/floor/plating,
/area/template_noop)
"l" = (
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm
index a8f8c675356d3..c4655da79ffb3 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm
@@ -99,7 +99,7 @@
/area/ruin/powered/snow_biodome)
"ax" = (
/obj/structure/table/wood,
-/obj/item/reagent_containers/food/snacks/canned/beans,
+/obj/item/food/canned/beans,
/turf/open/floor/wood,
/area/ruin/powered/snow_biodome)
"ay" = (
diff --git a/_maps/RandomRuins/SpaceRuins/deepstorage.dmm b/_maps/RandomRuins/SpaceRuins/deepstorage.dmm
index 07c62171067a6..b1788a6bc9271 100644
--- a/_maps/RandomRuins/SpaceRuins/deepstorage.dmm
+++ b/_maps/RandomRuins/SpaceRuins/deepstorage.dmm
@@ -733,25 +733,25 @@
/area/ruin/space/has_grav/deepstorage/hydroponics)
"bT" = (
/obj/effect/turf_decal/delivery,
-/obj/item/reagent_containers/food/snacks/canned/beans{
+/obj/item/food/canned/beans{
pixel_x = -5;
pixel_y = 3
},
-/obj/item/reagent_containers/food/snacks/canned/beans{
+/obj/item/food/canned/beans{
pixel_x = 2;
pixel_y = 3
},
-/obj/item/reagent_containers/food/snacks/canned/beans{
+/obj/item/food/canned/beans{
pixel_x = -2
},
-/obj/item/reagent_containers/food/snacks/canned/beans{
+/obj/item/food/canned/beans{
pixel_x = 5
},
-/obj/item/reagent_containers/food/snacks/canned/beans{
+/obj/item/food/canned/beans{
pixel_x = 1;
pixel_y = -3
},
-/obj/item/reagent_containers/food/snacks/canned/beans{
+/obj/item/food/canned/beans{
pixel_x = 8;
pixel_y = -3
},
@@ -766,25 +766,25 @@
/area/ruin/space/has_grav/deepstorage/storage)
"bU" = (
/obj/effect/turf_decal/delivery,
-/obj/item/reagent_containers/food/snacks/canned/beans{
+/obj/item/food/canned/beans{
pixel_x = -5;
pixel_y = 3
},
-/obj/item/reagent_containers/food/snacks/canned/beans{
+/obj/item/food/canned/beans{
pixel_x = 2;
pixel_y = 3
},
-/obj/item/reagent_containers/food/snacks/canned/beans{
+/obj/item/food/canned/beans{
pixel_x = -2
},
-/obj/item/reagent_containers/food/snacks/canned/beans{
+/obj/item/food/canned/beans{
pixel_x = 5
},
-/obj/item/reagent_containers/food/snacks/canned/beans{
+/obj/item/food/canned/beans{
pixel_x = 1;
pixel_y = -3
},
-/obj/item/reagent_containers/food/snacks/canned/beans{
+/obj/item/food/canned/beans{
pixel_x = 8;
pixel_y = -3
},
diff --git a/_maps/map_files/FlandStation/FlandStation.dmm b/_maps/map_files/FlandStation/FlandStation.dmm
index 13dc92db33ef0..2424cc7693c37 100644
--- a/_maps/map_files/FlandStation/FlandStation.dmm
+++ b/_maps/map_files/FlandStation/FlandStation.dmm
@@ -25291,25 +25291,25 @@
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
"gCA" = (
-/obj/item/reagent_containers/food/snacks/canned/beans{
+/obj/item/food/canned/beans{
pixel_x = -5;
pixel_y = 3
},
-/obj/item/reagent_containers/food/snacks/canned/beans{
+/obj/item/food/canned/beans{
pixel_x = 2;
pixel_y = 3
},
-/obj/item/reagent_containers/food/snacks/canned/beans{
+/obj/item/food/canned/beans{
pixel_x = -2
},
-/obj/item/reagent_containers/food/snacks/canned/beans{
+/obj/item/food/canned/beans{
pixel_x = 5
},
-/obj/item/reagent_containers/food/snacks/canned/beans{
+/obj/item/food/canned/beans{
pixel_x = 1;
pixel_y = -3
},
-/obj/item/reagent_containers/food/snacks/canned/beans{
+/obj/item/food/canned/beans{
pixel_x = 8;
pixel_y = -3
},
@@ -62959,10 +62959,10 @@
/area/science/research)
"qpN" = (
/obj/structure/table,
-/obj/item/reagent_containers/food/snacks/canned/beefbroth{
+/obj/item/food/canned/beefbroth{
pixel_x = -4
},
-/obj/item/reagent_containers/food/snacks/canned/peaches{
+/obj/item/food/canned/peaches{
pixel_x = 4
},
/turf/open/floor/plasteel/techmaint,
diff --git a/_maps/shuttles/emergency/emergency_pubby.dmm b/_maps/shuttles/emergency/emergency_pubby.dmm
index 61d44e7ed1dbf..55ec0429be55d 100644
--- a/_maps/shuttles/emergency/emergency_pubby.dmm
+++ b/_maps/shuttles/emergency/emergency_pubby.dmm
@@ -129,7 +129,7 @@
layer = 2.9
},
/obj/structure/table,
-/obj/item/reagent_containers/food/snacks/canned/beans{
+/obj/item/food/canned/beans{
pixel_x = 3;
pixel_y = 4
},
diff --git a/_maps/shuttles/whiteship/whiteship_meta.dmm b/_maps/shuttles/whiteship/whiteship_meta.dmm
index 13d7261d09c66..9a1c3ec03ca31 100644
--- a/_maps/shuttles/whiteship/whiteship_meta.dmm
+++ b/_maps/shuttles/whiteship/whiteship_meta.dmm
@@ -86,25 +86,25 @@
/turf/open/floor/plasteel/dark,
/area/shuttle/abandoned/cargo)
"aq" = (
-/obj/item/reagent_containers/food/snacks/canned/beans{
+/obj/item/food/canned/beans{
pixel_x = -5;
pixel_y = 3
},
-/obj/item/reagent_containers/food/snacks/canned/beans{
+/obj/item/food/canned/beans{
pixel_x = 2;
pixel_y = 3
},
-/obj/item/reagent_containers/food/snacks/canned/beans{
+/obj/item/food/canned/beans{
pixel_x = -2
},
-/obj/item/reagent_containers/food/snacks/canned/beans{
+/obj/item/food/canned/beans{
pixel_x = 5
},
-/obj/item/reagent_containers/food/snacks/canned/beans{
+/obj/item/food/canned/beans{
pixel_x = 1;
pixel_y = -3
},
-/obj/item/reagent_containers/food/snacks/canned/beans{
+/obj/item/food/canned/beans{
pixel_x = 8;
pixel_y = -3
},
diff --git a/beestation.dme b/beestation.dme
index 7834bca84acc7..445f227342f64 100644
--- a/beestation.dme
+++ b/beestation.dme
@@ -1413,6 +1413,7 @@
#include "code\game\objects\items\food\donuts.dm"
#include "code\game\objects\items\food\dough.dm"
#include "code\game\objects\items\food\mexican.dm"
+#include "code\game\objects\items\food\packaged.dm"
#include "code\game\objects\items\food\pancakes.dm"
#include "code\game\objects\items\food\pastries.dm"
#include "code\game\objects\items\food\pie.dm"
diff --git a/code/_globalvars/lists/maintenance_loot.dm b/code/_globalvars/lists/maintenance_loot.dm
index 342c52b200ee3..699e6a7268674 100644
--- a/code/_globalvars/lists/maintenance_loot.dm
+++ b/code/_globalvars/lists/maintenance_loot.dm
@@ -74,7 +74,7 @@ GLOBAL_LIST_INIT(maintenance_loot, list(
/obj/item/radio/headset = 1,
/obj/item/radio/off = 2,
/obj/item/reagent_containers/food/drinks/bottle/homemaderum = 1,
- /obj/item/reagent_containers/food/snacks/canned/peaches/maint = 1,
+ /obj/item/food/canned/peaches/maint = 1,
/obj/item/reagent_containers/food/snacks/grown/citrus/orange = 1,
/obj/item/reagent_containers/food/snacks/grown/flower/poppy = 10,
/obj/item/reagent_containers/glass/rag = 3,
diff --git a/code/game/objects/items/food/packaged.dm b/code/game/objects/items/food/packaged.dm
new file mode 100644
index 0000000000000..1d70e775b56f9
--- /dev/null
+++ b/code/game/objects/items/food/packaged.dm
@@ -0,0 +1,74 @@
+// Pre-packaged meals, canned, wrapped, and vended
+
+// Cans
+/obj/item/food/canned
+ name = "Canned Air"
+ desc = "If you ever wondered where air came from..."
+ food_reagents = list(
+ /datum/reagent/oxygen = 6,
+ /datum/reagent/nitrogen = 24,
+ )
+ icon = 'icons/obj/food/canned.dmi'
+ icon_state = "peachcan"
+ food_flags = FOOD_IN_CONTAINER
+ w_class = WEIGHT_CLASS_NORMAL
+ max_volume = 30
+
+/obj/item/food/canned/proc/open_can(mob/user)
+ to_chat(user, "You pull back the tab of \the [src].")
+ playsound(user.loc, 'sound/items/foodcanopen.ogg', 50)
+ ENABLE_BITFIELD(reagents.flags, OPENCONTAINER)
+
+/obj/item/food/canned/attack_self(mob/user)
+ if(!is_drainable())
+ open_can(user)
+ icon_state = "[icon_state]_open"
+ return ..()
+
+/obj/item/food/canned/attack(mob/living/M, mob/user, def_zone)
+ if (!is_drainable())
+ to_chat(user, "[src]'s lid hasn't been opened!")
+ return 0
+ return ..()
+
+/obj/item/food/canned/beans
+ name = "tin of beans"
+ desc = "Musical fruit in a slightly less musical container."
+ icon_state = "beans"
+ trash_type = /obj/item/trash/can/food/beans
+ food_reagents = list(
+ /datum/reagent/consumable/nutriment = 4,
+ /datum/reagent/consumable/nutriment/protein = 9,
+ /datum/reagent/consumable/ketchup = 4
+ )
+ tastes = list("beans" = 1)
+ foodtypes = VEGETABLES
+
+/obj/item/food/canned/peaches
+ name = "canned peaches"
+ desc = "Just a nice can of ripe peaches swimming in their own juices."
+ icon_state = "peachcan"
+ trash_type = /obj/item/trash/can/food/peaches
+ food_reagents = list(
+ /datum/reagent/consumable/peachjuice = 20,
+ /datum/reagent/consumable/sugar = 8,
+ /datum/reagent/consumable/nutriment = 2,
+ )
+ tastes = list("peaches" = 7, "tin" = 1)
+ foodtypes = FRUIT | SUGAR
+
+/obj/item/food/canned/peaches/maint
+ name = "Maintenance Peaches"
+ desc = "I have a mouth and I must eat."
+ icon_state = "peachcanmaint"
+ trash_type = /obj/item/trash/can/food/peaches/maint
+ tastes = list("peaches" = 1, "tin" = 7)
+
+/obj/item/food/canned/beefbroth
+ name = "canned beef broth"
+ desc = "Why does this exist?"
+ icon_state = "beefcan"
+ trash_type = /obj/item/trash/can/food/beefbroth
+ food_reagents = list(/datum/reagent/consumable/beefbroth = 50)
+ tastes = list("disgust" = 7, "tin" = 1)
+ foodtypes = MEAT | GROSS | JUNKFOOD
diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm
index 0387750e092c6..8289ee37ea841 100644
--- a/code/modules/cargo/packs.dm
+++ b/code/modules/cargo/packs.dm
@@ -2523,16 +2523,16 @@
max_supply = 3
contraband = TRUE
crate_type = /obj/structure/closet/crate
- contains = list(/obj/item/reagent_containers/food/snacks/canned/beefbroth,
- /obj/item/reagent_containers/food/snacks/canned/beefbroth,
- /obj/item/reagent_containers/food/snacks/canned/beefbroth,
- /obj/item/reagent_containers/food/snacks/canned/beefbroth,
- /obj/item/reagent_containers/food/snacks/canned/beefbroth,
- /obj/item/reagent_containers/food/snacks/canned/beefbroth,
- /obj/item/reagent_containers/food/snacks/canned/beefbroth,
- /obj/item/reagent_containers/food/snacks/canned/beefbroth,
- /obj/item/reagent_containers/food/snacks/canned/beefbroth,
- /obj/item/reagent_containers/food/snacks/canned/beefbroth
+ contains = list(/obj/item/food/canned/beefbroth,
+ /obj/item/food/canned/beefbroth,
+ /obj/item/food/canned/beefbroth,
+ /obj/item/food/canned/beefbroth,
+ /obj/item/food/canned/beefbroth,
+ /obj/item/food/canned/beefbroth,
+ /obj/item/food/canned/beefbroth,
+ /obj/item/food/canned/beefbroth,
+ /obj/item/food/canned/beefbroth,
+ /obj/item/food/canned/beefbroth
)
crate_name = "Beef Broth Care"
//////////////////////////////////////////////////////////////////////////////
diff --git a/code/modules/food_and_drinks/food/snacks_other.dm b/code/modules/food_and_drinks/food/snacks_other.dm
index d1b867a11dd0c..42831e289f367 100644
--- a/code/modules/food_and_drinks/food/snacks_other.dm
+++ b/code/modules/food_and_drinks/food/snacks_other.dm
@@ -575,63 +575,6 @@
tastes = list("chocolate" = 1)
foodtype = JUNKFOOD | SUGAR
-/obj/item/reagent_containers/food/snacks/canned
- name = "Canned Air"
- desc = "If you ever wondered where air came from..."
- list_reagents = list(/datum/reagent/oxygen = 6, /datum/reagent/nitrogen = 24)
- icon_state = "peachcan"
- in_container = TRUE
- reagent_flags = NONE
- spillable = FALSE
- w_class = WEIGHT_CLASS_NORMAL
- volume = 30
-
-/obj/item/reagent_containers/food/snacks/canned/proc/open_can(mob/user)
- to_chat(user, "You pull back the tab of \the [src].")
- playsound(user.loc, 'sound/items/foodcanopen.ogg', 50)
- ENABLE_BITFIELD(reagents.flags, OPENCONTAINER)
- spillable = TRUE
-
-/obj/item/reagent_containers/food/snacks/canned/attack_self(mob/user)
- if(!is_drainable())
- open_can(user)
- icon_state = "[icon_state]_open"
- return ..()
-
-/obj/item/reagent_containers/food/snacks/canned/attack(mob/living/M, mob/user, def_zone)
- if (!is_drainable())
- to_chat(user, "[src]'s lid hasn't been opened!")
- return 0
- return ..()
-
-/obj/item/reagent_containers/food/snacks/canned/beans
- name = "tin of beans"
- desc = "Musical fruit in a slightly less musical container."
- icon_state = "beans"
- trash = /obj/item/trash/can/food/beans
- bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 1)
- list_reagents = list(/datum/reagent/consumable/nutriment = 10)
- filling_color = "#B22222"
- tastes = list("beans" = 1)
- foodtype = VEGETABLES
-
-/obj/item/reagent_containers/food/snacks/canned/peaches
- name = "canned peaches"
- desc = "Just a nice can of ripe peaches swimming in their own juices."
- icon_state = "peachcan"
- trash = /obj/item/trash/can/food/peaches
- list_reagents = list(/datum/reagent/consumable/peachjuice = 20, /datum/reagent/consumable/sugar = 8, /datum/reagent/consumable/nutriment = 2)
- filling_color = "#ffdf26"
- tastes = list("peaches" = 7, "tin" = 1)
- foodtype = FRUIT | SUGAR
-
-/obj/item/reagent_containers/food/snacks/canned/peaches/maint
- name = "Maintenance Peaches"
- desc = "I have a mouth and I must eat."
- icon_state = "peachcanmaint"
- trash = /obj/item/trash/can/food/peaches/maint
- tastes = list("peaches" = 1, "tin" = 7)
-
/obj/item/reagent_containers/food/snacks/crab_rangoon
name = "Crab Rangoon"
desc = "Has many names, like crab puffs, cheese wontons, crab dumplings? Whatever you call them, they're a fabulous blast of cream cheesy crab."
@@ -654,16 +597,6 @@
tastes = list("fried corn" = 1)
foodtype = JUNKFOOD | FRIED
-/obj/item/reagent_containers/food/snacks/canned/beefbroth
- name = "canned beef broth"
- desc = "Why does this exist?"
- icon_state = "beefcan"
- trash = /obj/item/trash/can/food/beefbroth
- list_reagents = list(/datum/reagent/consumable/beefbroth = 50)
- filling_color = "#100800"
- tastes = list("disgust" = 7, "tin" = 1)
- foodtype = MEAT | GROSS | JUNKFOOD
-
/obj/item/reagent_containers/food/snacks/pingles
name = "pingles"
desc = "A perfect blend of sour cream and onion on a potato chip. May cause space lag."
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm
index a0ffda717cf29..38ac7491450a5 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm
@@ -74,7 +74,7 @@
reqs = list(/datum/reagent/consumable/ketchup = 5,
/obj/item/reagent_containers/food/snacks/grown/soybeans = 2
)
- result = /obj/item/reagent_containers/food/snacks/canned/beans
+ result = /obj/item/food/canned/beans
subcategory = CAT_MISCFOOD
/datum/crafting_recipe/food/eggplantparm
diff --git a/code/modules/vending/mining.dm b/code/modules/vending/mining.dm
index 5658e78f838a4..5d84387dc25d6 100644
--- a/code/modules/vending/mining.dm
+++ b/code/modules/vending/mining.dm
@@ -7,7 +7,7 @@
light_color = LIGHT_COLOR_BLUEGREEN
products = list(/obj/item/food/donkpocket/warm = 8,
/obj/item/food/salad/herbsalad = 6,
- /obj/item/reagent_containers/food/snacks/canned/beans = 4,
+ /obj/item/food/canned/beans = 4,
/obj/item/reagent_containers/glass/waterbottle/large = 10)
contraband = list(/obj/item/reagent_containers/food/drinks/coffee = 10,
/obj/item/reagent_containers/food/snacks/chips = 6,
diff --git a/icons/obj/food/canned.dmi b/icons/obj/food/canned.dmi
new file mode 100644
index 0000000000000..4375b38b3d6c6
Binary files /dev/null and b/icons/obj/food/canned.dmi differ
diff --git a/tools/UpdatePaths/Scripts/10263_NEWFOODpackaged.txt b/tools/UpdatePaths/Scripts/10263_NEWFOODpackaged.txt
new file mode 100644
index 0000000000000..372404be5ae99
--- /dev/null
+++ b/tools/UpdatePaths/Scripts/10263_NEWFOODpackaged.txt
@@ -0,0 +1 @@
+/obj/item/food/canned : /obj/item/reagent_containers/food/snacks/canned{@OLD}