use generational event queue