anchor.diff:  
   	var/list/atoms = list()
   	if(subtypes)
  +		var/list/cache = typecacheof(areatype)
   		for(var/V in sortedAreas)
   			var/area/A = V
  -			if(!istype(A, areatype))
  +			if(!cache[A.type])
   				continue
   			return A.contents
   	else
  
positive.code: 
  	var/list/turfs = list()
  	if(subtypes)
  		for(var/V in sortedAreas)
  			var/area/A = V
  			if(!istype(A, areatype))
  				continue
  			for(var/turf/T in A)
  				if(target_z == 0 || target_z == T.z)
  
negative.code: 	if(isarea(areatype))
  		var/area/areatemp = areatype
  		areatype = areatemp.type
  	else
  		return null
  
  	var/list/areas = list()
  	if(subtypes)
  		var/list/cache = typecacheof(areatype)
  		for(var/V in sortedAreas)
  			var/area/A = V
  			if(cache[A.type])
  				areas += V
  	else
  		for(var/V in sortedAreas)
  