diff --git a/code/WorkInProgress/surgery/appendectomy.dm b/code/WorkInProgress/surgery/appendectomy.dm
new file mode 100644
index 00000000000..8987b09b215
--- /dev/null
+++ b/code/WorkInProgress/surgery/appendectomy.dm
@@ -0,0 +1,20 @@
+/datum/surgery/appendectomy
+ name = "appendectomy"
+ steps = list(/datum/surgery_step/open, /datum/surgery_step/close)
+ location = "groin"
+
+
+/datum/surgery_step/open
+ implements = list(/obj/item/weapon/scalpel = 100, /obj/item/weapon/kitchenknife = 65, /obj/item/weapon/shard = 45)
+ time = 12
+
+/datum/surgery_step/open/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ user.visible_message("[user] begins to cut open [target].")
+
+
+/datum/surgery_step/close
+ implements = list(/obj/item/weapon/cautery = 100, /obj/item/weapon/weldingtool = 70, /obj/item/weapon/lighter = 45, /obj/item/weapon/match = 20)
+ time = 8
+
+/datum/surgery_step/close/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ user.visible_message("[user] begins to mend [target].")
\ No newline at end of file
diff --git a/code/WorkInProgress/surgery/human.dm b/code/WorkInProgress/surgery/human.dm
new file mode 100644
index 00000000000..d781b064c5e
--- /dev/null
+++ b/code/WorkInProgress/surgery/human.dm
@@ -0,0 +1,24 @@
+//WORK IN PROGRESS
+
+/mob/living/carbon/human
+ var/list/surgeries = list()
+// var/list/organs = list()
+
+/mob/living/carbon/human/attackby(obj/item/I, mob/user)
+ if(lying) //if they're prone
+ if(istype(I, /obj/item/weapon/bedsheet))
+ var/P = input("Begin which procedure?", "Surgery", null, null) as null|anything in (typesof(/datum/surgery) - /datum/surgery)
+ var/datum/surgery/procedure = new P
+ if(procedure)
+ surgeries += procedure
+ return
+
+ else if(surgeries.len)
+ var/success = 0
+ for(var/datum/surgery/S in surgeries)
+ if(S.next_step(user, src))
+ success = 1
+ if(success)
+ return
+
+ ..()
\ No newline at end of file
diff --git a/code/WorkInProgress/surgery/surgery.dm b/code/WorkInProgress/surgery/surgery.dm
new file mode 100644
index 00000000000..0998386f5ca
--- /dev/null
+++ b/code/WorkInProgress/surgery/surgery.dm
@@ -0,0 +1,19 @@
+/datum/surgery
+ var/name = "surgery"
+ var/status = 1
+ var/list/steps = list()
+ var/location = "chest"
+
+
+/datum/surgery/proc/next_step(mob/user, mob/living/carbon/target)
+ var/procedure = steps[status]
+ var/datum/surgery_step/S = new procedure
+ if(S)
+ if(S.try_op(user, target, user.zone_sel.selecting, user.get_active_hand(), src))
+ return 1
+ return 0
+
+
+/datum/surgery/proc/complete(mob/living/carbon/human/target)
+ target.surgeries.Cut(src)
+ src = null
\ No newline at end of file
diff --git a/code/WorkInProgress/surgery/surgery_step.dm b/code/WorkInProgress/surgery/surgery_step.dm
new file mode 100644
index 00000000000..321b017b8df
--- /dev/null
+++ b/code/WorkInProgress/surgery/surgery_step.dm
@@ -0,0 +1,36 @@
+/datum/surgery_step
+ var/list/implements = list(/obj/item/weapon/scalpel = 100, /obj/item/weapon/kitchenknife = 65, /obj/item/weapon/shard = 45)
+ var/time = 10
+
+
+/datum/surgery_step/proc/try_op(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ if(tool.type in implements)
+ if(target_zone == surgery.location)
+ initiate(user, target, target_zone, tool, surgery)
+ return 1
+ return 0
+
+
+/datum/surgery_step/proc/initiate(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ preop(user, target, target_zone, tool)
+ if(do_after(user, time))
+ var/prob_chance = implements[tool.type]
+ if(prob(prob_chance))
+ success(user, target, target_zone, tool, surgery)
+ surgery.status++
+ if(surgery.status > surgery.steps.len)
+ surgery.complete(target)
+ else
+ failure(user, target, target_zone, tool, surgery)
+
+
+/datum/surgery_step/proc/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ user.visible_message("[user] begins to perform surgery on [target].")
+
+
+/datum/surgery_step/proc/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ user.visible_message("[user] succeeds!")
+
+
+/datum/surgery_step/proc/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+ user.visible_message("[user] screws up!")
\ No newline at end of file