diff --git a/res/values/strings.xml b/res/values/strings.xml
index 392a43a..0649fdb 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -4343,14 +4343,10 @@
 
     <!-- Title of Usage Access preference item [CHAR LIMIT=30] -->
     <string name="usage_access_title">Apps with usage access</string>
-    <!-- Header of list of apps in Usage Access screen [CHAR LIMIT=30] -->
-    <string name="usage_access_app_list_header">Apps requesting access</string>
-    <!-- Body of Usage Access preference screen [CHAR LIMIT=NONE] -->
-    <string name="usage_access_body">Only allow apps you trust to have access to usage data. Apps you allow will have access to your app usage history, such as the last time an app was used, or the total time you spent using an app.</string>
     <!-- AlertDialog title for warning user when enabling usage access [CHAR LIMIT=30] -->
     <string name="allow_usage_access_title">Allow access?</string>
     <!-- AlertDialog message for warning user when enabling usage access [CHAR LIMIT=NONE] -->
-    <string name="allow_usage_access_message">If you allow access, this app can view general info about your apps, such as how often you use them."</string>
+    <string name="allow_usage_access_message">If you allow access, this app can view general information about the apps on your device, such as how often you use them.</string>
 
     <!-- Sound settings screen, setting check box label -->
     <string name="emergency_tone_title">Emergency tone</string>
diff --git a/res/xml/usage_access_settings.xml b/res/xml/usage_access_settings.xml
index 944126e..cd87be5 100644
--- a/res/xml/usage_access_settings.xml
+++ b/res/xml/usage_access_settings.xml
@@ -16,16 +16,4 @@
 
 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
     android:key="usage_access"
-    android:title="@string/usage_access_title">
-
-    <PreferenceCategory
-        android:key="apps"
-        android:title="@string/usage_access_app_list_header"
-        android:persistent="false" />
-
-    <Preference
-        android:summary="@string/usage_access_body"
-        android:persistent="false"
-        android:selectable="false" />
-
-</PreferenceScreen>
+    android:title="@string/usage_access_title"/>
diff --git a/src/com/android/settings/UsageAccessSettings.java b/src/com/android/settings/UsageAccessSettings.java
index 1816c50..8d0650b 100644
--- a/src/com/android/settings/UsageAccessSettings.java
+++ b/src/com/android/settings/UsageAccessSettings.java
@@ -34,7 +34,7 @@
 import android.os.Looper;
 import android.os.RemoteException;
 import android.preference.Preference;
-import android.preference.PreferenceCategory;
+import android.preference.PreferenceScreen;
 import android.preference.SwitchPreference;
 import android.util.ArrayMap;
 import android.util.Log;
@@ -181,7 +181,7 @@
 
             if (newEntries == null) {
                 mPackageEntryMap.clear();
-                mAppsCategory.removeAll();
+                mPreferenceScreen.removeAll();
                 return;
             }
 
@@ -192,7 +192,7 @@
                 final PackageEntry newPackageEntry = newEntries.get(oldPackageEntry.packageName);
                 if (newPackageEntry == null) {
                     // This package has been removed.
-                    mAppsCategory.removePreference(oldPackageEntry.preference);
+                    mPreferenceScreen.removePreference(oldPackageEntry.preference);
                 } else {
                     // This package already exists in the preference hierarchy, so reuse that
                     // Preference.
@@ -208,7 +208,7 @@
                     packageEntry.preference = new SwitchPreference(mContext);
                     packageEntry.preference.setPersistent(false);
                     packageEntry.preference.setOnPreferenceChangeListener(UsageAccessSettings.this);
-                    mAppsCategory.addPreference(packageEntry.preference);
+                    mPreferenceScreen.addPreference(packageEntry.preference);
                 }
                 updatePreference(packageEntry);
             }
@@ -244,15 +244,15 @@
     private AppsRequestingAccessFetcher mLastFetcherTask;
     ArrayMap<String, PackageEntry> mPackageEntryMap = new ArrayMap<>();
     AppOpsManager mAppOpsManager;
-    PreferenceCategory mAppsCategory;
+    PreferenceScreen mPreferenceScreen;
 
     @Override
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
 
         addPreferencesFromResource(R.xml.usage_access_settings);
-        mAppsCategory = (PreferenceCategory) getPreferenceScreen().findPreference("apps");
-        mAppsCategory.setOrderingAsAdded(false);
+        mPreferenceScreen = getPreferenceScreen();
+        mPreferenceScreen.setOrderingAsAdded(false);
         mAppOpsManager = (AppOpsManager) getSystemService(Context.APP_OPS_SERVICE);
     }
 
@@ -357,7 +357,7 @@
                     .setMessage(R.string.allow_usage_access_message)
                     .setIconAttribute(android.R.attr.alertDialogIcon)
                     .setNegativeButton(R.string.cancel, this)
-                    .setPositiveButton(R.string.allow, this)
+                    .setPositiveButton(android.R.string.ok, this)
                     .create();
         }
 
