User model refactor