diff --git a/res/values/strings.xml b/res/values/strings.xml
index 26961c8..c206a11 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -6708,4 +6708,10 @@
     <!-- Title of condition that do not disturb is on [CHAR LIMIT=30] -->
     <string name="condition_zen_title">Do not disturb is on (<xliff:g name="zen_mode_type" example="Alarms only">%1$s</xliff:g>)</string>
 
+    <!-- Title of condition that battery saver is on [CHAR LIMIT=30] -->
+    <string name="condition_battery_title">Battery Saver is on</string>
+
+    <!-- Summary of condition that battery saver is on [CHAR LIMIT=NONE] -->
+    <string name="condition_battery_summary">Performance is reduced. Location services and background data are turned off.</string>
+
 </resources>
diff --git a/src/com/android/settings/dashboard/conditional/BatterySaverCondition.java b/src/com/android/settings/dashboard/conditional/BatterySaverCondition.java
new file mode 100644
index 0000000..d902b04
--- /dev/null
+++ b/src/com/android/settings/dashboard/conditional/BatterySaverCondition.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.graphics.drawable.Icon;
+import android.os.PowerManager;
+import com.android.settings.R;
+import com.android.settings.Utils;
+import com.android.settings.fuelgauge.BatterySaverSettings;
+
+public class BatterySaverCondition extends Condition {
+    public BatterySaverCondition(ConditionManager manager) {
+        super(manager);
+    }
+
+    @Override
+    public void refreshState() {
+        PowerManager powerManager = mManager.getContext().getSystemService(PowerManager.class);
+        setActive(powerManager.isPowerSaveMode());
+    }
+
+    @Override
+    public Icon getIcon() {
+        return Icon.createWithResource(mManager.getContext(), R.drawable.ic_settings_battery);
+    }
+
+    @Override
+    public CharSequence getTitle() {
+        return mManager.getContext().getString(R.string.condition_battery_title);
+    }
+
+    @Override
+    public CharSequence getSummary() {
+        return mManager.getContext().getString(R.string.condition_battery_summary);
+    }
+
+    @Override
+    public CharSequence[] getActions() {
+        return new CharSequence[] { mManager.getContext().getString(R.string.condition_turn_off) };
+    }
+
+    @Override
+    public void onPrimaryClick() {
+        Utils.startWithFragment(mManager.getContext(), BatterySaverSettings.class.getName(), null,
+                null, 0, R.string.battery_saver, null);
+    }
+
+    @Override
+    public void onActionClick(int index) {
+        if (index == 0) {
+            mManager.getContext().getSystemService(PowerManager.class).setPowerSaveMode(false);
+            refreshState();
+        } 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 d710da2..87499a7 100644
--- a/src/com/android/settings/dashboard/conditional/ConditionManager.java
+++ b/src/com/android/settings/dashboard/conditional/ConditionManager.java
@@ -131,6 +131,7 @@
         addIfMissing(AirplaneModeCondition.class);
         addIfMissing(HotspotCondition.class);
         addIfMissing(DndCondition.class);
+        addIfMissing(BatterySaverCondition.class);
     }
 
     private void addIfMissing(Class<? extends Condition> clz) {
@@ -147,6 +148,8 @@
             return new HotspotCondition(this);
         } else if (DndCondition.class == clz) {
             return new DndCondition(this);
+        } else if (BatterySaverCondition.class == clz) {
+            return new BatterySaverCondition(this);
         }
         try {
             Constructor<?> constructor = clz.getConstructor(ConditionManager.class);
diff --git a/src/com/android/settings/fuelgauge/BatterySaverSettings.java b/src/com/android/settings/fuelgauge/BatterySaverSettings.java
index 63ded30..26e7d43 100644
--- a/src/com/android/settings/fuelgauge/BatterySaverSettings.java
+++ b/src/com/android/settings/fuelgauge/BatterySaverSettings.java
@@ -37,6 +37,8 @@
 import com.android.settings.SettingsActivity;
 import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.Utils;
+import com.android.settings.dashboard.conditional.BatterySaverCondition;
+import com.android.settings.dashboard.conditional.ConditionManager;
 import com.android.settings.notification.SettingPref;
 import com.android.settings.widget.SwitchBar;
 
@@ -144,6 +146,8 @@
             if (DEBUG) Log.d(TAG, "Setting mode failed, fallback to current value");
             mHandler.post(mUpdateSwitch);
         }
+        // TODO: Remove once broadcast is in place.
+        ConditionManager.get(getContext()).getCondition(BatterySaverCondition.class).refreshState();
     }
 
     private void updateSwitch() {
