a lot more functionality on user model