diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index bbe0e74..511fd7d 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -732,7 +732,7 @@
         mDevelopmentPreferences.registerOnSharedPreferenceChangeListener(
                 mDevelopmentPreferencesListener);
 
-        mHeaderAdapter.resume();
+        mHeaderAdapter.resume(this);
         invalidateHeaders();
 
         registerReceiver(mBatteryInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
@@ -1624,9 +1624,9 @@
             holder.mIcon.setImageDrawable(icon);
         }
 
-        public void resume() {
+        public void resume(Context context) {
             mWifiEnabler.resume();
-            mBluetoothEnabler.resume();
+            mBluetoothEnabler.resume(context);
         }
 
         public void pause() {
diff --git a/src/com/android/settings/bluetooth/BluetoothAdvertisingEnabler.java b/src/com/android/settings/bluetooth/BluetoothAdvertisingEnabler.java
index b9e4ee2..a6b0838 100644
--- a/src/com/android/settings/bluetooth/BluetoothAdvertisingEnabler.java
+++ b/src/com/android/settings/bluetooth/BluetoothAdvertisingEnabler.java
@@ -26,7 +26,7 @@
  */
 final class BluetoothAdvertisingEnabler {
 
-    private final Context mContext;
+    private Context mContext;
     private final PreferenceScreen mBluetoothAdvertisingPreference;
 
     public BluetoothAdvertisingEnabler(Context context, PreferenceScreen bluetoothBroadcast) {
@@ -34,7 +34,10 @@
         mBluetoothAdvertisingPreference = bluetoothBroadcast;
     }
 
-    public void resume() {
+    public void resume(Context context) {
+        if (mContext != context) {
+            mContext = context;
+        }
         boolean isBroadcastingEnable = LocalBluetoothPreferences.isAdvertisingEnabled(mContext);
         handleAdvertisingStateChange(isBroadcastingEnable);
     }
diff --git a/src/com/android/settings/bluetooth/BluetoothEnabler.java b/src/com/android/settings/bluetooth/BluetoothEnabler.java
index df13eef..1a450d4 100644
--- a/src/com/android/settings/bluetooth/BluetoothEnabler.java
+++ b/src/com/android/settings/bluetooth/BluetoothEnabler.java
@@ -35,7 +35,7 @@
  * preference reflects the current state.
  */
 public final class BluetoothEnabler implements CompoundButton.OnCheckedChangeListener {
-    private final Context mContext;
+    private Context mContext;
     private Switch mSwitch;
     private boolean mValidListener;
     private final LocalBluetoothAdapter mLocalAdapter;
@@ -67,12 +67,16 @@
         mIntentFilter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
     }
 
-    public void resume() {
+    public void resume(Context context) {
         if (mLocalAdapter == null) {
             mSwitch.setEnabled(false);
             return;
         }
 
+        if (mContext != context) {
+            mContext = context;
+        }
+
         // Bluetooth state is not sticky, so set it manually
         handleStateChanged(mLocalAdapter.getBluetoothState());
 
diff --git a/src/com/android/settings/bluetooth/BluetoothSettings.java b/src/com/android/settings/bluetooth/BluetoothSettings.java
index 68cf37a..c6b560f 100755
--- a/src/com/android/settings/bluetooth/BluetoothSettings.java
+++ b/src/com/android/settings/bluetooth/BluetoothSettings.java
@@ -151,7 +151,7 @@
         // resume BluetoothEnabler before calling super.onResume() so we don't get
         // any onDeviceAdded() callbacks before setting up view in updateContent()
         if (mBluetoothEnabler != null) {
-            mBluetoothEnabler.resume();
+            mBluetoothEnabler.resume(getActivity());
         }
         super.onResume();
 
diff --git a/src/com/android/settings/bluetooth/LocalDeviceProfilesSettings.java b/src/com/android/settings/bluetooth/LocalDeviceProfilesSettings.java
index ed27697..47b1476 100644
--- a/src/com/android/settings/bluetooth/LocalDeviceProfilesSettings.java
+++ b/src/com/android/settings/bluetooth/LocalDeviceProfilesSettings.java
@@ -16,6 +16,7 @@
 
 package com.android.settings.bluetooth;
 
+import android.app.Activity;
 import android.os.Bundle;
 import android.preference.Preference;
 import android.preference.Preference.OnPreferenceClickListener;
@@ -80,9 +81,10 @@
     @Override
     public void onResume() {
         super.onResume();
-        mManager.setForegroundActivity(getActivity());
-        mAdvertisingEnabler.resume();
-        mDiscoverableEnabler.resume(getActivity());
+        final Activity activity = getActivity();
+        mManager.setForegroundActivity(activity);
+        mAdvertisingEnabler.resume(activity);
+        mDiscoverableEnabler.resume(activity);
     }
 
     @Override
