add more logic for push