diff --git a/code/game/gamemodes/changeling/powers/absorb.dm b/code/game/gamemodes/changeling/powers/absorb.dm
index 115a5ae59d2..f5959c1037e 100644
--- a/code/game/gamemodes/changeling/powers/absorb.dm
+++ b/code/game/gamemodes/changeling/powers/absorb.dm
@@ -105,3 +105,58 @@
protected_dna |= new_dna
return
absorbed_dna |= new_dna
+
+
+/obj/effect/proc_holder/changeling/swap_form
+ name = "Swap Forms"
+ desc = "We force ourselves into the body of another form, pushing their consciousness into the form we left behind."
+ helptext = "We will bring all our abilities with us, but we will lose our old form DNA in exchange for the new one. The process will seem suspicious to any observers."
+ chemical_cost = 40
+ dna_cost = 1
+ req_human = 1 //Monkeys can't grab
+
+/obj/effect/proc_holder/changeling/swap_form/can_sting(var/mob/living/carbon/user)
+ if(!..())
+ return
+ var/obj/item/weapon/grab/G = user.get_active_hand()
+ if(!istype(G) || (G.state < GRAB_AGGRESSIVE))
+ user << "We must have an aggressive grab on creature in our active hand to do this!"
+ return
+ var/mob/living/carbon/human/target = G.affecting
+ if((NOCLONE || SKELETON || HUSK) in target.mutations)
+ user << "DNA of [target] is ruined beyond usability!"
+ return
+ if(!istype(target) || issmall(target) || target.species.flags & IS_SYNTHETIC || target.species.flags & NO_SCAN || target.species.flags & NO_BLOOD)
+ user << "[target] is not compatible with this ability."
+ return
+ return 1
+
+
+/obj/effect/proc_holder/changeling/swap_form/sting_action(var/mob/living/carbon/user)
+ var/obj/item/weapon/grab/G = user.get_active_hand()
+ var/mob/living/carbon/human/target = G.affecting
+ var/datum/changeling/changeling = user.mind.changeling
+
+ user << "We tighen our grip. We must hold still...."
+ target.do_jitter_animation(500)
+ user.do_jitter_animation(500)
+
+ if(!do_mob(user,target,20))
+ user << "The body swap has been interrupted!"
+ return
+
+ target << "[user] tightens their grip as a painful sensation invades your body."
+
+ if(!changeling.has_dna(target.dna))
+ changeling.absorb_dna(target, user)
+ changeling.protected_dna -= user.dna
+ changeling.absorbed_dna -= user.dna
+
+ var/mob/dead/observer/ghost = target.ghostize(0)
+ user.mind.transfer_to(target)
+ if(ghost && ghost.mind)
+ ghost.mind.transfer_to(user)
+ user.key = ghost.key
+
+ user.Paralyse(2)
+ target << "Our genes cry out as we swap our [user] form for [target]."
\ No newline at end of file