diff --git a/res/values/custom_strings.xml b/res/values/custom_strings.xml
index 8215552..9c1b833 100644
--- a/res/values/custom_strings.xml
+++ b/res/values/custom_strings.xml
@@ -525,8 +525,6 @@
     <string name="volume_button_force_media_title">Force media volume</string>
     <string name="volume_button_force_media_summary">Media volume will be changed by default</string>
 
-    <string name="lockscreen_hide_status_bar_title">Hide status bar</string>
-    <string name="lockscreen_hide_status_bar_summary">Touch status bar to toggle visibility</string>
     <string name="status_bar_logo_title">Status bar logo</string>
     <string name="status_bar_logo_summary">A little swag</string>
 
@@ -745,4 +743,16 @@
 
     <string name="long_press_power_torch_title">Long press for flashlight</string>
     <string name="long_press_power_torch_summary">Toggle flashlight when screen is off</string>
+
+    <!-- Hide lockscreen status bar, clock, date, alarm -->
+    <string name="lockscreen_item_title">Lock screen items</string>
+    <string name="lockscreen_item_summary">Configure visibility of lock screen items</string>
+    <string name="hide_lockscreen_clock_title">Hide clock widget</string>
+    <string name="hide_lockscreen_clock_summary">Change the clock widget\'s visibility</string>
+    <string name="hide_lockscreen_date_title">Hide date widget</string>
+    <string name="hide_lockscreen_date_summary">Change the date\'s visibility underneath the clock widget</string>
+    <string name="hide_lockscreen_alarm_title">Hide alarm text</string>
+    <string name="hide_lockscreen_alarm_summary">Change the alarm text\'s visibility underneath the clock widget</string>
+    <string name="hide_lockscreen_status_bar_title">Hide status bar</string>
+    <string name="hide_lockscreen_status_bar_summary">Touch status bar to toggle visibility</string>
 </resources>
diff --git a/res/xml/lockscreen_settings.xml b/res/xml/lockscreen_settings.xml
index 0b6f9d8..3c6b3e7 100644
--- a/res/xml/lockscreen_settings.xml
+++ b/res/xml/lockscreen_settings.xml
@@ -28,23 +28,29 @@
             android:targetClass="com.android.systemui.tuner.LockscreenTunerActivity" />
     </Preference>
 
-            <org.omnirom.omnigears.preference.SystemSettingSwitchPreference
-                android:key="lockscreen_hide_media"
-                android:title="@string/lockscreen_hide_media_title"
-                android:summary="@string/lockscreen_hide_media_summary"
-                android:defaultValue="false" />
+    <Preference
+        android:key="lockscreen_item"
+        android:title="@string/lockscreen_item_title"
+        android:summary="@string/lockscreen_item_summary"
+        android:fragment="org.omnirom.omnigears.interfacesettings.LockscreenItemSettings" />
 
-            <org.omnirom.omnigears.preference.SystemSettingSwitchPreference
-                android:key="double_tap_sleep_lockscreen"
-                android:title="@string/double_tap_sleep_lockscreen_title"
-                android:summary="@string/double_tap_sleep_lockscreen_summary"
-                android:defaultValue="false" />
+    <org.omnirom.omnigears.preference.SystemSettingSwitchPreference
+        android:key="lockscreen_hide_media"
+        android:title="@string/lockscreen_hide_media_title"
+        android:summary="@string/lockscreen_hide_media_summary"
+        android:defaultValue="false" />
 
