refactored event emitters