Refactoring/listener

Add an abstract listener and refactor all listeners