push: refactoring for better reusibility