diff --git a/res/values/custom_arrays.xml b/res/values/custom_arrays.xml
index 3c3d3e8..a4dd803 100644
--- a/res/values/custom_arrays.xml
+++ b/res/values/custom_arrays.xml
@@ -635,6 +635,6 @@
 
     <string-array name="lockscreen_clock_style_values" translatable="false">
         <item>0</item>
-        <item>1</item>
+        <item>2</item>
     </string-array>
 </resources>
diff --git a/res/values/custom_colors.xml b/res/values/custom_colors.xml
index 7a7cd92..9302966 100644
--- a/res/values/custom_colors.xml
+++ b/res/values/custom_colors.xml
@@ -17,4 +17,12 @@
 
 <resources>
     <color name="system_activity_header_text">#000000</color>
+    <color name="omni_clock_primary">#607D8B</color>
+    <color name="omni_clock_accent">#FF3D00</color>
+    <color name="omni_clock_bg_color">#21282b</color>
+    <color name="omni_clock_hour_hand_color">#ffffff</color>
+    <color name="omni_clock_minute_hand_color">#28abe3</color>
+    <color name="omni_clock_ambient_color">#ffffff</color>
+    <color name="omni_clock_ambient_bg_color">#000000</color>
+    <color name="omni_clock_text_color">#ffffff</color>
 </resources>
diff --git a/res/values/custom_strings.xml b/res/values/custom_strings.xml
index eef7a01..bb1fc02 100644
--- a/res/values/custom_strings.xml
+++ b/res/values/custom_strings.xml
@@ -782,4 +782,20 @@
     <string name="lockscreen_clock_style_title">Lock screen clock style</string>
     <string name="clock_style_digital">Digital</string>
     <string name="clock_style_analog">Analog</string>
+    <string name="clock_style_omni">OmniClock</string>
+
+    <string name="omni_clock_settings_title">Analog clock</string>
+    <string name="omni_clock_settings_summary">Style and color settings</string>
+    <string name="omni_clock_24h_mode_title">24h mode</string>
+    <string name="omni_clock_24h_mode_summary"></string>
+    <string name="omni_clock_show_ticks_title">Show hour marks</string>
+    <string name="omni_clock_show_ticks_summary"></string>
+    <string name="omni_clock_show_numbers_title">Show hour numbers</string>
+    <string name="omni_clock_show_numbers_summary"></string>
+    <string name="omni_clock_bg_color_title">Background color</string>
+    <string name="omni_clock_border_color_title">Border color</string>
+    <string name="omni_clock_hour_color_title">Hour color</string>
+    <string name="omni_clock_minute_color_title">Minute color</string>
+    <string name="omni_clock_text_color_title">Text color</string>
+    <string name="omni_clock_accent_color_title">Accent color</string>
 </resources>
diff --git a/res/xml/lockscreen_settings.xml b/res/xml/lockscreen_settings.xml
index 2edfe6a..424f18c 100644
--- a/res/xml/lockscreen_settings.xml
+++ b/res/xml/lockscreen_settings.xml
@@ -57,5 +57,11 @@
         android:entries="@array/lockscreen_clock_style_entries"
         android:entryValues="@array/lockscreen_clock_style_values"
         android:persistent="false"/>
+
+    <Preference
+        android:key="omni_clock_settings"
+        android:title="@string/omni_clock_settings_title"
+        android:summary="@string/omni_clock_settings_summary"
+        android:fragment="org.omnirom.omnigears.OmniClockSettings" />
 </PreferenceScreen>
 
