diff --git a/src/com/android/browser/BrowserSettings.java b/src/com/android/browser/BrowserSettings.java
index 60f13d5..9de584d 100644
--- a/src/com/android/browser/BrowserSettings.java
+++ b/src/com/android/browser/BrowserSettings.java
@@ -155,6 +155,9 @@
                         for (String origin : origins) {
                             PermissionsServiceFactory.PermissionsService.OriginInfo
                                     info = value.getOriginInfo(origin);
+                            if (info == null) {
+                                continue;
+                            }
                             int perm = info.getPermission(
                                     PermissionsServiceFactory.PermissionType.WEBREFINER);
                             if (perm == PermissionsServiceFactory.Permission.ALLOW) {
diff --git a/src/com/android/browser/preferences/SiteSpecificPreferencesFragment.java b/src/com/android/browser/preferences/SiteSpecificPreferencesFragment.java
index a67d96d..7ee84b2 100644
--- a/src/com/android/browser/preferences/SiteSpecificPreferencesFragment.java
+++ b/src/com/android/browser/preferences/SiteSpecificPreferencesFragment.java
@@ -706,8 +706,9 @@
                 origins[0] = mOriginInfo.getOrigin();
                 refiner.setPermissionForOrigins(origins, !disable);
             }
+            // Distracting contents and web refiner complimentary of each other
             updateTwoStatePreference(pref,
-                    PermissionsServiceFactory.PermissionType.WEBREFINER, (boolean)objValue);
+                    PermissionsServiceFactory.PermissionType.WEBREFINER, !(boolean)objValue);
         } else if (pref.getKey().toString().equalsIgnoreCase("popup_windows")) {
             updateTwoStatePreference(pref,
                     PermissionsServiceFactory.PermissionType.POPUP, (boolean)objValue);
diff --git a/src/com/android/browser/preferences/WebsiteSettingsFragment.java b/src/com/android/browser/preferences/WebsiteSettingsFragment.java
index f447ced..3f0215b 100644
--- a/src/com/android/browser/preferences/WebsiteSettingsFragment.java
+++ b/src/com/android/browser/preferences/WebsiteSettingsFragment.java
@@ -166,6 +166,13 @@
                 Set<String> origins = mPermServ.getOrigins();
                 String[] originArray = origins.toArray(new String[origins.size()]);
 
+                for (String origin : originArray) {
+                    PermissionsServiceFactory.PermissionsService.OriginInfo info =
+                            mPermServ.getOriginInfo(origin);
+                    if (info != null) {
+                        info.clearAllStoredData();
+                    }
+                }
                 // purge the permissionservice since its not needed
                 mPermServ.purge();
                 mPermServ = null;
@@ -313,7 +320,6 @@
                         new AlertDialog.OnClickListener() {
                             public void onClick(DialogInterface dlg, int which) {
                                 mAdapter.deleteAllOrigins();
-                                WebStorage.getInstance().deleteAllData();
                                 if (GeolocationPermissions.isIncognitoCreated()) {
                                     GeolocationPermissions.getIncognitoInstance().clearAll();
                                 }