-            <org.omnirom.omnigears.preference.SecureSettingSwitchPreference
-                android:key="lockscreen_qs_disabled"
-                android:title="@string/lockscreen_qs_disabled_title"
-                android:summary="@string/lockscreen_qs_disabled_summary"
-                android:defaultValue="false" />
+    <org.omnirom.omnigears.preference.SystemSettingSwitchPreference
+        android:key="double_tap_sleep_lockscreen"
+        android:title="@string/double_tap_sleep_lockscreen_title"
+        android:summary="@string/double_tap_sleep_lockscreen_summary"
+        android:defaultValue="false" />
+
+    <org.omnirom.omnigears.preference.SecureSettingSwitchPreference
+        android:key="lockscreen_qs_disabled"
+        android:title="@string/lockscreen_qs_disabled_title"
+        android:summary="@string/lockscreen_qs_disabled_summary"
+        android:defaultValue="false" />
 
 </PreferenceScreen>
 
diff --git a/res/xml/lockscreenitems.xml b/res/xml/lockscreenitems.xml
new file mode 100644
index 0000000..c63ad24
--- /dev/null
+++ b/res/xml/lockscreenitems.xml
@@ -0,0 +1,48 @@
+<?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:title="@string/lockscreen_item_title"
+    android:key="lockscreen_item">
+
+    <org.omnirom.omnigears.preference.SecureSettingSwitchPreference
+        android:key="lockscreen_hide_status_bar"
+        android:title="@string/hide_lockscreen_status_bar_title"
+        android:summary="@string/hide_lockscreen_status_bar_summary"
+        android:defaultValue="false" />
+
+    <org.omnirom.omnigears.preference.SystemSettingSwitchPreference
+        android:key="hide_lockscreen_clock"
+        android:title="@string/hide_lockscreen_clock_title"
+        android:summary="@string/hide_lockscreen_clock_summary"
+        android:defaultValue="false" />
+
+    <org.omnirom.omnigears.preference.SystemSettingSwitchPreference
+        android:key="hide_lockscreen_date"
+        android:title="@string/hide_lockscreen_date_title"
+        android:summary="@string/hide_lockscreen_date_summary"
+        android:defaultValue="false" />
+
+    <org.omnirom.omnigears.preference.SystemSettingSwitchPreference
+        android:key="hide_lockscreen_alarm"
+        android:title="@string/hide_lockscreen_alarm_title"
+        android:summary="@string/hide_lockscreen_alarm_summary"
+        android:defaultValue="false" />
+
+</PreferenceScreen>
+
diff --git a/src/org/omnirom/omnigears/interfacesettings/LockscreenItemSettings.java b/src/org/omnirom/omnigears/interfacesettings/LockscreenItemSettings.java
new file mode 100644
index 0000000..c985ca8
--- /dev/null
+++ b/src/org/omnirom/omnigears/interfacesettings/LockscreenItemSettings.java
@@ -0,0 +1,84 @@
+/*
+ *  Copyright (C) 2015-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.interfacesettings;
+import android.os.Bundle;
+import android.content.Context;
+import android.content.Intent;
+import android.content.res.Resources;
+import android.support.v7.preference.Preference;
+import android.provider.SearchIndexableResource;
+
+import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+
+import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.R;
+import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settings.search.Indexable;
+
+import java.util.List;
+import java.util.ArrayList;
+
+public class LockscreenItemSettings extends SettingsPreferenceFragment implements
+        Preference.OnPreferenceChangeListener, Indexable {
+
+    private static final String TAG = "LockscreenItemSettings";
+
+    @Override
+    public int getMetricsCategory() {
+        return MetricsEvent.OMNI_SETTINGS;
+    }
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        addPreferencesFromResource(R.xml.lockscreenitems);
+    }
+
+    @Override
+    public boolean onPreferenceTreeClick(Preference preference) {
+        return super.onPreferenceTreeClick(preference);
+    }
+
+    @Override
+    public boolean onPreferenceChange(Preference preference, Object newValue) {
+        return true;
+    }
+
+    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.lockscreenitems;
+                    result.add(sir);
+
+                    return result;
+                }
+
+                @Override
+                public List<String> getNonIndexableKeys(Context context) {
+                    ArrayList<String> result = new ArrayList<String>();
+                    return result;
+                }
+            };
+}
+
