better error message, and enforce lowercase