diff --git a/code/modules/awaymissions/mob_spawn.dm b/code/modules/awaymissions/mob_spawn.dm
index d1edc2765b3..2c25fb0f3b4 100644
--- a/code/modules/awaymissions/mob_spawn.dm
+++ b/code/modules/awaymissions/mob_spawn.dm
@@ -52,6 +52,10 @@
var/death_cooldown = 0
/// If antagbanned people are prevented from using it, only false for the ghost bar spawner.
var/restrict_antagban = TRUE
+ /// If people without respawnability are prevented from using it.
+ var/restrict_respawnability = TRUE
+ /// If late-observers with ahud are prevented from using it.
+ var/restrict_ahud = TRUE
/obj/effect/mob_spawn/attack_ghost(mob/user)
if(!valid_to_spawn(user))
@@ -107,12 +111,12 @@
if((jobban_isbanned(user, ban_type) || (restrict_antagban && jobban_isbanned(user, ROLE_SYNDICATE))))
to_chat(user, "You are jobanned!")
return FALSE
- if(!HAS_TRAIT(user, TRAIT_RESPAWNABLE))
+ if(!HAS_TRAIT(user, TRAIT_RESPAWNABLE) && restrict_respawnability)
to_chat(user, "You currently do not have respawnability!")
return FALSE
if(isobserver(user))
var/mob/dead/observer/O = user
- if(!O.check_ahud_rejoin_eligibility())
+ if(!O.check_ahud_rejoin_eligibility() && restrict_ahud)
to_chat(user, "Upon using the antagHUD you forfeited the ability to join the round.")
return FALSE
if(time_check(user))
diff --git a/code/modules/ruins/ghost_bar.dm b/code/modules/ruins/ghost_bar.dm
index 2976fe21dcf..ea464780285 100644
--- a/code/modules/ruins/ghost_bar.dm
+++ b/code/modules/ruins/ghost_bar.dm
@@ -12,6 +12,8 @@ GLOBAL_LIST_EMPTY(occupants_by_key)
assignedrole = "Ghost Bar Occupant"
death_cooldown = 1 MINUTES
restrict_antagban = FALSE
+ restrict_respawnability = FALSE
+ restrict_ahud = FALSE
/obj/effect/mob_spawn/human/alive/ghost_bar/create(ckey, flavour = TRUE, name, mob/user = usr) // So divorced from the normal proc it's just being overriden
var/datum/character_save/save_to_load
@@ -79,7 +81,10 @@ GLOBAL_LIST_EMPTY(occupants_by_key)
H.mind.special_role = assignedrole
H.mind.offstation_role = TRUE
ADD_TRAIT(H, TRAIT_PACIFISM, GHOST_ROLE)
- ADD_TRAIT(H, TRAIT_RESPAWNABLE, GHOST_ROLE)
+ if(isobserver(user))
+ var/mob/dead/observer/ghost = user
+ if(ghost.can_reenter_corpse)
+ ADD_TRAIT(H, TRAIT_RESPAWNABLE, GHOST_ROLE)
H.key = ckey
H.dna.species.after_equip_job(/datum/job/assistant, H)