diff --git a/code/game/gamemodes/changeling/powers/regenerate.dm b/code/game/gamemodes/changeling/powers/regenerate.dm
index 6d38a58cc47..c7e79c6c143 100644
--- a/code/game/gamemodes/changeling/powers/regenerate.dm
+++ b/code/game/gamemodes/changeling/powers/regenerate.dm
@@ -26,6 +26,7 @@
and tearing!")
C.emote("scream")
C.regenerate_limbs(1)
+ C.regenerate_organs()
if(ishuman(user))
var/mob/living/carbon/human/H = user
H.restore_blood()
diff --git a/code/game/gamemodes/changeling/powers/revive.dm b/code/game/gamemodes/changeling/powers/revive.dm
index 9f9e93bd9c8..7dec246990b 100644
--- a/code/game/gamemodes/changeling/powers/revive.dm
+++ b/code/game/gamemodes/changeling/powers/revive.dm
@@ -23,6 +23,7 @@
and tearing!")
user.emote("scream")
user.regenerate_limbs(0, list("head"))
+ user.regenerate_organs()
user << "We have revived ourselves."
user.mind.changeling.purchasedpowers -= src
feedback_add_details("changeling_powers","CR")
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 18318df5fd0..514fe6e4cc0 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -688,6 +688,7 @@
D.cure(0)
if(admin_revive)
regenerate_limbs()
+ regenerate_organs()
handcuffed = initial(handcuffed)
for(var/obj/item/weapon/restraints/R in contents) //actually remove cuffs from inventory
qdel(R)
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 82a9ab43bbf..40ad2ba1d6e 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -823,31 +823,9 @@
hud_used.healthdoll.icon_state = "healthdoll_DEAD"
/mob/living/carbon/human/fully_heal(admin_revive = 0)
-
if(admin_revive)
regenerate_limbs()
-
- if(!(NOBREATH in dna.species.species_traits) && !getorganslot("lungs"))
- var/obj/item/organ/lungs/L = new()
- L.Insert(src)
-
- if(!(NOBLOOD in dna.species.species_traits) && !getorganslot("heart"))
- var/obj/item/organ/heart/H = new()
- H.Insert(src)
-
- if(!getorganslot("tongue"))
- var/obj/item/organ/tongue/T
-
- for(var/tongue_type in dna.species.mutant_organs)
- if(ispath(tongue_type, /obj/item/organ/tongue))
- T = new tongue_type()
- T.Insert(src)
-
- // if they have no mutant tongues, give them a regular one
- if(!T)
- T = new()
- T.Insert(src)
-
+ regenerate_organs()
remove_all_embedded_objects()
drunkenness = 0
for(var/datum/mutation/human/HM in dna.mutations)
diff --git a/code/modules/projectiles/guns/magic/wand.dm b/code/modules/projectiles/guns/magic/wand.dm
index 524c7872c64..e18e15f53ef 100644
--- a/code/modules/projectiles/guns/magic/wand.dm
+++ b/code/modules/projectiles/guns/magic/wand.dm
@@ -91,6 +91,7 @@
if(iscarbon(user))
var/mob/living/carbon/C = user
C.regenerate_limbs()
+ C.regenerate_organs()
user << "You feel great!"
charges--
..()
diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm
index 787aaffa5b6..2065289d85c 100644
--- a/code/modules/projectiles/projectile/magic.dm
+++ b/code/modules/projectiles/projectile/magic.dm
@@ -79,6 +79,7 @@
if(iscarbon(target))
var/mob/living/carbon/C = target
C.regenerate_limbs()
+ C.regenerate_organs()
if(target.revive(full_heal = 1))
target.grab_ghost(force = TRUE) // even suicides
target << "You rise with a start, \
diff --git a/code/modules/surgery/bodyparts/dismemberment.dm b/code/modules/surgery/bodyparts/dismemberment.dm
index 4ec5dd2890f..6653a114ba6 100644
--- a/code/modules/surgery/bodyparts/dismemberment.dm
+++ b/code/modules/surgery/bodyparts/dismemberment.dm
@@ -311,7 +311,6 @@
for(var/Z in limb_list)
. += regenerate_limb(Z, noheal)
-
/mob/living/proc/regenerate_limb(limb_zone, noheal)
return
diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm
index a3c5a4668c5..e1e282372e4 100644
--- a/code/modules/surgery/organs/organ_internal.dm
+++ b/code/modules/surgery/organs/organ_internal.dm
@@ -693,3 +693,28 @@
if(inflamed)
S.reagents.add_reagent("????", 5)
return S
+
+/mob/living/proc/regenerate_organs()
+ return 0
+
+/mob/living/carbon/regenerate_organs()
+ if(!(NOBREATH in dna.species.species_traits) && !getorganslot("lungs"))
+ var/obj/item/organ/lungs/L = new()
+ L.Insert(src)
+
+ if(!(NOBLOOD in dna.species.species_traits) && !getorganslot("heart"))
+ var/obj/item/organ/heart/H = new()
+ H.Insert(src)
+
+ if(!getorganslot("tongue"))
+ var/obj/item/organ/tongue/T
+
+ for(var/tongue_type in dna.species.mutant_organs)
+ if(ispath(tongue_type, /obj/item/organ/tongue))
+ T = new tongue_type()
+ T.Insert(src)
+
+ // if they have no mutant tongues, give them a regular one
+ if(!T)
+ T = new()
+ T.Insert(src)