Rewrote push impl in CPS-style