diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 8b18dc9..dc0affb 100755
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -222,7 +222,7 @@
     <dimen name="redaction_vertical_margins">8dp</dimen>
 
     <!-- Fingerprint -->
-    <dimen name="fingerprint_ring_radius">92dip</dimen>
+    <dimen name="fingerprint_ring_radius">80dip</dimen>
     <dimen name="fingerprint_ring_thickness">4dip</dimen>
     <dimen name="fingerprint_dot_radius">8dp</dimen>
     <dimen name="fingerprint_pulse_radius">50dp</dimen>
@@ -234,7 +234,7 @@
     <dimen name="fingerprint_error_text_appear_distance">16dp</dimen>
     <dimen name="fingerprint_error_text_disappear_distance">-8dp</dimen>
     <dimen name="fingerprint_animation_size">88dp</dimen>
-    <dimen name="fingerprint_progress_bar_size">192dp</dimen>
+    <dimen name="fingerprint_progress_bar_size">168dp</dimen>
     <dimen name="fingerprint_enrolling_content_margin_top">36dp</dimen>
     <dimen name="fingerprint_in_app_indicator_size">120dp</dimen>
 
diff --git a/res/values/strings.xml b/res/values/strings.xml
index c269b99..140cad1 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -745,12 +745,12 @@
     <string name="security_settings_fingerprint_enroll_dialog_delete">Delete</string>
     <!-- Title shown in fingerprint enrollment dialog to begin enrollment [CHAR LIMIT=22]-->
     <string name="security_settings_fingerprint_enroll_start_title">Let\u2019s start!</string>
-    <!-- Message shown in fingerprint enrollment dialog to begin enrollment -->
-    <string name="security_settings_fingerprint_enroll_start_message">Put your finger on the fingerprint sensor. Lift after you feel a vibration.</string>
+    <!-- Message shown in fingerprint enrollment dialog to begin enrollment [CHAR LIMIT=NONE] -->
+    <string name="security_settings_fingerprint_enroll_start_message">Put your finger on the sensor and lift after you feel a vibration</string>
     <!-- Title shown in fingerprint enrollment dialog to repeat touching the fingerprint sensor [CHAR LIMIT=28] -->
-    <string name="security_settings_fingerprint_enroll_repeat_title">Great! Now repeat.</string>
-    <!-- Message shown in fingerprint enrollment dialog to repeat touching the fingerprint sensor -->
-    <string name="security_settings_fingerprint_enroll_repeat_message">Put the same finger on the fingerprint sensor and lift after you feel a vibration.</string>
+    <string name="security_settings_fingerprint_enroll_repeat_title">Great! Now repeat</string>
+    <!-- Message shown in fingerprint enrollment dialog to repeat touching the fingerprint sensor [CHAR LIMIT=NONE] -->
+    <string name="security_settings_fingerprint_enroll_repeat_message">Move your finger slightly to add all the different parts of your fingerprint</string>
     <!-- Title shown in fingerprint enrollment dialog once enrollment is completed [CHAR LIMIT=22] -->
     <string name="security_settings_fingerprint_enroll_finish_title">Fingerprint added!</string>
     <!-- Message shown in fingerprint enrollment dialog once enrollment is completed -->
diff --git a/src/com/android/settings/applications/AdvancedAppSettings.java b/src/com/android/settings/applications/AdvancedAppSettings.java
index 54d3830..43fae71 100644
--- a/src/com/android/settings/applications/AdvancedAppSettings.java
+++ b/src/com/android/settings/applications/AdvancedAppSettings.java
@@ -72,50 +72,6 @@
         mHighPowerPreference = findPreference(KEY_HIGH_POWER_APPS);
         mSystemAlertWindowPreference = findPreference(KEY_SYSTEM_ALERT_WINDOW);
         mWriteSettingsPreference = findPreference(KEY_WRITE_SETTINGS_APPS);
-        updateUI();
-    }
-
-    @Override
-    public void onDestroy() {
-        super.onDestroy();
-        if (mPermissionReceiver != null) {
-            getContext().unregisterReceiver(mPermissionReceiver);
-            mPermissionReceiver = null;
-        }
-    }
-
-    private void updateUI() {
-        ArrayList<AppEntry> allApps = mSession.getAllApps();
-
-        int countAppWithDomainURLs = 0;
-        for (AppEntry entry : allApps) {
-            boolean hasDomainURLs =
-                    (entry.info.privateFlags & ApplicationInfo.PRIVATE_FLAG_HAS_DOMAIN_URLS) != 0;
-            if (hasDomainURLs) countAppWithDomainURLs++;
-        }
-        String summary = getResources().getQuantityString(
-                R.plurals.domain_urls_apps_summary, countAppWithDomainURLs, countAppWithDomainURLs);
-        mAppDomainURLsPreference.setSummary(summary);
-
-        int highPowerCount = PowerWhitelistBackend.getInstance().getWhitelistSize();
-        mHighPowerPreference.setSummary(getResources().getQuantityString(R.plurals.high_power_count,
-                highPowerCount, highPowerCount));
-
-        if (mPermissionReceiver != null) {
-            getContext().unregisterReceiver(mPermissionReceiver);
-        }
-        mPermissionReceiver = PermissionsSummaryHelper.getAppWithPermissionsCounts(getContext(),
-                mPermissionCallback);
-
-        Activity activity = getActivity();
-        ApplicationsState appState = ApplicationsState.getInstance(activity
-                .getApplication());
-        AppStateOverlayBridge overlayBridge = new AppStateOverlayBridge(activity,
-                appState, null);
-        AppStateWriteSettingsBridge writeSettingsBridge = new AppStateWriteSettingsBridge(
-                activity, appState, null);
-        new CountAppsWithOverlayPermission().execute(overlayBridge);
-        new CountAppsWithWriteSettingsPermission().execute(writeSettingsBridge);
     }
 
     @Override
@@ -130,7 +86,7 @@
 
     @Override
     public void onPackageListChanged() {
-        updateUI();
+        // No-op.
     }
 
     @Override
