diff --git a/res/layout/data_usage_header.xml b/res/layout/data_usage_header.xml
index aa2beb2..a7b12b7 100644
--- a/res/layout/data_usage_header.xml
+++ b/res/layout/data_usage_header.xml
@@ -45,17 +45,6 @@
         android:paddingRight="@*android:dimen/preference_item_padding_side"
         android:paddingTop="8dip"
         android:paddingBottom="8dip"
-        android:singleLine="true"
-        android:ellipsize="marquee"
-        android:textAppearance="?android:attr/textAppearanceSmall" />
-
-    <TextView
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:paddingLeft="@*android:dimen/preference_item_padding_side"
-        android:paddingRight="@*android:dimen/preference_item_padding_side"
-        android:paddingBottom="8dip"
-        android:text="@string/data_usage_disclaimer"
         android:textAppearance="?android:attr/textAppearanceSmall" />
 
     <TextView
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 6d7994f..97ee27c 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -3626,10 +3626,8 @@
     <!-- Label for data usage occuring while application in background. [CHAR LIMIT=48] -->
     <string name="data_usage_label_background">Background</string>
 
-    <!-- Disclaimer that contrasts device versus carrier reporting. [CHAR LIMIT=80] -->
-    <string name="data_usage_disclaimer" product="tablet">Measured by your tablet. Your carrier\'s data usage accounting may differ.</string>
-    <!-- Disclaimer that contrasts device versus carrier reporting. [CHAR LIMIT=80] -->
-    <string name="data_usage_disclaimer" product="default">Measured by your phone. Your carrier\'s data usage accounting may differ.</string>
+    <!-- Label for application which has its data usage restricted. [CHAR LIMIT=16] -->
+    <string name="data_usage_app_restricted">restricted</string>
 
     <!-- Body of dialog shown to request confirmation that mobile data will be disabled. [CHAR LIMIT=NONE] -->
     <string name="data_usage_disable_mobile">Disable mobile data?</string>
@@ -3695,9 +3693,9 @@
     <!-- Title of dialog shown before user limits data usage. [CHAR LIMIT=48] -->
     <string name="data_usage_limit_dialog_title">Limiting data usage</string>
     <!-- Body of dialog shown before user limits mobile data usage. [CHAR LIMIT=NONE] -->
-    <string name="data_usage_limit_dialog" product="tablet">Your <xliff:g id="networks" example="mobile">%1$s</xliff:g> data connection will be disabled when the specified limit is reached.\n\nSince data usage is measured by your tablet, and your carrier may account for usage differently, consider using a conservative limit.</string>
+    <string name="data_usage_limit_dialog_mobile" product="tablet">Your mobile data connection will be disabled when the specified limit is reached.\n\nSince data usage is measured by your tablet, and your carrier may account for usage differently, consider using a conservative limit.</string>
     <!-- Body of dialog shown before user limits mobile data usage. [CHAR LIMIT=NONE] -->
-    <string name="data_usage_limit_dialog" product="default">Your <xliff:g id="networks" example="mobile">%1$s</xliff:g> data connection will be disabled when the specified limit is reached.\n\nSince data usage is measured by your phone, and your carrier may account for usage differently, consider using a conservative limit.</string>
+    <string name="data_usage_limit_dialog_mobile" product="default">Your mobile data connection will be disabled when the specified limit is reached.\n\nSince data usage is measured by your phone, and your carrier may account for usage differently, consider using a conservative limit.</string>
 
     <!-- Title of dialog shown before user restricts background data usage. [CHAR LIMIT=48] -->
     <string name="data_usage_restrict_background_title">Restrict background data?</string>
@@ -3714,7 +3712,12 @@
     <!-- Combination of total network bytes sent and received by an application. [CHAR LIMIT=NONE] -->
     <string name="data_usage_received_sent"><xliff:g id="received" example="128KB">%1$s</xliff:g> received, <xliff:g id="sent" example="1.3GB">%2$s</xliff:g> sent</string>
     <!-- Label displaying total network data transferred during a specific time period. [CHAR LIMIT=64] -->
