diff --git a/res/values/custom_arrays.xml b/res/values/custom_arrays.xml
index e6e40dc..d5906e7 100644
--- a/res/values/custom_arrays.xml
+++ b/res/values/custom_arrays.xml
@@ -278,6 +278,25 @@
         <item>ic_lockscreen_twitter_normal</item>
     </string-array>
 
+    <!-- tinted statusbar -->
+    <string-array name="tinted_statusbar_entries" translatable="false">
+        <item>@string/tinted_statusbar_off</item>
+        <item>@string/tinted_statusbar_actionbar</item>
+        <item>@string/tinted_statusbar_system</item>
+    </string-array>
+
+    <string-array name="tinted_statusbar_values" translatable="false">
+        <item>0</item>
+        <item>1</item>
+        <item>2</item>
+    </string-array>
+
+    <string-array name="tinted_statusbar_option_entries" translatable="false">
+        <item>@string/tinted_statusbar_statusbar</item>
+        <item>@string/tinted_statusbar_navbar</item>
+        <item>@string/tinted_statusbar_all</item>
+    </string-array>
+
     <!-- Quick pulldown -->
     <string-array name="quick_pulldown_entries" translatable="false">
         <item>@string/quick_pulldown_off</item>
diff --git a/res/values/custom_strings.xml b/res/values/custom_strings.xml
index dd0e3c8..8deadaa 100644
--- a/res/values/custom_strings.xml
+++ b/res/values/custom_strings.xml
@@ -417,6 +417,21 @@
     <string name="icon_picker_sms">Messaging</string>
     <string name="icon_picker_twitter">Twitter</string>
 
+    <!-- Tinted statusbar -->
+    <string name="tinted_statusbar_title">Colors</string>
+    <string name="title_tinted_statusbar">Dynamic color change</string>
+    <string name="title_tinted_statusbar_option">Apply color to</string>
+    <string name="tinted_statusbar_off">Disabled</string>
+    <string name="tinted_statusbar_actionbar">Action bar color</string>
+    <string name="tinted_statusbar_system">Screen color</string>
+    <string name="tinted_statusbar_statusbar">Status bar</string>
+    <string name="tinted_statusbar_navbar">Navigation bar</string>
+    <string name="tinted_statusbar_all">Both</string>
+    <string name="tinted_statusbar_filter_title">Reverse color</string>
+    <string name="tinted_statusbar_filter_summary">Enable using reverse color</string>
+    <string name="tinted_statusbar_transparent_title">Status bar opacity</string>
+    <string name="tinted_navbar_transparent_title">Navigation bar opacity</string>
+
     <string name="quick_settings_category_title">Quick settings</string>
 
     <!-- QuickSettings: Dynamic Row -->
diff --git a/res/xml/bars_settings.xml b/res/xml/bars_settings.xml
index 2dba831..80c116b 100644
--- a/res/xml/bars_settings.xml
+++ b/res/xml/bars_settings.xml
@@ -20,6 +20,54 @@
         android:title="@string/interface_bars_title"
         xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
 
+    <!-- Tinted statusbar -->
+    <PreferenceCategory
+            android:key="category_tinted_statusbar"
+            android:title="@string/tinted_statusbar_title">
+
+        <ListPreference
+                android:key="tinted_statusbar"
+                android:title="@string/title_tinted_statusbar"
+                android:entries="@array/tinted_statusbar_entries"
+                android:entryValues="@array/tinted_statusbar_values"
+                android:defaultValue="0"
+                android:persistent="false" />
+
+        <ListPreference
+                android:key="tinted_statusbar_option"
+                android:title="@string/title_tinted_statusbar_option"
+                android:entries="@array/tinted_statusbar_option_entries"
+                android:entryValues="@array/tinted_statusbar_values"
+                android:defaultValue="0"
+                android:persistent="false" />
+
+        <org.omnirom.omnigears.preference.SystemCheckBoxPreference
+            android:key="status_bar_tinted_filter"
+            android:title="@string/tinted_statusbar_filter_title"
+            android:summary="@string/tinted_statusbar_filter_summary" />
+
+        <org.omnirom.omnigears.chameleonos.SeekBarPreference
+            android:key="tinted_statusbar_transparent"
+            android:persistent="false"
+            android:title="@string/tinted_statusbar_transparent_title"
+            android:max="100"
+            settings:min="0"
+            settings:interval="10"
+            settings:unitsLeft=""
+            settings:unitsRight="%" />
+
+        <org.omnirom.omnigears.chameleonos.SeekBarPreference
+            android:key="tinted_navbar_transparent"
+            android:persistent="false"
+            android:title="@string/tinted_navbar_transparent_title"
+            android:max="100"
+            settings:min="0"
+            settings:interval="10"
+            settings:unitsLeft=""
+            settings:unitsRight="%" />
+
+    </PreferenceCategory>
+
     <!-- Status bar -->
     <PreferenceCategory
             android:key="category_status_bar"
