diff --git a/res/values/custom_arrays.xml b/res/values/custom_arrays.xml
index bf2b48b..cb1e5a3 100644
--- a/res/values/custom_arrays.xml
+++ b/res/values/custom_arrays.xml
@@ -546,6 +546,16 @@
         <item>1</item>
     </string-array>
 
+    <string-array name="clock_date_position_entries" translatable="false">
+        <item>@string/clock_date_left</item>
+        <item>@string/clock_date_right</item>
+    </string-array>
+
+    <string-array name="clock_date_position_values" translatable="false">
+        <item>0</item>
+        <item>1</item>
+    </string-array>
+
     <string-array name="entries_status_bar_am_pm">
         <item>@string/am_pm_clock_none</item>
         <item>@string/am_pm_clock_small</item>
diff --git a/res/values/custom_strings.xml b/res/values/custom_strings.xml
index a99a57e..662f196 100644
--- a/res/values/custom_strings.xml
+++ b/res/values/custom_strings.xml
@@ -180,7 +180,7 @@
     <string name="battery_title">Battery display</string>
     <string name="statusbar_battery_summary">Set style of status bar battery display</string>
     <string name="clock_title">Clock and Date</string>
-    <string name="statusbar_clock_summary">Set style for your clock on status bar</string>
+    <string name="statusbar_clock_summary">Set style of status bar clock display</string>
     <string name="battery_style_title">Style</string>
     <string name="statusbar_percent_inside_title">Percent overlay</string>
     <string name="statusbar_percent_inside_summary">Display battery percentage on top of the the battery image</string>
@@ -667,9 +667,12 @@
     <string name="clock_date_display">Date</string>
     <string name="clock_date_display_summary">Display custom date before the clock</string>
     <string name="clock_date_style">Date style</string>
+    <string name="clock_date_position">Date position</string>
     <string name="clock_date_format">Date format</string>
     <string name="clock_date_string_edittext_title">Must be in DateFormat eg. MM/dd/yy</string>
     <string name="clock_date_string_edittext_summary">Enter string</string>
+    <string name="clock_date_right">Right of time</string>
+    <string name="clock_date_left">Left of time</string>
     <string name="am_pm_clock_normal">Normal font size</string>
     <string name="am_pm_clock_small">Small font size</string>
     <string name="am_pm_clock_none">Don\'t show</string>
diff --git a/res/xml/statusbar_clock_settings.xml b/res/xml/statusbar_clock_settings.xml
index 06f9a19..e345434 100644
--- a/res/xml/statusbar_clock_settings.xml
+++ b/res/xml/statusbar_clock_settings.xml
@@ -58,6 +58,13 @@
             android:dependency="status_bar_clock" />
 
         <ListPreference
+            android:key="clock_date_position"
+            android:title="@string/clock_date_position"
+            android:entries="@array/clock_date_position_entries"
+            android:entryValues="@array/clock_date_position_values"
+            android:dependency="status_bar_clock" />
+
+        <ListPreference
             android:key="clock_date_format"
             android:title="@string/clock_date_format"
             android:entries="@array/clock_date_format_entries_values"
diff --git a/src/org/omnirom/omnigears/interfacesettings/StatusbarClockSettings.java b/src/org/omnirom/omnigears/interfacesettings/StatusbarClockSettings.java
index bd8de88..981cc4e 100644
--- a/src/org/omnirom/omnigears/interfacesettings/StatusbarClockSettings.java
+++ b/src/org/omnirom/omnigears/interfacesettings/StatusbarClockSettings.java
@@ -18,8 +18,10 @@
 package org.omnirom.omnigears.interfacesettings;
 
 import android.app.AlertDialog;
+
 import android.app.Dialog;
 import android.app.DialogFragment;
+import android.content.Context;
 import android.content.DialogInterface;
 import android.content.DialogInterface.OnCancelListener;
 import android.content.res.Resources;
@@ -31,6 +33,7 @@
 import android.support.v7.preference.PreferenceScreen;
 import android.support.v14.preference.PreferenceFragment;
 import android.support.v14.preference.SwitchPreference;
+import android.provider.SearchIndexableResource;
 import android.provider.Settings;
 import android.text.format.DateFormat;
 import android.view.Menu;
@@ -42,11 +45,15 @@
 import com.android.settings.R;
 import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.Utils;
+import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settings.search.Indexable;
 
