diff --git a/code/datums/components/grillable.dm b/code/datums/components/grillable.dm
index 859b25dff27..2f7d1e1b831 100644
--- a/code/datums/components/grillable.dm
+++ b/code/datums/components/grillable.dm
@@ -1,4 +1,5 @@
/datum/component/grillable
+ dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS // So you can change grill results with various cookstuffs
///Result atom type of grilling this object
var/atom/cook_result
///Amount of time required to cook the food
@@ -28,6 +29,19 @@
RegisterSignal(parent, COMSIG_ITEM_GRILLED, .proc/OnGrill)
RegisterSignal(parent, COMSIG_PARENT_EXAMINE, .proc/OnExamine)
+// Inherit the new values passed to the component
+/datum/component/grillable/InheritComponent(datum/component/grillable/new_comp, original, cook_result, required_cook_time, positive_result, use_large_steam_sprite)
+ if(!original)
+ return
+ if(cook_result)
+ src.cook_result = cook_result
+ if(required_cook_time)
+ src.required_cook_time = required_cook_time
+ if(positive_result)
+ src.positive_result = positive_result
+ if(use_large_steam_sprite)
+ src.use_large_steam_sprite = use_large_steam_sprite
+
///Ran every time an item is grilled by something
/datum/component/grillable/proc/OnGrill(datum/source, atom/used_grill, delta_time = 1)
SIGNAL_HANDLER
diff --git a/code/game/objects/items/food/pastries.dm b/code/game/objects/items/food/pastries.dm
index 4528e9fb141..f6ded74284f 100644
--- a/code/game/objects/items/food/pastries.dm
+++ b/code/game/objects/items/food/pastries.dm
@@ -710,6 +710,47 @@
tastes = list("pancakes" = 1)
foodtypes = GRAIN | SUGAR | BREAKFAST
w_class = WEIGHT_CLASS_SMALL
+ burns_on_grill = TRUE
+
+/obj/item/food/pancakes/raw
+ name = "goopy pancake"
+ desc = "A barely cooked mess that some may mistake for a pancake. It longs for the griddle."
+ icon_state = "rawpancakes_1"
+ inhand_icon_state = "rawpancakes"
+ food_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 1)
+ tastes = list("milky batter" = 1)
+ burns_on_grill = FALSE
+
+/obj/item/food/pancakes/raw/MakeGrillable()
+ AddComponent(/datum/component/grillable,\
+ cook_result = /obj/item/food/pancakes,\
+ required_cook_time = rand(30 SECONDS, 40 SECONDS),\
+ positive_result = TRUE,\
+ use_large_steam_sprite = TRUE)
+
+/obj/item/food/pancakes/raw/attackby(obj/item/garnish, mob/living/user, params)
+ var/newresult
+ if(istype(garnish, /obj/item/food/grown/berries))
+ newresult = /obj/item/food/pancakes/blueberry
+ name = "raw blueberry pancake"
+ icon_state = "rawbbpancakes_1"
+ inhand_icon_state = "rawbbpancakes"
+ else if(istype(garnish, /obj/item/food/chocolatebar))
+ newresult = /obj/item/food/pancakes/chocolatechip
+ name = "raw chocolate chip pancake"
+ icon_state = "rawccpancakes_1"
+ inhand_icon_state = "rawccpancakes"
+ else
+ return ..()
+ if(newresult)
+ qdel(garnish)
+ to_chat(user, "You add [garnish] to [src].")
+ AddComponent(/datum/component/grillable, cook_result = newresult)
+
+/obj/item/food/pancakes/raw/examine(mob/user)
+ . = ..()
+ if(name == initial(name))
+ . += "You can modify the pancake by adding blueberries or chocolate before finishing the griddle."
/obj/item/food/pancakes/blueberry
name = "blueberry pancake"
diff --git a/code/modules/food_and_drinks/kitchen_machinery/griddle.dm b/code/modules/food_and_drinks/kitchen_machinery/griddle.dm
index 4a28b98e9fe..ee36861754b 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/griddle.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/griddle.dm
@@ -26,6 +26,23 @@
. = ..()
grill_loop = new(list(src), FALSE)
variant = rand(1,3)
+ RegisterSignal(src, COMSIG_ATOM_EXPOSE_REAGENT, .proc/on_expose_reagent)
+
+/obj/machinery/griddle/proc/on_expose_reagent(atom/parent_atom, datum/reagent/exposing_reagent, reac_volume)
+ SIGNAL_HANDLER
+
+ if(griddled_objects.len >= max_items || !istype(exposing_reagent, /datum/reagent/consumable/pancakebatter) || reac_volume < 5)
+ return NONE //make sure you have space... it's actually batter... and a proper amount of it.
+
+ for(var/pancakes in 1 to FLOOR(reac_volume, 5) step 5) //this adds as many pancakes as you possibly could make, with 5u needed per pancake
+ var/obj/item/food/pancakes/raw/new_pancake = new(src)
+ new_pancake.pixel_x = rand(16,-16)
+ new_pancake.pixel_y = rand(16,-16)
+ AddToGrill(new_pancake)
+ if(griddled_objects.len >= max_items)
+ break
+ visible_message("[exposing_reagent] begins to cook on [src].")
+ return NONE
/obj/machinery/griddle/crowbar_act(mob/living/user, obj/item/I)
. = ..()
diff --git a/code/modules/food_and_drinks/recipes/food_mixtures.dm b/code/modules/food_and_drinks/recipes/food_mixtures.dm
index dcf82185f37..55634919cd9 100644
--- a/code/modules/food_and_drinks/recipes/food_mixtures.dm
+++ b/code/modules/food_and_drinks/recipes/food_mixtures.dm
@@ -125,6 +125,10 @@
/datum/chemical_reaction/cakebatter/vegan
required_reagents = list(/datum/reagent/consumable/soymilk = 15, /datum/reagent/consumable/flour = 15, /datum/reagent/consumable/sugar = 5)
+/datum/chemical_reaction/pancakebatter
+ results = list(/datum/reagent/consumable/pancakebatter = 15)
+ required_reagents = list(/datum/reagent/consumable/eggyolk = 12, /datum/reagent/consumable/milk = 10, /datum/reagent/consumable/flour = 5)
+
/datum/chemical_reaction/ricebowl
required_reagents = list(/datum/reagent/consumable/rice = 10, /datum/reagent/water = 10)
required_container = /obj/item/reagent_containers/glass/bowl
@@ -149,3 +153,7 @@
/datum/chemical_reaction/bbqsauce
results = list(/datum/reagent/consumable/bbqsauce = 5)
required_reagents = list(/datum/reagent/ash = 1, /datum/reagent/consumable/tomatojuice = 1, /datum/reagent/medicine/salglu_solution = 3, /datum/reagent/consumable/blackpepper = 1)
+
+/datum/chemical_reaction/gravy
+ results = list(/datum/reagent/consumable/gravy = 3)
+ required_reagents = list(/datum/reagent/consumable/milk = 1, /datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/flour = 1)
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm
index b64e9e60978..aab8a45528c 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm
@@ -272,7 +272,7 @@
)
result = /obj/item/food/donut/jelly/slimejelly/laugh
-////////////////////////////////////////////////WAFFLES AND PANCAKES////////////////////////////////////////////////
+////////////////////////////////////////////////WAFFLES////////////////////////////////////////////////
/datum/crafting_recipe/food/waffles
time = 15
@@ -312,33 +312,6 @@
result = /obj/item/food/rofflewaffles
subcategory = CAT_PASTRY
-/datum/crafting_recipe/food/pancakes
- name = "Pancake"
- reqs = list(
- /obj/item/food/pastrybase = 1
- )
- result = /obj/item/food/pancakes
- subcategory = CAT_PASTRY
-
-/datum/crafting_recipe/food/bbpancakes
- name = "Blueberry pancake"
- reqs = list(
- /obj/item/food/pastrybase = 1,
- /obj/item/food/grown/berries = 1
- )
- result = /obj/item/food/pancakes/blueberry
- subcategory = CAT_PASTRY
-
-/datum/crafting_recipe/food/ccpancakes
- name = "Chocolate chip pancake"
- reqs = list(
- /obj/item/food/pastrybase = 1,
- /obj/item/food/chocolatebar = 1
- )
- result = /obj/item/food/pancakes/chocolatechip
- subcategory = CAT_PASTRY
-
-
////////////////////////////////////////////////DONKPOCCKETS////////////////////////////////////////////////
/datum/crafting_recipe/food/donkpocket
diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm
index 32394d571c1..9fae1a42719 100755
--- a/code/modules/reagents/chemistry/reagents/food_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm
@@ -861,3 +861,16 @@
nutriment_factor = 5 * REAGENTS_METABOLISM
taste_mult = 2
taste_description = "fizzy sweetness"
+
+/datum/reagent/consumable/gravy
+ name = "Gravy"
+ description = "A mixture of flour, water, and the juices of cooked meat."
+ taste_description = "gravy"
+ color = "#623301"
+ taste_mult = 1.2
+
+/datum/reagent/consumable/pancakebatter
+ name = "pancake batter"
+ description = "A very milky batter. 5 units of this on the griddle makes a mean pancake."
+ taste_description = "milky batter"
+ color = "#fccc98"
diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm
index 4b3df00c47c..d0520401ddc 100644
--- a/code/modules/reagents/chemistry/reagents/other_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm
@@ -2324,13 +2324,6 @@
color = "#E6E6DA"
taste_mult = 0
-/datum/reagent/consumable/gravy
- name = "Gravy"
- description = "A mixture of flour, water, and the juices of cooked meat."
- taste_description = "gravy"
- color = "#623301"
- taste_mult = 1.2
-
/datum/reagent/determination
name = "Determination"
description = "For when you need to push on a little more. Do NOT allow near plants."
diff --git a/code/modules/reagents/chemistry/recipes/others.dm b/code/modules/reagents/chemistry/recipes/others.dm
index 508f5305854..978e23daa6d 100644
--- a/code/modules/reagents/chemistry/recipes/others.dm
+++ b/code/modules/reagents/chemistry/recipes/others.dm
@@ -582,10 +582,6 @@
required_reagents = list(/datum/reagent/water/hollowwater = 1)
required_catalysts = list(/datum/reagent/water/holywater = 1)
-/datum/chemical_reaction/gravy
- results = list(/datum/reagent/consumable/gravy = 3)
- required_reagents = list(/datum/reagent/consumable/milk = 1, /datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/flour = 1)
-
/datum/chemical_reaction/exotic_stabilizer
results = list(/datum/reagent/exotic_stabilizer = 2)
required_reagents = list(/datum/reagent/plasma_oxide = 1,/datum/reagent/stabilizing_agent = 1)
@@ -599,3 +595,4 @@
var/location = get_turf(holder.my_atom)
for(var/i in 1 to created_volume)
new /obj/item/stack/sheet/mineral/silver(location)
+
diff --git a/icons/obj/food/food.dmi b/icons/obj/food/food.dmi
index 3fd9835e314..d6ecc13164b 100644
Binary files a/icons/obj/food/food.dmi and b/icons/obj/food/food.dmi differ