anchor.diff:  
   /datum/timedevent/Destroy()
   	SStimer.processing -= src
  -	return ..()
  +	SStimer.hashes -= hash
  +	return QDEL_HINT_IWILLGC
   
  -/proc/addtimer(thingToCall, procToCall, wait, argList = list())
  +/proc/addtimer(thingToCall, procToCall, wait, unique = FALSE, ...)
   	if (!SStimer) //can't run timers before the mc has been created
   		return
   	if (!thingToCall || !procToCall || wait <= 0)
  
positive.code: 	event.thingToCall = thingToCall
  	event.procToCall = procToCall
  	event.timeToRun = world.time + wait
  	event.argList = argList
  
  	SStimer.processing += event
  
  	return event.id
  
  /proc/deltimer(id)
  	for (var/datum/timedevent/event in SStimer.processing)
  		if (event.id == id)
  			qdel(event)
  			return 1
  	return 0
negative.code: 	priority = 1
  
  	var/list/datum/timedevent/processing
  	var/list/hashes
  
  /datum/subsystem/timer/New()
  	NEW_SS_GLOBAL(SStimer)
  	processing = list()
  	hashes = list()
  
  /datum/subsystem/timer/stat_entry(msg)
  	..("P:[processing.len]")
  
  /datum/subsystem/timer/fire()
  	if(!processing.len)
  		can_fire = 0 //nothing to do, lets stop firing.
  		return
  	for(var/datum/timedevent/event in processing)
  		if(!event.thingToCall || qdeleted(event.thingToCall))
  			qdel(event)
  		if(event.timeToRun <= world.time)
  			runevent(event)
  			qdel(event)
  
  /datum/subsystem/timer/proc/runevent(datum/timedevent/event)
  	set waitfor = 0
  	call(event.thingToCall, event.procToCall)(arglist(event.argList))
  
  /datum/timedevent
  	var/thingToCall
  