anchor.diff:  
   /datum/reagents/proc/trans_to(obj/target, amount=1, multiplier=1, preserve_data=1, no_react = 0)//if preserve_data=0, the reagents data will be lost. Usefull if you use data for some strange stuff and don't want it to be transferred.
   	var/list/cached_reagents = reagent_list
  -
   	if(!target || !total_volume)
   		return
  +	if(amount < 0)
  +		return
  +
   	var/datum/reagents/R
   	if(istype(target, /datum/reagents))
   		R = target
  
positive.code: /datum/reagents/proc/remove_reagent(reagent, amount, safety)//Added a safety check for the trans_id_to
  
  	if(isnull(amount))
  		amount = INFINITY
  
  	if(!isnum(amount))
  		return 1
  
  	var/list/cached_reagents = reagent_list
  
  	for(var/A in cached_reagents)
  		var/datum/reagent/R = A
  		if (R.id == reagent)
  			R.volume -= amount
  			update_total()
  			if(!safety)//So it does not handle reactions when it need not to
  				handle_reactions()
  			if(my_atom)
  				my_atom.on_reagent_change()
  			return 0
  
  	return 1
  
  /datum/reagents/proc/has_reagent(reagent, amount = -1)
  	var/list/cached_reagents = reagent_list
  
negative.code: 			R.on_merge(data)
  			if(!no_react)
  				handle_reactions()
  			return TRUE
  
  	var/datum/reagent/D = chemical_reagents_list[reagent]
  	if(D)
  