 	// Initialize a User directly.
 	// Handles full_name or first_name being nil by creating an approximate
 	// first_name from the full_name, or setting both to DEFAULT_NAME.
-    public init(userID: UserID, var fullName: String? = nil, firstName: String? = nil,
-		photoURL: String? = nil, emails: [String] = [], isSelf: Bool = false) {
-		fullName = fullName ?? User.DEFAULT_NAME
-		
+    public init(userID: UserID, fullName: String? = nil, firstName: String? = nil,
+		photoURL: String? = nil, emails: [String] = [], isSelf: Bool = false)
+	{
 		self.id = userID
-        self.fullName = fullName!
-        self.firstName = firstName ?? fullName!.characters.split { $0 == " " }.map{ String($0) }.first!
-		self.photoURL = photoURL != nil ? "https:" + photoURL! : nil
+		self.nameComponents = (fullName ?? "").characters
+			.split { $0 == " " }.map { String($0) }
+        self.photoURL = photoURL != nil ? "https:" + photoURL! : nil
         self.emails = emails
         self.isSelf = isSelf
     }

            emails: [],
            isSelf: isSelf
        )
    }
	
	// User: Hashable
	public var hashValue: Int {

    public static let DEFAULT_NAME = "Unknown"

    public let id: UserID
	public let nameComponents: [String]
    public let photoURL: String?
    public let emails: [String]
    public let isSelf: Bool
