diff --git a/res/values/attrs.xml b/res/values/attrs.xml
index e506b08..4123277 100644
--- a/res/values/attrs.xml
+++ b/res/values/attrs.xml
@@ -24,9 +24,4 @@
         <attr name="continuousUpdates" format="boolean" />
     </declare-styleable>
 
-    <!-- Value to pass to callback when restore button is pressed -->
-    <declare-styleable name="ColorPreference">
-        <attr name="defaultColorValue" format="integer" />
-    </declare-styleable>
-
 </resources>
diff --git a/src/com/bliss/support/colorpicker/ColorPickerPreference.java b/src/com/bliss/support/colorpicker/ColorPickerPreference.java
index abf6c07..f4ac723 100644
--- a/src/com/bliss/support/colorpicker/ColorPickerPreference.java
+++ b/src/com/bliss/support/colorpicker/ColorPickerPreference.java
@@ -47,6 +47,8 @@
 public class ColorPickerPreference extends Preference implements
         Preference.OnPreferenceClickListener, ColorPickerDialog.OnColorChangedListener {
 
+    private static final String ANDROIDNS = "http://schemas.android.com/apk/res/android";
+
     PreferenceViewHolder mView;
     ColorPickerDialog mDialog;
     LinearLayout widgetFrameView;
@@ -56,7 +58,6 @@
     //private boolean mEnabled = true;
 
     // if we return -6, button is not enabled
-    static final String SETTINGS_NS = "http://schemas.android.com/apk/res/com.android.settings";
     static final int DEF_VALUE_DEFAULT = -6;
     boolean mUsesDefaultButton = false;
     int mDefValue = -1;
@@ -79,13 +80,22 @@
     }
 
     @Override
-    protected Object onGetDefaultValue(TypedArray a, int index) {
-        return a.getInt(index, Color.BLACK);
+    protected Object onGetDefaultValue(TypedArray ta, int index) {
+        int defaultValue = ta.getInt(index, Color.BLACK);
+        return defaultValue;
     }
 
     @Override
-    protected void onSetInitialValue(boolean restoreValue, Object defaultValue) {
-        onColorChanged(restoreValue ? getPersistedInt(mValue) : (Integer) defaultValue);
+    protected void onSetInitialValue(boolean restorePersistedValue, Object defaultValue) {
+        // when using PreferenceDataStore, restorePersistedValue is always true (see Preference class for reference)
+        // so we load the persistent value with getPersistedInt if available in the data store, 
+        // and use defaultValue as fallback (onGetDefaultValue has been already called and it loaded the android:defaultValue attr from our xml).
+        if (defaultValue == null) {
+            // if we forgot to add android:defaultValue, default to black color
+            defaultValue = Color.BLACK;
+        }
+        mValue = getPersistedInt((Integer) defaultValue);
+        onColorChanged(mValue);
     }
 
     private void init(Context context, AttributeSet attrs) {
@@ -93,7 +103,7 @@
         setOnPreferenceClickListener(this);
         if (attrs != null) {
             mAlphaSliderEnabled = attrs.getAttributeBooleanValue(null, "alphaSlider", false);
-            int defVal = attrs.getAttributeIntValue(SETTINGS_NS, "defaultColorValue", DEF_VALUE_DEFAULT);
+            int defVal = attrs.getAttributeIntValue(ANDROIDNS, "defaultValue", DEF_VALUE_DEFAULT);
             if (defVal != DEF_VALUE_DEFAULT) {
                 mUsesDefaultButton =  true;
                 mDefValue = defVal;
@@ -230,11 +240,9 @@
 
     @Override
     public void onColorChanged(int color) {
-        if (isPersistent()) {
-            persistInt(color);
-        }
         mValue = color;
         setPreviewColor();
+        persistInt(color);
         try {
             getOnPreferenceChangeListener().onPreferenceChange(this, color);
         } catch (NullPointerException e) {
diff --git a/src/com/bliss/support/colorpicker/ColorPickerSecurePreference.java b/src/com/bliss/support/colorpicker/ColorPickerSecurePreference.java
new file mode 100644
index 0000000..3ba8d23
--- /dev/null
+++ b/src/com/bliss/support/colorpicker/ColorPickerSecurePreference.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2011 Sergey Margaritov
+ * Copyright (C) 2013 Slimroms
+ * Copyright (C) 2015 The TeamEos 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.colorpicker;
+
+import android.content.Context;
+import android.util.AttributeSet;
+
+import com.bliss.support.preferences.SecureSettingsStore;
+
+public class ColorPickerSecurePreference extends ColorPickerPreference {
+
+    public ColorPickerSecurePreference(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+        setPreferenceDataStore(new SecureSettingsStore(context.getContentResolver()));
+    }
+
+    public ColorPickerSecurePreference(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        setPreferenceDataStore(new SecureSettingsStore(context.getContentResolver()));
+    }
+
+    public ColorPickerSecurePreference(Context context) {
+        super(context, null);
+        setPreferenceDataStore(new SecureSettingsStore(context.getContentResolver()));
+    }
+}
diff --git a/src/com/bliss/support/colorpicker/ColorPickerSystemPreference.java b/src/com/bliss/support/colorpicker/ColorPickerSystemPreference.java
new file mode 100644
index 0000000..911091d
--- /dev/null
+++ b/src/com/bliss/support/colorpicker/ColorPickerSystemPreference.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2011 Sergey Margaritov
+ * Copyright (C) 2013 Slimroms
+ * Copyright (C) 2015 The TeamEos 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.colorpicker;
+
+import android.content.Context;
+import android.util.AttributeSet;
+
+import com.bliss.support.preferences.SystemSettingsStore;
+
+public class ColorPickerSystemPreference extends ColorPickerPreference {
+
+    public ColorPickerSystemPreference(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+        setPreferenceDataStore(new SystemSettingsStore(context.getContentResolver()));
+    }
+
+    public ColorPickerSystemPreference(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        setPreferenceDataStore(new SystemSettingsStore(context.getContentResolver()));
+    }
+
+    public ColorPickerSystemPreference(Context context) {
+        super(context, null);
+        setPreferenceDataStore(new SystemSettingsStore(context.getContentResolver()));
+    }
+}
