diff --git a/src/com/android/settings/users/UserCapabilities.java b/src/com/android/settings/users/UserCapabilities.java
index 473c9c5..459a880 100644
--- a/src/com/android/settings/users/UserCapabilities.java
+++ b/src/com/android/settings/users/UserCapabilities.java
@@ -118,6 +118,8 @@
                 ", mDisallowAddUser=" + mDisallowAddUser +
                 ", mEnforcedAdmin=" + mEnforcedAdmin +
                 ", mDisallowSwitchUser=" + mDisallowSwitchUser +
+                ", mDisallowAddUserSetByAdmin=" + mDisallowAddUserSetByAdmin +
+                ", mUserSwitcherEnabled=" + mUserSwitcherEnabled +
                 '}';
     }
 }
diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java
index 21552ce..5a83f34 100644
--- a/src/com/android/settings/users/UserSettings.java
+++ b/src/com/android/settings/users/UserSettings.java
@@ -271,18 +271,7 @@
             mMePreference.setSummary(R.string.user_admin);
         }
         mAddUser = (RestrictedPreference) findPreference(KEY_ADD_USER);
-        mAddUser.useAdminDisabledSummary(false);
-        // Determine if add user/profile button should be visible
-        if (mUserCaps.mCanAddUser && Utils.isDeviceProvisioned(activity)) {
-            mAddUser.setVisible(true);
-            mAddUser.setOnPreferenceClickListener(this);
-            // change label to only mention user, if restricted profiles are not supported
-            if (!mUserCaps.mCanAddRestrictedProfile) {
-                mAddUser.setTitle(R.string.user_add_user_menu);
-            }
-        } else {
-            mAddUser.setVisible(false);
-        }
+        mAddUser.setOnPreferenceClickListener(this);
 
         activity.registerReceiverAsUser(
                 mUserChangeReceiver, UserHandle.ALL, USER_REMOVED_INTENT_FILTER, null, mHandler);
@@ -968,9 +957,10 @@
                 mAddUserWhenLockedPreferenceController.getPreferenceKey());
         mAddUserWhenLockedPreferenceController.updateState(addUserOnLockScreen);
         mMultiUserFooterPreferenceController.updateState(null /* preference */);
-        mAddUser.setVisible(mUserCaps.mCanAddUser && Utils.isDeviceProvisioned(context)
-                && mUserCaps.mUserSwitcherEnabled);
         mUserListCategory.setVisible(mUserCaps.mUserSwitcherEnabled);
+
+        updateAddUser(context);
+
         if (!mUserCaps.mUserSwitcherEnabled) {
             return;
         }
@@ -980,10 +970,13 @@
             mUserListCategory.addPreference(userPreference);
         }
 
-        // Append Add user to the end of the list
-        if ((mUserCaps.mCanAddUser || mUserCaps.mDisallowAddUserSetByAdmin) &&
-                Utils.isDeviceProvisioned(context)) {
-            boolean moreUsers = mUserManager.canAddMoreUsers();
+    }
+
+    private void updateAddUser(Context context) {
+        if ((mUserCaps.mCanAddUser || mUserCaps.mDisallowAddUserSetByAdmin)
+                && Utils.isDeviceProvisioned(context) && mUserCaps.mUserSwitcherEnabled) {
+            mAddUser.setVisible(true);
+            final boolean moreUsers = mUserManager.canAddMoreUsers();
             mAddUser.setEnabled(moreUsers && !mAddingUser && mUserManager.canSwitchUsers());
             if (!moreUsers) {
                 mAddUser.setSummary(getString(R.string.user_add_max_count, getMaxRealUsers()));
@@ -994,6 +987,8 @@
                 mAddUser.setDisabledByAdmin(
                         mUserCaps.mDisallowAddUser ? mUserCaps.mEnforcedAdmin : null);
             }
+        } else {
+            mAddUser.setVisible(false);
         }
     }
 
