push logic