diff --git a/src/com/android/settings/users/UserDetailsSettings.java b/src/com/android/settings/users/UserDetailsSettings.java
index a9ddf95..ac6a8ea 100644
--- a/src/com/android/settings/users/UserDetailsSettings.java
+++ b/src/com/android/settings/users/UserDetailsSettings.java
@@ -206,7 +206,7 @@
 
         mSwitchUserPref.setTitle(
                 context.getString(com.android.settingslib.R.string.user_switch_to_user,
-                        mUserInfo.name));
+                        UserSettings.getUserName(context, mUserInfo)));
 
         if (mUserCaps.mDisallowSwitchUser) {
             mSwitchUserPref.setDisabledByAdmin(RestrictedLockUtilsInternal.getDeviceOwner(context));
diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java
index 64f9a2c..d88d8b5 100644
--- a/src/com/android/settings/users/UserSettings.java
+++ b/src/com/android/settings/users/UserSettings.java
@@ -16,6 +16,7 @@
 
 package com.android.settings.users;
 
+import android.annotation.NonNull;
 import android.app.Activity;
 import android.app.ActivityManager;
 import android.app.Dialog;
@@ -505,10 +506,12 @@
         Bundle extras = new Bundle();
         extras.putInt(UserDetailsSettings.EXTRA_USER_ID, userInfo.id);
         extras.putBoolean(AppRestrictionsFragment.EXTRA_NEW_USER, newUser);
-        new SubSettingLauncher(getContext())
+
+        final Context context = getContext();
+        new SubSettingLauncher(context)
                 .setDestination(UserDetailsSettings.class.getName())
                 .setArguments(extras)
-                .setTitleText(userInfo.name)
+                .setTitleText(getUserName(context, userInfo))
                 .setSourceMetricsCategory(getMetricsCategory())
                 .launch();
     }
@@ -859,32 +862,30 @@
             UserPreference pref;
             if (user.id == UserHandle.myUserId()) {
                 pref = mMePreference;
-            } else if (user.isGuest()) {
-                pref = new UserPreference(getPrefContext(), null, user.id);
-                pref.setTitle(R.string.user_guest);
-                pref.setIcon(getEncircledDefaultIcon());
-                pref.setKey(KEY_USER_GUEST);
+            } else {
+                final Context prefContext = getPrefContext();
+                pref = new UserPreference(prefContext, null, user.id);
+                pref.setTitle(getUserName(prefContext, user));
                 userPreferences.add(pref);
+                pref.setOnPreferenceClickListener(this);
                 pref.setEnabled(canOpenUserDetails);
                 pref.setSelectable(true);
 
-                if (mUserCaps.mDisallowSwitchUser) {
-                    pref.setDisabledByAdmin(RestrictedLockUtilsInternal.getDeviceOwner(context));
+                if (user.isGuest()) {
+                    pref.setIcon(getEncircledDefaultIcon());
+                    pref.setKey(KEY_USER_GUEST);
+                    if (mUserCaps.mDisallowSwitchUser) {
+                        pref.setDisabledByAdmin(
+                                RestrictedLockUtilsInternal.getDeviceOwner(context));
+                    } else {
+                        pref.setDisabledByAdmin(null);
+                    }
                 } else {
-                    pref.setDisabledByAdmin(null);
+                    pref.setKey("id=" + user.id);
+                    if (user.isAdmin()) {
+                        pref.setSummary(R.string.user_admin);
+                    }
                 }
-                pref.setOnPreferenceClickListener(this);
-            } else {
-                pref = new UserPreference(getPrefContext(), null, user.id);
-                pref.setKey("id=" + user.id);
-                userPreferences.add(pref);
-                if (user.isAdmin()) {
-                    pref.setSummary(R.string.user_admin);
-                }
-                pref.setTitle(user.name);
-                pref.setOnPreferenceClickListener(this);
-                pref.setEnabled(canOpenUserDetails);
-                pref.setSelectable(true);
             }
             if (pref == null) {
                 continue;
@@ -1063,6 +1064,14 @@
         }
     }
 
+    /** Returns the user's name, or the appropriate string in the case of a Guest. */
+    public static String getUserName(Context context, @NonNull UserInfo userInfo) {
+        if (userInfo.isGuest()) {
+            return context.getString(R.string.user_guest);
+        }
+        return userInfo.name;
+    }
+
     @Override
     public boolean onPreferenceClick(Preference pref) {
         if (pref == mMePreference) {