diff --git a/res/xml/omni_clock_settings.xml b/res/xml/omni_clock_settings.xml
new file mode 100644
index 0000000..889839e
--- /dev/null
+++ b/res/xml/omni_clock_settings.xml
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--  Copyright (C) 2018 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"
+            xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+            android:key="omni_clock_settings"
+            android:title="@string/omni_clock_settings_title" >
+
+    <org.omnirom.omnilib.preference.SystemSettingSwitchPreference
+        android:key="lockscreen_omni_clock_24h_mode"
+        android:title="@string/omni_clock_24h_mode_title"
+        android:summary="@string/omni_clock_24h_mode_summary"
+        android:defaultValue="false" />
+
+    <org.omnirom.omnilib.preference.SystemSettingSwitchPreference
+        android:key="lockscreen_omni_clock_show_ticks"
+        android:title="@string/omni_clock_show_ticks_title"
+        android:summary="@string/omni_clock_show_ticks_summary"
+        android:defaultValue="false" />
+
+    <org.omnirom.omnilib.preference.SystemSettingSwitchPreference
+        android:key="lockscreen_omni_clock_show_numbers"
+        android:title="@string/omni_clock_show_numbers_title"
+        android:summary="@string/omni_clock_show_numbers_summary"
+        android:defaultValue="false" />
+
+    <org.omnirom.omnilib.preference.ColorSelectPreference
+        android:key="bg_color"
+        android:persistent="false"
+        settings:withAlpha="true"
+        android:title="@string/omni_clock_bg_color_title" />
+
+    <org.omnirom.omnilib.preference.ColorSelectPreference
+        android:key="border_color"
+        android:persistent="false"
+        settings:withAlpha="true"
+        android:title="@string/omni_clock_border_color_title" />
+
+    <org.omnirom.omnilib.preference.ColorSelectPreference
+        android:key="hour_color"
+        android:persistent="false"
+        settings:withAlpha="true"
+        android:title="@string/omni_clock_hour_color_title" />
+
+    <org.omnirom.omnilib.preference.ColorSelectPreference
+        android:key="minute_color"
+        android:persistent="false"
+        settings:withAlpha="true"
+        android:title="@string/omni_clock_minute_color_title" />
+
+    <org.omnirom.omnilib.preference.ColorSelectPreference
+        android:key="text_color"
+        android:persistent="false"
+        settings:withAlpha="true"
+        android:title="@string/omni_clock_text_color_title" />
+
+    <org.omnirom.omnilib.preference.ColorSelectPreference
+        android:key="accent_color"
+        android:persistent="false"
+        settings:withAlpha="true"
+        android:title="@string/omni_clock_accent_color_title" />
+</PreferenceScreen>
+
diff --git a/src/org/omnirom/omnigears/OmniClockSettings.java b/src/org/omnirom/omnigears/OmniClockSettings.java
new file mode 100644
index 0000000..7fa667c
--- /dev/null
+++ b/src/org/omnirom/omnigears/OmniClockSettings.java
@@ -0,0 +1,122 @@
+/*
+ *  Copyright (C) 2018 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;
+
+import com.android.settings.SettingsPreferenceFragment;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.res.Resources;
+import android.os.Bundle;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+import android.provider.Settings;
+import android.provider.SearchIndexableResource;
+
+import org.omnirom.omnilib.preference.ColorSelectPreference;
+
+import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settings.search.Indexable;
+
+import java.util.List;
+import java.util.Arrays;
+
+public class OmniClockSettings extends SettingsPreferenceFragment implements
+        Preference.OnPreferenceChangeListener, Indexable {
+    private static final String TAG = "OmniClockSettings";
+    private static final String KEY_BG_COLOR = "bg_color";
+    private static final String KEY_BORDER_COLOR = "border_color";
+    private static final String KEY_HOUR_COLOR = "hour_color";
+    private static final String KEY_MINUTE_COLOR = "minute_color";
+    private static final String KEY_TEXT_COLOR = "text_color";
+    private static final String KEY_ACCENT_COLOR = "accent_color";
+
+    @Override
+    public int getMetricsCategory() {
+        return MetricsEvent.OMNI_SETTINGS;
+    }
+
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        addPreferencesFromResource(R.xml.omni_clock_settings);
+
+        PreferenceScreen prefSet = getPreferenceScreen();
+        ContentResolver resolver = getContentResolver();
+        Resources r = getResources();
+
+        initColorPreference(KEY_BG_COLOR, Settings.System.LOCKSCREEN_OMNI_CLOCK_BG_COLOR,
+                r.getColor(R.color.omni_clock_bg_color));
+        initColorPreference(KEY_BORDER_COLOR, Settings.System.LOCKSCREEN_OMNI_CLOCK_BORDER_COLOR,
+                r.getColor(R.color.omni_clock_primary));
+        initColorPreference(KEY_HOUR_COLOR, Settings.System.LOCKSCREEN_OMNI_CLOCK_HOUR_COLOR,
+                r.getColor(R.color.omni_clock_hour_hand_color));
+        initColorPreference(KEY_MINUTE_COLOR, Settings.System.LOCKSCREEN_OMNI_CLOCK_MINUTE_COLOR,
+                r.getColor(R.color.omni_clock_minute_hand_color));
+        initColorPreference(KEY_TEXT_COLOR, Settings.System.LOCKSCREEN_OMNI_CLOCK_TEXT_COLOR,
+                r.getColor(R.color.omni_clock_text_color));
+        initColorPreference(KEY_ACCENT_COLOR, Settings.System.LOCKSCREEN_OMNI_CLOCK_ACCENT_COLOR,
+                r.getColor(R.color.omni_clock_accent));
+    }
+
+    @Override
+    public boolean onPreferenceTreeClick(Preference preference) {
+        return super.onPreferenceTreeClick(preference);
+    }
+
+    @Override
+    public boolean onPreferenceChange(Preference preference, Object objValue) {
+        if (preference instanceof ColorSelectPreference) {
+            ContentResolver resolver = getContentResolver();
+            ColorSelectPreference c = (ColorSelectPreference) preference;
+            String hexColor = String.format("#%08X", c.getColor());
+            preference.setSummary(hexColor);
+            String settingsKey = preference.getKey();
+            Settings.System.putInt(resolver, settingsKey, c.getColor());
+            return true;
+        }
+        return true;
+    }
+
+    private void initColorPreference(String key, String settingsKey, int defaultValue) {
+        ContentResolver resolver = getContentResolver();
+        ColorSelectPreference c = (ColorSelectPreference) findPreference(key);
+        c.setKey(settingsKey);
+        int color = Settings.System.getInt(resolver, settingsKey, defaultValue);
+        c.setColor(color);
+        String hexColor = String.format("#%08X", color);
+        c.setSummary(hexColor);
+        c.setOnPreferenceChangeListener(this);
+    }
+
+    /**
+     * For Search.
+     */
+    public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+        new BaseSearchIndexProvider() {
+
+            @Override
+            public List<SearchIndexableResource> getXmlResourcesToIndex(
+                    Context context, boolean enabled) {
+                final SearchIndexableResource sir = new SearchIndexableResource(context);
+                sir.xmlResId = R.xml.omni_clock_settings;
+                return Arrays.asList(sir);
+            }
+	};
+}
+
diff --git a/src/org/omnirom/omnigears/interfacesettings/LockscreenSettings.java b/src/org/omnirom/omnigears/interfacesettings/LockscreenSettings.java
index a2be839..d6c3471 100644
--- a/src/org/omnirom/omnigears/interfacesettings/LockscreenSettings.java
+++ b/src/org/omnirom/omnigears/interfacesettings/LockscreenSettings.java
@@ -39,8 +39,10 @@
         Preference.OnPreferenceChangeListener, Indexable {
     private static final String TAG = "LockscreenSettings";
     private static final String LOCKSCREEN_CLOCK_STYLE = "lockscreen_clock_style";
+    private static final String KEY_OMNI_CLOCK_SETTINGS = "omni_clock_settings";
 
     private ListPreference mLockscreenClockStyle;
+    private Preference mOmniClockSettings;
 
     @Override
     public int getMetricsCategory() {
@@ -60,6 +62,9 @@
         mLockscreenClockStyle.setValue(Integer.toString(clockStyle));
         mLockscreenClockStyle.setSummary(mLockscreenClockStyle.getEntry());
         mLockscreenClockStyle.setOnPreferenceChangeListener(this);
+
+        mOmniClockSettings = findPreference(KEY_OMNI_CLOCK_SETTINGS);
+        mOmniClockSettings.setEnabled(clockStyle == 2);
     }
 
     @Override
@@ -74,6 +79,7 @@
             int index = mLockscreenClockStyle.findIndexOfValue((String) newValue);
             mLockscreenClockStyle.setSummary(mLockscreenClockStyle.getEntries()[index]);
             Settings.System.putInt(getContentResolver(), Settings.System.LOCKSCREEN_CLOCK_STYLE, value);
+            mOmniClockSettings.setEnabled(value == 2);
             return true;
         }
         return false;
