will use exception-based error handling