diff --git a/src/com/android/settings/SecuritySettings.java b/src/com/android/settings/SecuritySettings.java
index c2ddb5f..c324dd8 100644
--- a/src/com/android/settings/SecuritySettings.java
+++ b/src/com/android/settings/SecuritySettings.java
@@ -260,15 +260,7 @@
         boolean isSideloadingAllowed =
                 !um.hasUserRestriction(UserManager.DISALLOW_INSTALL_UNKNOWN_SOURCES);
         // Side loading of apps.
-        if (isSideloadingAllowed) {
-            mToggleAppInstallation.setEnabled(isSideloadingAllowed);
-        } else {
-            if (deviceAdminCategory != null) {
-                deviceAdminCategory.removePreference(mToggleAppInstallation);
-            } else {
-                mToggleAppInstallation.setEnabled(false);
-            }
-        }
+        mToggleAppInstallation.setEnabled(isSideloadingAllowed);
 
         // Package verification, only visible to primary user and if enabled
         mToggleVerifyApps = (CheckBoxPreference) findPreference(KEY_TOGGLE_VERIFY_APPLICATIONS);
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index ed3685d..4cc4e40 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -134,16 +134,12 @@
     private Header mLastHeader;
     private boolean mListeningToAccountUpdates;
 
-    private List<RestrictionEntry> mAppRestrictions;
-
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         if (getIntent().hasExtra(EXTRA_UI_OPTIONS)) {
             getWindow().setUiOptions(getIntent().getIntExtra(EXTRA_UI_OPTIONS, 0));
         }
 
-        mAppRestrictions = getApplicationRestrictions();
-
         mAuthenticatorHelper = new AuthenticatorHelper();
         mAuthenticatorHelper.updateAuthDescriptions(this);
         mAuthenticatorHelper.onAccountsUpdated(this, null);
