diff --git a/code/game/gamemodes/wizard/soulstone.dm b/code/game/gamemodes/wizard/soulstone.dm
new file mode 100644
index 00000000000..0045fefb4fb
--- /dev/null
+++ b/code/game/gamemodes/wizard/soulstone.dm
@@ -0,0 +1,80 @@
+/obj/item/device/soulstone
+ name = "Soul Stone Shard"
+ icon = 'wizard.dmi'
+ icon_state = "soulstone"
+ item_state = "electronic"
+ desc = "A fragment of the legendary treasure known simply as the 'Soul Stone'. The shard still flickers with a fraction of the full artefacts power."
+ w_class = 1.0
+ flags = FPRINT | TABLEPASS | ONBELT
+ var/flush = null
+ origin_tech = "bluespace=4;materials=4"
+
+
+
+ attack(mob/living/carbon/human/M as mob, mob/user as mob)
+ if(!istype(M, /mob/living/carbon/human))//If target is not a human.
+ return ..()
+ M.attack_log += text("\[[time_stamp()]\] Has had their soul captured with [src.name] by [user.name] ([user.ckey])")
+ user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to capture the soul of [M.name] ([M.ckey])")
+
+ transfer_soul("VICTIM", M, user)
+ return
+
+
+ attack_self(mob/user)
+ if (!in_range(src, user))
+ return
+ user.machine = src
+ var/dat = "Soul Stone
"
+ for(var/mob/living/carbon/human/A in src)
+ dat += "Captured Soul: [A.name]
"
+ user << browse(dat, "window=aicard")
+ onclose(user, "aicard")
+ return
+
+
+
+
+/obj/item/proc/transfer_soul(var/choice as text, var/target, var/mob/U as mob).
+ switch(choice)
+ if("VICTIM")
+ var/mob/living/carbon/human/T = target
+ var/obj/item/device/soulstone/C = src
+ if (T.stat == 0)
+ U << "\red Capture failed!: \black Kill or maim the victim first!"
+ else
+ if(T.ckey == null)
+ U << "\red Capture failed!: \black The soul has already fled it's mortal frame."
+ else
+ if(C.contents.len)
+ U << "\red Capture failed!: \black The soul stone is full! Use or free an existing soul to make room."
+ else
+ for(var/obj/item/W in T)
+ T.drop_from_slot(W)
+ new /obj/effect/decal/remains/human(T.loc) //Spawns a skeleton
+ T.invisibility = 101
+ var/atom/movable/overlay/animation = new /atom/movable/overlay( T.loc )
+ animation.icon_state = "blank"
+ animation.icon = 'mob.dmi'
+ animation.master = T
+ flick("dust-h", animation)
+ del(animation)
+ T.nodamage = 1 //So they won't suffocate inside the stone
+ T.canmove = 0//Can't move out of the soul stone
+ T.loc = C//Throw "soul" into the stone.
+ T.stat = 0//Revive the victim as a "soul"
+ T.mutantrace = "trappedsoul" //To prevent suicide/maybe some other special effects later on
+ T.setToxLoss(0)
+ T.setOxyLoss(0)
+ T.setCloneLoss(0)
+ T.SetParalysis(0)
+ T.SetStunned(0)
+ T.SetWeakened(0)
+ T.radiation = 0
+ T.heal_overall_damage(T.getBruteLoss(), T.getFireLoss())
+ T.cancel_camera()
+ T.nodamage = 1 //So they won't suffocate inside the stone
+ C.icon_state = "soulstone2"
+ T << "Your soul has been captured!"
+ U << "\blue Capture successful!: \black [T.name]'s soul has been ripped from their body and stored within the soul stone."
+ return
\ No newline at end of file
diff --git a/code/game/objects/storage/belt.dm b/code/game/objects/storage/belt.dm
index 92dae7a1f57..db2fb596e9a 100644
--- a/code/game/objects/storage/belt.dm
+++ b/code/game/objects/storage/belt.dm
@@ -115,4 +115,23 @@
"/obj/item/ammo_magazine",
"/obj/item/weapon/reagent_containers/food/snacks/donut",
"/obj/item/weapon/reagent_containers/food/snacks/jellydonut"
- )
\ No newline at end of file
+ )
+
+/obj/item/weapon/storage/belt/soulstone
+ name = "soul stone belt"
+ desc = "Designed for ease of access to the shards during a fight, as to not let a single enemy spirit slip away"
+ icon_state = "utilitybelt"
+ item_state = "utility"//Could likely use a better one.
+ storage_slots = 6
+ can_hold = list(
+ "/obj/item/device/soulstone"
+ )
+
+/obj/item/weapon/storage/belt/utility/full/New()
+ ..()
+ new /obj/item/device/soulstone(src)
+ new /obj/item/device/soulstone(src)
+ new /obj/item/device/soulstone(src)
+ new /obj/item/device/soulstone(src)
+ new /obj/item/device/soulstone(src)
+ new /obj/item/device/soulstone(src)
\ No newline at end of file
diff --git a/code/game/verbs/suicide.dm b/code/game/verbs/suicide.dm
index 9de662a62d6..7ee53d48538 100644
--- a/code/game/verbs/suicide.dm
+++ b/code/game/verbs/suicide.dm
@@ -20,7 +20,9 @@
if(alien_egg_flag)
src << "The alien inside you forces you to breathe, preventing you from suiciding."
return
-
+ if(mutantrace == "trappedsoul")
+ src << "You are already dead, your soul trapped and contained!"
+ return
if(confirm == "Yes")
suiciding = 1
//instead of killing them instantly, just put them at -175 health and let 'em gasp for a while
diff --git a/icons/obj/wizard.dmi b/icons/obj/wizard.dmi
index d34d0d0050d..bf62f579808 100644
Binary files a/icons/obj/wizard.dmi and b/icons/obj/wizard.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index 6a36573b709..d612f77e426 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -396,6 +396,7 @@
#include "code\game\gamemodes\sandbox\h_sandbox.dm"
#include "code\game\gamemodes\sandbox\sandbox.dm"
#include "code\game\gamemodes\traitor\traitor.dm"
+#include "code\game\gamemodes\wizard\soulstone.dm"
#include "code\game\gamemodes\wizard\spellbook.dm"
#include "code\game\gamemodes\wizard\spells.dm"
#include "code\game\gamemodes\wizard\wizard.dm"