anchor.diff:  					return PROCESS_KILL //We're dying anyway, so let's stop processing
   
   		exchange_target.temperature = max((THERMAL_ENERGY(exchange_target) - (heat_amount * efficiency) + motor_heat) / exchange_target.heat_capacity(), TCMB)
  +
  +	if(!cooling)
  +		efficiency *= mole_efficiency
   
   	main_port.temperature = max((THERMAL_ENERGY(main_port) + (heat_amount * efficiency)) / main_port.heat_capacity(), TCMB)
   
  
positive.code: 
  	// The gas we want to cool/heat
  	var/datum/gas_mixture/main_port = airs[1]
  
  	// The difference between target and what we need to heat/cool. Positive if heating, negative if cooling.
  	var/temperature_target_delta = target_temperature - main_port.temperature
  
negative.code: 	// This is to reset the value when we are heating.
  	efficiency = 1
  
  	var/mole_efficiency = 1
  	var/mole_eff_main_port = 1
  	var/mole_eff_thermal_port = 1
  	if(cooling)
  		// Exchange target is the thing we are paired with, be it enviroment or the red port.
  		if(use_enviroment_heat)
  			exchange_target = local_turf.return_air()
  		else
  			exchange_target = airs[2]
  
  		if(exchange_target.total_moles() < 5)
  			mole_eff_thermal_port = 0.001
  		else
  			mole_eff_thermal_port = 1 - (1 / (exchange_target.total_moles() + 1)) * 5
  
  	if(main_port.total_moles() < 5)
  		mole_eff_main_port = 0.001
  	else
  		mole_eff_main_port = 1 - (1 / (main_port.total_moles() + 1)) * 5
  
  	mole_efficiency = min(mole_eff_main_port, mole_eff_thermal_port)
  
  	if(cooling)
  		if (exchange_target.total_moles() < 0.01)
  			skipping_work = TRUE
  			return
  