diff --git a/src/org/omnirom/omnigears/interfacesettings/BarsSettings.java b/src/org/omnirom/omnigears/interfacesettings/BarsSettings.java
index c1ffc63..ba7effd 100644
--- a/src/org/omnirom/omnigears/interfacesettings/BarsSettings.java
+++ b/src/org/omnirom/omnigears/interfacesettings/BarsSettings.java
@@ -34,9 +34,12 @@
 import android.preference.Preference;
 import android.preference.PreferenceGroup;
 import android.preference.PreferenceScreen;
+import android.preference.PreferenceCategory;
 import android.provider.Settings;
 import android.provider.Settings.SettingNotFoundException;
 
+import org.omnirom.omnigears.preference.SystemCheckBoxPreference;
+import org.omnirom.omnigears.chameleonos.SeekBarPreference;
 import com.android.internal.util.omni.DeviceUtils;
 import com.android.settings.Utils;
 
@@ -55,11 +58,19 @@
     private static final String NETWORK_TRAFFIC_PERIOD = "network_traffic_period";
     private static final String STATUS_BAR_NETWORK_ACTIVITY = "status_bar_network_activity";
     private static final String SOFT_BACK_KILL_APP = "soft_back_kill_app";
+    private static final String TINTED_STATUSBAR = "tinted_statusbar";
+    private static final String TINTED_STATUSBAR_OPTION = "tinted_statusbar_option";
+    private static final String TINTED_STATUSBAR_FILTER = "status_bar_tinted_filter";
+    private static final String TINTED_STATUSBAR_TRANSPARENT = "tinted_statusbar_transparent";
+    private static final String TINTED_NAVBAR_TRANSPARENT = "tinted_navbar_transparent";
     private static final String EMULATE_MENU_KEY = "emulate_menu_key";
+    private static final String CATEGORY_TINTED = "category_tinted_statusbar";
 
     private CheckBoxPreference mStatusBarBrightnessControl;
     private CheckBoxPreference mStatusBarNotifCount;
     private CheckBoxPreference mQuickSettingsDynamic;
+    private ListPreference mTintedStatusbar;
+    private ListPreference mTintedStatusbarOption;
     private ListPreference mQuickPulldown;
     private ListPreference mSmartPulldown;
     private ListPreference mNetTrafficState;
@@ -68,6 +79,9 @@
     private CheckBoxPreference mStatusBarNetworkActivity;
     private CheckBoxPreference mSoftBackKillApp;
     private CheckBoxPreference mEmulateMenuKey;
+    private SystemCheckBoxPreference mTintedStatusbarFilter;
+    private SeekBarPreference mTintedStatusbarTransparency;
+    private SeekBarPreference mTintedNavbarTransparency;
 
     private int mNetTrafficVal;
     private int MASK_UP;
@@ -105,6 +119,28 @@
                 Settings.System.STATUS_BAR_NOTIF_COUNT, 0) == 1);
         mStatusBarNotifCount.setOnPreferenceChangeListener(this);
 
+        final PreferenceCategory tintedCategory =
+                     (PreferenceCategory) prefSet.findPreference(CATEGORY_TINTED);
+
+        mTintedStatusbar = (ListPreference) findPreference(TINTED_STATUSBAR);
+        int tintedStatusbar = Settings.System.getInt(resolver,
+                    Settings.System.STATUS_BAR_TINTED_COLOR, 0);
+        mTintedStatusbar.setValue(String.valueOf(tintedStatusbar));
+        mTintedStatusbar.setSummary(mTintedStatusbar.getEntry());
+        mTintedStatusbar.setOnPreferenceChangeListener(this);
+
+        mTintedStatusbarFilter = (SystemCheckBoxPreference) findPreference(TINTED_STATUSBAR_FILTER);
+        mTintedStatusbarFilter.setEnabled(tintedStatusbar != 0);
+
+        mTintedStatusbarTransparency = (SeekBarPreference) findPreference(TINTED_STATUSBAR_TRANSPARENT);
+        mTintedStatusbarTransparency.setValue(Settings.System.getInt(resolver,
+                Settings.System.STATUS_BAR_TINTED_STATBAR_TRANSPARENT, 100));
+        mTintedStatusbarTransparency.setEnabled(tintedStatusbar != 0);
+        mTintedStatusbarTransparency.setOnPreferenceChangeListener(this);
+
+        mTintedStatusbarOption = (ListPreference) findPreference(TINTED_STATUSBAR_OPTION);
+        mTintedNavbarTransparency = (SeekBarPreference) findPreference(TINTED_NAVBAR_TRANSPARENT);
+
         mQuickPulldown = (ListPreference) findPreference(QUICK_PULLDOWN);
         mSmartPulldown = (ListPreference) findPreference(SMART_PULLDOWN);
 
