diff --git a/src/com/android/settings/AirplaneModeEnabler.java b/src/com/android/settings/AirplaneModeEnabler.java
index d1c591e..4ce5198 100644
--- a/src/com/android/settings/AirplaneModeEnabler.java
+++ b/src/com/android/settings/AirplaneModeEnabler.java
@@ -25,6 +25,7 @@
 import android.os.UserHandle;
 import android.preference.CheckBoxPreference;
 import android.preference.Preference;
+import android.preference.SwitchPreference;
 import android.provider.Settings;
 
 import com.android.internal.telephony.PhoneStateIntentReceiver;
@@ -36,7 +37,7 @@
 
     private PhoneStateIntentReceiver mPhoneStateReceiver;
     
-    private final CheckBoxPreference mCheckBoxPref;
+    private final SwitchPreference mSwitchPref;
 
     private static final int EVENT_SERVICE_STATE_CHANGED = 3;
 
@@ -58,10 +59,10 @@
         }
     };
 
-    public AirplaneModeEnabler(Context context, CheckBoxPreference airplaneModeCheckBoxPreference) {
+    public AirplaneModeEnabler(Context context, SwitchPreference airplaneModeCheckBoxPreference) {
         
         mContext = context;
-        mCheckBoxPref = airplaneModeCheckBoxPreference;
+        mSwitchPref = airplaneModeCheckBoxPreference;
         
         airplaneModeCheckBoxPreference.setPersistent(false);
     
@@ -71,10 +72,10 @@
 
     public void resume() {
         
-        mCheckBoxPref.setChecked(isAirplaneModeOn(mContext));
+        mSwitchPref.setChecked(isAirplaneModeOn(mContext));
 
         mPhoneStateReceiver.registerIntent();
-        mCheckBoxPref.setOnPreferenceChangeListener(this);
+        mSwitchPref.setOnPreferenceChangeListener(this);
         mContext.getContentResolver().registerContentObserver(
                 Settings.Global.getUriFor(Settings.Global.AIRPLANE_MODE_ON), true,
                 mAirplaneModeObserver);
@@ -82,7 +83,7 @@
     
     public void pause() {
         mPhoneStateReceiver.unregisterIntent();
-        mCheckBoxPref.setOnPreferenceChangeListener(null);
+        mSwitchPref.setOnPreferenceChangeListener(null);
         mContext.getContentResolver().unregisterContentObserver(mAirplaneModeObserver);
     }
 
@@ -96,7 +97,7 @@
         Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 
                                 enabling ? 1 : 0);
         // Update the UI to reflect system setting
-        mCheckBoxPref.setChecked(enabling);
+        mSwitchPref.setChecked(enabling);
         
         // Post the intent
         Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
@@ -113,7 +114,7 @@
      * - mobile does not send failure notification, fail on timeout.
      */
     private void onAirplaneModeChanged() {
-        mCheckBoxPref.setChecked(isAirplaneModeOn(mContext));
+        mSwitchPref.setChecked(isAirplaneModeOn(mContext));
     }
     
     /**
diff --git a/src/com/android/settings/WirelessSettings.java b/src/com/android/settings/WirelessSettings.java
index 39d0f4c..b63a5a1 100644
--- a/src/com/android/settings/WirelessSettings.java
+++ b/src/com/android/settings/WirelessSettings.java
@@ -39,6 +39,7 @@
 import android.preference.Preference;
 import android.preference.Preference.OnPreferenceChangeListener;
 import android.preference.PreferenceScreen;
+import android.preference.SwitchPreference;
 import android.provider.SearchIndexableResource;
 import android.provider.Settings;
 import android.telephony.TelephonyManager;
@@ -79,7 +80,7 @@
     public static final int REQUEST_CODE_EXIT_ECM = 1;
 
     private AirplaneModeEnabler mAirplaneModeEnabler;
-    private CheckBoxPreference mAirplaneModePreference;
+    private SwitchPreference mAirplaneModePreference;
     private NfcEnabler mNfcEnabler;
     private NfcAdapter mNfcAdapter;
     private NsdEnabler mNsdEnabler;
@@ -254,7 +255,7 @@
         final boolean isSecondaryUser = UserHandle.myUserId() != UserHandle.USER_OWNER;
 
         final Activity activity = getActivity();
-        mAirplaneModePreference = (CheckBoxPreference) findPreference(KEY_TOGGLE_AIRPLANE);
+        mAirplaneModePreference = (SwitchPreference) findPreference(KEY_TOGGLE_AIRPLANE);
         CheckBoxPreference nfc = (CheckBoxPreference) findPreference(KEY_TOGGLE_NFC);
         PreferenceScreen androidBeam = (PreferenceScreen) findPreference(KEY_ANDROID_BEAM_SETTINGS);
         CheckBoxPreference nsd = (CheckBoxPreference) findPreference(KEY_TOGGLE_NSD);
