diff --git a/res/values/custom_arrays.xml b/res/values/custom_arrays.xml
index 764d4c7..8cd1433 100644
--- a/res/values/custom_arrays.xml
+++ b/res/values/custom_arrays.xml
@@ -147,4 +147,14 @@
         <item>1</item>
         <item>2</item>
     </string-array>
+
+    <string-array name="navbar_recents_style_entries" translatable="false">
+        <item>@string/keys_action_app_switch</item>
+        <item>@string/keys_action_omniswitch</item>
+    </string-array>
+
+    <string-array name="navbar_recents_style_values" translatable="false">
+        <item>0</item>
+        <item>1</item>
+    </string-array>
 </resources>
diff --git a/res/values/custom_strings.xml b/res/values/custom_strings.xml
index 6faf074..88282d3 100644
--- a/res/values/custom_strings.xml
+++ b/res/values/custom_strings.xml
@@ -41,7 +41,7 @@
     <string name="keys_app_switch_long_press_title">App switch key (long press)</string>
     <string name="keys_action_nothing">No action</string>
     <string name="keys_action_menu">Open/close menu</string>
-    <string name="keys_action_app_switch">Recent apps switcher</string>
+    <string name="keys_action_app_switch">AOSP recents</string>
     <string name="keys_action_search">Search assistant</string>
     <string name="keys_action_voice_search">Voice search</string>
     <string name="keys_action_in_app_search">In-app search</string>
@@ -169,4 +169,11 @@
     <string name="navigation_bar_show_summary">Force enable navigation bar</string>
     <string name="hardware_keys_disable_title">Disable keys</string>
     <string name="hardware_keys_disable_summary">Force disable hardware keys</string>
+
+    <string name="navbar_title">Navigation bar</string>
+    <string name="navbar_recents_style_title">Recents style</string>
+    <string name="omniswitch_settings">Settings</string>
+    <string name="omniswitch_dialog_running">OmniSwitch is not running. Please make sure to enable it before enabling it as recents.</string>
+    <string name="omniswitch_dialog_unavail">OmniSwitch is not installed.</string>
+    <string name="omniswitch_title">OmniSwitch</string>
 </resources>
diff --git a/res/xml/bars_settings.xml b/res/xml/bars_settings.xml
index 99b7b28..514cf80 100644
--- a/res/xml/bars_settings.xml
+++ b/res/xml/bars_settings.xml
@@ -34,7 +34,18 @@
                 android:entries="@array/entries_battery_percent"
                 android:entryValues="@array/values_battery_percent"
                 android:persistent="false"/>
+        </PreferenceCategory>
 
+        <PreferenceCategory
+            android:key="navbar_category"
+            android:title="@string/navbar_title" >
+
+            <ListPreference
+                android:key="navbar_recents_style"
+                android:title="@string/navbar_recents_style_title"
+                android:entries="@array/navbar_recents_style_entries"
+                android:entryValues="@array/navbar_recents_style_values"
+                android:persistent="false"/>
         </PreferenceCategory>
 
 </PreferenceScreen>
diff --git a/src/org/omnirom/omnigears/ButtonSettings.java b/src/org/omnirom/omnigears/ButtonSettings.java
index 204e4cf..491986e 100644
--- a/src/org/omnirom/omnigears/ButtonSettings.java
+++ b/src/org/omnirom/omnigears/ButtonSettings.java
@@ -64,6 +64,8 @@
 import com.android.settings.search.Indexable;
 import com.android.settings.preference.SystemCheckBoxPreference;
 
+import com.android.internal.util.omni.OmniSwitchConstants;
+import com.android.internal.util.omni.PackageUtils;
 import com.android.internal.util.omni.DeviceUtils;
 
 public class ButtonSettings extends SettingsPreferenceFragment implements OnPreferenceChangeListener, Indexable {
@@ -562,6 +564,7 @@
                     Settings.System.KEY_BACK_ACTION, value);
             mKeySettings.put(Settings.System.KEY_BACK_ACTION, value);
             checkForHomeKey();
