anchor.diff:  /datum/atom_hud/alternate_appearance/basic/remove_from_hud(atom/A)
   	. = ..()
   	A.hud_list -= appearance_key
  -
  -/datum/atom_hud/alternate_appearance/basic/remove_from_hud(atom/A)
  -	. = ..()
  -	if(.)
  +	if(. && !QDELETED(src))
   		qdel(src)
   
   /datum/atom_hud/alternate_appearance/basic/everyone
  +	add_ghost_version = TRUE
   
   /datum/atom_hud/alternate_appearance/basic/everyone/New()
   	..()
  -	for(var/mob in GLOB.player_list)
  -		if(mob)
  +	for(var/mob in GLOB.mob_list)
  +		if(mobShouldSee(mob))
   			add_hud_to(mob)
   
   /datum/atom_hud/alternate_appearance/basic/everyone/mobShouldSee(mob/M)
  -	return TRUE
  +	return !isobserver(M)
   
   /datum/atom_hud/alternate_appearance/basic/silicons
   
   /datum/atom_hud/alternate_appearance/basic/silicons/New()
   	..()
   	for(var/mob in GLOB.silicon_mobs)
  -		if(mob)
  +		if(mobShouldSee(mob))
   			add_hud_to(mob)
   
   /datum/atom_hud/alternate_appearance/basic/silicons/mobShouldSee(mob/M)
   	if(issilicon(M))
   		return TRUE
   	return FALSE
  +
  +/datum/atom_hud/alternate_appearance/basic/observers
  +	add_ghost_version = FALSE //just in case, to prevent infinite loops
  +
  +/datum/atom_hud/alternate_appearance/basic/observers/New()
  +	..()
  +	for(var/mob in GLOB.dead_mob_list)
  +		if(mobShouldSee(mob))
  +			add_hud_to(mob)
  +
  +/datum/atom_hud/alternate_appearance/basic/observers/mobShouldSee(mob/M)
  +	return isobserver(M)
  
positive.code: 	add_to_hud(target, I)
  	if(target_sees_appearance && ismob(target))
  		add_hud_to(target)
  
  /datum/atom_hud/alternate_appearance/basic/add_to_hud(atom/A)
  	A.hud_list[appearance_key] = theImage
  
negative.code: 			var/datum/atom_hud/alternate_appearance/AA = alternate_appearances[K]
  			if(AA.appearance_key == key)
  				AA.remove_from_hud(src)
  				break
  
  /atom/proc/add_alt_appearance(type, key, ...)
  	if(!type || !key)
  