refactor use push