anchor.diff:  	handle_reactions()
   	update_total()
   	//Reaction sounds and words
  -	playsound(get_turf(my_atom), C.mix_sound, 80, 1)
  -	var/iconhtml = icon2html(my_atom)
  -	my_atom.visible_message("<span class='notice'>[iconhtml] [C.mix_message]</span>")
  +	var/list/seen = viewers(5, get_turf(my_atom))
  +	var/iconhtml = icon2html(my_atom, seen)
  +	for(var/mob/M in seen)
  +		to_chat(M, "<span class='notice'>[iconhtml] [C.mix_message]</span>")
   
   /datum/reagents/proc/fermiReact(selected_reaction, cached_temp, cached_pH, reactedVol, targetVol, cached_required_reagents, cached_results, multiplier)
   	var/datum/chemical_reaction/fermi/C = selected_reaction
  
positive.code: 			addChemAmmount = CHEMICAL_QUANTISATION_LEVEL
  		removeChemAmmount = (addChemAmmount/cached_results[P])
  		//This is kept for future bugtesters.
  		message_admins("Reaction vars: PreReacted: [reactedVol] of [targetVol]. deltaT [deltaT], multiplier [multiplier], Step [stepChemAmmount], uncapped Step [deltaT*(multiplier*cached_results[P])], addChemAmmount [addChemAmmount], removeFactor [removeChemAmmount] Pfactor [cached_results[P]], adding [addChemAmmount]")
  
  	//remove reactants
  	for(var/B in cached_required_reagents)
  
negative.code: 	if(!isnum(amount) || !amount)
  		return FALSE
  
  	if(amount < CHEMICAL_QUANTISATION_LEVEL)//To prevent small ammount problems.
  		return FALSE
  
  	var/datum/reagent/D = GLOB.chemical_reagents_list[reagent]
  