diff --git a/res/xml/app_and_notification.xml b/res/xml/app_and_notification.xml
index 627d3f8..639735d 100644
--- a/res/xml/app_and_notification.xml
+++ b/res/xml/app_and_notification.xml
@@ -25,17 +25,28 @@
         android:title="@string/app_permissions"
         android:order="-130"
         settings:keywords="@string/keywords_app_permissions">
-        <intent android:action="android.intent.action.MANAGE_PERMISSIONS"/>
+        <intent android:action="android.intent.action.MANAGE_PERMISSIONS" />
     </Preference>
 
     <PreferenceCategory
         android:key="dashboard_tile_placeholder"
-        android:order="10"/>
+        android:order="10" />
+
+    <com.android.settingslib.RestrictedPreference
+        android:key="app_and_notif_cell_broadcast_settings"
+        android:title="@string/cell_broadcast_settings"
+        android:order="15"
+        settings:useAdminDisabledSummary="true">
+        <intent
+            android:action="android.intent.action.MAIN"
+            android:targetPackage="com.android.cellbroadcastreceiver"
+            android:targetClass="com.android.cellbroadcastreceiver.CellBroadcastSettings" />
+    </com.android.settingslib.RestrictedPreference>
 
     <Preference
         android:key="special_access"
         android:fragment="com.android.settings.applications.SpecialAccessSettings"
         android:title="@string/special_access"
-        android:order="20"/>
+        android:order="20" />
 
 </PreferenceScreen>
\ No newline at end of file
diff --git a/res/xml/reset_dashboard_fragment.xml b/res/xml/reset_dashboard_fragment.xml
index 02328af..c769d5d 100644
--- a/res/xml/reset_dashboard_fragment.xml
+++ b/res/xml/reset_dashboard_fragment.xml
@@ -21,9 +21,11 @@
     android:title="@string/reset_dashboard_title">
 
     <!-- Network reset -->
-    <Preference
+    <com.android.settingslib.RestrictedPreference
         android:key="network_reset_pref"
         android:title="@string/reset_network_title"
+        settings:userRestriction="no_network_reset"
+        settings:useAdminDisabledSummary="true"
         android:fragment="com.android.settings.ResetNetwork" />
 
     <!-- Reset app preferences -->
diff --git a/src/com/android/settings/applications/defaultapps/DefaultAutofillPicker.java b/src/com/android/settings/applications/defaultapps/DefaultAutofillPicker.java
index 5a437db..718094e 100644
--- a/src/com/android/settings/applications/defaultapps/DefaultAutofillPicker.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultAutofillPicker.java
@@ -19,23 +19,28 @@
 import android.Manifest;
 import android.app.Activity;
 import android.content.ComponentName;
+import android.content.ContentResolver;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.content.pm.ServiceInfo;
+import android.net.Uri;
 import android.os.Bundle;
+import android.os.Handler;
+import android.os.Looper;
 import android.provider.Settings;
 import android.service.autofill.AutofillService;
 import android.service.autofill.AutofillServiceInfo;
+import android.support.v7.preference.Preference;
 import android.text.Html;
 import android.text.TextUtils;
 import android.util.Log;
 
+import com.android.internal.content.PackageMonitor;
 import com.android.internal.logging.nano.MetricsProto;
 import com.android.settings.R;
-import com.android.settings.applications.defaultapps.DefaultAppPickerFragment.ConfirmationDialogFragment;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -56,6 +61,7 @@
      * Set when the fragment is implementing ACTION_REQUEST_SET_AUTOFILL_SERVICE.
      */
     public DialogInterface.OnClickListener mCancelListener;
+    private final Handler mHandler = new Handler();
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
@@ -68,6 +74,9 @@
                 activity.finish();
             };
         }
+
+        mSettingsPackageMonitor.register(getActivity(), getActivity().getMainLooper(), false);
+        update();
     }
 
     @Override
@@ -87,6 +96,73 @@
         return true;
     }
 
