diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm
index ba12a7478aa..b78baf2816d 100644
--- a/code/game/gamemodes/cult/ritual.dm
+++ b/code/game/gamemodes/cult/ritual.dm
@@ -330,7 +330,8 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
msg_admin_attack("[user.name] ([user.ckey]) used [name] on [M.name] ([M.ckey]) (JMP)")
if(istype(M,/mob/dead))
- M.invisibility = 0
+ var/mob/dead/D = M
+ D.manifest()
user.visible_message( \
"\red [user] drags the ghost to our plan of reality!", \
"\red You drag the ghost to our plan of reality!" \
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index d00ae05e5b5..bc27623d894 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -552,3 +552,42 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
return 0
usr.visible_message("[src] points to [A]")
return 1
+
+/mob/dead/proc/manifest()
+ verbs += /mob/dead/proc/toggle_visibility
+ toggle_visibility()
+
+/mob/dead/proc/toggle_icon(var/icon)
+ if(!client)
+ return
+
+ var/iconRemoved = 0
+ for(var/image/I in client.images)
+ if(I.icon_state == icon)
+ iconRemoved = 1
+ del(I)
+
+ if(!iconRemoved)
+ var/image/J = image('icons/mob/mob.dmi', loc = src, icon_state = icon)
+ client.images += J
+
+/mob/dead/proc/toggle_visibility()
+ set category = "Ghost"
+ set name = "Toggle Visibility"
+ set desc = "Allows you to turn (in)visible (almost) at will."
+
+ var/toggled_invisible
+
+ if(invisibility && world.time < toggled_invisible + 600)
+ src << "You must gather strength before you can turn visible again..."
+ return
+
+ if(invisibility == 0)
+ toggled_invisible = world.time
+ visible_message("It fades from sight...", "You are now invisible")
+ else
+ src << "