diff --git a/code/game/objects/structures/kitchen_spike.dm b/code/game/objects/structures/kitchen_spike.dm
index 81dc09f17ff..118e61704f8 100644
--- a/code/game/objects/structures/kitchen_spike.dm
+++ b/code/game/objects/structures/kitchen_spike.dm
@@ -63,19 +63,30 @@
return
if(!istype(G, /obj/item/grab) || !G.affecting)
return
- if(has_buckled_mobs())
- to_chat(user, "The spike already has something on it, finish collecting its meat first!")
- return
if(isliving(G.affecting))
- if(!has_buckled_mobs())
- if(do_mob(user, src, 120))
- var/mob/living/affected = G.affecting
- if(spike(affected))
- affected.visible_message("[user] slams [affected] onto the meat spike!", "[user] slams you onto the meat spike!", "You hear a squishy wet noise.")
- return
+ start_spike(G.affecting, user)
return ..()
-/obj/structure/kitchenspike/proc/spike(mob/living/victim)
+/obj/structure/kitchenspike/MouseDrop_T(mob/living/victim, mob/living/user)
+ if (!user.Adjacent(src) || !user.Adjacent(victim) || isAI(user))
+ return
+ if(isanimal(user) && victim != user)
+ return // animals cannot put mobs other than themselves onto spikes
+ add_fingerprint(user)
+ start_spike(victim, user)
+
+/obj/structure/kitchenspike/proc/start_spike(mob/living/victim, mob/user)
+ if(has_buckled_mobs())
+ to_chat(user, "The spike already has something on it, finish collecting its meat first!")
+ return
+ victim.visible_message(
+ "[user] tries to slam [victim] onto the meat spike!",
+ "[user] tries to slam you onto the meat spike!"
+ )
+ if(do_mob(user, src, 12 SECONDS))
+ end_spike(victim, user)
+
+/obj/structure/kitchenspike/proc/end_spike(mob/living/victim, mob/user)
if(!istype(victim))
return FALSE
@@ -87,6 +98,11 @@
playsound(loc, 'sound/effects/splat.ogg', 25, 1)
victim.forceMove(drop_location())
victim.emote("scream")
+ victim.visible_message(
+ "[user] slams [victim] onto the meat spike!",
+ "[user] slams you onto the meat spike!",
+ "You hear a squishy wet noise."
+ )
if(ishuman(victim))
var/mob/living/carbon/human/H = victim
H.add_splatter_floor()
@@ -98,10 +114,6 @@
victim.pixel_y = victim.get_standard_pixel_y_offset(180)
return TRUE
-
-/obj/structure/kitchenspike/user_buckle_mob(mob/living/M, mob/living/user) //Don't want them getting put on the rack other than by spiking
- return
-
/obj/structure/kitchenspike/user_unbuckle_mob(mob/living/buckled_mob, mob/living/carbon/human/user)
if(buckled_mob)
var/mob/living/M = buckled_mob