if no default, default listener is listener[0]