added listener factory and controller