diff --git a/app/src/main/java/org/omnirom/control/BatteryLightSettingsFragment.java b/app/src/main/java/org/omnirom/control/BatteryLightSettingsFragment.java
index 8d19dff..cbe4681 100644
--- a/app/src/main/java/org/omnirom/control/BatteryLightSettingsFragment.java
+++ b/app/src/main/java/org/omnirom/control/BatteryLightSettingsFragment.java
@@ -93,20 +93,8 @@
         });
 
         mDndPref = (SystemSettingSwitchPreference) findPreference(BATTERY_DND_PREF);
-        mDndPref.setChecked(Settings.System.getInt(resolver,
-                        Settings.System.OMNI_BATTERY_LIGHT_ALLOW_ON_DND, 1) != 0);
-        mDndPref.setOnPreferenceChangeListener(this);
-
         mEnabledPref = (SystemSettingSwitchPreference) findPreference(BATTERY_LIGHT_PREF);
-        mEnabledPref.setChecked(Settings.System.getInt(resolver,
-                        Settings.System.OMNI_BATTERY_LIGHT_ENABLED, 1) != 0);
-        mEnabledPref.setOnPreferenceChangeListener(this);
-
         mPulsePref = (SystemSettingSwitchPreference) findPreference(BATTERY_PULSE_PREF);
-        mPulsePref.setChecked(Settings.System.getInt(resolver,
-                        Settings.System.OMNI_BATTERY_LIGHT_LOW_BLINKING, 1) != 0);
-        mPulsePref.setOnPreferenceChangeListener(this);
-
         mOnlyFullPref = (SystemSettingSwitchPreference) findPreference(BATTERY_LIGHT_ONLY_FULL_PREF);
         mOnlyFullPref.setOnPreferenceChangeListener(this);
 
@@ -153,22 +141,7 @@
 
     @Override
     public boolean onPreferenceChange(Preference preference, Object objValue) {
-        if (preference == mDndPref) {
-            boolean value = (Boolean) objValue;
-            Settings.System.putInt(getContext().getContentResolver(),
-                    Settings.System.OMNI_BATTERY_LIGHT_ALLOW_ON_DND,
-                    value ? 1 : 0);
-        } else if (preference == mEnabledPref) {
-            boolean value = (Boolean) objValue;
-            Settings.System.putInt(getContext().getContentResolver(),
-                    Settings.System.OMNI_BATTERY_LIGHT_ENABLED,
-                    value ? 1 : 0);
-        } else if (preference == mPulsePref) {
-            boolean value = (Boolean) objValue;
-            Settings.System.putInt(getContext().getContentResolver(),
-                    Settings.System.OMNI_BATTERY_LIGHT_LOW_BLINKING,
-                    value ? 1 : 0);
-        } else if (preference == mOnlyFullPref) {
+        if (preference == mOnlyFullPref) {
             boolean value = (Boolean) objValue;
             // If enabled, disable all but really full color preference.
             updateEnablement(value);
@@ -200,28 +173,18 @@
 
     protected void resetToDefaults() {
         if (mDndPref != null) {
-            Settings.System.putInt(getContext().getContentResolver(),
-                    Settings.System.OMNI_BATTERY_LIGHT_ALLOW_ON_DND, 0);
             mDndPref.setChecked(false);
         }
         if (mEnabledPref != null) {
-            Settings.System.putInt(getContext().getContentResolver(),
-                    Settings.System.OMNI_BATTERY_LIGHT_ENABLED, 1);
             mEnabledPref.setChecked(true);
         }
         if (mPulsePref != null) {
-            Settings.System.putInt(getContext().getContentResolver(),
-                    Settings.System.OMNI_BATTERY_LIGHT_LOW_BLINKING, 0);
             mPulsePref.setChecked(false);
         }
         if (mOnlyFullPref != null) {
-            Settings.System.putInt(getContext().getContentResolver(),
-                    Settings.System.OMNI_BATTERY_LIGHT_ONLY_FULLY_CHARGED, 0);
             mOnlyFullPref.setChecked(false);
         }
         if (mFastBatteryLightEnabledPref != null) {
-            Settings.System.putInt(getContext().getContentResolver(),
-                    Settings.System.OMNI_FAST_CHARGING_LED_ENABLED, 0);
             mFastBatteryLightEnabledPref.setChecked(false);
         }
         resetColors();