@@ -173,8 +209,22 @@
 
         // Hide navigation bar category on devices without navigation bar
         if (!hasNavBar) {
+            tintedCategory.removePreference(mTintedStatusbarOption);
+            tintedCategory.removePreference(mTintedNavbarTransparency);
             prefSet.removePreference(findPreference(CATEGORY_NAVBAR));
         } else {
+            int tintedStatusbarOption = Settings.System.getInt(resolver,
+                    Settings.System.STATUS_BAR_TINTED_OPTION, 0);
+            mTintedStatusbarOption.setValue(String.valueOf(tintedStatusbarOption));
+            mTintedStatusbarOption.setSummary(mTintedStatusbarOption.getEntry());
+            mTintedStatusbarOption.setEnabled(tintedStatusbar != 0);
+            mTintedStatusbarOption.setOnPreferenceChangeListener(this);
+
+            mTintedNavbarTransparency.setValue(Settings.System.getInt(resolver,
+                    Settings.System.STATUS_BAR_TINTED_NAVBAR_TRANSPARENT, 100));
+            mTintedNavbarTransparency.setEnabled(tintedStatusbar != 0);
+            mTintedNavbarTransparency.setOnPreferenceChangeListener(this);
+
             mSoftBackKillApp = (CheckBoxPreference) prefSet.findPreference(SOFT_BACK_KILL_APP);
             mSoftBackKillApp.setChecked(Settings.System.getInt(resolver,
                     Settings.System.SOFT_BACK_KILL_APP_ENABLE, 0) == 1);
@@ -207,6 +257,36 @@
             boolean value = (Boolean) objValue;
             Settings.System.putInt(resolver,
                 Settings.System.QUICK_SETTINGS_TILES_ROW, value ? 1 : 0);
+        } else if (preference == mTintedStatusbar) {
+            int val = Integer.parseInt((String) objValue);
+            int index = mTintedStatusbar.findIndexOfValue((String) objValue);
+            Settings.System.putInt(resolver,
+                Settings.System.STATUS_BAR_TINTED_COLOR, val);
+            mTintedStatusbar.setSummary(mTintedStatusbar.getEntries()[index]);
+            if (mTintedStatusbarOption != null) {
+                mTintedStatusbarOption.setEnabled(val != 0);
+            }
+            mTintedStatusbarFilter.setEnabled(val != 0);
+            mTintedStatusbarTransparency.setEnabled(val != 0);
+            if (mTintedNavbarTransparency != null) {
+                mTintedNavbarTransparency.setEnabled(val != 0);
+            }
+        } else if (preference == mTintedStatusbarOption) {
+            int val = Integer.parseInt((String) objValue);
+            int index = mTintedStatusbarOption.findIndexOfValue((String) objValue);
+            Settings.System.putInt(resolver,
+                Settings.System.STATUS_BAR_TINTED_OPTION, val);
+            mTintedStatusbarOption.setSummary(mTintedStatusbarOption.getEntries()[index]);
+        } else if (preference == mTintedStatusbarTransparency) {
+            int val = ((Integer)objValue).intValue();
+            Settings.System.putInt(resolver,
+                    Settings.System.STATUS_BAR_TINTED_STATBAR_TRANSPARENT, val);
+            return true;
+        } else if (preference == mTintedNavbarTransparency) {
+            int val = ((Integer)objValue).intValue();
+            Settings.System.putInt(resolver,
+                    Settings.System.STATUS_BAR_TINTED_NAVBAR_TRANSPARENT, val);
+            return true;
         } else if (preference == mQuickPulldown) {
             int val = Integer.parseInt((String) objValue);
             int index = mQuickPulldown.findIndexOfValue((String) objValue);
