diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm
index a96772a5172..8ccca058aca 100644
--- a/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm
+++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm
@@ -528,3 +528,13 @@
/datum/trait/neutral/submit_to_prey/apply(var/datum/species/S,var/mob/living/carbon/human/H)
..(S,H)
H.verbs |= /mob/living/proc/lend_prey_control
+
+/datum/trait/neutral/vertical_nom
+ name = "Vertical Nom"
+ desc = "Allows you to consume people from up above."
+ cost = 0
+ custom_only = FALSE
+
+/datum/trait/neutral/vertical_nom/apply(var/datum/species/S,var/mob/living/carbon/human/H)
+ ..(S,H)
+ H.verbs |= /mob/living/proc/vertical_nom
diff --git a/code/modules/vore/eating/vertical_nom_vr.dm b/code/modules/vore/eating/vertical_nom_vr.dm
new file mode 100644
index 00000000000..c9ff0a3096a
--- /dev/null
+++ b/code/modules/vore/eating/vertical_nom_vr.dm
@@ -0,0 +1,47 @@
+/mob/living/proc/vertical_nom()
+ set name = "Nom from Above"
+ set desc = "Allows you to eat people who are below your tile or adjacent one. Requires passability."
+ set category = "Abilities"
+
+ if(stat == DEAD || paralysis || weakened || stunned)
+ to_chat(src, "You cannot do that while in your current state.")
+ return
+
+ if(!(src.vore_selected))
+ to_chat(src, "No selected belly found.")
+ return
+
+ var/list/targets = list()
+
+ for(var/turf/T in range(1, src))
+ if(isopenspace(T))
+ while(isopenspace(T))
+ T = GetBelow(T)
+ if(T)
+ for(var/mob/living/L in T)
+ if(L.devourable && L.can_be_drop_prey)
+ targets += L
+
+ if(!(targets.len))
+ to_chat(src, "No eligible targets found.")
+ return
+
+ var/mob/living/target = tgui_input_list(src, "Please select a target.", "Victim", targets)
+
+ if(!target)
+ return
+
+ to_chat(target, "You feel yourself being pulled up by something... Or someone?!")
+ var/starting_loc = target.loc
+
+ if(do_after(src, 50))
+ if(target.loc != starting_loc)
+ to_chat(target, "You have interrupted whatever that was...")
+ to_chat(src, "They got away.")
+ return
+ if(target.buckled)
+ target.buckled.unbuckle_mob()
+ target.visible_message("\The [target] suddenly disappears somewhere above!",\
+ "You are dragged above and feel yourself slipping directly into \the [src]'s [vore_selected]!")
+ to_chat(src, "You successfully snatch \the [target], slipping them into your [vore_selected].")
+ target.forceMove(src.vore_selected)
\ No newline at end of file
diff --git a/vorestation.dme b/vorestation.dme
index ba44094f7f7..504041f202d 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -3985,6 +3985,7 @@
#include "code\modules\vore\eating\slipvore_vr.dm"
#include "code\modules\vore\eating\stumblevore_vr.dm"
#include "code\modules\vore\eating\transforming_vr.dm"
+#include "code\modules\vore\eating\vertical_nom_vr.dm"
#include "code\modules\vore\eating\vore_vr.dm"
#include "code\modules\vore\eating\vorehooks_vr.dm"
#include "code\modules\vore\eating\vorepanel_vr.dm"