diff --git a/res/values/custom_strings.xml b/res/values/custom_strings.xml
index c58bb8f..9dae5c0 100644
--- a/res/values/custom_strings.xml
+++ b/res/values/custom_strings.xml
@@ -743,4 +743,8 @@
     <!-- Brightness control -->
     <string name="status_bar_toggle_brightness">Brightness control</string>
     <string name="status_bar_toggle_brightness_summary">Adjust brightness by sliding across the status bar</string>
+
+    <!-- Bottom shortcuts -->
+    <string name="systemui_tuner_lockscreen_bottom_shortcuts_title">Bottom shortcuts</string>
+    <string name="systemui_tuner_lockscreen_bottom_shortcuts_summary">Configure the bottom shortcuts</string>
 </resources>
diff --git a/res/xml/bars_settings.xml b/res/xml/bars_settings.xml
index cb4f123..26e76bf 100644
--- a/res/xml/bars_settings.xml
+++ b/res/xml/bars_settings.xml
@@ -98,27 +98,4 @@
 
         </PreferenceCategory>
 
-        <PreferenceCategory
-            android:key="lockscreen_category"
-            android:title="@string/lockscreen_category_title" >
-
-            <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.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" />
-
-        </PreferenceCategory>
 </PreferenceScreen>
diff --git a/res/xml/lockscreen_settings.xml b/res/xml/lockscreen_settings.xml
new file mode 100644
index 0000000..0b6f9d8
--- /dev/null
+++ b/res/xml/lockscreen_settings.xml
@@ -0,0 +1,50 @@
+<?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="lockscreen_settings"
+            android:title="@string/lockscreen_category_title" >
+
+    <Preference
+        android:key="bottom_shortcuts_category"
+        android:title="@string/systemui_tuner_lockscreen_bottom_shortcuts_title"
+        android:summary="@string/systemui_tuner_lockscreen_bottom_shortcuts_summary">
+        <intent android:action="android.intent.action.MAIN"
+            android:targetPackage="com.android.systemui"
+            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" />
+
+            <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/omni_dashboard_fragment.xml b/res/xml/omni_dashboard_fragment.xml
index 88c5205..9c89c15 100644
--- a/res/xml/omni_dashboard_fragment.xml
+++ b/res/xml/omni_dashboard_fragment.xml
@@ -44,6 +44,12 @@
         android:fragment="org.omnirom.omnigears.interfacesettings.BarsSettings" />
 
     <Preference
+        android:key="lockscreen_settings"
+        android:title="@string/lockscreen_category_title"
+        android:icon="@drawable/ic_lockscreen_tile"
+        android:fragment="org.omnirom.omnigears.interfacesettings.LockscreenSettings" />
+
+    <Preference
         android:key="rotation_settings"
         android:title="@string/display_rotation_title"
         android:summary="@string/display_rotation_summary"
diff --git a/src/org/omnirom/omnigears/interfacesettings/LockscreenSettings.java b/src/org/omnirom/omnigears/interfacesettings/LockscreenSettings.java
new file mode 100644
index 0000000..3fb3789
--- /dev/null
+++ b/src/org/omnirom/omnigears/interfacesettings/LockscreenSettings.java
@@ -0,0 +1,79 @@
+/*
+ *  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.interfacesettings;
+import android.content.Context;
+import android.os.Bundle;
+import android.support.v7.preference.Preference;
+import com.android.internal.logging.MetricsLogger;
+import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+import android.provider.SearchIndexableResource;
+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 LockscreenSettings extends SettingsPreferenceFragment implements
+        Preference.OnPreferenceChangeListener, Indexable {
+    private static final String TAG = "LockscreenSettings";
+
+    @Override
+    public int getMetricsCategory() {
+        return MetricsEvent.OMNI_SETTINGS;
+    }
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        addPreferencesFromResource(R.xml.lockscreen_settings);
+    }
+
+    @Override
+    public boolean onPreferenceTreeClick(Preference preference) {
+        return super.onPreferenceTreeClick(preference);
+    }
+
+    @Override
+    public boolean onPreferenceChange(Preference preference, Object newValue) {
+        return false;
+    }
+
+    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.lockscreen_settings;
+                    result.add(sir);
+
+                    return result;
+                }
+
+                @Override
+                public List<String> getNonIndexableKeys(Context context) {
+                    ArrayList<String> result = new ArrayList<String>();
+                    return result;
+                }
+            };
+}
