refactor push