better forms and error handling