push function recover