Add an abstract event listener