diff --git a/src/com/android/settings/DataUsageSummary.java b/src/com/android/settings/DataUsageSummary.java
index 3fe0a46..38376e4 100644
--- a/src/com/android/settings/DataUsageSummary.java
+++ b/src/com/android/settings/DataUsageSummary.java
@@ -99,6 +99,8 @@
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.telephony.PhoneConstants;
 import com.android.settings.dashboard.SummaryLoader;
+import com.android.settings.dashboard.conditional.BackgroundDataCondition;
+import com.android.settings.dashboard.conditional.ConditionManager;
 import com.android.settings.drawable.InsetBoundsDrawable;
 import com.android.settings.net.DataUsageMeteredSettings;
 import com.android.settings.search.BaseSearchIndexProvider;
@@ -1100,6 +1102,8 @@
     public void setRestrictBackground(boolean restrictBackground) {
         mPolicyManager.setRestrictBackground(restrictBackground);
         updateMenuTitles();
+        ConditionManager.get(getContext()).getCondition(BackgroundDataCondition.class)
+                .refreshState();
     }
 
     private boolean getAppRestrictBackground() {
diff --git a/src/com/android/settings/dashboard/conditional/BackgroundDataCondition.java b/src/com/android/settings/dashboard/conditional/BackgroundDataCondition.java
new file mode 100644
index 0000000..d1bcb12
--- /dev/null
+++ b/src/com/android/settings/dashboard/conditional/BackgroundDataCondition.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2015 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.dashboard.conditional;
+
+import android.content.Intent;
+import android.graphics.drawable.Icon;
+import android.net.NetworkPolicyManager;
+import com.android.settings.R;
+import com.android.settings.Settings;
+
+public class BackgroundDataCondition extends Condition {
+
+    public BackgroundDataCondition(ConditionManager manager) {
+        super(manager);
+    }
+
+    @Override
+    public void refreshState() {
+        setActive(NetworkPolicyManager.from(mManager.getContext()).getRestrictBackground());
+    }
+
+    @Override
+    public Icon getIcon() {
+        return Icon.createWithResource(mManager.getContext(), R.drawable.ic_cellular_off);
+    }
+
+    @Override
+    public CharSequence getTitle() {
+        return mManager.getContext().getString(R.string.condition_bg_data_title);
+    }
+
+    @Override
+    public CharSequence getSummary() {
+        return mManager.getContext().getString(R.string.condition_bg_data_summary);
+    }
+
+    @Override
+    public CharSequence[] getActions() {
+        return new CharSequence[] { mManager.getContext().getString(R.string.condition_turn_off) };
+    }
+
+    @Override
+    public void onPrimaryClick() {
+        mManager.getContext().startActivity(new Intent(mManager.getContext(),
+                Settings.DataUsageSummaryActivity.class));
+    }
+
+    @Override
+    public void onActionClick(int index) {
+        if (index == 0) {
+            NetworkPolicyManager.from(mManager.getContext()).setRestrictBackground(false);
+            setActive(false);
+        } else {
+            throw new IllegalArgumentException("Unexpected index " + index);
+        }
+    }
+}
diff --git a/src/com/android/settings/dashboard/conditional/ConditionManager.java b/src/com/android/settings/dashboard/conditional/ConditionManager.java
index 4e2710c..a245222 100644
--- a/src/com/android/settings/dashboard/conditional/ConditionManager.java
+++ b/src/com/android/settings/dashboard/conditional/ConditionManager.java
@@ -131,6 +131,7 @@
         addIfMissing(DndCondition.class);
         addIfMissing(BatterySaverCondition.class);
         addIfMissing(CellularDataCondition.class);
+        addIfMissing(BackgroundDataCondition.class);
     }
 
     private void addIfMissing(Class<? extends Condition> clz) {
@@ -151,6 +152,8 @@
             return new BatterySaverCondition(this);
         } else if (CellularDataCondition.class == clz) {
             return new CellularDataCondition(this);
+        } else if (BackgroundDataCondition.class == clz) {
+            return new BackgroundDataCondition(this);
         }
         throw new RuntimeException("Unexpected Condition " + clz);
     }
