diff --git a/src/com/android/browser/BrowserSettings.java b/src/com/android/browser/BrowserSettings.java
index cde500c..fef0b44 100644
--- a/src/com/android/browser/BrowserSettings.java
+++ b/src/com/android/browser/BrowserSettings.java
@@ -51,6 +51,7 @@
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.LinkedList;
+import java.util.List;
 import java.util.Set;
 
 import org.codeaurora.swe.AutoFillProfile;
@@ -591,11 +592,22 @@
     }
 
     public void resetDefaultPreferences() {
-        mPrefs.edit()
-                .clear()
-                .apply();
+        WebRefiner webRefiner = WebRefiner.getInstance();
+        if (webRefiner != null) {
+            List<String> webrefiner_list = PermissionsServiceFactory.getOriginsForPermission(
+                    PermissionsServiceFactory.PermissionType.WEBREFINER);
+            if (!webrefiner_list.isEmpty()) {
+                String[] origins = webrefiner_list.toArray(new String[webrefiner_list.size()]);
+                webRefiner.useDefaultPermissionForOrigins(origins);
+            }
+        }
+
+        PermissionsServiceFactory.resetDefaultPermissions();
+        mPrefs.edit().clear().apply();
+
         resetCachedValues();
-        if (WebRefiner.getInstance() != null) {
+
+        if (webRefiner != null) {
             mPrefs.edit().putBoolean(PREF_WEB_REFINER, true).apply();
         } else {
             mPrefs.edit().putBoolean(PREF_WEB_REFINER, false).apply();
diff --git a/src/com/android/browser/BrowserYesNoPreference.java b/src/com/android/browser/BrowserYesNoPreference.java
index 37e8431..d73ea08 100644
--- a/src/com/android/browser/BrowserYesNoPreference.java
+++ b/src/com/android/browser/BrowserYesNoPreference.java
@@ -28,7 +28,7 @@
 import android.view.ViewGroup;
 import android.widget.Button;
 
-class BrowserYesNoPreference extends DialogPreference {
+public class BrowserYesNoPreference extends DialogPreference {
     private SharedPreferences mPrefs;
     private Context mContext;
     private String mNeutralBtnTxt;
@@ -36,6 +36,10 @@
     private String mNegativeBtnTxt;
     private boolean mNeutralBtnClicked = false;
 
+    public static final int CANCEL_BTN = 0;
+    public static final int OK_BTN = 1;
+    public static final int OTHER_BTN = 2;
+
     // This is the constructor called by the inflater
     public BrowserYesNoPreference(Context context, AttributeSet attrs) {
         super(context, attrs);
@@ -154,8 +158,8 @@
 
         if (callChangeListener(result)) {
             setEnabled(false);
-            BrowserSettings settings = BrowserSettings.getInstance();
             if (PreferenceKeys.PREF_CLEAR_SELECTED_DATA.equals(getKey())) {
+                BrowserSettings settings = BrowserSettings.getInstance();
                 if (mPrefs.getBoolean(PreferenceKeys.PREF_PRIVACY_CLEAR_CACHE, false)) {
                     settings.clearCache();
                     settings.clearDatabases();
@@ -176,23 +180,8 @@
                         false)) {
                     settings.clearLocationAccess();
                 }
-
-                setEnabled(true);
-            } else if (PreferenceKeys.PREF_RESET_DEFAULT_PREFERENCES.equals(
-                    getKey())) {
-                if (mNeutralBtnClicked) {
-                    settings.clearCache();
-                    settings.clearDatabases();
-                    settings.clearCookies();
-                    settings.clearHistory();
-                    settings.clearFormData();
-                    settings.clearPasswords();
-                    settings.clearLocationAccess();
-                }
-
-                settings.resetDefaultPreferences();
-                setEnabled(true);
             }
+            setEnabled(true);
         }
     }
 }
diff --git a/src/com/android/browser/preferences/AdvancedPreferencesFragment.java b/src/com/android/browser/preferences/AdvancedPreferencesFragment.java
index 00977f6..3d98894 100644
--- a/src/com/android/browser/preferences/AdvancedPreferencesFragment.java
+++ b/src/com/android/browser/preferences/AdvancedPreferencesFragment.java
@@ -33,12 +33,11 @@
 import com.android.browser.BaseUi;
 import com.android.browser.BrowserActivity;
 import com.android.browser.BrowserSettings;
+import com.android.browser.BrowserYesNoPreference;
 import com.android.browser.DownloadHandler;
 import com.android.browser.PreferenceKeys;
 import com.android.browser.R;
 
-import org.codeaurora.swe.PermissionsServiceFactory;
-
 public class AdvancedPreferencesFragment
         implements Preference.OnPreferenceChangeListener, Preference.OnPreferenceClickListener {
 
@@ -157,8 +156,19 @@
 
         else if (pref.getKey().equals(PreferenceKeys.PREF_RESET_DEFAULT_PREFERENCES)) {
             Integer value = (Integer) objValue;
-            if (value.intValue() != 0) {
-                PermissionsServiceFactory.resetDefaultPermissions();
+            if (value.intValue() != BrowserYesNoPreference.CANCEL_BTN) {
+                BrowserSettings settings = BrowserSettings.getInstance();
+                if (value.intValue() == BrowserYesNoPreference.OTHER_BTN) {
+                    settings.clearCache();
+                    settings.clearDatabases();
+                    settings.clearCookies();
+                    settings.clearHistory();
+                    settings.clearFormData();
+                    settings.clearPasswords();
+                    settings.clearLocationAccess();
+                }
+
+                settings.resetDefaultPreferences();
                 mFragment.startActivity(new Intent(BrowserActivity.ACTION_RESTART, null,
                         mFragment.getActivity(), BrowserActivity.class));
                 return true;
