anchor.diff:  			reacting = 1
   	/*
   	if(thermal_energy() > (PLASMA_BINDING_ENERGY*10))
  -		if(procgases["plasma"] && procgases["co2"] && procgases["plasma"][MOLES] > MINIMUM_HEAT_CAPACITY && procgases["co2"][MOLES] > MINIMUM_HEAT_CAPACITY && (procgases["plasma"][MOLES]+procgases["co2"][MOLES])/total_moles() >= FUSION_PURITY_THRESHOLD)//Fusion wont occur if the level of impurities is too high.
  -			//world << "pre [temperature, [procgases["plasma"][MOLES]], [procgases["co2"][MOLES]]
  +		if(cached_gases["plasma"] && cached_gases["co2"] && cached_gases["plasma"][MOLES] > MINIMUM_HEAT_CAPACITY && cached_gases["co2"][MOLES] > MINIMUM_HEAT_CAPACITY && (cached_gases["plasma"][MOLES]+cached_gases["co2"][MOLES])/total_moles() >= FUSION_PURITY_THRESHOLD)//Fusion wont occur if the level of impurities is too high.
  +			//world << "pre [temperature, [cached_gases["plasma"][MOLES]], [cached_gases["co2"][MOLES]]
   			var/old_heat_capacity = heat_capacity()
  -			var/carbon_efficency = min(procgases["plasma"][MOLES]/procgases["co2"][MOLES],MAX_CARBON_EFFICENCY)
  +			var/carbon_efficency = min(cached_gases["plasma"][MOLES]/cached_gases["co2"][MOLES],MAX_CARBON_EFFICENCY)
   			var/reaction_energy = thermal_energy()
  -			var/moles_impurities = total_moles()-(procgases["plasma"][MOLES]+procgases["co2"][MOLES])
  +			var/moles_impurities = total_moles()-(cached_gases["plasma"][MOLES]+cached_gases["co2"][MOLES])
   
   			var/plasma_fused = (PLASMA_FUSED_COEFFICENT*carbon_efficency)*(temperature/PLASMA_BINDING_ENERGY)
   			var/carbon_catalyzed = (CARBON_CATALYST_COEFFICENT*carbon_efficency)*(temperature/PLASMA_BINDING_ENERGY)
   			var/oxygen_added = carbon_catalyzed
   			var/nitrogen_added = (plasma_fused-oxygen_added)-(thermal_energy()/PLASMA_BINDING_ENERGY)
   
  -			reaction_energy = max(reaction_energy+((carbon_efficency*procgases["plasma"][MOLES])/((moles_impurities/carbon_efficency)+2)*10)+((plasma_fused/(moles_impurities/carbon_efficency))*PLASMA_BINDING_ENERGY),0)
  +			reaction_energy = max(reaction_energy+((carbon_efficency*cached_gases["plasma"][MOLES])/((moles_impurities/carbon_efficency)+2)*10)+((plasma_fused/(moles_impurities/carbon_efficency))*PLASMA_BINDING_ENERGY),0)
   
   			assert_gases("o2", "n2")
   
  -			procgases["plasma"][MOLES] -= plasma_fused
  -			procgases["co2"][MOLES] -= carbon_catalyzed
  -			procgases["o2"][MOLES] += oxygen_added
  -			procgases["n2"][MOLES] += nitrogen_added
  +			cached_gases["plasma"][MOLES] -= plasma_fused
  +			cached_gases["co2"][MOLES] -= carbon_catalyzed
  +			cached_gases["o2"][MOLES] += oxygen_added
  +			cached_gases["n2"][MOLES] += nitrogen_added
   
   			garbage_collect()
   
  
positive.code: 	for(var/id in args)
  		add_gas(id)
  
  		//garbage_collect() - removes any gas list which is empty.
  		//Must be used after subtracting from a gas. Must be used after assert_gas()
  			//if assert_gas() was called only to read from the gas.
  		//By removing empty gases, processing speed is increased.
  /datum/gas_mixture/proc/garbage_collect()
  	var/list/cached_gases = gases
  	for(var/id in cached_gases)
  		var/gas = cached_gases[id]
  		if(QUANTIZE(gas[MOLES]) <= 0 && QUANTIZE(gas[ARCHIVE]) <= 0)
  			cached_gases -= id
  
  	//PV=nRT - related procedures
  /datum/gas_mixture/proc/heat_capacity()
  	var/list/cached_gases = gases
  	. = 0
  	for(var/id in cached_gases)
  		. += cached_gases[id][MOLES]*cached_gases[id][GAS_META][META_GAS_SPECIFIC_HEAT]
  
  /datum/gas_mixture/proc/heat_capacity_archived()
  	var/list/cached_gases = gases
  	. = 0
  	for(var/id in cached_gases)
  		. += cached_gases[id][ARCHIVE]*cached_gases[id][GAS_META][META_GAS_SPECIFIC_HEAT]
  
  /datum/gas_mixture/proc/total_moles()
  	var/list/cached_gases = gases
  
negative.code: 
  /datum/gas_mixture/archive()
  	var/list/cached_gases = gases
  
  	temperature_archived = temperature
  	for(var/id in cached_gases)
  		cached_gases[id][ARCHIVE] = cached_gases[id][MOLES]
  
  	. = 1
  
  /datum/gas_mixture/merge(datum/gas_mixture/giver)
  	if(!giver)
  		return 0
  
  	if(abs(temperature - giver.temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
  		var/self_heat_capacity = heat_capacity()
  		var/giver_heat_capacity = giver.heat_capacity()
  		var/combined_heat_capacity = giver_heat_capacity + self_heat_capacity
  		if(combined_heat_capacity)
  			temperature = (giver.temperature * giver_heat_capacity + temperature * self_heat_capacity) / combined_heat_capacity
  
  	var/list/cached_gases = gases //accessing datum vars is slower than proc vars
  	var/list/giver_gases = giver.gases
  	for(var/giver_id in giver_gases)
  