diff --git a/src/com/android/browser/BrowserPreferencesPage.java b/src/com/android/browser/BrowserPreferencesPage.java
index 2141490..46fde6a 100644
--- a/src/com/android/browser/BrowserPreferencesPage.java
+++ b/src/com/android/browser/BrowserPreferencesPage.java
@@ -19,8 +19,10 @@
 import android.app.Activity;
 import android.app.Fragment;
 import android.content.Intent;
+import android.net.Uri;
 import android.os.Bundle;
 import android.preference.PreferenceActivity;
+import android.text.TextUtils;
 import android.view.MenuItem;
 
 import com.android.browser.preferences.AboutPreferencesFragment;
@@ -28,8 +30,12 @@
 
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
 
 public class BrowserPreferencesPage extends Activity {
+    public static String sResultExtra;
+    private static ArrayList<String> sUpdatedUrls =
+            new ArrayList<String>(); //List of URLS for whom settings were updated
 
     public static void startPreferencesForResult(Activity callerActivity, String url, int requestCode) {
         final Intent intent = new Intent(callerActivity, BrowserPreferencesPage.class);
@@ -62,6 +68,8 @@
             return;
         }
 
+        sResultExtra = "";
+        sUpdatedUrls.clear();
         Intent intent = getIntent();
         if (intent != null) {
             String action = intent.getAction();
@@ -120,4 +128,22 @@
         }
         return super.onOptionsItemSelected(item);
     }
+
+    @Override
+    public void finish() {
+        if (!TextUtils.isEmpty(sResultExtra)) {
+            Intent intent = this.getIntent();
+            intent.putExtra(Intent.EXTRA_TEXT, sResultExtra);
+            intent.putStringArrayListExtra(Controller.EXTRA_UPDATED_URLS, sUpdatedUrls);
+            this.setResult(RESULT_OK, intent);
+        }
+        super.finish();
+    }
+
+    public static void onUrlNeedsReload(String url) {
+        String host = (Uri.parse(url)).getHost();
+        if (!sUpdatedUrls.contains(host)) {
+            sUpdatedUrls.add(host);
+        }
+    }
 }
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index 2b66988..4a83f8a 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -134,6 +134,7 @@
     public static final String INCOGNITO_URI = "chrome://incognito";
     public static final String EXTRA_REQUEST_CODE = "_fake_request_code_";
     public static final String EXTRA_RESULT_CODE = "_fake_result_code_";
+    public static final String EXTRA_UPDATED_URLS = "updated_urls";
 
     // Remind switch to data connection if wifi is unavailable
     private static final int NETWORK_SWITCH_TYPE_OK = 1;
@@ -1334,6 +1335,17 @@
                     String action = intent.getStringExtra(Intent.EXTRA_TEXT);
                     if (PreferenceKeys.PREF_PRIVACY_CLEAR_HISTORY.equals(action)) {
                         mTabControl.removeParentChildRelationShips();
+                    } else if (action.equals(PreferenceKeys.ACTION_RELOAD_PAGE)) {
+                        ArrayList<String> origins =
+                                intent.getStringArrayListExtra(EXTRA_UPDATED_URLS);
+                        if (origins.isEmpty()) {
+                            mTabControl.reloadLiveTabs();
+                        }
+                        else{
+                            for (String origin : origins){
+                                mTabControl.findAndReload(origin);
+                            }
+                        }
                     }
                 }
                 break;
diff --git a/src/com/android/browser/NavigationBarBase.java b/src/com/android/browser/NavigationBarBase.java
index 77050db..799891c 100644
--- a/src/com/android/browser/NavigationBarBase.java
+++ b/src/com/android/browser/NavigationBarBase.java
@@ -341,8 +341,8 @@
                     baos.toByteArray());
         }
         BrowserPreferencesPage.startPreferenceFragmentExtraForResult(
-                mUiController.getActivity(),
-                SiteSpecificPreferencesFragment.class.getName(), bundle, 0);
+                mUiController.getActivity(), SiteSpecificPreferencesFragment.class.getName(),
+                bundle, Controller.PREFERENCES_PAGE);
     }
 
     @Override
diff --git a/src/com/android/browser/PreferenceKeys.java b/src/com/android/browser/PreferenceKeys.java
index 2f144c5..15ec6a0 100644
--- a/src/com/android/browser/PreferenceKeys.java
+++ b/src/com/android/browser/PreferenceKeys.java
@@ -143,4 +143,6 @@
     static final String PREF_LEGAL_CREDITS = "legal_credits";
     static final String PREF_LEGAL_EULA = "legal_eula";
     static final String PREF_LEGAL_PRIVACY_POLICY = "legal_privacy_policy";
