Better form and error handling