use arrays for listeners (avoid allocating iterators)