+
+    static final String ACTION_RELOAD_PAGE = "reload";
 }
diff --git a/src/com/android/browser/TabControl.java b/src/com/android/browser/TabControl.java
index a30cdca..81da696 100644
--- a/src/com/android/browser/TabControl.java
+++ b/src/com/android/browser/TabControl.java
@@ -16,6 +16,7 @@
 
 package com.android.browser;
 
+import android.net.Uri;
 import android.os.Bundle;
 import android.util.Log;
 
@@ -38,6 +39,31 @@
     private static final String POSITIONS = "positions";
     private static final String CURRENT = "current";
 
+
+    /*
+    Find and reload any live tabs that have loaded the given URL.
+    Note - Upto 2 tabs are live at any given moment.
+     */
+    public void findAndReload(String origin) {
+        for (Tab tab : mTabs){
+            if (tab.getWebView() != null) {
+                Uri url = Uri.parse(tab.getWebView().getUrl());
+                if (url.getHost().equals(origin)){
+                    tab.getWebView().reload();
+                }
+            }
+        }
+    }
+
+    // Reload the all the live tabs
+    public void reloadLiveTabs() {
+        for (Tab tab : mTabs) {
+            if (tab.getWebView() != null) {
+                tab.getWebView().reload();
+            }
+        }
+    }
+
     public static interface OnThumbnailUpdatedListener {
         void onThumbnailUpdated(Tab t);
     }
diff --git a/src/com/android/browser/preferences/GeneralPreferencesFragment.java b/src/com/android/browser/preferences/GeneralPreferencesFragment.java
index 09355a5..9f61061 100644
--- a/src/com/android/browser/preferences/GeneralPreferencesFragment.java
+++ b/src/com/android/browser/preferences/GeneralPreferencesFragment.java
@@ -45,6 +45,7 @@
 import android.widget.Toast;
 
 import com.android.browser.AutoFillSettingsFragment;
+import com.android.browser.BrowserPreferencesPage;
 import com.android.browser.BrowserSettings;
 import com.android.browser.PreferenceKeys;
 import com.android.browser.R;
@@ -102,6 +103,10 @@
         SwitchPreference powersave = (SwitchPreference) findPreference(PREF_POWERSAVE);
         powersave.setOnPreferenceChangeListener(this);
 
+        SwitchPreference nightmode = (SwitchPreference) findPreference(
+                PreferenceKeys.PREF_NIGHTMODE_ENABLED);
+        nightmode.setOnPreferenceChangeListener(this);
+
         final Bundle arguments = getArguments();
         if (arguments != null && arguments.getBoolean("LowPower")) {
             LowPowerDialogFragment fragment = LowPowerDialogFragment.newInstance();
@@ -168,8 +173,12 @@
                 PermissionsServiceFactory.setDefaultPermissions(
                     PermissionsServiceFactory.PermissionType.WEBREFINER, !(Boolean)objValue);
                 showPowerSaveInfo((Boolean) objValue);
+            BrowserPreferencesPage.sResultExtra = PreferenceKeys.ACTION_RELOAD_PAGE;
         }
 
+        if (pref.getKey().equals(PreferenceKeys.PREF_NIGHTMODE_ENABLED)) {
+            BrowserPreferencesPage.sResultExtra = PreferenceKeys.ACTION_RELOAD_PAGE;
+        }
         return true;
     }
 
diff --git a/src/com/android/browser/preferences/PrivacySecurityPreferencesFragment.java b/src/com/android/browser/preferences/PrivacySecurityPreferencesFragment.java
index 1bcf0a3..d038163 100644
--- a/src/com/android/browser/preferences/PrivacySecurityPreferencesFragment.java
+++ b/src/com/android/browser/preferences/PrivacySecurityPreferencesFragment.java
@@ -17,6 +17,7 @@
 package com.android.browser.preferences;
 
 import com.android.browser.BrowserLocationSwitchPreference;
+import com.android.browser.BrowserPreferencesPage;
 import com.android.browser.BrowserSettings;
 import com.android.browser.PreferenceKeys;
 import com.android.browser.R;