+            checkForOmniSwitchRecents();
             return true;
         } else if (preference == mBackLongPressAction) {
             int value = Integer.valueOf((String) newValue);
@@ -572,6 +575,7 @@
                     Settings.System.KEY_BACK_LONG_PRESS_ACTION, value);
             mKeySettings.put(Settings.System.KEY_BACK_LONG_PRESS_ACTION, value);
             checkForHomeKey();
+            checkForOmniSwitchRecents();
             return true;
         } else if (preference == mHomePressAction) {
             int value = Integer.valueOf((String) newValue);
@@ -582,6 +586,7 @@
                     Settings.System.KEY_HOME_ACTION, value);
             mKeySettings.put(Settings.System.KEY_HOME_ACTION, value);
             checkForHomeKey();
+            checkForOmniSwitchRecents();
             return true;
         } else if (preference == mHomeLongPressAction) {
             int value = Integer.valueOf((String) newValue);
@@ -592,6 +597,7 @@
                     Settings.System.KEY_HOME_LONG_PRESS_ACTION, value);
             mKeySettings.put(Settings.System.KEY_HOME_LONG_PRESS_ACTION, value);
             checkForHomeKey();
+            checkForOmniSwitchRecents();
             return true;
         } else if (preference == mHomeDoubleTapAction) {
             int value = Integer.valueOf((String) newValue);
@@ -602,6 +608,7 @@
                     Settings.System.KEY_HOME_DOUBLE_TAP_ACTION, value);
             mKeySettings.put(Settings.System.KEY_HOME_DOUBLE_TAP_ACTION, value);
             checkForHomeKey();
+            checkForOmniSwitchRecents();
             return true;
         } else if (preference == mMenuPressAction) {
             int value = Integer.valueOf((String) newValue);
@@ -612,6 +619,7 @@
                     Settings.System.KEY_MENU_ACTION, value);
             mKeySettings.put(Settings.System.KEY_MENU_ACTION, value);
             checkForHomeKey();
+            checkForOmniSwitchRecents();
             return true;
         } else if (preference == mMenuLongPressAction) {
             int value = Integer.valueOf((String) newValue);
@@ -622,6 +630,7 @@
                     Settings.System.KEY_MENU_LONG_PRESS_ACTION, value);
             mKeySettings.put(Settings.System.KEY_MENU_LONG_PRESS_ACTION, value);
             checkForHomeKey();
+            checkForOmniSwitchRecents();
             return true;
         } else if (preference == mAssistPressAction) {
             int value = Integer.valueOf((String) newValue);
@@ -632,6 +641,7 @@
                     Settings.System.KEY_ASSIST_ACTION, value);
             mKeySettings.put(Settings.System.KEY_ASSIST_ACTION, value);
             checkForHomeKey();
+            checkForOmniSwitchRecents();
             return true;
         } else if (preference == mAssistLongPressAction) {
             int value = Integer.valueOf((String) newValue);
@@ -642,6 +652,7 @@
                     Settings.System.KEY_ASSIST_LONG_PRESS_ACTION, value);
             mKeySettings.put(Settings.System.KEY_ASSIST_LONG_PRESS_ACTION, value);
             checkForHomeKey();
+            checkForOmniSwitchRecents();
             return true;
         } else if (preference == mAppSwitchPressAction) {
             int value = Integer.valueOf((String) newValue);
@@ -652,6 +663,7 @@
                     Settings.System.KEY_APP_SWITCH_ACTION, value);
             mKeySettings.put(Settings.System.KEY_APP_SWITCH_ACTION, value);
             checkForHomeKey();
+            checkForOmniSwitchRecents();
             return true;
         } else if (preference == mAppSwitchLongPressAction) {
             int value = Integer.valueOf((String) newValue);
@@ -662,6 +674,7 @@
                     Settings.System.KEY_APP_SWITCH_LONG_PRESS_ACTION, value);
             mKeySettings.put(Settings.System.KEY_APP_SWITCH_LONG_PRESS_ACTION, value);
             checkForHomeKey();
