better error handling and error msg