diff --git a/res/values/custom_strings.xml b/res/values/custom_strings.xml
index 3e884aa..d75e773 100644
--- a/res/values/custom_strings.xml
+++ b/res/values/custom_strings.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!--  Copyright (C) 2013 The OmniROM Project
+<!--  Copyright (C) 2017 The OmniROM Project
 
   Parts Copyright (C) 2012-2013 The CyanogenMod Project
 
@@ -384,6 +384,10 @@
     <string name="pulse_speed_slow">Slow</string>
     <string name="pulse_speed_very_slow">Very slow</string>
     <!-- Lights settings screen, notification light settings -->
+    <string name="omni_battery_light_settings">Battery charging</string>
+    <string name="omni_notification_light_settings">Applications LED notifications</string>
+    <string name="omni_leds">LED Lights</string>
+    <string name="omni_lights_title">Notification LED</string>
     <string name="notification_light_title">Notification light</string>
     <string name="notificationlight_title">Notification LED settings</string>
     <string name="notification_light_general_title">General</string>
@@ -418,6 +422,9 @@
     <string name="lockscreen_hide_media_title">Disable media wallpaper</string>
     <string name="lockscreen_hide_media_summary">Do not show media metadata as lock screen wallpaper</string>
 
+    <string name="omni_notification_light_settings_summary">Customization of notification led lights for applications</string>
+    <string name="omni_battery_light_settings_summary">Customization of notification led lights for battery</string>
+
     <string name="night_mode_title">Theme</string>
     <string name="night_mode_summary">%s</string>
     <string name="night_mode_no">Light</string>
diff --git a/res/xml/lights_settings.xml b/res/xml/lights_settings.xml
new file mode 100644
index 0000000..b302404
--- /dev/null
+++ b/res/xml/lights_settings.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--  Copyright (C) 2017 The OmniROM Project
+  This program is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 2 of the License, or
+  (at your option) any later version.
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+  You should have received a copy of the GNU General Public License
+  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ -->
+
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
+    android:key="ligths_settings"
+    android:title="@string/omni_lights_title">
+
+       <PreferenceCategory
+        android:key="leds"
+        android:title="@string/omni_leds" >
+
+        <PreferenceScreen
+                android:key="notification_light"
+                android:title="@string/omni_notification_light_settings"
+                android:summary="@string/omni_notification_light_settings_summary"
+                android:fragment="org.omnirom.omnigears.batterylight.NotificationLightSettings" />
+
+        <PreferenceScreen
+                android:key="charging_light"
+                android:title="@string/omni_battery_light_settings"
+                android:summary="@string/omni_battery_light_settings_summary"
+                android:fragment="org.omnirom.omnigears.batterylight.BatteryLightSettings" />
+       </PreferenceCategory>
+</PreferenceScreen>
diff --git a/src/org/omnirom/omnigears/lightssettings/LightsSettings.java b/src/org/omnirom/omnigears/lightssettings/LightsSettings.java
new file mode 100644
index 0000000..3cc14d1
--- /dev/null
+++ b/src/org/omnirom/omnigears/lightssettings/LightsSettings.java
@@ -0,0 +1,75 @@
+/*
+ *  Copyright (C) 2017 The OmniROM Project
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+*/
+
+package org.omnirom.omnigears.lightssettings;
+
+import android.os.Bundle;
+import android.support.v7.preference.Preference;
+import android.preference.PreferenceActivity;
+import android.support.v7.preference.PreferenceCategory;
+import android.preference.PreferenceScreen;
+
+import com.android.internal.logging.MetricsProto.MetricsEvent;
+
+import com.android.settings.R;
+import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.Utils;
+
+public class LightsSettings extends SettingsPreferenceFragment implements
+        Preference.OnPreferenceChangeListener {
+    private static final String TAG = "ligths_settings";
+
+     private boolean mChargingLedsEnabled;
+     private boolean mNotificationLedsEnabled;
+
+     private PreferenceCategory mChargingLedsCategory;
+     private Preference mChargingLeds;
+     private Preference mNotificationLeds;
+
+    @Override
+    protected int getMetricsCategory() {
+        return MetricsEvent.OMNI_SETTINGS;
+    }
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        addPreferencesFromResource(R.xml.lights_settings);
+
+         mChargingLedsEnabled = (getResources().getBoolean(
+                         com.android.internal.R.bool.config_intrusiveBatteryLed));
+         mNotificationLedsEnabled = (getResources().getBoolean(
+                         com.android.internal.R.bool.config_intrusiveNotificationLed));
+         mChargingLedsCategory = (PreferenceCategory) findPreference("leds");
+         mChargingLeds = (Preference) findPreference("charging_light");
+         mNotificationLeds = (Preference) findPreference("notification_light");
+         if (mChargingLeds != null && mNotificationLeds != null) {
+             if (!mChargingLedsEnabled) {
+                 mChargingLedsCategory.removePreference(mChargingLeds);
+             } else if (!mNotificationLedsEnabled) {
+                 mChargingLedsCategory.removePreference(mNotificationLeds);
+            } else if (!mChargingLedsEnabled && !mNotificationLedsEnabled) {
+                 getPreferenceScreen().removePreference(mChargingLedsCategory);
+             }
+         }
+    }
+
+    public boolean onPreferenceChange(Preference preference, Object objValue) {
+        return true;
+    }
+}
