allow programmatic error handling