added annotations to models and better user validation