anchor.diff:  
   	var/list/total_gases = total_gas_mixture.gases
   
  -	for(var/i in GL)
  -		var/datum/gas_mixture/G = i
  -		total_gas_mixture.volume += G.volume
  +	for(var/mixture in gas_mixture_list)
  +		var/datum/gas_mixture/gas_mixture = mixture
  +		total_gas_mixture.volume += gas_mixture.volume
   
   		// This is sort of a combined merge + heat_capacity calculation
   
  -		var/list/giver_gases = G.gases
  +		var/list/giver_gases = gas_mixture.gases
   		//gas transfer
   		for(var/giver_id in giver_gases)
   			var/giver_gas_data = giver_gases[giver_id]
  
positive.code: 
  		if(modeled_location.blocks_air)
  
  			if((modeled_location.heat_capacity>0) && (partial_heat_capacity>0))
  				var/delta_temperature = air.temperature - target_temperature
  
  				var/heat = thermal_conductivity*delta_temperature* \
  					(partial_heat_capacity*target_heat_capacity/(partial_heat_capacity+target_heat_capacity))
  
  				air.temperature -= heat/total_heat_capacity
  				modeled_location.TakeTemperature(heat/target_heat_capacity)
  
  		else
  			var/delta_temperature = 0
  
negative.code: 
  /datum/pipeline/proc/build_pipeline(obj/machinery/atmospherics/base)
  	var/volume = 0
  	if(!istype(base, /obj/machinery/atmospherics/pipe))
  		addMachineryMember(base)
  	else
  		var/obj/machinery/atmospherics/pipe/considered_pipe = base
  		volume = considered_pipe.volume
  		members += considered_pipe
  		if(considered_pipe.air_temporary)
  			air = considered_pipe.air_temporary
  			considered_pipe.air_temporary = null
  
  	if(!air)
  		air = new
  	var/list/possible_expansions = list(base)
  	while(possible_expansions.len)
  		for(var/obj/machinery/atmospherics/borderline in possible_expansions)
  			var/list/result = borderline.pipeline_expansion(src)
  			if(!result?.len)
  				possible_expansions -= borderline
  				continue
  			for(var/obj/machinery/atmospherics/considered_device in result)
  				if(!istype(considered_device, /obj/machinery/atmospherics/pipe))
  					considered_device.setPipenet(src, borderline)
  					addMachineryMember(considered_device)
  					continue
  				var/obj/machinery/atmospherics/pipe/item = considered_device
  				if(members.Find(item))
  					continue
  				if(item.parent)
  					var/static/pipenetwarnings = 10
  					if(pipenetwarnings > 0)
  						log_mapping("build_pipeline(): [item.type] added to a pipenet while still having one. (pipes leading to the same spot stacking in one turf) around [AREACOORD(item)].")
  						pipenetwarnings--
  					if(pipenetwarnings == 0)
  						log_mapping("build_pipeline(): further messages about pipenets will be suppressed")
  
  				members += item
  				possible_expansions += item
  
  				volume += item.volume
  				item.parent = src
  
  				if(item.air_temporary)
  					air.merge(item.air_temporary)
  					item.air_temporary = null
  
  			possible_expansions -= borderline
  
  	air.volume = volume
  
  /datum/pipeline/proc/addMachineryMember(obj/machinery/atmospherics/components/considered_component)
  	other_atmosmch |= considered_component
  	var/datum/gas_mixture/component_mixture = considered_component.returnPipenetAir(src)
  	if(!component_mixture)
  		stack_trace("addMachineryMember: Null gasmix added to pipeline datum from [considered_component] \
  		which is of type [considered_component.type]. Nearby: ([considered_component.x], [considered_component.y], [considered_component.z])")
  	other_airs |= component_mixture
  
  /datum/pipeline/proc/addMember(obj/machinery/atmospherics/reference_device, obj/machinery/atmospherics/device_to_add)
  	if(!istype(reference_device, /obj/machinery/atmospherics/pipe))
  		reference_device.setPipenet(src, device_to_add)
  		addMachineryMember(reference_device)
  	else
  		var/obj/machinery/atmospherics/pipe/reference_pipe = reference_device
  		if(reference_pipe.parent)
  			merge(reference_pipe.parent)
  		reference_pipe.parent = src
  		var/list/adjacent = reference_pipe.pipeline_expansion()
  		for(var/obj/machinery/atmospherics/pipe/adjacent_pipe in adjacent)
  			if(adjacent_pipe.parent == src)
  				continue
  			var/datum/pipeline/parent_pipeline = adjacent_pipe.parent
  			merge(parent_pipeline)
  		if(!members.Find(reference_pipe))
  			members += reference_pipe
  			air.volume += reference_pipe.volume
  
  /datum/pipeline/proc/merge(datum/pipeline/parent_pipeline)
  	if(parent_pipeline == src)
  		return
  	air.volume += parent_pipeline.air.volume
  	members.Add(parent_pipeline.members)
  	for(var/obj/machinery/atmospherics/pipe/reference_pipe in parent_pipeline.members)
  		reference_pipe.parent = src
  	air.merge(parent_pipeline.air)
  	for(var/obj/machinery/atmospherics/components/reference_component in parent_pipeline.other_atmosmch)
  		reference_component.replacePipenet(parent_pipeline, src)
  	other_atmosmch.Add(parent_pipeline.other_atmosmch)
  	other_airs.Add(parent_pipeline.other_airs)
  	parent_pipeline.members.Cut()
  	parent_pipeline.other_atmosmch.Cut()
  	update = TRUE
  	qdel(parent_pipeline)
  
  /obj/machinery/atmospherics/proc/addMember(obj/machinery/atmospherics/considered_device)
  	return
  
  /obj/machinery/atmospherics/pipe/addMember(obj/machinery/atmospherics/considered_device)
  	parent.addMember(considered_device, src)
  
  /obj/machinery/atmospherics/components/addMember(obj/machinery/atmospherics/considered_device)
  	var/datum/pipeline/device_pipeline = returnPipenet(considered_device)
  	if(!device_pipeline)
  		CRASH("null.addMember() called by [type] on [COORD(src)]")
  	device_pipeline.addMember(considered_device, src)
  
  
  /datum/pipeline/proc/temporarily_store_air()
  