diff --git a/tests/robotests/src/com/android/settings/users/UserSettingsTest.java b/tests/robotests/src/com/android/settings/users/UserSettingsTest.java
index b682388..1a98238 100644
--- a/tests/robotests/src/com/android/settings/users/UserSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/users/UserSettingsTest.java
@@ -57,7 +57,6 @@
 
 import org.junit.After;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.AdditionalMatchers;
@@ -101,15 +100,23 @@
         MockitoAnnotations.initMocks(this);
         mActivity = spy(ActivityController.of(new FragmentActivity()).get());
         mContext = spy(RuntimeEnvironment.application);
+        mUserCapabilities = UserCapabilities.create(mContext);
+
         mFragment = spy(new UserSettings());
         ReflectionHelpers.setField(mFragment, "mAddUserWhenLockedPreferenceController",
                 mock(AddUserWhenLockedPreferenceController.class));
         ReflectionHelpers.setField(mFragment, "mMultiUserFooterPreferenceController",
                 mock(MultiUserFooterPreferenceController.class));
-        mUserCapabilities = UserCapabilities.create(mContext);
+        ReflectionHelpers.setField(mFragment, "mUserManager", mUserManager);
+        ReflectionHelpers.setField(mFragment, "mUserCaps", mUserCapabilities);
+        ReflectionHelpers.setField(mFragment, "mDefaultIconDrawable", mDefaultIconDrawable);
+        ReflectionHelpers.setField(mFragment, "mAddingUser", false);
+        mFragment.mMePreference = mMePreference;
+
         when((Object) mActivity.getSystemService(UserManager.class)).thenReturn(mUserManager);
         doReturn(mActivity).when(mFragment).getActivity();
         doReturn(mContext).when(mFragment).getContext();
+        doReturn(mMockPreferenceManager).when(mFragment).getPreferenceManager();
         doReturn(mUserManager).when(mContext).getSystemService(UserManager.class);
         mProvisioned = Settings.Global.getInt(mContext.getContentResolver(),
             Settings.Global.DEVICE_PROVISIONED, 0);
@@ -157,10 +164,6 @@
         mUserCapabilities.mDisallowSwitchUser = false;
         mUserCapabilities.mUserSwitcherEnabled = true;
 
-        ReflectionHelpers.setField(mFragment, "mUserManager", mUserManager);
-        ReflectionHelpers.setField(mFragment, "mUserCaps", mUserCapabilities);
-        ReflectionHelpers.setField(mFragment, "mDefaultIconDrawable", mDefaultIconDrawable);
-        mFragment.mMePreference = mMePreference;
         mFragment.mUserListCategory = userListCategory;
         mFragment.mAddUser = addUser;
 
@@ -186,11 +189,6 @@
         mUserCapabilities.mDisallowAddUser = false;
         mUserCapabilities.mUserSwitcherEnabled = true;
 
-        ReflectionHelpers.setField(mFragment, "mUserManager", mUserManager);
-        ReflectionHelpers.setField(mFragment, "mUserCaps", mUserCapabilities);
-        ReflectionHelpers.setField(mFragment, "mDefaultIconDrawable", mDefaultIconDrawable);
-        ReflectionHelpers.setField(mFragment, "mAddingUser", false);
-        mFragment.mMePreference = mMePreference;
         mFragment.mUserListCategory = userListCategory;
         mFragment.mAddUser = addUser;
 
@@ -206,7 +204,6 @@
     }
 
     @Test
