isValid now directly reports to the custom error handler