almost complete User class