clean up user controller validation and logic, add observer