+    /**
+     * Monitor coming and going auto fill services and calls {@link #update()} when necessary
+     */
+    private final PackageMonitor mSettingsPackageMonitor = new PackageMonitor() {
+        @Override
+        public void onPackageAdded(String packageName, int uid) {
+            mHandler.post(() -> update());
+        }
+
+        @Override
+        public void onPackageModified(String packageName) {
+            mHandler.post(() -> update());
+        }
+
+        @Override
+        public void onPackageRemoved(String packageName, int uid) {
+            mHandler.post(() -> update());
+        }
+    };
+
+    /**
+     * Update the data in this UI.
+     */
+    private void update() {
+        updateCandidates();
+        addAddServicePreference();
+    }
+
+    @Override
+    public void onDestroy() {
+        mSettingsPackageMonitor.unregister();
+        super.onDestroy();
+    }
+
+    /**
+     * Gets the preference that allows to add a new autofill service.
+     *
+     * @return The preference or {@code null} if no service can be added
+     */
+    private Preference newAddServicePreferenceOrNull() {
+        final String searchUri = Settings.Secure.getString(getActivity().getContentResolver(),
+                Settings.Secure.AUTOFILL_SERVICE_SEARCH_URI);
+        if (TextUtils.isEmpty(searchUri)) {
+            return null;
+        }
+
+        final Intent addNewServiceIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(searchUri));
+        Preference preference = new Preference(getPrefContext());
+        preference.setTitle(R.string.print_menu_item_add_service);
+        preference.setIcon(R.drawable.ic_menu_add);
+        preference.setOrder(Integer.MAX_VALUE -1);
+        preference.setIntent(addNewServiceIntent);
+        preference.setPersistent(false);
+        return preference;
+    }
+
+    /**
+     * Add a preference that allows the user to add a service if the market link for that is
+     * configured.
+     */
+    private void addAddServicePreference() {
+        final Preference addNewServicePreference = newAddServicePreferenceOrNull();
+        if (addNewServicePreference != null) {
+            getPreferenceScreen().addPreference(addNewServicePreference);
+        }
+    }
+
     @Override
     protected List<DefaultAppInfo> getCandidates() {
         final List<DefaultAppInfo> candidates = new ArrayList<>();
diff --git a/src/com/android/settings/dashboard/ProgressiveDisclosureMixin.java b/src/com/android/settings/dashboard/ProgressiveDisclosureMixin.java
index 07a7293..b86fabf 100644
--- a/src/com/android/settings/dashboard/ProgressiveDisclosureMixin.java
+++ b/src/com/android/settings/dashboard/ProgressiveDisclosureMixin.java
@@ -120,7 +120,7 @@
      * Whether the screen should be collapsed.
      */
     public boolean shouldCollapse(PreferenceScreen screen) {
-        return !mUserExpanded && screen.getPreferenceCount() >= mTileLimit;
+        return !mUserExpanded && screen.getPreferenceCount() > mTileLimit;
     }
 
     /**
@@ -218,7 +218,7 @@
                 return pref;
             }
             if (pref instanceof PreferenceGroup) {
-                final Preference returnedPreference = ((PreferenceGroup)pref).findPreference(key);
+                final Preference returnedPreference = ((PreferenceGroup) pref).findPreference(key);
                 if (returnedPreference != null) {
                     return returnedPreference;
                 }
diff --git a/src/com/android/settings/network/NetworkResetPreferenceController.java b/src/com/android/settings/network/NetworkResetPreferenceController.java
index ce36a7f..d8f3217 100644
--- a/src/com/android/settings/network/NetworkResetPreferenceController.java
+++ b/src/com/android/settings/network/NetworkResetPreferenceController.java
@@ -31,7 +31,7 @@
 
     @Override
     public boolean isAvailable() {
-        return !mRestrictionChecker.hasRestriction();
+        return !mRestrictionChecker.hasUserRestriction();
     }
 
     @Override
diff --git a/src/com/android/settings/network/NetworkResetRestrictionChecker.java b/src/com/android/settings/network/NetworkResetRestrictionChecker.java
index 4fe9f59..2b630bd 100644
--- a/src/com/android/settings/network/NetworkResetRestrictionChecker.java
+++ b/src/com/android/settings/network/NetworkResetRestrictionChecker.java
@@ -45,9 +45,13 @@
                 mContext, UserManager.DISALLOW_NETWORK_RESET, UserHandle.myUserId()) != null;
     }
 
-    boolean hasRestriction() {
+    boolean hasUserRestriction() {
         return !mUserManager.isAdminUser()
-                || hasUserBaseRestriction()
+                || hasUserBaseRestriction();
+    }
+
+    boolean hasRestriction() {
+        return hasUserRestriction()
                 || isRestrictionEnforcedByAdmin();
     }
 }
diff --git a/tests/robotests/src/com/android/settings/dashboard/ProgressiveDisclosureTest.java b/tests/robotests/src/com/android/settings/dashboard/ProgressiveDisclosureTest.java
index bae6f8f..d53e11b 100644
--- a/tests/robotests/src/com/android/settings/dashboard/ProgressiveDisclosureTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/ProgressiveDisclosureTest.java
@@ -93,6 +93,15 @@
     }
 
     @Test
+    public void shouldNotCollapse_preferenceCountSameAsThreshold() {
+        when(mScreen.getPreferenceCount()).thenReturn(5);
+
+        mMixin.setTileLimit(5);
+
+        assertThat(mMixin.shouldCollapse(mScreen)).isFalse();
+    }
+
+    @Test
     public void shouldNotCollapse_whenStartAsExpanded() {
         when(mScreen.getPreferenceCount()).thenReturn(5);
 
diff --git a/tests/robotests/src/com/android/settings/network/NetworkResetPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/NetworkResetPreferenceControllerTest.java
new file mode 100644
index 0000000..eeb4131
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/network/NetworkResetPreferenceControllerTest.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.network;
+
+
+import android.content.Context;
+
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+import org.robolectric.util.ReflectionHelpers;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class NetworkResetPreferenceControllerTest {
+
+    @Mock
+    private NetworkResetRestrictionChecker mRestrictionChecker;
+    private Context mContext;
+    private NetworkResetPreferenceController mController;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mContext = RuntimeEnvironment.application;
+        mController = new NetworkResetPreferenceController(mContext);
+        ReflectionHelpers.setField(mController, "mRestrictionChecker", mRestrictionChecker);
+    }
+
+    @Test
+    public void testIsAvailable_shouldReturnTrueWhenNoUserRestriction() {
+        when(mRestrictionChecker.isRestrictionEnforcedByAdmin()).thenReturn(true);
+
+        when(mRestrictionChecker.hasUserRestriction()).thenReturn(true);
+
+        assertThat(mController.isAvailable()).isFalse();
+
+        when(mRestrictionChecker.hasUserRestriction()).thenReturn(false);
+
+        assertThat(mController.isAvailable()).isTrue();
+        verify(mRestrictionChecker, never()).isRestrictionEnforcedByAdmin();
+    }
+}
