add exception recovery