diff --git a/src/com/android/settings/users/AppRestrictionsFragment.java b/src/com/android/settings/users/AppRestrictionsFragment.java
index 4e6e5de..7d4af4f 100644
--- a/src/com/android/settings/users/AppRestrictionsFragment.java
+++ b/src/com/android/settings/users/AppRestrictionsFragment.java
@@ -562,7 +562,8 @@
                         if (packageName.equals(getActivity().getPackageName())) {
                             RestrictionUtils.setRestrictions(getActivity(), restrictions, mUser);
                         } else {
-                            mUserManager.setApplicationRestrictions(packageName, restrictions,
+                            mUserManager.setApplicationRestrictions(packageName,
+                                    RestrictionUtils.restrictionsToBundle(restrictions),
                                     mUser);
                         }
                         break;
@@ -594,12 +595,11 @@
                             getActivity(), mUser);
                     onRestrictionsReceived(preference, packageName, restrictions);
                 } else {
-                    List<RestrictionEntry> oldEntries =
+                    Bundle oldEntries =
                             mUserManager.getApplicationRestrictions(packageName, mUser);
                     Intent intent = new Intent(Intent.ACTION_GET_RESTRICTION_ENTRIES);
                     intent.setPackage(packageName);
-                    intent.putParcelableArrayListExtra(Intent.EXTRA_RESTRICTIONS,
-                            new ArrayList<RestrictionEntry>(oldEntries));
+                    intent.putExtra(Intent.EXTRA_RESTRICTIONS_BUNDLE, oldEntries);
                     intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
                     getActivity().sendOrderedBroadcast(intent, null,
                             new RestrictionsResultReceiver(packageName, preference),
@@ -626,14 +626,16 @@
         public void onReceive(Context context, Intent intent) {
             Bundle results = getResultExtras(true);
             final ArrayList<RestrictionEntry> restrictions = results.getParcelableArrayList(
-                    Intent.EXTRA_RESTRICTIONS);
+                    Intent.EXTRA_RESTRICTIONS_LIST);
             Intent restrictionsIntent = (Intent) results.getParcelable(CUSTOM_RESTRICTIONS_INTENT);
             if (restrictions != null && restrictionsIntent == null) {
                 onRestrictionsReceived(preference, packageName, restrictions);
-                mUserManager.setApplicationRestrictions(packageName, restrictions, mUser);
+                mUserManager.setApplicationRestrictions(packageName,
+                        RestrictionUtils.restrictionsToBundle(restrictions), mUser);
             } else if (restrictionsIntent != null) {
                 final Intent customIntent = restrictionsIntent;
-                customIntent.putParcelableArrayListExtra(Intent.EXTRA_RESTRICTIONS, restrictions);
+                customIntent.putExtra(Intent.EXTRA_RESTRICTIONS_BUNDLE,
+                        RestrictionUtils.restrictionsToBundle(restrictions));
                 Preference p = new Preference(context);
                 p.setTitle(R.string.app_restrictions_custom_label);
                 p.setOnPreferenceClickListener(new OnPreferenceClickListener() {
@@ -682,6 +684,7 @@
                 ((ListPreference)p).setEntryValues(entry.getChoiceValues());
                 ((ListPreference)p).setEntries(entry.getChoiceEntries());
                 ((ListPreference)p).setValue(value);
+                ((ListPreference)p).setDialogTitle(entry.getTitle());
                 break;
             case RestrictionEntry.TYPE_MULTI_SELECT:
                 p = new MultiSelectListPreference(context);
@@ -693,6 +696,7 @@
                     set.add(s);
                 }
                 ((MultiSelectListPreference)p).setValues(set);
+                ((MultiSelectListPreference)p).setDialogTitle(entry.getTitle());
                 break;
             case RestrictionEntry.TYPE_NULL:
             default:
@@ -739,12 +743,13 @@
 
         if (resultCode == Activity.RESULT_OK) {
             ArrayList<RestrictionEntry> list =
-                    data.getParcelableArrayListExtra(Intent.EXTRA_RESTRICTIONS);
+                    data.getParcelableArrayListExtra(Intent.EXTRA_RESTRICTIONS_LIST);
             if (list != null) {
                 // If there's a valid result, persist it to the user manager.
                 String packageName = pref.getKey().substring(PKG_PREFIX.length());
                 pref.setRestrictions(list);
-                mUserManager.setApplicationRestrictions(packageName, list, mUser);
+                mUserManager.setApplicationRestrictions(packageName,
+                        RestrictionUtils.restrictionsToBundle(list), mUser);
             }
             toggleAppPanel(pref);
         }
diff --git a/src/com/android/settings/users/RestrictionUtils.java b/src/com/android/settings/users/RestrictionUtils.java
index 8b675a5..be62b3b 100644
--- a/src/com/android/settings/users/RestrictionUtils.java
+++ b/src/com/android/settings/users/RestrictionUtils.java
@@ -31,22 +31,22 @@
 public class RestrictionUtils {
 
     public static final String [] sRestrictionKeys = {
-        UserManager.DISALLOW_CONFIG_WIFI,
-        UserManager.DISALLOW_CONFIG_BLUETOOTH,
+//        UserManager.DISALLOW_CONFIG_WIFI,
+//        UserManager.DISALLOW_CONFIG_BLUETOOTH,
         UserManager.DISALLOW_SHARE_LOCATION,
         UserManager.DISALLOW_INSTALL_UNKNOWN_SOURCES
     };
 
     public static final int [] sRestrictionTitles = {
-        R.string.restriction_wifi_config_title,
-        R.string.restriction_bluetooth_config_title,
+//        R.string.restriction_wifi_config_title,
+//        R.string.restriction_bluetooth_config_title,
         R.string.restriction_location_enable_title,
         R.string.install_applications
     };
 
     public static final int [] sRestrictionDescriptions = {
-        R.string.restriction_wifi_config_summary,
-        R.string.restriction_bluetooth_config_summary,
+//        R.string.restriction_wifi_config_summary,
+//        R.string.restriction_bluetooth_config_summary,
         R.string.restriction_location_enable_summary,
         R.string.install_unknown_applications
     };
@@ -90,4 +90,18 @@
         }
         um.setUserRestrictions(userRestrictions, user);
     }
+
+    public static Bundle restrictionsToBundle(ArrayList<RestrictionEntry> entries) {
+        final Bundle bundle = new Bundle();
+        for (RestrictionEntry entry : entries) {
+            if (entry.getType() == RestrictionEntry.TYPE_BOOLEAN) {
+                bundle.putBoolean(entry.getKey(), entry.getSelectedState());
+            } else if (entry.getType() == RestrictionEntry.TYPE_MULTI_SELECT) {
+                bundle.putStringArray(entry.getKey(), entry.getAllSelectedStrings());
+            } else {
+                bundle.putString(entry.getKey(), entry.getSelectedString());
+            }
+        }
+        return bundle;
+    }
 }
