diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm
index 4777f061d6..1e6d9790eb 100644
--- a/code/datums/datumvars.dm
+++ b/code/datums/datumvars.dm
@@ -259,6 +259,8 @@ client
body += ""
body += ""
body += ""
+ body += ""
+ body += ""
body += ""
@@ -875,6 +877,74 @@ client
else
H.verbs -= verb
+ else if(href_list["addorgan"])
+ if(!check_rights(R_SPAWN)) return
+
+ var/mob/living/carbon/M = locate(href_list["addorgan"])
+ if(!istype(M))
+ usr << "This can only be done to instances of type /mob/living/carbon"
+ return
+
+ var/new_organ = input("Please choose an organ to add.","Organ",null) as null|anything in typesof(/datum/organ/internal)-/datum/organ/internal
+
+ if(!M)
+ usr << "Mob doesn't exist anymore"
+ return
+
+ if(locate(new_organ) in M.internal_organs)
+ usr << "Mob already has that organ."
+ return
+
+ if(istype(M,/mob/living/carbon/human))
+ var/mob/living/carbon/human/H = M
+ var/datum/organ/internal/I = new new_organ(H)
+
+ var/organ_slot = input(usr, "Which slot do you want the organ to go in ('default' for default)?") as text|null
+
+ if(!organ_slot)
+ return
+
+ if(organ_slot != "default")
+ organ_slot = sanitize(copytext(organ_slot,1,MAX_MESSAGE_LEN))
+ else
+ if(I.removed_type)
+ var/obj/item/organ/O = new I.removed_type()
+ organ_slot = O.organ_tag
+ del(O)
+ else
+ organ_slot = "unknown organ"
+
+ if(H.internal_organs_by_name[organ_slot])
+ usr << "[H] already has an organ in that slot."
+ del(I)
+ return
+
+ H.internal_organs_by_name[organ_slot] = I
+ usr << "Added new [new_organ] to [H] as slot [organ_slot]."
+ else
+ new new_organ(M)
+ usr << "Added new [new_organ] to [M]."
+
+ else if(href_list["remorgan"])
+ if(!check_rights(R_SPAWN)) return
+
+ var/mob/living/carbon/M = locate(href_list["remorgan"])
+ if(!istype(M))
+ usr << "This can only be done to instances of type /mob/living/carbon"
+ return
+
+ var/rem_organ = input("Please choose an organ to remove.","Organ",null) as null|anything in M.internal_organs
+
+ if(!M)
+ usr << "Mob doesn't exist anymore"
+ return
+
+ if(!(locate(rem_organ) in M.internal_organs))
+ usr << "Mob does not have that organ."
+ return
+
+ usr << "Removed [rem_organ] from [M]."
+ del(rem_organ)
else if(href_list["fix_nano"])
if(!check_rights(R_DEBUG)) return
@@ -885,8 +955,6 @@ client
usr << "This can only be done on mobs with clients"
return
-
-
nanomanager.send_resources(H.client)
usr << "Resource files sent"
@@ -894,8 +962,6 @@ client
log_admin("[key_name(usr)] resent the NanoUI resource files to [key_name(H)] ")
-
-
else if(href_list["regenerateicons"])
if(!check_rights(0)) return
diff --git a/code/modules/organs/organ_internal.dm b/code/modules/organs/organ_internal.dm
index 3a84eb3a11..c2df9a30f0 100644
--- a/code/modules/organs/organ_internal.dm
+++ b/code/modules/organs/organ_internal.dm
@@ -25,15 +25,19 @@
/datum/organ/internal/proc/is_broken()
return damage >= min_broken_damage || status & ORGAN_CUT_AWAY
-/datum/organ/internal/New(mob/living/carbon/human/H)
+/datum/organ/internal/New(mob/living/carbon/M)
..()
- if(H)
- var/datum/organ/external/E = H.organs_by_name[src.parent_organ]
- if(E.internal_organs == null)
- E.internal_organs = list()
- E.internal_organs |= src
- H.internal_organs |= src
- src.owner = H
+ if(M && istype(M))
+
+ M.internal_organs |= src
+ src.owner = M
+
+ var/mob/living/carbon/human/H = M
+ if(istype(H))
+ var/datum/organ/external/E = H.organs_by_name[src.parent_organ]
+ if(E.internal_organs == null)
+ E.internal_organs = list()
+ E.internal_organs |= src
/datum/organ/internal/process()