diff --git a/src/com/android/browser/BrowserSettings.java b/src/com/android/browser/BrowserSettings.java
index eb36023..ca5c283 100644
--- a/src/com/android/browser/BrowserSettings.java
+++ b/src/com/android/browser/BrowserSettings.java
@@ -27,6 +27,7 @@
 import android.preference.PreferenceManager;
 import android.provider.Settings;
 import android.util.DisplayMetrics;
+import android.webkit.ValueCallback;
 import android.webkit.WebStorage;
 
 import com.android.browser.homepages.HomeProvider;
@@ -39,8 +40,10 @@
 import com.android.browser.search.SearchEngines;
 
 import java.lang.ref.WeakReference;
+import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.LinkedList;
+import java.util.Set;
 
 import org.codeaurora.swe.AutoFillProfile;
 import org.codeaurora.swe.CookieManager;
@@ -125,6 +128,47 @@
 
     public void onEngineInitializationComplete() {
         mEngineInitialized = true;
+
+        // Intialize Web Refiner only once
+        final WebRefiner refiner = WebRefiner.getInstance();
+        if (refiner != null) {
+            refiner.setRulesEnabled(WebRefiner.CATEGORY_ALL,
+                    PermissionsServiceFactory.getDefaultPermissions(
+                            PermissionsServiceFactory.PermissionType.WEBREFINER));
+
+            PermissionsServiceFactory.getPermissionsService(
+                new ValueCallback<PermissionsServiceFactory.PermissionsService>() {
+                    @Override
+                    public void onReceiveValue(
+                            PermissionsServiceFactory.PermissionsService value) {
+                        Set<String> origins = value.getOrigins();
+                        ArrayList<String> allowList = new ArrayList<>();
+                        ArrayList<String> blockList = new ArrayList<>();
+                        for (String origin : origins) {
+                            PermissionsServiceFactory.PermissionsService.OriginInfo
+                                    info = value.getOriginInfo(origin);
+                            int perm = info.getPermission(
+                                    PermissionsServiceFactory.PermissionType.WEBREFINER);
+                            if (perm == PermissionsServiceFactory.Permission.ALLOW) {
+                                allowList.add(origin);
+                            } else if (perm == PermissionsServiceFactory.Permission.BLOCK) {
+                                blockList.add(origin);
+                            }
+                        }
+                        if (!allowList.isEmpty()) {
+                            refiner.enableRulesForDomains(WebRefiner.CATEGORY_ALL,
+                                    allowList.toArray(new String[allowList.size()]));
+                        }
+
+                        if (!blockList.isEmpty()) {
+                            refiner.disableRulesForDomains(WebRefiner.CATEGORY_ALL,
+                                    blockList.toArray(new String[blockList.size()]));
+                        }
+                    }
+                }
+            );
+        }
+
         mAutofillHandler = new AutofillHandler(mContext);
         if (mSyncManagedSettings) {
             syncManagedSettings();
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index af06161..5be0c9f 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -88,9 +88,7 @@
 import org.codeaurora.swe.CookieSyncManager;
 import org.codeaurora.swe.Engine;
 import org.codeaurora.swe.HttpAuthHandler;
-import org.codeaurora.swe.PermissionsServiceFactory;
 import org.codeaurora.swe.SslErrorHandler;
-import org.codeaurora.swe.WebRefiner;
 import org.codeaurora.swe.WebSettings;
 import org.codeaurora.swe.WebView;
 import org.codeaurora.swe.WebBackForwardList;
@@ -127,7 +125,6 @@
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
-import java.util.Set;
 
 /**
  * Controller for browser
@@ -294,45 +291,6 @@
         mNetworkHandler = new NetworkStateHandler(mActivity, this);
         mHomepageHandler = new HomepageHandler(browser, this);
         mAppMenuHandler = new AppMenuHandler(browser, this, R.menu.browser);
-
-        final WebRefiner refiner = WebRefiner.getInstance();
-        if (refiner != null) {
-            refiner.setRulesEnabled(WebRefiner.CATEGORY_ALL,
-                    !PermissionsServiceFactory.getDefaultPermissions(
-                            PermissionsServiceFactory.PermissionType.WEBREFINER));
-
-            PermissionsServiceFactory.getPermissionsService(
-                    new ValueCallback<PermissionsServiceFactory.PermissionsService>() {
-                        @Override
-                        public void onReceiveValue(
-                                PermissionsServiceFactory.PermissionsService value) {
-                            Set<String> origins = value.getOrigins();
-                            ArrayList<String> allowList = new ArrayList<>();
-                            ArrayList<String> blockList = new ArrayList<>();
-                            for (String origin : origins) {
-                                PermissionsServiceFactory.PermissionsService.OriginInfo
-                                        info = value.getOriginInfo(origin);
-                                int perm = info.getPermission(
-                                        PermissionsServiceFactory.PermissionType.WEBREFINER);
-                                if (perm == PermissionsServiceFactory.Permission.ALLOW) {
-                                    allowList.add(origin);
-                                } else if (perm == PermissionsServiceFactory.Permission.BLOCK) {
-                                    blockList.add(origin);
-                                }
-                            }
-                            if (!allowList.isEmpty()) {
-                                refiner.enableRulesForDomains(WebRefiner.CATEGORY_ALL,
-                                        allowList.toArray(new String[allowList.size()]));
-                            }
-
-                            if (!blockList.isEmpty()) {
-                                refiner.disableRulesForDomains(WebRefiner.CATEGORY_ALL,
-                                        blockList.toArray(new String[blockList.size()]));
-                            }
-                        }
-                    }
-            );
-        }
     }
 
     @Override
diff --git a/src/com/android/browser/preferences/AdvancedPreferencesFragment.java b/src/com/android/browser/preferences/AdvancedPreferencesFragment.java
index 40e0106..cadc924 100644
--- a/src/com/android/browser/preferences/AdvancedPreferencesFragment.java
+++ b/src/com/android/browser/preferences/AdvancedPreferencesFragment.java
@@ -37,6 +37,7 @@
 import com.android.browser.R;
 
 import org.codeaurora.swe.BrowserCommandLine;
+import org.codeaurora.swe.PermissionsServiceFactory;
 
 public class AdvancedPreferencesFragment
         implements Preference.OnPreferenceChangeListener, Preference.OnPreferenceClickListener {
@@ -146,6 +147,7 @@
         if (pref.getKey().equals(PreferenceKeys.PREF_RESET_DEFAULT_PREFERENCES)) {
             Boolean value = (Boolean) objValue;
             if (value.booleanValue() == true) {
+                PermissionsServiceFactory.resetDefaultPermissions();
                 mFragment.startActivity(new Intent(BrowserActivity.ACTION_RESTART, null,
                         mFragment.getActivity(), BrowserActivity.class));
                 return true;
diff --git a/src/com/android/browser/preferences/PrivacySecurityPreferencesFragment.java b/src/com/android/browser/preferences/PrivacySecurityPreferencesFragment.java
index f7aa217..68c5607 100644
--- a/src/com/android/browser/preferences/PrivacySecurityPreferencesFragment.java
+++ b/src/com/android/browser/preferences/PrivacySecurityPreferencesFragment.java
@@ -57,8 +57,13 @@
 
         readAndShowPermission("camera", PermissionsServiceFactory.PermissionType.VIDEO);
 
-        readAndShowPermission("distracting_contents",
-                PermissionsServiceFactory.PermissionType.WEBREFINER);
+        // since webrefiner and distracting_contents are paradoxes
+        // the value needs to be flipped
+        Preference pref = findPreference("distracting_contents");
+        pref.setOnPreferenceChangeListener(this);
+        showPermission(pref,
+            !PermissionsServiceFactory.getDefaultPermissions(
+                PermissionsServiceFactory.PermissionType.WEBREFINER));
 
         readAndShowPermission("popup_windows", PermissionsServiceFactory.PermissionType.POPUP);
 
@@ -118,12 +123,8 @@
         }
 
         if (pref.getKey().toString().equalsIgnoreCase("distracting_contents")) {
-            WebRefiner refiner = WebRefiner.getInstance();
             PermissionsServiceFactory.setDefaultPermissions(
-                    PermissionsServiceFactory.PermissionType.WEBREFINER, flag);
-            if (refiner != null) {
-                refiner.setRulesEnabled(WebRefiner.CATEGORY_ALL, !flag);
-            }
+                    PermissionsServiceFactory.PermissionType.WEBREFINER, !flag);
             return true;
         }
 
