diff --git a/res/xml/wireless_settings.xml b/res/xml/wireless_settings.xml
index 1bb55ef..2493021 100644
--- a/res/xml/wireless_settings.xml
+++ b/res/xml/wireless_settings.xml
@@ -44,14 +44,12 @@
         android:key="toggle_bluetooth"
         android:title="@string/bluetooth_quick_toggle_title"
         android:summary="@string/bluetooth_quick_toggle_summary"
-        android:persistent="false"
-        android:dependency="toggle_airplane" />
+        android:persistent="false" />
 
     <PreferenceScreen
         android:key="bt_settings"
         android:title="@string/bluetooth_settings_title"
-        android:summary="@string/bluetooth_settings_summary"
-        android:dependency="toggle_airplane">
+        android:summary="@string/bluetooth_settings_summary">
         <intent
             android:action="android.intent.action.MAIN"
             android:targetPackage="com.android.settings"
diff --git a/src/com/android/settings/WirelessSettings.java b/src/com/android/settings/WirelessSettings.java
index 22417bb..ccce2a3 100644
--- a/src/com/android/settings/WirelessSettings.java
+++ b/src/com/android/settings/WirelessSettings.java
@@ -107,12 +107,12 @@
         Preference wifiPreference = findPreference(KEY_TOGGLE_WIFI);
         Preference btPreference = findPreference(KEY_TOGGLE_BLUETOOTH);
         Preference wifiSettings = findPreference(KEY_WIFI_SETTINGS);
+        Preference btSettings = findPreference(KEY_BT_SETTINGS);
         Preference vpnSettings = findPreference(KEY_VPN_SETTINGS);
 
         IBinder b = ServiceManager.getService(BluetoothAdapter.BLUETOOTH_SERVICE);
         if (b == null) {
             // Disable BT Settings if BT service is not available.
-            Preference btSettings = findPreference(KEY_BT_SETTINGS);
             btSettings.setEnabled(false);
         }
 
@@ -131,6 +131,13 @@
             wifiSettings.setDependency(airplanePreference.getKey());
             vpnSettings.setDependency(airplanePreference.getKey());
         }
+
+        // Manually set dependencies for Bluetooth when not toggleable.
+        if (toggleableRadios == null ||
+                !toggleableRadios.contains(Settings.System.RADIO_BLUETOOTH)) {
+            btPreference.setDependency(airplanePreference.getKey());
+            btSettings.setDependency(airplanePreference.getKey());
+        }
     }
 
     @Override
diff --git a/src/com/android/settings/bluetooth/BluetoothEnabler.java b/src/com/android/settings/bluetooth/BluetoothEnabler.java
index b872916..46793ce 100644
--- a/src/com/android/settings/bluetooth/BluetoothEnabler.java
+++ b/src/com/android/settings/bluetooth/BluetoothEnabler.java
@@ -16,6 +16,7 @@
 
 package com.android.settings.bluetooth;
 
+import com.android.settings.AirplaneModeEnabler;
 import com.android.settings.R;
 
 import android.bluetooth.BluetoothAdapter;
@@ -25,6 +26,7 @@
 import android.content.IntentFilter;
 import android.preference.Preference;
 import android.preference.CheckBoxPreference;
+import android.provider.Settings;
 import android.text.TextUtils;
 import android.util.Config;
 
@@ -116,14 +118,15 @@
                                            mOriginalSummary :
                                            null);
 
-            /*
-             * Don't ever disable the preference. Only enable here. Disablement
-             * is taken care of by the dependency code. If this is disabled
-             * here, it may not be re-enabled from the framework when dependency
-             * is met. http://b/issue?id=2053751
-             */
-            if (isEnabledByDependency()) {
+            final boolean hasDependency = !TextUtils.isEmpty(mCheckBoxPreference.getDependency());
+            final boolean bluetoothAllowed = isBluetoothAllowed(mContext);
+
+            // Avoid disabling when dependencies have been manually set,
+            // workaround for framework bug http://b/2053751
+            if (bluetoothAllowed) {
                 mCheckBoxPreference.setEnabled(true);
+            } else if (!hasDependency) {
+                mCheckBoxPreference.setEnabled(false);
             }
 
         } else if (state == BluetoothAdapter.STATE_TURNING_ON ||
@@ -139,22 +142,21 @@
         }
     }
 
-    private boolean isEnabledByDependency() {
-        Preference dep = getDependencyPreference();
-        if (dep == null) {
+    private static boolean isBluetoothAllowed(Context context) {
+        // allowed if we are not in airplane mode
+        if (!AirplaneModeEnabler.isAirplaneModeOn(context)) {
             return true;
         }
-
-        return !dep.shouldDisableDependents();
-    }
-
-    private Preference getDependencyPreference() {
-        String depKey = mCheckBoxPreference.getDependency();
-        if (TextUtils.isEmpty(depKey)) {
-            return null;
+        // allowed if bluetooth is not in AIRPLANE_MODE_RADIOS
+        String radios = Settings.System.getString(context.getContentResolver(),
+                Settings.System.AIRPLANE_MODE_RADIOS);
+        if (radios == null || !radios.contains(Settings.System.RADIO_BLUETOOTH)) {
+            return true;
         }
-
-        return mCheckBoxPreference.getPreferenceManager().findPreference(depKey);
+        // allowed if bluetooth is in AIRPLANE_MODE_TOGGLEABLE_RADIOS
+        radios = Settings.System.getString(context.getContentResolver(),
+                Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS);
+        return (radios != null && radios.contains(Settings.System.RADIO_BLUETOOTH));
     }
 
 }
diff --git a/src/com/android/settings/wifi/WifiEnabler.java b/src/com/android/settings/wifi/WifiEnabler.java
index 10a672b..b6c0fb5 100644
--- a/src/com/android/settings/wifi/WifiEnabler.java
+++ b/src/com/android/settings/wifi/WifiEnabler.java
@@ -122,9 +122,18 @@
             mWifiCheckBoxPref.setChecked(wifiState == WIFI_STATE_ENABLED);
             mWifiCheckBoxPref
                     .setSummary(wifiState == WIFI_STATE_DISABLED ? mOriginalSummary : null);
-            
-            mWifiCheckBoxPref.setEnabled(isWifiAllowed(mContext));
-            
+
+            final boolean hasDependency = !TextUtils.isEmpty(mWifiCheckBoxPref.getDependency());
+            final boolean wifiAllowed = isWifiAllowed(mContext);
+
+            // Avoid disabling when dependencies have been manually set,
+            // workaround for framework bug http://b/2053751
+            if (wifiAllowed) {
+                mWifiCheckBoxPref.setEnabled(true);
+            } else if (!hasDependency) {
+                mWifiCheckBoxPref.setEnabled(false);
+            }
+
         } else if (wifiState == WIFI_STATE_DISABLING || wifiState == WIFI_STATE_ENABLING) {
             mWifiCheckBoxPref.setSummary(wifiState == WIFI_STATE_ENABLING ? R.string.wifi_starting
                     : R.string.wifi_stopping);