@@ -155,30 +156,35 @@
         if (pref.getKey().toString().equalsIgnoreCase("enable_geolocation")) {
             PermissionsServiceFactory.setDefaultPermissions(
                     PermissionsServiceFactory.PermissionType.GEOLOCATION, flag);
+            BrowserPreferencesPage.sResultExtra = PreferenceKeys.ACTION_RELOAD_PAGE;
             return true;
         }
 
         if (pref.getKey().toString().equalsIgnoreCase("microphone")) {
             PermissionsServiceFactory.setDefaultPermissions(
                     PermissionsServiceFactory.PermissionType.VOICE, flag);
+            BrowserPreferencesPage.sResultExtra = PreferenceKeys.ACTION_RELOAD_PAGE;
             return true;
         }
 
         if (pref.getKey().toString().equalsIgnoreCase("camera")) {
             PermissionsServiceFactory.setDefaultPermissions(
                     PermissionsServiceFactory.PermissionType.VIDEO, flag);
+            BrowserPreferencesPage.sResultExtra = PreferenceKeys.ACTION_RELOAD_PAGE;
             return true;
         }
 
         if (pref.getKey().toString().equalsIgnoreCase("distracting_contents")) {
             PermissionsServiceFactory.setDefaultPermissions(
                     PermissionsServiceFactory.PermissionType.WEBREFINER, !flag);
+            BrowserPreferencesPage.sResultExtra = PreferenceKeys.ACTION_RELOAD_PAGE;
             return true;
         }
 
         if (pref.getKey().toString().equalsIgnoreCase("popup_windows")) {
             PermissionsServiceFactory.setDefaultPermissions(
                     PermissionsServiceFactory.PermissionType.POPUP, flag);
+            BrowserPreferencesPage.sResultExtra = PreferenceKeys.ACTION_RELOAD_PAGE;
             return true;
         }
 
@@ -192,12 +198,14 @@
                         PermissionsServiceFactory.PermissionType.THIRDPARTYCOOKIES, flag);
                 showPermission(findPreference("accept_third_cookies"), flag);
             }
+            BrowserPreferencesPage.sResultExtra = PreferenceKeys.ACTION_RELOAD_PAGE;
             return true;
         }
 
         if (pref.getKey().toString().equalsIgnoreCase("accept_third_cookies")) {
             PermissionsServiceFactory.setDefaultPermissions(
                     PermissionsServiceFactory.PermissionType.THIRDPARTYCOOKIES, flag);
+            BrowserPreferencesPage.sResultExtra = PreferenceKeys.ACTION_RELOAD_PAGE;
             return true;
         }
 
diff --git a/src/com/android/browser/preferences/SiteSpecificPreferencesFragment.java b/src/com/android/browser/preferences/SiteSpecificPreferencesFragment.java
index 0b3ec8a..23311b4 100644
--- a/src/com/android/browser/preferences/SiteSpecificPreferencesFragment.java
+++ b/src/com/android/browser/preferences/SiteSpecificPreferencesFragment.java
@@ -57,6 +57,7 @@
 import android.widget.TextView;
 
 import com.android.browser.BrowserLocationListPreference;
+import com.android.browser.BrowserPreferencesPage;
 import com.android.browser.BrowserSettings;
 import com.android.browser.NavigationBarBase;
 import com.android.browser.PreferenceKeys;
@@ -94,6 +95,8 @@
     private ActionBar mBar;
     private List<String> mLocationValues;
 
+    private Preference mSecurityInfoPrefs;
+
     private boolean mUsingDefaultSettings = true;
     private int mOriginalActionBarOptions;
     private int mIconColor = 0;
@@ -182,6 +185,14 @@
             if (view != null) {
                 view.clearText();
             }
+
+            boolean empty = true;
+            for (Map.Entry<ViewType, String> entry: mTexts.entrySet()) {
+                if (!entry.getValue().isEmpty()) {
+                    empty = false;
+                }
+            }
+            mbEmpty = empty;
         }
 
         public void setResource(ViewType type, View parent, int resId) {
@@ -309,6 +320,8 @@
                 mSslState = 2;
             }
         }
+
+        updateSecurityViewVisibility();
     }
 
     private AlertDialog.Builder createSslCertificateDialog(Context ctx,
@@ -452,14 +465,17 @@
         Preference pref = findPreference("clear_data");
         updateStorageInfo(pref);
         pref.setOnPreferenceClickListener(this);
-        String warningText = new String("");
+        String warningText = (mSslState == 1) ? getString(R.string.pref_warning_cert) + " " :
+                new String("");
+        boolean setting_warnings = false;
 
         long permission = showPermission("select_geolocation",
                 PermissionsServiceFactory.PermissionType.GEOLOCATION,
                 R.string.pref_security_ask_before_using, R.string.pref_security_not_allowed);
 
         if (PermissionsServiceFactory.Permission.ALLOW == permission) {
-            warningText = getString(R.string.pref_privacy_enable_geolocation);
+            warningText += getString(R.string.pref_privacy_enable_geolocation);
+            setting_warnings = true;
         }
 
         ListPreference geolocation_pref = (ListPreference) findPreference("select_geolocation");
@@ -477,7 +493,8 @@
                 pref.setSummary(customSummary);
             }
             mUsingDefaultSettings = false;
