externalizing the push step