Add mouseenter, mouseleave, more optimization