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: 		var/GCd_at_time = queue[refID]
  		if(GCd_at_time > time_to_kill)
  			break // Everything else is newer, skip them
  
  		var/datum/A
  		if (!istext(refID))
  			del(A)
  		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.
  				testing("GC: -- \ref[A] | [A.type] was unable to be GC'd and was deleted --")
  				didntgc["[A.type]"]++
  				del(A)
  				++delslasttick
  				++totaldels
  			else
  				++gcedlasttick
  				++totalgcs
  		queue.Cut(1, 2)
  
  /datum/subsystem/garbage_collector/proc/QueueForQueuing(datum/A)
  	if (istype(A) && isnull(A.gc_destroyed))
  
negative.code: 	..(msg)
  
  /datum/subsystem/garbage_collector/fire()
  	HandleToBeQueued()
  	if (!paused)
  		HandleQueue()
  
  //If you see this proc high on the profile, what you are really seeing is the garbage collection/soft delete overhead in byond.
  //Don't attempt to optimize, not worth the effort.
  /datum/subsystem/garbage_collector/proc/HandleToBeQueued()
  	var/list/tobequeued = src.tobequeued
  	var/starttime = world.time
  	var/starttimeofday = world.timeofday
  	while(tobequeued.len && starttime == world.time && starttimeofday == world.timeofday)
  		if (MC_TICK_CHECK)
  			break
  		var/ref = tobequeued[1]
  