anchor.diff:  	can_fire = 1 // This needs to fire before round start.
   
   	var/collection_timeout = 300// deciseconds to wait to let running procs finish before we just say fuck it and force del() the object
  -	var/max_run_time = 1		// how long, in deciseconds, can we run before waiting for the next tick
   	var/delslasttick = 0		// number of del()'s we've done this tick
   	var/gcedlasttick = 0		// number of things that gc'ed last tick
   	var/totaldels = 0
   	var/totalgcs = 0
  +	
  +	var/highest_del_time = 0
  +	var/highest_del_tickusage = 0
   
   	var/list/queue = list() 	// list of refID's of things that should be garbage collected
   								// refID's are associated with the time at which they time out and need to be manually del()
  
positive.code: 	gcedlasttick = 0
  	var/time_to_kill = world.time - collection_timeout // Anything qdel() but not GC'd BEFORE this time needs to be manually del()
  	var/list/queue = src.queue
  	while(queue.len && world.timeofday < time_to_stop)
  		if (MC_TICK_CHECK)
  			break
  		var/refID = queue[1]
  
negative.code: 		var/GCd_at_time = queue[refID]
  		if(GCd_at_time > time_to_kill)
  			break // Everything else is newer, skip them
  		queue.Cut(1, 2)
  		var/datum/A
  		if (!istext(refID))
  			del(refID)
  		else
  			A = locate(refID)
  			if (A && A.gc_destroyed == GCd_at_time) // So if something else coincidently gets the same ref, it's not deleted by mistake
  				// Something's still referring to the qdel'd object.  Kill it.
  				var/type = A.type
  				testing("GC: -- \ref[A] | [type] was unable to be GC'd and was deleted --")
  				didntgc["[type]"]++
  				var/time = world.timeofday
  				var/tick = world.tick_usage
  				var/ticktime = world.time
  				del(A)
  				tick = (tick-world.tick_usage+((ticktime-world.time)/world.tick_lag*100))
  				if (tick > highest_del_tickusage)
  					highest_del_tickusage = tick
  				time = time - world.timeofday
  				if (time > highest_del_time)
  					highest_del_time = time
  				if (time > 15)
  					world.log << "Error: [type] took longer then 1.5 seconds to delete (took [time/10] seconds to delete)"
  					postpone(time/5)
  					break
  				++delslasttick
  				++totaldels
  			else
  				++gcedlasttick
  				++totalgcs
  
  /datum/subsystem/garbage_collector/proc/QueueForQueuing(datum/A)
  	if (istype(A) && isnull(A.gc_destroyed))
  