anchor.diff:  				++totalgcs
   		queue.Cut(1, 2)
   
  -
  -/datum/subsystem/garbage_collector/proc/Queue(datum/A, harddel = 0)
  +/datum/subsystem/garbage_collector/proc/QueueForQueuing(datum/A)
  + 	if (!istype(A) || !isnull(A.gc_destroyed))
  +		return
  + 	tobequeued += A
  +
  +/datum/subsystem/garbage_collector/proc/Queue(datum/A)
   	if (!istype(A) || !isnull(A.gc_destroyed))
  -		return
  -	A.gc_destroyed = world.time
  -	queue -= "\ref[A]" // Removing any previous references that were GC'd so that the current object will be at the end of the list.
  -	queue["\ref[A]"] = world.time
  -
  -/datum/subsystem/garbage_collector/proc/HardQueue(datum/A, harddel = 0)
  +		return 
  +	var/gctime = world.time
  +	var/refid = "\ref[A]"
  +	
  +	A.gc_destroyed = gctime
  +	
  +	if (queue[refid])
  +		queue -= "\ref[A]" // Removing any previous references that were GC'd so that the current object will be at the end of the list.
  +	
  +	queue[refid] = gctime
  +
  +/datum/subsystem/garbage_collector/proc/HardQueue(datum/A)
   	if (!istype(A) || !isnull(A.gc_destroyed))
   		return
   	A.gc_destroyed = world.time
  
positive.code: 	..(msg)
  
  /datum/subsystem/garbage_collector/fire()
  	delslasttick = 0
  	gcedlasttick = 0
  	var/time_to_stop = world.timeofday + max_run_time
  	var/time_to_kill = world.time - collection_timeout // Anything qdel() but not GC'd BEFORE this time needs to be manually del()
  
  
  	while(queue.len && world.timeofday < time_to_stop)
  		var/refID = queue[1]
  		if (!refID)
  
negative.code: 		dat += "[path] - [tmplist[path]] times<BR>"
  
  	usr << browse(dat, "window=qdeletedlog")
  #endif
  