+            checkForOmniSwitchRecents();
             return true;
 //        } else if (preference == mVolumeDefault) {
 //            int value = Integer.valueOf((String) newValue);
@@ -686,6 +699,17 @@
         return false;
     }
 
+    private boolean hasOmniSwitchKey() {
+        Iterator<Integer> nextAction = mKeySettings.values().iterator();
+        while (nextAction.hasNext()) {
+            int action = nextAction.next();
+            if (action == ACTION_OMNISWITCH) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     private void checkForHomeKey() {
         if (!hasHomeKey()) {
             AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity());
@@ -702,6 +726,16 @@
         }
     }
 
+    private void checkForOmniSwitchRecents() {
+        if (hasOmniSwitchKey()) {
+            if (!isOmniSwitchInstalled()){
+                doOmniSwitchUnavail();
+            } else if (!OmniSwitchConstants.isOmniSwitchRunning(getActivity())) {
+                doOmniSwitchConfig();
+            }
+        }
+    }
+
 //    public void removeListEntry(ListPreference list, String valuetoRemove) {
 //        ArrayList<CharSequence> entries = new ArrayList<CharSequence>();
 //        ArrayList<CharSequence> values = new ArrayList<CharSequence>();
@@ -734,6 +768,31 @@
         mKeysAssistCategory.setEnabled(!harwareKeysDisable && enableHWKeyRebinding);
     }
 
+    private void doOmniSwitchConfig() {
+        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity());
+        alertDialogBuilder.setTitle(R.string.omniswitch_title);
+        alertDialogBuilder.setMessage(R.string.omniswitch_dialog_running)
+            .setPositiveButton(R.string.omniswitch_settings, new DialogInterface.OnClickListener() {
+                public void onClick(DialogInterface dialog,int id) {
+                    startActivity(OmniSwitchConstants.INTENT_LAUNCH_APP);
+                }
+            });
+        AlertDialog alertDialog = alertDialogBuilder.create();
+        alertDialog.show();
+    }
+
+    private void doOmniSwitchUnavail() {
+        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity());
+        alertDialogBuilder.setTitle(R.string.omniswitch_title);
+        alertDialogBuilder.setMessage(R.string.omniswitch_dialog_unavail);
+        AlertDialog alertDialog = alertDialogBuilder.create();
+        alertDialog.show();
+    }
+
+    private boolean isOmniSwitchInstalled() {
+        return PackageUtils.isAvailableApp(OmniSwitchConstants.APP_PACKAGE_NAME, getActivity());
+    }
+
     public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
             new BaseSearchIndexProvider() {
                 @Override
diff --git a/src/org/omnirom/omnigears/interfacesettings/BarsSettings.java b/src/org/omnirom/omnigears/interfacesettings/BarsSettings.java
index 72ed3be..b1b0653 100644
--- a/src/org/omnirom/omnigears/interfacesettings/BarsSettings.java
+++ b/src/org/omnirom/omnigears/interfacesettings/BarsSettings.java
@@ -18,8 +18,10 @@
 
 package org.omnirom.omnigears.interfacesettings;
 
+import android.app.AlertDialog;
 import android.content.ContentResolver;
 import android.content.Context;
+import android.content.DialogInterface;
 import android.content.res.Resources;
 import android.os.Bundle;
 import android.os.RemoteException;
@@ -39,6 +41,9 @@
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settings.search.Indexable;
 
+import com.android.internal.util.omni.OmniSwitchConstants;
+import com.android.internal.util.omni.PackageUtils;
+
 import java.util.List;
 import java.util.ArrayList;
 
@@ -48,16 +53,19 @@
 
     private static final String STATUSBAR_BATTERY_STYLE = "statusbar_battery_style";
     private static final String STATUSBAR_BATTERY_PERCENT = "statusbar_battery_percent";
+    private static final String NAVIGATION_BAR_CATEGORY = "navbar_category";
+    private static final String NAVIGATION_BAR_RECENTS_STYLE = "navbar_recents_style";
 
     private ListPreference mBatteryStyle;
     private ListPreference mBatteryPercent;
+    private ListPreference mNavbarRecentsStyle;
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         addPreferencesFromResource(R.xml.bars_settings);
 
-        PreferenceScreen prefSet = getPreferenceScreen();
+        PreferenceScreen prefScreen = getPreferenceScreen();
         ContentResolver resolver = getActivity().getContentResolver();
 
         mBatteryStyle = (ListPreference) findPreference(STATUSBAR_BATTERY_STYLE);
@@ -75,6 +83,18 @@
         mBatteryPercent.setValue(Integer.toString(batteryPercent));
         mBatteryPercent.setSummary(mBatteryPercent.getEntry());
         mBatteryPercent.setOnPreferenceChangeListener(this);
+
+        final boolean showNavBar = DeviceUtils.deviceSupportNavigationBar(getActivity());
+        final PreferenceCategory navbarCategory =
+                (PreferenceCategory) prefScreen.findPreference(NAVIGATION_BAR_CATEGORY);
+
+        mNavbarRecentsStyle = (ListPreference) findPreference(NAVIGATION_BAR_RECENTS_STYLE);
+        int recentsStyle = Settings.System.getInt(resolver,
+                Settings.System.NAVIGATION_BAR_RECENTS, 0);
+
+        mNavbarRecentsStyle.setValue(Integer.toString(recentsStyle));
+        mNavbarRecentsStyle.setSummary(mNavbarRecentsStyle.getEntry());
+        mNavbarRecentsStyle.setOnPreferenceChangeListener(this);
     }
 
     @Override
