add pull/push logic