use TAILQ for events so their returned in the same order they were passed when polling