-            warningText = getString(R.string.pref_privacy_enable_geolocation);
+            warningText += getString(R.string.pref_privacy_enable_geolocation);
+            setting_warnings = true;
             geolocation_pref.setValueIndex(1);
         } else if (permission == PermissionsServiceFactory.Permission.ALLOW) {
             geolocation_pref.setValueIndex(2);
@@ -487,25 +504,31 @@
                 R.string.pref_security_ask_before_using, R.string.pref_security_not_allowed);
 
         if (PermissionsServiceFactory.Permission.ALLOW == permission) {
-            if (!warningText.isEmpty()) {
+            if (!warningText.isEmpty() && setting_warnings) {
                 warningText += ", ";
             }
             warningText += getString(R.string.pref_security_allow_mic);
+            setting_warnings = true;
         }
 
         permission = showPermission("camera", PermissionsServiceFactory.PermissionType.VIDEO,
                 R.string.pref_security_ask_before_using, R.string.pref_security_not_allowed);
         if (PermissionsServiceFactory.Permission.ALLOW == permission) {
-            if (!warningText.isEmpty()) {
+            if (!warningText.isEmpty() && setting_warnings) {
                 warningText += ", ";
             }
             warningText += getString(R.string.pref_security_allow_camera);
+            setting_warnings = true;
         }
 
         if (!warningText.isEmpty()) {
-            warningText += " ";
-            warningText += getResources().getString(R.string.pref_security_access_is_allowed);
-            mSecurityViews.appendText(SiteSecurityViewFactory.ViewType.WARNING, warningText);
+            if (setting_warnings) {
+                warningText += " ";
+                warningText += getResources().getString(R.string.pref_security_access_is_allowed);
+            }
+            mSecurityViews.setText(SiteSecurityViewFactory.ViewType.WARNING, warningText);
+        } else {
+            mSecurityViews.clearText(SiteSecurityViewFactory.ViewType.WARNING);
         }
 
         pref = findPreference("distracting_contents");
@@ -530,13 +553,28 @@
             mBar.getCustomView().setVisibility(View.VISIBLE);
         }
 
+        updateSecurityViewVisibility();
+    }
+
+    private void updateSecurityViewVisibility() {
         if (mSecurityViews.mbEmpty) {
             PreferenceScreen screen = (PreferenceScreen)
                     findPreference("site_specific_prefs");
 
-            pref = findPreference("site_security_info_title");
-            if (pref != null && screen != null) {
-                screen.removePreference(pref);
+            if (mSecurityInfoPrefs == null) {
+                mSecurityInfoPrefs = findPreference("site_security_info_title");
+            }
+
+            if (mSecurityInfoPrefs != null && screen != null) {
+                screen.removePreference(mSecurityInfoPrefs);
+            }
+        } else {
+            PreferenceScreen screen = (PreferenceScreen)
+                    findPreference("site_specific_prefs");
+
+            Preference pref = findPreference("site_security_info_title");
+            if (pref == null && mSecurityInfoPrefs != null) {
+                screen.addPreference(mSecurityInfoPrefs);
             }
         }
 
@@ -636,6 +674,9 @@
                                             refiner.useDefaultPermissionForOrigins(origins);
                                         }
 
+                                        BrowserPreferencesPage.sResultExtra =
+                                                PreferenceKeys.ACTION_RELOAD_PAGE;
+                                        BrowserPreferencesPage.onUrlNeedsReload(mOriginText);
                                         finish();
                                     }
                                 }
@@ -752,6 +793,9 @@
             updateTwoStatePreference(pref,
                     PermissionsServiceFactory.PermissionType.COOKIE, (boolean)objValue);
         }
+        BrowserPreferencesPage.sResultExtra = PreferenceKeys.ACTION_RELOAD_PAGE;
+        BrowserPreferencesPage.onUrlNeedsReload(mOriginText);
+        updatePreferenceInfo();
         return true;
     }
 
@@ -767,6 +811,9 @@
                                     mOriginInfo.clearAllStoredData();
                                     Preference e = findPreference("clear_data");
                                     e.setSummary("(Empty)");
+                                    BrowserPreferencesPage.sResultExtra =
+                                            PreferenceKeys.ACTION_RELOAD_PAGE;
+                                    BrowserPreferencesPage.onUrlNeedsReload(mOriginText);
                                 }
                             }
                         })
