diff --git a/src/com/bliss/support/preferences/GlobalSettingSeekBarPreference.java b/src/com/bliss/support/preferences/GlobalSettingSeekBarPreference.java
new file mode 100644
index 0000000..545b1f4
--- /dev/null
+++ b/src/com/bliss/support/preferences/GlobalSettingSeekBarPreference.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2016-2019 crDroid Android Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.bliss.support.preferences;
+
+import android.content.Context;
+import android.util.AttributeSet;
+
+public class GlobalSettingSeekBarPreference extends CustomSeekBarPreference {
+
+    public GlobalSettingSeekBarPreference(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+        setPreferenceDataStore(new GlobalSettingsStore(context.getContentResolver()));
+    }
+
+    public GlobalSettingSeekBarPreference(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        setPreferenceDataStore(new GlobalSettingsStore(context.getContentResolver()));
+    }
+
+    public GlobalSettingSeekBarPreference(Context context) {
+        super(context, null);
+        setPreferenceDataStore(new GlobalSettingsStore(context.getContentResolver()));
+    }
+}
diff --git a/src/com/bliss/support/preferences/SecureSettingSeekBarPreference.java b/src/com/bliss/support/preferences/SecureSettingSeekBarPreference.java
new file mode 100644
index 0000000..1caa012
--- /dev/null
+++ b/src/com/bliss/support/preferences/SecureSettingSeekBarPreference.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2016-2019 crDroid Android Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.bliss.support.preferences;
+
+import android.content.Context;
+import android.util.AttributeSet;
+
+public class SecureSettingSeekBarPreference extends CustomSeekBarPreference {
+
+    public SecureSettingSeekBarPreference(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+        setPreferenceDataStore(new SecureSettingsStore(context.getContentResolver()));
+    }
+
+    public SecureSettingSeekBarPreference(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        setPreferenceDataStore(new SecureSettingsStore(context.getContentResolver()));
+    }
+
+    public SecureSettingSeekBarPreference(Context context) {
+        super(context, null);
+        setPreferenceDataStore(new SecureSettingsStore(context.getContentResolver()));
+    }
+}
diff --git a/src/com/bliss/support/preferences/SystemSettingSeekBarPreference.java b/src/com/bliss/support/preferences/SystemSettingSeekBarPreference.java
new file mode 100644
index 0000000..0ed3b42
--- /dev/null
+++ b/src/com/bliss/support/preferences/SystemSettingSeekBarPreference.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2016-2019 crDroid Android Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.bliss.support.preferences;
+
+import android.content.Context;
+import android.util.AttributeSet;
+
+public class SystemSettingSeekBarPreference extends CustomSeekBarPreference {
+
+    public SystemSettingSeekBarPreference(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+        setPreferenceDataStore(new SystemSettingsStore(context.getContentResolver()));
+    }
+
+    public SystemSettingSeekBarPreference(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        setPreferenceDataStore(new SystemSettingsStore(context.getContentResolver()));
+    }
+
+    public SystemSettingSeekBarPreference(Context context) {
+        super(context, null);
+        setPreferenceDataStore(new SystemSettingsStore(context.getContentResolver()));
+    }
+}
