diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java
index fe7a217..efb4f79 100644
--- a/src/com/android/settings/DevelopmentSettings.java
+++ b/src/com/android/settings/DevelopmentSettings.java
@@ -122,7 +122,6 @@
     private static final String USE_NUPLAYER_KEY = "use_nuplayer";
     private static final String USE_NUPLAYER_PROPERTY = "persist.sys.media.use-nuplayer";
     private static final String SHOW_CPU_USAGE_KEY = "show_cpu_usage";
-    private static final String LOW_POWER_MODE_KEY = "low_power_mode";
     private static final String FORCE_HARDWARE_UI_KEY = "force_hw_ui";
     private static final String FORCE_MSAA_KEY = "force_msaa";
     private static final String TRACK_FRAME_TIME_KEY = "track_frame_time";
@@ -196,7 +195,6 @@
     private CheckBoxPreference mShowScreenUpdates;
     private CheckBoxPreference mDisableOverlays;
     private CheckBoxPreference mShowCpuUsage;
-    private CheckBoxPreference mLowPowerMode;
     private CheckBoxPreference mForceHardwareUi;
     private CheckBoxPreference mForceMsaa;
     private CheckBoxPreference mShowHwScreenUpdates;
@@ -308,7 +306,6 @@
         mShowScreenUpdates = findAndInitCheckboxPref(SHOW_SCREEN_UPDATES_KEY);
         mDisableOverlays = findAndInitCheckboxPref(DISABLE_OVERLAYS_KEY);
         mShowCpuUsage = findAndInitCheckboxPref(SHOW_CPU_USAGE_KEY);
-        mLowPowerMode = findAndInitCheckboxPref(LOW_POWER_MODE_KEY);
         mForceHardwareUi = findAndInitCheckboxPref(FORCE_HARDWARE_UI_KEY);
         mForceMsaa = findAndInitCheckboxPref(FORCE_MSAA_KEY);
         mTrackFrameTime = addListPreference(TRACK_FRAME_TIME_KEY);
@@ -504,7 +501,6 @@
         updateShowTouchesOptions();
         updateFlingerOptions();
         updateCpuUsageOptions();
-        updateLowPowerModeOptions();
         updateHardwareUiOptions();
         updateMsaaOptions();
         updateTrackFrameTimeOptions();
@@ -1040,22 +1036,11 @@
         mWifiManager.enableVerboseLogging(mWifiVerboseLogging.isChecked() ? 1 : 0);
     }
 
-    private void updateLowPowerModeOptions() {
-        updateCheckBox(mLowPowerMode, Settings.Global.getInt(getActivity().getContentResolver(),
-                Settings.Global.LOW_POWER_MODE, 0) != 0);
-    }
-
     private void updateCpuUsageOptions() {
         updateCheckBox(mShowCpuUsage, Settings.Global.getInt(getActivity().getContentResolver(),
                 Settings.Global.SHOW_PROCESSES, 0) != 0);
     }
 