-    <string name="data_usage_total_during_range"><xliff:g id="range" example="Jul 1 - Jul 31">%2$s</xliff:g>: about <xliff:g id="total" example="128KB">%1$s</xliff:g> used</string>
+    <string name="data_usage_total_during_range"><xliff:g id="range" example="Jul 1 - Jul 31">%2$s</xliff:g>: about <xliff:g id="total" example="128KB">%1$s</xliff:g> used.</string>
+
+    <!-- Label displaying total network data transferred during a specific time period, including a disclaimer that contrasts device versus carrier reporting. [CHAR LIMIT=80] -->
+    <string name="data_usage_total_during_range_mobile" product="tablet"><xliff:g id="range" example="Jul 1 - Jul 31">%2$s</xliff:g>: about <xliff:g id="total" example="128KB">%1$s</xliff:g> used, as measured by your tablet. Your carrier\'s data usage accounting may differ.</string>
+    <!-- Label displaying total network data transferred during a specific time period, including a disclaimer that contrasts device versus carrier reporting. [CHAR LIMIT=80] -->
+    <string name="data_usage_total_during_range_mobile" product="default"><xliff:g id="range" example="Jul 1 - Jul 31">%2$s</xliff:g>: about <xliff:g id="total" example="128KB">%1$s</xliff:g> used, as measured by your phone. Your carrier\'s data usage accounting may differ.</string>
 
     <!-- Dialog title for selecting paid networks. [CHAR LIMIT=25] -->
     <string name="data_usage_metered_title">Expensive networks</string>
diff --git a/src/com/android/settings/DataUsageSummary.java b/src/com/android/settings/DataUsageSummary.java
index 70c0d9b..ae9c1cb 100644
--- a/src/com/android/settings/DataUsageSummary.java
+++ b/src/com/android/settings/DataUsageSummary.java
@@ -1147,8 +1147,15 @@
         final String totalPhrase = Formatter.formatFileSize(context, totalBytes);
         final String rangePhrase = formatDateRange(context, start, end);
 
-        mUsageSummary.setText(
-                getString(R.string.data_usage_total_during_range, totalPhrase, rangePhrase));
+        final int summaryRes;
+        if (TAB_MOBILE.equals(mCurrentTab) || TAB_3G.equals(mCurrentApp)
+                || TAB_4G.equals(mCurrentApp)) {
+            summaryRes = R.string.data_usage_total_during_range_mobile;
+        } else {
+            summaryRes = R.string.data_usage_total_during_range;
+        }
+
+        mUsageSummary.setText(getString(summaryRes, totalPhrase, rangePhrase));
     }
 
     private final LoaderCallbacks<ChartData> mChartDataCallbacks = new LoaderCallbacks<
@@ -1191,13 +1198,15 @@
 
         @Override
         public void onLoadFinished(Loader<NetworkStats> loader, NetworkStats data) {
-            mAdapter.bindStats(data);
+            final int[] restrictedAppIds = mPolicyManager.getAppsWithPolicy(
+                    POLICY_REJECT_METERED_BACKGROUND);
+            mAdapter.bindStats(data, restrictedAppIds);
             updateEmptyVisible();
         }
 
         @Override
         public void onLoaderReset(Loader<NetworkStats> loader) {
-            mAdapter.bindStats(null);
+            mAdapter.bindStats(null, new int[0]);
             updateEmptyVisible();
         }
 