@@ -100,11 +120,50 @@
                     mBatteryPercent.getEntries()[index]);
             Settings.System.putInt(getContentResolver(),
                     Settings.System.STATUSBAR_BATTERY_PERCENT, value);
+        } else if (preference == mNavbarRecentsStyle) {
+            int value = Integer.valueOf((String) newValue);
+            if (value == 1) {
+                if (!isOmniSwitchInstalled()){
+                    doOmniSwitchUnavail();
+                } else if (!OmniSwitchConstants.isOmniSwitchRunning(getActivity())) {
+                    doOmniSwitchConfig();
+                }
+            }
+            int index = mNavbarRecentsStyle.findIndexOfValue((String) newValue);
+            mNavbarRecentsStyle.setSummary(
+                    mNavbarRecentsStyle.getEntries()[index]);
+            Settings.System.putInt(getContentResolver(),
+                    Settings.System.NAVIGATION_BAR_RECENTS, value);
         }
 
         return true;
     }
 
+    private void doOmniSwitchConfig() {
+        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity());
+        alertDialogBuilder.setTitle(R.string.omniswitch_title);
+        alertDialogBuilder.setMessage(R.string.omniswitch_dialog_running)
+            .setPositiveButton(R.string.omniswitch_settings,new DialogInterface.OnClickListener() {
+                public void onClick(DialogInterface dialog,int id) {
+                    startActivity(OmniSwitchConstants.INTENT_LAUNCH_APP);
+                }
+            });
+        AlertDialog alertDialog = alertDialogBuilder.create();
+        alertDialog.show();
+    }
+
+    private void doOmniSwitchUnavail() {
+        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity());
+        alertDialogBuilder.setTitle(R.string.omniswitch_title);
+        alertDialogBuilder.setMessage(R.string.omniswitch_dialog_unavail);
+        AlertDialog alertDialog = alertDialogBuilder.create();
+        alertDialog.show();
+    }
+
+    private boolean isOmniSwitchInstalled() {
+        return PackageUtils.isAvailableApp(OmniSwitchConstants.APP_PACKAGE_NAME, getActivity());
+    }
+
     public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
             new BaseSearchIndexProvider() {
                 @Override
