diff --git a/src/com/bliss/support/preferences/GlobalSettingListPreference.java b/src/com/bliss/support/preferences/GlobalSettingListPreference.java
new file mode 100644
index 0000000..2d16e88
--- /dev/null
+++ b/src/com/bliss/support/preferences/GlobalSettingListPreference.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2016-2018 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 androidx.preference.ListPreference;
+import android.text.TextUtils;
+import android.util.AttributeSet;
+import android.provider.Settings;
+
+public class GlobalSettingListPreference extends ListPreference {
+
+    private boolean mAutoSummary = false;
+
+    public GlobalSettingListPreference(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+        setPreferenceDataStore(new GlobalSettingsStore(context.getContentResolver()));
+    }
+
+    public GlobalSettingListPreference(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        setPreferenceDataStore(new GlobalSettingsStore(context.getContentResolver()));
+    }
+
+    public GlobalSettingListPreference(Context context) {
+        super(context);
+        setPreferenceDataStore(new GlobalSettingsStore(context.getContentResolver()));
+    }
+
+    @Override
+    public void setValue(String value) {
+        super.setValue(value);
+        if (mAutoSummary || TextUtils.isEmpty(getSummary())) {
+            setSummary(getEntry(), true);
+        }
+    }
+
+    @Override
+    public void setSummary(CharSequence summary) {
+        setSummary(summary, false);
+    }
+
+    private void setSummary(CharSequence summary, boolean autoSummary) {
+        mAutoSummary = autoSummary;
+        super.setSummary(summary);
+    }
+
+    @Override
+    protected void onSetInitialValue(boolean restoreValue, Object defaultValue) {
+        // This is what default ListPreference implementation is doing without respecting
+        // real default value:
+        //setValue(restoreValue ? getPersistedString(mValue) : (String) defaultValue);
+        // Instead, we better do
+        setValue(restoreValue ? getPersistedString((String) defaultValue) : (String) defaultValue);
+    }
+
+    public int getIntValue(int defValue) {
+        return getValue() == null ? defValue : Integer.valueOf(getValue());
+    }
+}
