diff --git a/code/modules/surgery/bones.dm b/code/modules/surgery/bones.dm
index a6b47e90a1a..4a3848a483a 100644
--- a/code/modules/surgery/bones.dm
+++ b/code/modules/surgery/bones.dm
@@ -18,9 +18,11 @@
if(istype(target,/mob/living/carbon/human))
var/mob/living/carbon/human/H = target
var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting)
- if((affected.status & ORGAN_ROBOT))
+ if((target.get_species() == "Machine"))
return 0
- if(target.get_species() == "Machine")
+ if((target.get_species() == "Diona"))
+ return 0
+ if(affected && (affected.status & ORGAN_ROBOT))
return 0
if(!(affected.encased))
return 0
diff --git a/code/modules/surgery/face.dm b/code/modules/surgery/face.dm
index 6e53e4dbee5..c2af503c62c 100644
--- a/code/modules/surgery/face.dm
+++ b/code/modules/surgery/face.dm
@@ -7,6 +7,19 @@
steps = list(/datum/surgery_step/generic/cut_face, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/face/mend_vocal, /datum/surgery_step/face/fix_face,/datum/surgery_step/face/cauterize)
possible_locs = list("head")
+
+/datum/surgery/plastic_surgery/can_start(mob/user, mob/living/carbon/target)
+ if(istype(target,/mob/living/carbon/human))
+ var/mob/living/carbon/human/H = target
+ var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting)
+ if(affected && (affected.status & ORGAN_ROBOT))
+ return 0
+ if((target.get_species() == "Machine"))
+ return 0
+ if(!(affected.encased))
+ return 0
+ return 1
+
/datum/surgery_step/face
priority = 2
can_infect = 0
diff --git a/code/modules/surgery/limb_reattach.dm b/code/modules/surgery/limb_reattach.dm
index 88585afeaa2..d132eb60a78 100644
--- a/code/modules/surgery/limb_reattach.dm
+++ b/code/modules/surgery/limb_reattach.dm
@@ -29,6 +29,8 @@
if(ishuman(target))
var/mob/living/carbon/human/H = target
var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting)
+ if((target.get_species() == "Machine"))
+ return 0
if(!affected)
return 1
@@ -134,8 +136,8 @@
user.visible_message("[user] has connected tendons and muscles in [target]'s [E.amputation_point] with [tool].", \
"You have connected tendons and muscles in [target]'s [E.amputation_point] with [tool].")
E.status &= ~ORGAN_DESTROYED
- var/obj/item/organ/external/stump = target.get_organ(target_zone)
- if(stump.is_stump())
+ var/obj/item/organ/external/stump = target.organs_by_name["limb stump"]
+ if(stump)
stump.removed(target)
if(E.children)
for(var/obj/item/organ/external/C in E.children)
@@ -182,8 +184,8 @@
var/list/organ_data = target.species.has_limbs["[part_name]"]
if(!organ_data)
continue
- var/obj/item/organ/external/stump = target.get_organ(target_zone)
- if(stump.is_stump())
+ var/obj/item/organ/external/stump = target.organs_by_name["limb stump"]
+ if(stump)
stump.removed(target)
var/new_limb_type = organ_data["path"]
var/obj/item/organ/external/new_limb = new new_limb_type(target)
diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm
index 4a6f84e9b2f..6eb755c82ee 100644
--- a/code/modules/surgery/organs_internal.dm
+++ b/code/modules/surgery/organs_internal.dm
@@ -8,11 +8,13 @@
/datum/surgery/organ_manipulation/soft
possible_locs = list("groin", "eyes", "mouth")
steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/internal/manipulate_organs,/datum/surgery_step/generic/cauterize)
+ requires_organic_bodypart = 1
/datum/surgery/organ_manipulation/boneless
possible_locs = list("chest","head","groin", "eyes", "mouth")
steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/internal/manipulate_organs,/datum/surgery_step/generic/cauterize)
allowed_mob = list(/mob/living/carbon/human/diona)
+ requires_organic_bodypart = 1
/datum/surgery/organ_manipulation/alien
name = "alien organ manipulation"
@@ -28,6 +30,8 @@
var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting)
if(affected && (affected.status & ORGAN_ROBOT))
return 0
+ if((target.get_species() == "Machine"))
+ return 0
return 1
// Internal surgeries.