refine event listener