-    private void writeLowPowerModeOptions() {
-        boolean value = mLowPowerMode.isChecked();
-        Settings.Global.putInt(getActivity().getContentResolver(),
-                Settings.Global.LOW_POWER_MODE, value ? 1 : 0);
-    }
-
     private void writeCpuUsageOptions() {
         boolean value = mShowCpuUsage.isChecked();
         Settings.Global.putInt(getActivity().getContentResolver(),
@@ -1332,8 +1317,6 @@
             writeShowUpdatesOption();
         } else if (preference == mDisableOverlays) {
             writeDisableOverlaysOption();
-        } else if (preference == mLowPowerMode) {
-            writeLowPowerModeOptions();
         } else if (preference == mShowCpuUsage) {
             writeCpuUsageOptions();
         } else if (preference == mImmediatelyDestroyActivities) {
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index 22ae719..7ef33ae 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -66,6 +66,7 @@
     public static class RunningServicesActivity extends SettingsActivity { /* empty */ }
     public static class ManageAccountsSettingsActivity extends SettingsActivity { /* empty */ }
     public static class PowerUsageSummaryActivity extends SettingsActivity { /* empty */ }
+    public static class BatterySaverSettingsActivity extends SettingsActivity { /* empty */ }
     public static class AccountSyncSettingsActivity extends SettingsActivity { /* empty */ }
     public static class AccountSyncSettingsInAddAccountActivity extends SettingsActivity { /* empty */ }
     public static class CryptKeeperSettingsActivity extends SettingsActivity { /* empty */ }
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index 12dee4a..5ca1f8b 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -63,8 +63,8 @@
 import android.view.View.OnClickListener;
 import android.view.ViewGroup;
 import android.widget.Button;
-
 import android.widget.SearchView;
+
 import com.android.internal.util.ArrayUtils;
 import com.android.internal.util.XmlUtils;
 import com.android.settings.accessibility.AccessibilitySettings;
@@ -83,6 +83,7 @@
 import com.android.settings.dashboard.SearchResultsSummary;
 import com.android.settings.deviceinfo.Memory;
 import com.android.settings.deviceinfo.UsbSettings;
+import com.android.settings.fuelgauge.BatterySaverSettings;
 import com.android.settings.fuelgauge.PowerUsageSummary;
 import com.android.settings.search.DynamicIndexableContentMonitor;
 import com.android.settings.search.Index;
@@ -108,6 +109,7 @@
 import com.android.settings.wifi.AdvancedWifiSettings;
 import com.android.settings.wifi.WifiSettings;
 import com.android.settings.wifi.p2p.WifiP2pSettings;
+
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
 
@@ -276,7 +278,8 @@
             NotificationSettings.class.getName(),
             ChooseLockPassword.ChooseLockPasswordFragment.class.getName(),
             ChooseLockPattern.ChooseLockPatternFragment.class.getName(),
-            InstalledAppDetails.class.getName()
+            InstalledAppDetails.class.getName(),
+            BatterySaverSettings.class.getName(),
     };
 
     private SharedPreferences mDevelopmentPreferences;
diff --git a/src/com/android/settings/fuelgauge/BatterySaverSettings.java b/src/com/android/settings/fuelgauge/BatterySaverSettings.java
new file mode 100644
index 0000000..1a7e892
--- /dev/null
+++ b/src/com/android/settings/fuelgauge/BatterySaverSettings.java
@@ -0,0 +1,171 @@
+/*
+ * Copyright (C) 2014 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.fuelgauge;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.res.Resources;
+import android.database.ContentObserver;
+import android.net.Uri;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.provider.Settings.Global;
+import android.util.Log;
+import android.widget.Switch;
+
+import com.android.settings.R;
+import com.android.settings.SettingsActivity;
+import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.notification.SettingPref;
+import com.android.settings.widget.SwitchBar;
+
+public class BatterySaverSettings extends SettingsPreferenceFragment
+        implements SwitchBar.OnSwitchChangeListener {
+    private static final String TAG = "BatterySaverSettings";
+    private static final String KEY_TURN_ON_AUTOMATICALLY = "turn_on_automatically";
+    private static final long WAIT_FOR_SWITCH_ANIM = 500;
+
+    private final H mHandler = new H();
+    private final SettingsObserver mSettingsObserver = new SettingsObserver(mHandler);
+
+    private Context mContext;
+    private SwitchBar mSwitchBar;
+    private boolean mSwitchBarListenerAdded;
+    private SettingPref mTriggerPref;
+
+    @Override
+    public void onActivityCreated(Bundle savedInstanceState) {
+        super.onActivityCreated(savedInstanceState);
+
+        addPreferencesFromResource(R.xml.battery_saver_settings);
+
+        mContext = getActivity();
+        mSwitchBar = ((SettingsActivity) mContext).getSwitchBar();
+        updateSwitchBar();
+        mTriggerPref = new SettingPref(SettingPref.TYPE_GLOBAL, KEY_TURN_ON_AUTOMATICALLY,
+                Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0,
+                getResources().getIntArray(R.array.battery_saver_trigger_values)) {
+            @Override
+            protected String getCaption(Resources res, int value) {
+                if (value > 0 && value < 100) {
+                    return res.getString(R.string.battery_saver_turn_on_automatically_pct, value);
+                }
+                return res.getString(R.string.battery_saver_turn_on_automatically_never);
+            }
+        };
+        mTriggerPref.init(this);
+    }
+
+    private void updateSwitchBar() {
+        final boolean mode = Global.getInt(getContentResolver(), Global.LOW_POWER_MODE, 0) != 0;
+        if (mSwitchBarListenerAdded) {
+            mSwitchBar.removeOnSwitchChangeListener(this);
+        }
+        mSwitchBar.getSwitch().setChecked(mode);
+        if (mSwitchBarListenerAdded) {
+            mSwitchBar.addOnSwitchChangeListener(this);
+        }
+    }
+
+    private void updateTriggerLevel() {
+        mTriggerPref.update(mContext);
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+        updateSwitchBar();
+        mSettingsObserver.setListening(true);
+        mSwitchBar.show();
+        mSwitchBar.addOnSwitchChangeListener(this);
+        mSwitchBarListenerAdded = true;
+    }
+
+    @Override
+    public void onPause() {
+        super.onPause();
+        mSettingsObserver.setListening(false);
+        if (mSwitchBarListenerAdded) {
+            mSwitchBar.removeOnSwitchChangeListener(this);
+        }
+        mSwitchBar.hide();
+    }
+
+    @Override
+    public void onSwitchChanged(Switch switchView, boolean isChecked) {
+        mHandler.postSetMode(isChecked);
+    }
+
+    private void handleSetMode(final boolean mode) {
+        AsyncTask.execute(new Runnable() {
+            @Override
+            public void run() {
+                Log.d(TAG, "LOW_POWER_MODE from settings: " + mode);
+                Global.putInt(getContentResolver(), Global.LOW_POWER_MODE, mode ? 1 : 0);
+            }
+        });
+    }
+
+    private final class H extends Handler {
+        private static final int SET_MODE = 1;
+
+        public void postSetMode(boolean mode) {
+            removeMessages(SET_MODE);
+            final Message m = obtainMessage(SET_MODE, mode ? 1 : 0, 0);
+            sendMessageDelayed(m, mode ? WAIT_FOR_SWITCH_ANIM : 0);
+        }
+
+        @Override
+        public void handleMessage(Message msg) {
+            if (msg.what == SET_MODE) {
+                handleSetMode(msg.arg1 != 0);
+            }
+        }
+    }
+
+    private final class SettingsObserver extends ContentObserver {
+        private final Uri LOW_POWER_MODE_URI = Global.getUriFor(Global.LOW_POWER_MODE);
+        private final Uri LOW_POWER_MODE_TRIGGER_LEVEL_URI
+                = Global.getUriFor(Global.LOW_POWER_MODE_TRIGGER_LEVEL);
+
+        public SettingsObserver(Handler handler) {
+            super(handler);
+        }
+
+        @Override
+        public void onChange(boolean selfChange, Uri uri) {
+            if (LOW_POWER_MODE_URI.equals(uri)) {
+                updateSwitchBar();
+            }
+            if (LOW_POWER_MODE_TRIGGER_LEVEL_URI.equals(uri)) {
+                updateTriggerLevel();
+            }
+        }
+
+        public void setListening(boolean listening) {
+            final ContentResolver cr = getContentResolver();
+            if (listening) {
+                cr.registerContentObserver(LOW_POWER_MODE_URI, false, this);
+                cr.registerContentObserver(LOW_POWER_MODE_TRIGGER_LEVEL_URI, false, this);
+            } else {
+                cr.unregisterContentObserver(this);
+            }
+        }
+    }
+}
diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
index e4e2b0a..1159a2c 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
@@ -60,7 +60,8 @@
 
     private static final int MENU_STATS_TYPE = Menu.FIRST;
     private static final int MENU_STATS_REFRESH = Menu.FIRST + 1;
-    private static final int MENU_HELP = Menu.FIRST + 2;
+    private static final int MENU_BATTERY_SAVER = Menu.FIRST + 2;
+    private static final int MENU_HELP = Menu.FIRST + 3;
 
     private UserManager mUm;
 
@@ -180,6 +181,9 @@
         refresh.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM |
                 MenuItem.SHOW_AS_ACTION_WITH_TEXT);
 
+        MenuItem batterySaver = menu.add(0, MENU_BATTERY_SAVER, 0, R.string.battery_saver);
+        batterySaver.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
+
         String helpUrl;
         if (!TextUtils.isEmpty(helpUrl = getResources().getString(R.string.help_url_battery))) {
             final MenuItem help = menu.add(0, MENU_HELP, 0, R.string.help_label);
@@ -203,6 +207,11 @@
                 refreshStats();
                 mHandler.removeMessages(MSG_REFRESH_STATS);
                 return true;
+            case MENU_BATTERY_SAVER:
+                final SettingsActivity sa = (SettingsActivity) getActivity();
+                sa.startPreferencePanel(BatterySaverSettings.class.getName(), null,
+                        R.string.battery_saver, null, null, 0);
+                return true;
             default:
                 return false;
         }
diff --git a/src/com/android/settings/notification/DropDownPreference.java b/src/com/android/settings/notification/DropDownPreference.java
index 36ecf95..45c83a5 100644
--- a/src/com/android/settings/notification/DropDownPreference.java
+++ b/src/com/android/settings/notification/DropDownPreference.java
@@ -97,8 +97,12 @@
         }
     }
 
-    public void addItem(int resId, Object value) {
-        mAdapter.add(mContext.getResources().getString(resId));
+    public void addItem(int captionResid, Object value) {
+        addItem(mContext.getResources().getString(captionResid), value);
+    }
+
+    public void addItem(String caption, Object value) {
+        mAdapter.add(caption);
         mValues.add(value);
     }
 
diff --git a/src/com/android/settings/notification/OtherSoundSettings.java b/src/com/android/settings/notification/OtherSoundSettings.java
index de5c917..8528ec7 100644
--- a/src/com/android/settings/notification/OtherSoundSettings.java
+++ b/src/com/android/settings/notification/OtherSoundSettings.java
@@ -21,6 +21,7 @@
 
 import android.content.ContentResolver;
 import android.content.Context;
+import android.content.res.Resources;
 import android.database.ContentObserver;
 import android.media.AudioManager;
 import android.net.Uri;
@@ -114,10 +115,15 @@
         }
 
         @Override
-        protected int getResId(Context context, int value) {
-            if (value == DOCK_AUDIO_MEDIA_DISABLED) return R.string.dock_audio_media_disabled;
-            if (value == DOCK_AUDIO_MEDIA_ENABLED) return R.string.dock_audio_media_enabled;
-            throw new IllegalArgumentException();
+        protected String getCaption(Resources res, int value) {
+            switch(value) {
+                case DOCK_AUDIO_MEDIA_DISABLED:
+                    return res.getString(R.string.dock_audio_media_disabled);
+                case DOCK_AUDIO_MEDIA_ENABLED:
+                    return res.getString(R.string.dock_audio_media_enabled);
+                default:
+                    throw new IllegalArgumentException();
+            }
         }
     };
 
@@ -131,11 +137,17 @@
         }
 
         @Override
-        protected int getResId(Context context, int value) {
-            if (value == EMERGENCY_TONE_SILENT) return R.string.emergency_tone_silent;
-            if (value == EMERGENCY_TONE_ALERT) return R.string.emergency_tone_alert;
-            if (value == EMERGENCY_TONE_VIBRATE) return R.string.emergency_tone_vibrate;
-            throw new IllegalArgumentException();
+        protected String getCaption(Resources res, int value) {
+            switch(value) {
+                case EMERGENCY_TONE_SILENT:
+                    return res.getString(R.string.emergency_tone_silent);
+                case EMERGENCY_TONE_ALERT:
+                    return res.getString(R.string.emergency_tone_alert);
+                case EMERGENCY_TONE_VIBRATE:
+                    return res.getString(R.string.emergency_tone_vibrate);
+                default:
+                    throw new IllegalArgumentException();
+            }
         }
     };
 
diff --git a/src/com/android/settings/notification/SettingPref.java b/src/com/android/settings/notification/SettingPref.java
index 1e50e2b..7fd89d8 100644
--- a/src/com/android/settings/notification/SettingPref.java
+++ b/src/com/android/settings/notification/SettingPref.java
@@ -18,6 +18,7 @@
 
 import android.content.ContentResolver;
 import android.content.Context;
+import android.content.res.Resources;
 import android.net.Uri;
 import android.preference.Preference;
 import android.preference.TwoStatePreference;
@@ -55,7 +56,7 @@
         return true;
     }
 
-    protected int getResId(Context context, int value) {
+    protected String getCaption(Resources res, int value) {
         throw new UnsupportedOperationException();
     }
 
@@ -71,7 +72,7 @@
         } else if (p instanceof DropDownPreference) {
             mDropDown = (DropDownPreference) p;
             for (int value : mValues) {
-                mDropDown.addItem(getResId(context, value), value);
+                mDropDown.addItem(getCaption(context.getResources(), value), value);
             }
         }
         update(context);
diff --git a/src/com/android/settings/search/Ranking.java b/src/com/android/settings/search/Ranking.java
index 074a8d7..80ea83a 100644
--- a/src/com/android/settings/search/Ranking.java
+++ b/src/com/android/settings/search/Ranking.java
@@ -30,6 +30,7 @@
 import com.android.settings.accessibility.AccessibilitySettings;
 import com.android.settings.bluetooth.BluetoothSettings;
 import com.android.settings.deviceinfo.Memory;
+import com.android.settings.fuelgauge.BatterySaverSettings;
 import com.android.settings.fuelgauge.PowerUsageSummary;
 import com.android.settings.inputmethod.InputMethodAndLanguageSettings;
 import com.android.settings.location.LocationSettings;
@@ -103,6 +104,7 @@
         sRankMap.put(Memory.class.getName(), RANK_MEMORY);
 
         sRankMap.put(PowerUsageSummary.class.getName(), RANK_POWER_USAGE);
+        sRankMap.put(BatterySaverSettings.class.getName(), RANK_POWER_USAGE);
 
         sRankMap.put(UserSettings.class.getName(), RANK_USERS);
 
diff --git a/src/com/android/settings/search/SearchIndexableResources.java b/src/com/android/settings/search/SearchIndexableResources.java
index 7c96a4a..086ebfc 100644
--- a/src/com/android/settings/search/SearchIndexableResources.java
+++ b/src/com/android/settings/search/SearchIndexableResources.java
@@ -33,6 +33,7 @@
 import com.android.settings.accessibility.AccessibilitySettings;
 import com.android.settings.bluetooth.BluetoothSettings;
 import com.android.settings.deviceinfo.Memory;
+import com.android.settings.fuelgauge.BatterySaverSettings;
 import com.android.settings.fuelgauge.PowerUsageSummary;
 import com.android.settings.inputmethod.InputMethodAndLanguageSettings;
 import com.android.settings.location.LocationSettings;
@@ -154,6 +155,13 @@
                         PowerUsageSummary.class.getName(),
                         R.drawable.ic_settings_battery));
 
+        sResMap.put(BatterySaverSettings.class.getName(),
+                new SearchIndexableResource(
+                        Ranking.getRankForClassName(BatterySaverSettings.class.getName()),
+                        R.xml.battery_saver_settings,
+                        BatterySaverSettings.class.getName(),
+                        R.drawable.ic_settings_battery));
+
         sResMap.put(UserSettings.class.getName(),
                 new SearchIndexableResource(
                         Ranking.getRankForClassName(UserSettings.class.getName()),
