oops, always gotta unlock that queue
use a pointer for the event index because its default value is nil and easily distinguishable from an array index (integer), that way we don't have to do all the -1 munging anymore