+import java.util.List;
+import java.util.ArrayList;
 import java.util.Date;
 
 public class StatusbarClockSettings extends SettingsPreferenceFragment implements
-        OnPreferenceChangeListener {
+        OnPreferenceChangeListener, Indexable {
     private static final String TAG = "StatusbarClockSettings";
 
     private static final String PREF_CLOCK_STYLE = "clock_style";
@@ -54,6 +61,7 @@
     private static final String PREF_CLOCK_DATE_DISPLAY = "clock_date_display";
     private static final String PREF_CLOCK_DATE_STYLE = "clock_date_style";
     private static final String PREF_CLOCK_DATE_FORMAT = "clock_date_format";
+    private static final String PREF_CLOCK_DATE_POSITION = "clock_date_position";
 
     public static final int CLOCK_DATE_STYLE_LOWERCASE = 1;
     public static final int CLOCK_DATE_STYLE_UPPERCASE = 2;
@@ -64,6 +72,7 @@
     private ListPreference mClockDateDisplay;
     private ListPreference mClockDateStyle;
     private ListPreference mClockDateFormat;
+    private ListPreference mClockDatePosition;
 
     @Override
     public int getMetricsCategory() {
@@ -109,6 +118,13 @@
                 0)));
         mClockDateStyle.setSummary(mClockDateStyle.getEntry());
 
+        mClockDatePosition = (ListPreference) findPreference(PREF_CLOCK_DATE_POSITION);
+        mClockDatePosition.setOnPreferenceChangeListener(this);
+        mClockDatePosition.setValue(Integer.toString(Settings.System.getInt(getActivity()
+                .getContentResolver(), Settings.System.STATUSBAR_CLOCK_DATE_POSITION,
+                0)));
+        mClockDatePosition.setSummary(mClockDatePosition.getEntry());
+
         mClockDateFormat = (ListPreference) findPreference(PREF_CLOCK_DATE_FORMAT);
         mClockDateFormat.setOnPreferenceChangeListener(this);
         String value = Settings.System.getString(getActivity().getContentResolver(),
@@ -129,6 +145,7 @@
                     Settings.System.STATUSBAR_CLOCK_DATE_DISPLAY, 0) != 0;
         if (!mClockDateToggle) {
             mClockDateStyle.setEnabled(false);
+            mClockDatePosition.setEnabled(false);
             mClockDateFormat.setEnabled(false);
         }
     }
@@ -159,9 +176,11 @@
             mClockDateDisplay.setSummary(mClockDateDisplay.getEntries()[index]);
             if (val == 0) {
                 mClockDateStyle.setEnabled(false);
+                mClockDatePosition.setEnabled(false);
                 mClockDateFormat.setEnabled(false);
             } else {
                 mClockDateStyle.setEnabled(true);
+                mClockDatePosition.setEnabled(true);
                 mClockDateFormat.setEnabled(true);
             }
             return true;
@@ -173,6 +192,14 @@
             mClockDateStyle.setSummary(mClockDateStyle.getEntries()[index]);
             parseClockDateFormats();
             return true;
+        } else if (preference == mClockDatePosition) {
+            int val = Integer.parseInt((String) newValue);
+            int index = mClockDatePosition.findIndexOfValue((String) newValue);
+            Settings.System.putInt(getActivity().getContentResolver(),
+                    Settings.System.STATUSBAR_CLOCK_DATE_POSITION, val);
+            mClockDatePosition.setSummary(mClockDatePosition.getEntries()[index]);
+            parseClockDateFormats();
+            return true;
         } else if (preference == mClockDateFormat) {
             int index = mClockDateFormat.findIndexOfValue((String) newValue);
 
@@ -251,5 +278,26 @@
         mClockDateFormat.setEntries(parsedDateEntries);
     }
 
+    public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+            new BaseSearchIndexProvider() {
+                @Override
+                public List<SearchIndexableResource> getXmlResourcesToIndex(Context context,
+                        boolean enabled) {
+                    ArrayList<SearchIndexableResource> result =
+                            new ArrayList<SearchIndexableResource>();
+
+                    SearchIndexableResource sir = new SearchIndexableResource(context);
+                    sir.xmlResId = R.xml.statusbar_clock_settings;
+                    result.add(sir);
+
+                    return result;
+                }
+
+                @Override
+                public List<String> getNonIndexableKeys(Context context) {
+                    ArrayList<String> result = new ArrayList<String>();
+                    return result;
+                }
+            };
 }
 
