anchor.diff:  				heat_capacity_self_to_sharer += gas_heat_capacity
   			else
   				heat_capacity_sharer_to_self += gas_heat_capacity
  -		gas[MOLES] -= delta
  -		sharergas[MOLES] += delta
  -		moved_moles += delta
  -		abs_moved_moles += abs(delta)
  +
  +		if(delta > 0 && !sharergas)
  +			//checking here instead of just calling assert_gas()
  +			//prevents an extra proc call if the check fails
  +			sharer.add_gas(id)
  +			sharergas = sharercache[id]
  +
  +		gas[MOLES]			-= delta
  +		sharergas[MOLES]	+= delta
  +		moved_moles			+= delta
  +		abs_moved_moles		+= abs(delta)
   
   	last_share = abs_moved_moles
  +
   	if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
   		var/new_self_heat_capacity = old_self_heat_capacity + heat_capacity_sharer_to_self - heat_capacity_self_to_sharer
   		var/new_sharer_heat_capacity = old_sharer_heat_capacity + heat_capacity_self_to_sharer - heat_capacity_sharer_to_self
  
positive.code: 	. = ""
  	var/list/sample_gases = sample.gases //accessing datum vars is slower than proc vars
  	var/list/cached_gases = gases
  	var/list/gases_considered = new
  
  	for(var/id in cached_gases)
  		var/gas = cached_gases[id]
  		var/sample_moles = sample_gases[id] ? sample_gases[id][datatype] : 0
  		var/delta = abs(gas[datatype] - sample_moles)/(adjacents+1)
  		if(delta > MINIMUM_AIR_TO_SUSPEND && \
  			delta > gas[datatype]*MINIMUM_AIR_RATIO_TO_SUSPEND)
  			return id
  		gases_considered += id
  
  	for(var/sample_id in sample_gases) //I'd rather have copy-paste than slow this down with a proc call... is there a better solution?
  		if(sample_id in gases_considered)
  			continue
  		var/sample_gas = sample_gases[sample_id]
  		var/gas_moles = cached_gases[sample_id] ? cached_gases[sample_id][datatype] : 0
  		var/delta = abs(sample_gas[datatype] - gas_moles)/(adjacents+1)
  		if(delta > MINIMUM_AIR_TO_SUSPEND && \
  			delta > sample_gas[datatype]*MINIMUM_AIR_RATIO_TO_SUSPEND)
  			return sample_id
  
  	if(total_moles() > MINIMUM_AIR_TO_SUSPEND)
  		var/temp
  		var/sample_temp
  		switch(datatype)
  			if(MOLES)
  				temp = temperature
  
negative.code: 	var/heat_capacity_self_to_sharer = 0
  	var/heat_capacity_sharer_to_self = 0
  
  	for(var/sharer_id in sharercache-selfcache)
  		add_gas(sharer_id) //we can use add_gas() because we're looping only through the IDs not in our cache
  
  	for(var/id in selfcache)
  		var/gas = selfcache[id]
  		var/sharergas = sharercache[id]
  
  		var/delta = QUANTIZE(gas[ARCHIVE] - (sharergas ? sharergas[ARCHIVE] : 0))/(atmos_adjacent_turfs+1)
  
  		if(delta && abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
  			var/gas_heat_capacity = abs(gas[MOLES] * gas[SPECIFIC_HEAT])
  