diff --git a/src/com/android/settings/WirelessSettings.java b/src/com/android/settings/WirelessSettings.java
index b63a5a1..b256f94 100644
--- a/src/com/android/settings/WirelessSettings.java
+++ b/src/com/android/settings/WirelessSettings.java
@@ -256,7 +256,7 @@
 
         final Activity activity = getActivity();
         mAirplaneModePreference = (SwitchPreference) findPreference(KEY_TOGGLE_AIRPLANE);
-        CheckBoxPreference nfc = (CheckBoxPreference) findPreference(KEY_TOGGLE_NFC);
+        SwitchPreference nfc = (SwitchPreference) findPreference(KEY_TOGGLE_NFC);
         PreferenceScreen androidBeam = (PreferenceScreen) findPreference(KEY_ANDROID_BEAM_SETTINGS);
         CheckBoxPreference nsd = (CheckBoxPreference) findPreference(KEY_TOGGLE_NSD);
 
diff --git a/src/com/android/settings/nfc/NfcEnabler.java b/src/com/android/settings/nfc/NfcEnabler.java
index 018b8ae..2fb95e4 100644
--- a/src/com/android/settings/nfc/NfcEnabler.java
+++ b/src/com/android/settings/nfc/NfcEnabler.java
@@ -21,10 +21,10 @@
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.nfc.NfcAdapter;
-import android.preference.CheckBoxPreference;
 import android.preference.Preference;
 import android.preference.PreferenceScreen;
 
+import android.preference.SwitchPreference;
 import com.android.settings.R;
 
 /**
@@ -34,7 +34,7 @@
  */
 public class NfcEnabler implements Preference.OnPreferenceChangeListener {
     private final Context mContext;
-    private final CheckBoxPreference mCheckbox;
+    private final SwitchPreference mSwitch;
     private final PreferenceScreen mAndroidBeam;
     private final NfcAdapter mNfcAdapter;
     private final IntentFilter mIntentFilter;
@@ -50,16 +50,16 @@
         }
     };
 
-    public NfcEnabler(Context context, CheckBoxPreference checkBoxPreference,
+    public NfcEnabler(Context context, SwitchPreference switchPreference,
             PreferenceScreen androidBeam) {
         mContext = context;
-        mCheckbox = checkBoxPreference;
+        mSwitch = switchPreference;
         mAndroidBeam = androidBeam;
         mNfcAdapter = NfcAdapter.getDefaultAdapter(context);
 
         if (mNfcAdapter == null) {
             // NFC is not supported
-            mCheckbox.setEnabled(false);
+            mSwitch.setEnabled(false);
             mAndroidBeam.setEnabled(false);
             mIntentFilter = null;
             return;
@@ -73,7 +73,7 @@
         }
         handleNfcStateChanged(mNfcAdapter.getAdapterState());
         mContext.registerReceiver(mReceiver, mIntentFilter);
-        mCheckbox.setOnPreferenceChangeListener(this);
+        mSwitch.setOnPreferenceChangeListener(this);
     }
 
     public void pause() {
@@ -81,14 +81,14 @@
             return;
         }
         mContext.unregisterReceiver(mReceiver);
-        mCheckbox.setOnPreferenceChangeListener(null);
+        mSwitch.setOnPreferenceChangeListener(null);
     }
 
     public boolean onPreferenceChange(Preference preference, Object value) {
         // Turn NFC on/off
 
         final boolean desiredState = (Boolean) value;
-        mCheckbox.setEnabled(false);
+        mSwitch.setEnabled(false);
 
         if (desiredState) {
             mNfcAdapter.enable();
@@ -102,14 +102,14 @@
     private void handleNfcStateChanged(int newState) {
         switch (newState) {
         case NfcAdapter.STATE_OFF:
-            mCheckbox.setChecked(false);
-            mCheckbox.setEnabled(true);
+            mSwitch.setChecked(false);
+            mSwitch.setEnabled(true);
             mAndroidBeam.setEnabled(false);
             mAndroidBeam.setSummary(R.string.android_beam_disabled_summary);
             break;
         case NfcAdapter.STATE_ON:
-            mCheckbox.setChecked(true);
-            mCheckbox.setEnabled(true);
+            mSwitch.setChecked(true);
+            mSwitch.setEnabled(true);
             mAndroidBeam.setEnabled(true);
             if (mNfcAdapter.isNdefPushEnabled()) {
                 mAndroidBeam.setSummary(R.string.android_beam_on_summary);
@@ -118,13 +118,13 @@
             }
             break;
         case NfcAdapter.STATE_TURNING_ON:
-            mCheckbox.setChecked(true);
-            mCheckbox.setEnabled(false);
+            mSwitch.setChecked(true);
+            mSwitch.setEnabled(false);
             mAndroidBeam.setEnabled(false);
             break;
         case NfcAdapter.STATE_TURNING_OFF:
-            mCheckbox.setChecked(false);
-            mCheckbox.setEnabled(false);
+            mSwitch.setChecked(false);
+            mSwitch.setEnabled(false);
             mAndroidBeam.setEnabled(false);
             break;
         }
