diff --git a/res/values/custom_strings.xml b/res/values/custom_strings.xml
index bb1fc02..eb98164 100644
--- a/res/values/custom_strings.xml
+++ b/res/values/custom_strings.xml
@@ -798,4 +798,11 @@
     <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>
+
+    <string name="lockscreen_digital_clock_two_lines_title">Two lines style</string>
+    <string name="lockscreen_digital_clock_two_lines_summary"></string>
+    <string name="lockscreen_digital_clock_bold_hour_title">Bold hours style</string>
+    <string name="lockscreen_digital_clock_bold_hour_summary"></string>
+    <string name="digital_clock_settings_title">Digital clock</string>
+    <string name="digital_clock_settings_summary">Style settings</string>
 </resources>
diff --git a/res/xml/digital_clock_settings.xml b/res/xml/digital_clock_settings.xml
new file mode 100644
index 0000000..a27b789
--- /dev/null
+++ b/res/xml/digital_clock_settings.xml
@@ -0,0 +1,34 @@
+<?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="digital_clock_settings"
+            android:title="@string/digital_clock_settings_title" >
+
+    <org.omnirom.omnilib.preference.SystemSettingSwitchPreference
+        android:key="lockscreen_digital_clock_two_lines"
+        android:title="@string/lockscreen_digital_clock_two_lines_title"
+        android:summary="@string/lockscreen_digital_clock_two_lines_summary"
+        android:defaultValue="false" />
+        
+    <org.omnirom.omnilib.preference.SystemSettingSwitchPreference
+        android:key="lockscreen_digital_clock_bold_hour"
+        android:title="@string/lockscreen_digital_clock_bold_hour_title"
+        android:summary="@string/lockscreen_digital_clock_bold_hour_summary"
+        android:defaultValue="false" />
+</PreferenceScreen>
+
diff --git a/res/xml/lockscreen_settings.xml b/res/xml/lockscreen_settings.xml
index 424f18c..3ebe2ba 100644
--- a/res/xml/lockscreen_settings.xml
+++ b/res/xml/lockscreen_settings.xml
@@ -59,6 +59,12 @@
         android:persistent="false"/>
 
     <Preference
+        android:key="digital_clock_settings"
+        android:title="@string/digital_clock_settings_title"
+        android:summary="@string/digital_clock_settings_summary"
+        android:fragment="org.omnirom.omnigears.DigitalClockSettings" />
+
+    <Preference
         android:key="omni_clock_settings"
         android:title="@string/omni_clock_settings_title"
         android:summary="@string/omni_clock_settings_summary"
diff --git a/src/org/omnirom/omnigears/DigitalClockSettings.java b/src/org/omnirom/omnigears/DigitalClockSettings.java
new file mode 100644
index 0000000..370d945
--- /dev/null
+++ b/src/org/omnirom/omnigears/DigitalClockSettings.java
@@ -0,0 +1,71 @@
+/*
+ *  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 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 DigitalClockSettings extends SettingsPreferenceFragment implements Indexable {
+    private static final String TAG = "DigitalClockSettings";
+
+    @Override
+    public int getMetricsCategory() {
+        return MetricsEvent.OMNI_SETTINGS;
+    }
+
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        addPreferencesFromResource(R.xml.digital_clock_settings);
+    }
+
+    @Override
+    public boolean onPreferenceTreeClick(Preference preference) {
+        return super.onPreferenceTreeClick(preference);
+    }
+
+    /**
+     * 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.digital_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 d6c3471..34adde2 100644
--- a/src/org/omnirom/omnigears/interfacesettings/LockscreenSettings.java
+++ b/src/org/omnirom/omnigears/interfacesettings/LockscreenSettings.java
@@ -40,9 +40,11 @@
     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 static final String KEY_DIGITAL_CLOCK_SETTINGS = "digital_clock_settings";
 
     private ListPreference mLockscreenClockStyle;
     private Preference mOmniClockSettings;
+    private Preference mDigitalClockSettings;
 
     @Override
     public int getMetricsCategory() {
@@ -65,6 +67,9 @@
 
         mOmniClockSettings = findPreference(KEY_OMNI_CLOCK_SETTINGS);
         mOmniClockSettings.setEnabled(clockStyle == 2);
+    
+        mDigitalClockSettings = findPreference(KEY_DIGITAL_CLOCK_SETTINGS);
+        mDigitalClockSettings.setEnabled(clockStyle == 0);
     }
 
     @Override
@@ -80,6 +85,7 @@
             mLockscreenClockStyle.setSummary(mLockscreenClockStyle.getEntries()[index]);
             Settings.System.putInt(getContentResolver(), Settings.System.LOCKSCREEN_CLOCK_STYLE, value);
             mOmniClockSettings.setEnabled(value == 2);
+            mDigitalClockSettings.setEnabled(value == 0);
             return true;
         }
         return false;
