diff --git a/code/modules/surgery/organs/organ_external.dm b/code/modules/surgery/organs/organ_external.dm
index 58ed8163a14..7e61bc866a7 100644
--- a/code/modules/surgery/organs/organ_external.dm
+++ b/code/modules/surgery/organs/organ_external.dm
@@ -523,7 +523,7 @@ Note that amputating the affected organ does in fact remove the infection from t
qdel(src) // If you flashed away to ashes, YOU FLASHED AWAY TO ASHES
return null
-/obj/item/organ/external/chest/droplimb()
+/obj/item/organ/external/proc/disembowel(spillage_zone = "chest")
if(!owner)
return
@@ -539,7 +539,7 @@ Note that amputating the affected organ does in fact remove the infection from t
for(var/X in C.internal_organs)
var/obj/item/organ/O = X
var/org_zone = check_zone(O.parent_organ)
- if(org_zone == "chest")
+ if(org_zone == spillage_zone)
O.remove(C)
O.forceMove(T)
organ_spilled = TRUE
@@ -548,30 +548,14 @@ Note that amputating the affected organ does in fact remove the infection from t
C.visible_message("[C]'s internal organs spill out onto the floor!")
return TRUE
+/obj/item/organ/external/chest/droplimb()
+ if(disembowel())
+ return TRUE
+
/obj/item/organ/external/groin/droplimb()
- if(!owner)
- return
+ if(disembowel("groin"))
+ return TRUE
- var/mob/living/carbon/C = owner
-
- if(!hasorgans(C))
- return
-
- var/organ_spilled = FALSE
- var/turf/T = get_turf(C)
- C.add_splatter_floor(T)
- playsound(get_turf(C), 'sound/effects/splat.ogg', 25, 1)
- for(var/X in C.internal_organs)
- var/obj/item/organ/O = X
- var/org_zone = check_zone(O.parent_organ)
- if(org_zone == "groin")
- O.remove(C)
- O.forceMove(T)
- organ_spilled = TRUE
-
- if(organ_spilled)
- C.visible_message("[C]'s internal organs spill out onto the floor!")
- return TRUE
/obj/item/organ/external/attackby(obj/item/I, mob/user, params)