(bug fix): duplicate event listener