diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm
index ca0547774f9..7ccffd0fc0a 100644
--- a/code/modules/mob/hear_say.dm
+++ b/code/modules/mob/hear_say.dm
@@ -4,6 +4,11 @@
if(!client)
return
+ if(speaker && !speaker.client && istype(src,/mob/dead/observer) && client.prefs.toggles & CHAT_GHOSTEARS && !speaker in view(src))
+ //Does the speaker have a client? It's either random stuff that observers won't care about (Experiment 97B says, 'EHEHEHEHEHEHEHE')
+ //Or someone snoring. So we make it where they won't hear it.
+ return
+
if(sleeping || stat == 1)
hear_sleep(message)
return
@@ -50,7 +55,7 @@
src << "[speaker_name][alt_name] talks but you cannot hear \him."
else
src << "[speaker_name][alt_name] [track][verb], \"[message]\""
- if (speech_sound)
+ if (speech_sound && !istype(src, /mob/dead/observer))
var/turf/source = speaker? get_turf(speaker) : get_turf(src)
src.playsound_local(source, speech_sound, sound_vol, 1)