anchor.diff:  	var/speech_bubble_test = say_test(message)
   	var/image/speech_bubble = image('icons/mob/talk.dmi',src,"h[speech_bubble_test]")
   	spawn(30) del(speech_bubble)
  -	
  +
   	for(var/mob/M in listening)
   		M << speech_bubble
   		M.hear_say(message, verb, speaking, alt_name, italics, src)
  -	
  +
   	if (eavesdropping.len)
   		var/new_message = stars(message)	//hopefully passing the message twice through stars() won't hurt... I guess if you already don't understand the language, when they speak it too quietly to hear normally you would be able to catch even less.
   		for(var/mob/M in eavesdropping)
   			M << speech_bubble
   			M.hear_say(new_message, verb, speaking, alt_name, italics, src)
  -	
  +
   	if (watching.len)
   		var/rendered = "<span class='game say'><span class='name'>[src.name]</span> whispers something.</span>"
   		for (var/mob/M in watching)
  
positive.code: 
  	var/list/listening = hearers(message_range, src)
  	listening |= src
  	
  	//ghosts
  	for (var/mob/M in dead_mob_list)	//does this include players who joined as observers as well?
  		if (!(M.client))
  			continue
  		if(M.stat == DEAD && M.client && (M.client.prefs.toggles & CHAT_GHOSTEARS))
  			listening |= M
  	
  	//Pass whispers on to anything inside the immediate listeners.
  	for(var/mob/L in listening)
  		for(var/mob/C in L.contents)
  			if(istype(C,/mob/living))
  				listening += C
  	
  	//pass on the message to objects that can hear us.
  	for (var/obj/O in view(message_range, src))
  		spawn (0)
  
negative.code: 	if(say_disabled)	//This is here to try to identify lag problems
  		usr << "\red Speech is currently admin-disabled."
  		return
  
  	log_whisper("[src.name]/[src.key] : [message]")
  
  	if (src.client)
  