add auto_recover function