diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index ebbec5dd..e6e6cff 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -96,12 +96,17 @@
 
     // Show only these settings for restricted users
     private int[] SETTINGS_FOR_RESTRICTED = {
+            R.id.wireless_section,
             R.id.wifi_settings,
             R.id.bluetooth_settings,
+            R.id.device_section,
             R.id.sound_settings,
             R.id.display_settings,
+            R.id.personal_section,
             R.id.security_settings,
             R.id.account_settings,
+            R.id.account_add,
+            R.id.system_section,
             R.id.about_settings
     };
 
diff --git a/src/com/android/settings/users/UserDetailsSettings.java b/src/com/android/settings/users/UserDetailsSettings.java
index 2a8c29c..1f4f39b 100644
--- a/src/com/android/settings/users/UserDetailsSettings.java
+++ b/src/com/android/settings/users/UserDetailsSettings.java
@@ -19,6 +19,7 @@
 import android.app.Activity;
 import android.app.AlertDialog;
 import android.app.Dialog;
+import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.pm.ApplicationInfo;
@@ -35,6 +36,7 @@
 import android.os.ParcelFileDescriptor;
 import android.os.RemoteException;
 import android.os.ServiceManager;
+import android.os.UserManager;
 import android.preference.CheckBoxPreference;
 import android.preference.EditTextPreference;
 import android.preference.Preference;
@@ -91,6 +93,7 @@
 
     private IPackageManager mIPm;
     private PackageManager mPm;
+    private UserManager mUm;
     private int mUserId;
     private boolean mNewUser;
 
@@ -102,12 +105,10 @@
         mNewUser = args == null || args.getInt(EXTRA_USER_ID, -1) == -1;
         mUserId = mNewUser ? -1 : args.getInt(EXTRA_USER_ID, -1);
         mIPm = IPackageManager.Stub.asInterface(ServiceManager.getService("package"));
+        mUm = (UserManager) getActivity().getSystemService(Context.USER_SERVICE);
 
         if (mUserId == -1) {
-            try {
-                mUserId = mIPm.createUser(getString(R.string.user_new_user_name), 0).id;
-            } catch (RemoteException re) {
-            }
+            mUserId = mUm.createUser(getString(R.string.user_new_user_name), 0).id;
         }
         mSystemAppGroup = (PreferenceGroup) findPreference(KEY_SYSTEM_APPS);
         mInstalledAppGroup = (PreferenceGroup) findPreference(KEY_INSTALLED_APPS);
@@ -161,7 +162,7 @@
     }
 
     private void initExistingUser() {
-        List<UserInfo> users = mPm.getUsers();
+        List<UserInfo> users = mUm.getUsers();
         UserInfo foundUser = null;
         for (UserInfo user : users) {
             if (user.id == mUserId) {
@@ -193,12 +194,7 @@
     }
 
     private void removeUserNow() {
-        try {
-            mIPm.removeUser(mUserId);
-        } catch (RemoteException re) {
-            // Couldn't remove user. Shouldn't happen
-            Log.e(TAG, "Couldn't remove user " + mUserId + "\n" + re);
-        }
+        mUm.removeUser(mUserId);
         finish();
     }
 
@@ -276,12 +272,8 @@
             if (TextUtils.isEmpty(name)) {
                 return false;
             }
-            try {
-                mIPm.setUserName(mUserId, (String) newValue);
-                mNamePref.setSummary((String) newValue);
-            } catch (RemoteException re) {
-                return false;
-            }
+            mUm.setUserName(mUserId, (String) newValue);
+            mNamePref.setSummary((String) newValue);
         }
         return true;
     }
@@ -354,17 +346,14 @@
     }
 
     private void saveCroppedImage(Intent data) {
-        try {
-            if (data.hasExtra("data")) {
-                Bitmap bitmap = (Bitmap) data.getParcelableExtra("data");
-                ParcelFileDescriptor fd = mIPm.setUserIcon(mUserId);
-                if (fd != null) {
-                    bitmap.compress(CompressFormat.PNG, 100,
-                            new ParcelFileDescriptor.AutoCloseOutputStream(fd));
-                    setPhotoId(mPm.getUser(mUserId).iconPath);
-                }
+        if (data.hasExtra("data")) {
+            Bitmap bitmap = (Bitmap) data.getParcelableExtra("data");
+            ParcelFileDescriptor fd = mUm.setUserIcon(mUserId);
+            if (fd != null) {
+                bitmap.compress(CompressFormat.PNG, 100,
+                        new ParcelFileDescriptor.AutoCloseOutputStream(fd));
+                setPhotoId(mUm.getUserInfo(mUserId).iconPath);
             }
-        } catch (RemoteException re) {
         }
     }
 
diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java
index d32cb45..e530493 100644
--- a/src/com/android/settings/users/UserSettings.java
+++ b/src/com/android/settings/users/UserSettings.java
@@ -16,9 +16,11 @@
 
 package com.android.settings.users;
 
+import android.content.Context;
 import android.content.pm.UserInfo;
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
+import android.os.UserManager;
 import android.preference.Preference;
 import android.preference.Preference.OnPreferenceClickListener;
 import android.preference.PreferenceActivity;
@@ -80,7 +82,8 @@
     }
 
     private void updateUserList() {
-        List<UserInfo> users = getActivity().getPackageManager().getUsers();
+        List<UserInfo> users = ((UserManager) getActivity().getSystemService(Context.USER_SERVICE))
+                .getUsers();
 
         mUserListCategory.removeAll();
         for (UserInfo user : users) {
