User class is totally refactored.