user model refactored