@@ -1374,6 +1383,7 @@
 
     public static class AppItem implements Comparable<AppItem>, Parcelable {
         public final int appId;
+        public boolean restricted;
         public SparseBooleanArray uids = new SparseBooleanArray();
         public long total;
 
@@ -1439,7 +1449,7 @@
         /**
          * Bind the given {@link NetworkStats}, or {@code null} to clear list.
          */
-        public void bindStats(NetworkStats stats) {
+        public void bindStats(NetworkStats stats, int[] restrictedAppIds) {
             mItems.clear();
 
             final AppItem systemItem = new AppItem(android.os.Process.SYSTEM_UID);
@@ -1468,6 +1478,16 @@
                 }
             }
 
+            for (int appId : restrictedAppIds) {
+                AppItem item = knownUids.get(appId);
+                if (item == null) {
+                    item = new AppItem(appId);
+                    item.total = -1;
+                    mItems.add(item);
+                }
+                item.restricted = true;
+            }
+
             if (systemItem.total > 0) {
                 mItems.add(systemItem);
             }
@@ -1513,7 +1533,13 @@
             final AppItem item = mItems.get(position);
             UidDetailTask.bindView(mProvider, item, convertView);
 
-            text1.setText(Formatter.formatFileSize(context, item.total));
+            if (item.restricted && item.total <= 0) {
+                text1.setText(R.string.data_usage_app_restricted);
+                progress.setVisibility(View.GONE);
+            } else {
+                text1.setText(Formatter.formatFileSize(context, item.total));
+                progress.setVisibility(View.VISIBLE);
+            }
 
             final int percentTotal = mLargest != 0 ? (int) (item.total * 100 / mLargest) : 0;
             progress.setProgress(percentTotal);
@@ -1580,16 +1606,13 @@
             // TODO: customize default limits based on network template
             final String currentTab = parent.mCurrentTab;
             if (TAB_3G.equals(currentTab)) {
-                message = buildDialogMessage(res, R.string.data_usage_tab_3g);
+                message = res.getString(R.string.data_usage_limit_dialog_mobile);
                 limitBytes = 5 * GB_IN_BYTES;
             } else if (TAB_4G.equals(currentTab)) {
-                message = buildDialogMessage(res, R.string.data_usage_tab_4g);
+                message = res.getString(R.string.data_usage_limit_dialog_mobile);
                 limitBytes = 5 * GB_IN_BYTES;
             } else if (TAB_MOBILE.equals(currentTab)) {
-                message = buildDialogMessage(res, R.string.data_usage_list_mobile);
-                limitBytes = 5 * GB_IN_BYTES;
-            } else if (TAB_WIFI.equals(currentTab)) {
-                message = buildDialogMessage(res, R.string.data_usage_tab_wifi);
+                message = res.getString(R.string.data_usage_limit_dialog_mobile);
                 limitBytes = 5 * GB_IN_BYTES;
             } else {
                 throw new IllegalArgumentException("unknown current tab: " + currentTab);
@@ -1605,10 +1628,6 @@
             dialog.show(parent.getFragmentManager(), TAG_CONFIRM_LIMIT);
         }
 
-        private static CharSequence buildDialogMessage(Resources res, int networkResId) {
-            return res.getString(R.string.data_usage_limit_dialog, res.getString(networkResId));
-        }
-
         @Override
         public Dialog onCreateDialog(Bundle savedInstanceState) {
             final Context context = getActivity();
diff --git a/src/com/android/settings/net/ChartDataLoader.java b/src/com/android/settings/net/ChartDataLoader.java
index 830d006..e0336b7 100644
--- a/src/com/android/settings/net/ChartDataLoader.java
+++ b/src/com/android/settings/net/ChartDataLoader.java
@@ -21,6 +21,7 @@
 import static android.net.NetworkStats.TAG_NONE;
 import static android.net.NetworkStatsHistory.FIELD_RX_BYTES;
 import static android.net.NetworkStatsHistory.FIELD_TX_BYTES;
+import static android.text.format.DateUtils.HOUR_IN_MILLIS;
 
 import android.content.AsyncTaskLoader;
 import android.content.Context;
@@ -88,9 +89,6 @@
         data.network = mSession.getHistoryForNetwork(template, fields);
 
         if (app != null) {
-            data.detailDefault = null;
-            data.detailForeground = null;
-
             // load stats for current uid and template
             final int size = app.uids.size();
             for (int i = 0; i < size; i++) {
@@ -101,9 +99,15 @@
                         template, uid, SET_FOREGROUND, data.detailForeground);
             }
 
-            data.detail = new NetworkStatsHistory(data.detailForeground.getBucketDuration());
-            data.detail.recordEntireHistory(data.detailDefault);
-            data.detail.recordEntireHistory(data.detailForeground);
+            if (size > 0) {
+                data.detail = new NetworkStatsHistory(data.detailForeground.getBucketDuration());
+                data.detail.recordEntireHistory(data.detailDefault);
+                data.detail.recordEntireHistory(data.detailForeground);
+            } else {
+                data.detailDefault = new NetworkStatsHistory(HOUR_IN_MILLIS);
+                data.detailForeground = new NetworkStatsHistory(HOUR_IN_MILLIS);
+                data.detail = new NetworkStatsHistory(HOUR_IN_MILLIS);
+            }
         }
 
         return data;
