client side event, code clean, ux modification, some corner case handling