-    @Ignore
     public void updateUserList_cannotAddUserButCanSwitchUser_shouldNotShowAddUser() {
         Settings.Global.putInt(mContext.getContentResolver(),
             Settings.Global.DEVICE_PROVISIONED, 1);
@@ -216,11 +213,6 @@
         mUserCapabilities.mDisallowAddUser = true;
         mUserCapabilities.mUserSwitcherEnabled = true;
 
-        ReflectionHelpers.setField(mFragment, "mUserManager", mUserManager);
-        ReflectionHelpers.setField(mFragment, "mUserCaps", mUserCapabilities);
-        ReflectionHelpers.setField(mFragment, "mDefaultIconDrawable", mDefaultIconDrawable);
-        ReflectionHelpers.setField(mFragment, "mAddingUser", false);
-        mFragment.mMePreference = mMePreference;
         mFragment.mUserListCategory = mock(PreferenceCategory.class);
         mFragment.mAddUser = addUser;
 
@@ -251,9 +243,6 @@
         doReturn(true).when(mUserManager).canSwitchUsers();
         mUserCapabilities.mIsAdmin = false;
 
-        ReflectionHelpers.setField(mFragment, "mUserCaps", mUserCapabilities);
-        ReflectionHelpers.setField(mFragment, "mUserManager", mUserManager);
-
         Menu menu = mock(Menu.class);
         MenuItem menuItem = mock(MenuItem.class);
         final String title = "title";
@@ -279,9 +268,6 @@
         doReturn(true).when(mUserManager).canSwitchUsers();
         mUserCapabilities.mIsAdmin = false;
 
-        ReflectionHelpers.setField(mFragment, "mUserCaps", mUserCapabilities);
-        ReflectionHelpers.setField(mFragment, "mUserManager", mock(UserManager.class));
-
         Menu menu = mock(Menu.class);
         MenuItem menuItem = mock(MenuItem.class);
         final String title = "title";
@@ -301,7 +287,6 @@
     }
 
     @Test
-    @Ignore
     public void updateUserList_canAddUserAndSwitchUser_shouldShowAddUser() {
         Settings.Global.putInt(mContext.getContentResolver(),
             Settings.Global.DEVICE_PROVISIONED, 1);
@@ -311,13 +296,8 @@
         mUserCapabilities.mDisallowAddUser = false;
         mUserCapabilities.mUserSwitcherEnabled = true;
 
-        ReflectionHelpers.setField(mFragment, "mUserManager", mUserManager);
-        ReflectionHelpers.setField(mFragment, "mUserCaps", mUserCapabilities);
-        ReflectionHelpers.setField(mFragment, "mDefaultIconDrawable", mDefaultIconDrawable);
-        ReflectionHelpers.setField(mFragment, "mAddingUser", false);
-        mFragment.mMePreference = mMePreference;
-        mFragment.mUserListCategory = mock(PreferenceCategory.class);
         mFragment.mAddUser = addUser;
+        mFragment.mUserListCategory = mock(PreferenceCategory.class);
 
         doReturn(mock(PreferenceScreen.class)).when(mFragment).getPreferenceScreen();
         doReturn("Test summary").when(mFragment).getString(anyInt(), anyInt());
@@ -326,4 +306,26 @@
 
         verify(addUser).setVisible(true);
     }
+
+    @Test
+    public void updateUserList_addUserDisallowedByAdmin_shouldShowAddUserDisabled() {
+        Settings.Global.putInt(mContext.getContentResolver(),
+                Settings.Global.DEVICE_PROVISIONED, 1);
+        final RestrictedPreference addUser = mock(RestrictedPreference.class);
+
+        mUserCapabilities.mCanAddUser = false;
+        mUserCapabilities.mDisallowAddUser = true;
+        mUserCapabilities.mDisallowAddUserSetByAdmin = true;
+        mUserCapabilities.mUserSwitcherEnabled = true;
+
+        mFragment.mUserListCategory = mock(PreferenceCategory.class);
+        mFragment.mAddUser = addUser;
+
+        doReturn(mock(PreferenceScreen.class)).when(mFragment).getPreferenceScreen();
+
+        mFragment.updateUserList();
+
+        verify(addUser).setVisible(true);
+        assertThat(addUser.isEnabled()).isFalse();
+    }
 }
