add robust error handling