implement push feature, still buggy, must test thoroughly