diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 567400b..b68fca0 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -1716,6 +1716,16 @@
             </intent-filter>
         </activity>
 
+       <activity android:name=".PairNfcDevice"
+                android:taskAffinity="com.android.settings"
+                android:parentActivityName="Settings$SecuritySettingsActivity"
+                android:launchMode="singleTask">
+            <intent-filter>
+                <action android:name="android.settings.PAIR_NFC_DEVICE" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
+
         <activity android:name="Settings$NotificationAccessSettingsActivity"
                   android:label="@string/manage_notification_access"
                   android:taskAffinity=""
diff --git a/res/drawable-hdpi/no_ring_detected.png b/res/drawable-hdpi/no_ring_detected.png
new file mode 100644
index 0000000..2adb7bf
--- /dev/null
+++ b/res/drawable-hdpi/no_ring_detected.png
Binary files differ
diff --git a/res/drawable-hdpi/ring_detected.png b/res/drawable-hdpi/ring_detected.png
new file mode 100644
index 0000000..5b1836b
--- /dev/null
+++ b/res/drawable-hdpi/ring_detected.png
Binary files differ
diff --git a/res/drawable-hdpi/ring_paired.png b/res/drawable-hdpi/ring_paired.png
new file mode 100644
index 0000000..065e752
--- /dev/null
+++ b/res/drawable-hdpi/ring_paired.png
Binary files differ
diff --git a/res/drawable-mdpi/no_ring_detected.png b/res/drawable-mdpi/no_ring_detected.png
new file mode 100644
index 0000000..6d53477
--- /dev/null
+++ b/res/drawable-mdpi/no_ring_detected.png
Binary files differ
diff --git a/res/drawable-mdpi/ring_detected.png b/res/drawable-mdpi/ring_detected.png
new file mode 100644
index 0000000..9dc0e9f
--- /dev/null
+++ b/res/drawable-mdpi/ring_detected.png
Binary files differ
diff --git a/res/drawable-mdpi/ring_paired.png b/res/drawable-mdpi/ring_paired.png
new file mode 100644
index 0000000..70c8541
--- /dev/null
+++ b/res/drawable-mdpi/ring_paired.png
Binary files differ
diff --git a/res/drawable-xhdpi/no_ring_detected.png b/res/drawable-xhdpi/no_ring_detected.png
new file mode 100644
index 0000000..a657afa
--- /dev/null
+++ b/res/drawable-xhdpi/no_ring_detected.png
Binary files differ
diff --git a/res/drawable-xhdpi/ring_detected.png b/res/drawable-xhdpi/ring_detected.png
new file mode 100644
index 0000000..a6180b2
--- /dev/null
+++ b/res/drawable-xhdpi/ring_detected.png
Binary files differ
diff --git a/res/drawable-xhdpi/ring_paired.png b/res/drawable-xhdpi/ring_paired.png
new file mode 100644
index 0000000..df77918
--- /dev/null
+++ b/res/drawable-xhdpi/ring_paired.png
Binary files differ
diff --git a/res/drawable-xxhdpi/no_ring_detected.png b/res/drawable-xxhdpi/no_ring_detected.png
new file mode 100644
index 0000000..a56d6b7
--- /dev/null
+++ b/res/drawable-xxhdpi/no_ring_detected.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ring_detected.png b/res/drawable-xxhdpi/ring_detected.png
new file mode 100644
index 0000000..b225740
--- /dev/null
+++ b/res/drawable-xxhdpi/ring_detected.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ring_paired.png b/res/drawable-xxhdpi/ring_paired.png
new file mode 100644
index 0000000..c90233b
--- /dev/null
+++ b/res/drawable-xxhdpi/ring_paired.png
Binary files differ
diff --git a/res/layout/activity_nfc_pairing.xml b/res/layout/activity_nfc_pairing.xml
new file mode 100644
index 0000000..c753fd0
--- /dev/null
+++ b/res/layout/activity_nfc_pairing.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!-- Copyright (C) 2013 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:orientation="vertical"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:gravity="center_vertical">
+
+     <ImageView
+        android:id="@+id/status_image"
+        android:src="@drawable/no_ring_detected"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:gravity="bottom"
+        android:scaleType="center"/>
+
+     <TextView
+        android:id="@+id/status_text"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:gravity="top"
+        android:textSize="24sp"
+        android:textAlignment="center"
+        android:paddingTop="16dp"
+        android:paddingLeft="20dp"
+        android:paddingRight="20dp"/>
+
+</LinearLayout>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 6ab0009..6965935 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -700,6 +700,10 @@
     <string name="security_enable_widgets_title">Enable widgets</string>
     <!-- Summary for settings checkbox to disable widgets when the setting has been disabled by an installed device admin [CHAR LIMIT=50] -->
     <string name="security_enable_widgets_disabled_summary">Disabled by administrator</string>
+    <!-- Text shown for title of settings to setup/change NFC unlock [CHAR LIMIT=20]-->
+    <string name="nfc_unlock_title">NFC unlock</string>
+
+
     <!-- Text shown for summary of owner info setting [CHAR LIMIT=40]-->
     <string name="owner_info_settings_summary"></string>
     <!-- Hint text shown in owner info edit text [CHAR LIMIT=50] -->
@@ -4946,4 +4950,21 @@
 
     <!-- Text to display in regulatory info screen (from device overlay). -->
     <string name="regulatory_info_text"></string>
+
+    <!-- NFC unlock -->
+    <string name="lock_settings_nfc_title">NFC Screen Lock Settings</string>
+    <string name="nfc_unlock_paired_tags_title">Paired Tags</string>
+    <string name="nfc_unlock_enabled">Enabled</string>
+    <string name="start_nfc_pairing">Pair with a tag</string>
+
+    <!-- Nfc pair activity strings -->
+    <string name="title_activity_nfc_pairing">NfcPairingActivity</string>
+    <string name="pairing_button_title">Pair now</string>
+    <string name="status_no_ring_detected">Set the tag flat on a table and place the phone on top</string>
+    <string name="status_device_paired">Tag and phone successfully paired, you are done!</string>
+    <string name="status_error_invalid_device">The tag provided cannot be used to unlock your phone</string>
+    <string name="status_error_pairing_failed">The pairing with your tag failed, please try again</string>
+    <string name="enable_nfc">NFC is not enabled and is required for NFC Unlock. Please turn on NFC.</string>
+    <string name="ok">NFC Settings</string>
+
 </resources>
diff --git a/res/xml/security_settings_biometric_weak.xml b/res/xml/security_settings_biometric_weak.xml
index 7236673..c2e8ab7 100644
--- a/res/xml/security_settings_biometric_weak.xml
+++ b/res/xml/security_settings_biometric_weak.xml
@@ -61,6 +61,11 @@
             android:title="@string/owner_info_settings_title"
             android:summary="@string/owner_info_settings_summary"/>
 
+        <PreferenceScreen
+            android:key="nfc_unlock_set_or_change"
+            android:title="@string/nfc_unlock_title"
+            android:persistent="false"/>
+
     </PreferenceCategory>
 
 </PreferenceScreen>
diff --git a/res/xml/security_settings_chooser.xml b/res/xml/security_settings_chooser.xml
index d29d221..1a54315 100644
--- a/res/xml/security_settings_chooser.xml
+++ b/res/xml/security_settings_chooser.xml
@@ -36,6 +36,11 @@
             android:title="@string/owner_info_settings_title"
             android:summary="@string/owner_info_settings_summary"/>
 
+        <PreferenceScreen
+            android:key="nfc_unlock_set_or_change"
+            android:title="@string/nfc_unlock_title"
+            android:persistent="false"/>
+
     </PreferenceCategory>
 
 </PreferenceScreen>
diff --git a/res/xml/security_settings_nfc_unlock.xml b/res/xml/security_settings_nfc_unlock.xml
new file mode 100644
index 0000000..c3442c6
--- /dev/null
+++ b/res/xml/security_settings_nfc_unlock.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2013 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <PreferenceCategory
+        android:key="security_category"
+        android:title="@string/lock_settings_nfc_title">
+    <CheckBoxPreference
+        android:key="nfc_unlock_enabled"
+        android:title="@string/nfc_unlock_enabled"
+        android:persistent="false" />
+
+    <Preference
+        android:title="@string/start_nfc_pairing"
+        android:key="nfc_pairing"
+        android:persistent="false"
+        android:dependency="nfc_unlock_enabled" >
+        <intent android:action="android.settings.PAIR_NFC_DEVICE"/>
+    </Preference>
+  </PreferenceCategory>
+
+  <PreferenceCategory
+          android:key="nfc_unlock_tags_category"
+          android:title="@string/nfc_unlock_paired_tags_title">
+
+  </PreferenceCategory>
+
+</PreferenceScreen>
diff --git a/res/xml/security_settings_password.xml b/res/xml/security_settings_password.xml
index 7cde2f5..a102efa 100644
--- a/res/xml/security_settings_password.xml
+++ b/res/xml/security_settings_password.xml
@@ -48,6 +48,11 @@
             android:title="@string/owner_info_settings_title"
             android:summary="@string/owner_info_settings_summary"/>
 
+        <PreferenceScreen
+            android:key="nfc_unlock_set_or_change"
+            android:title="@string/nfc_unlock_title"
+            android:persistent="false"/>
+
     </PreferenceCategory>
 
 </PreferenceScreen>
diff --git a/res/xml/security_settings_pattern.xml b/res/xml/security_settings_pattern.xml
index d8e06b3..0584e4a 100644
--- a/res/xml/security_settings_pattern.xml
+++ b/res/xml/security_settings_pattern.xml
@@ -52,6 +52,11 @@
             android:title="@string/owner_info_settings_title"
             android:summary="@string/owner_info_settings_summary"/>
 
+        <PreferenceScreen
+            android:key="nfc_unlock_set_or_change"
+            android:title="@string/nfc_unlock_title"
+            android:persistent="false"/>
+
     </PreferenceCategory>
 
 </PreferenceScreen>
diff --git a/res/xml/security_settings_pin.xml b/res/xml/security_settings_pin.xml
index 1e8fbbe..1417e21 100644
--- a/res/xml/security_settings_pin.xml
+++ b/res/xml/security_settings_pin.xml
@@ -48,6 +48,11 @@
             android:title="@string/owner_info_settings_title"
             android:summary="@string/owner_info_settings_summary"/>
 
+        <PreferenceScreen
+            android:key="nfc_unlock_set_or_change"
+            android:title="@string/nfc_unlock_title"
+            android:persistent="false"/>
+
     </PreferenceCategory>
 
 </PreferenceScreen>
diff --git a/src/com/android/settings/NfcLockFragment.java b/src/com/android/settings/NfcLockFragment.java
new file mode 100644
index 0000000..b7bf6f7
--- /dev/null
+++ b/src/com/android/settings/NfcLockFragment.java
@@ -0,0 +1,125 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings;
+
+import android.app.AlertDialog;
+import android.content.DialogInterface;
+import android.nfc.NfcAdapter;
+import android.nfc.NfcUnlock;
+import android.os.Bundle;
+import android.preference.CheckBoxPreference;
+import android.preference.Preference;
+
+import android.preference.PreferenceCategory;
+import android.util.Log;
+import com.android.internal.widget.LockPatternUtils;
+
+import java.text.DateFormat;
+import java.util.Date;
+
+import static android.preference.Preference.OnPreferenceClickListener;
+
+public class NfcLockFragment extends SettingsPreferenceFragment {
+
+    private static final String NFC_PAIRING = "nfc_pairing";
+    private static final String NFC_UNLOCK_ENABLED = "nfc_unlock_enabled";
+    private static final String TAGS_CATEGORY = "nfc_unlock_tags_category";
+    private static final String TAG_FORMAT = "Tag # %d";
+
+    private NfcUnlock mNfcUnlock;
+    private LockPatternUtils mLockPatternUtils;
+    private NfcAdapter mNfcAdapter;
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        mNfcUnlock = NfcUnlock.getInstance(NfcAdapter.getDefaultAdapter(getActivity()));
+        mLockPatternUtils = new LockPatternUtils(getActivity());
+        mNfcAdapter = NfcAdapter.getDefaultAdapter(getActivity());
+        addPreferencesFromResource(R.xml.security_settings_nfc_unlock);
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+
+        boolean prefsEnabled = (mLockPatternUtils.isLockPasswordEnabled() ||
+                mLockPatternUtils.isLockPatternEnabled()) && mNfcAdapter.isEnabled();
+        CheckBoxPreference unlockPref = (CheckBoxPreference) findPreference(NFC_UNLOCK_ENABLED);
+        unlockPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
+            @Override
+            public boolean onPreferenceChange(Preference preference, Object newValue) {
+                mNfcUnlock.setNfcUnlockEnabled((Boolean) newValue);
+                return true;
+            }
+        });
+        Preference pairingPref = findPreference(NFC_PAIRING);
+        unlockPref.setEnabled(prefsEnabled);
+        pairingPref.setEnabled(prefsEnabled);
+
+        long[] tagRegistryTimes = mNfcUnlock.getTagRegistryTimes();
+        unlockPref.setChecked(mNfcUnlock.getNfcUnlockEnabled());
+
+        final PreferenceCategory pairedTags = (PreferenceCategory) findPreference(TAGS_CATEGORY);
+        pairedTags.setEnabled(prefsEnabled);
+
+        loadTagList(tagRegistryTimes, pairedTags);
+    }
+
+    private void loadTagList(long[] tagRegistryTimes, final PreferenceCategory pairedTags) {
+        pairedTags.removeAll();
+
+        for (int i = 0; i < tagRegistryTimes.length; i++) {
+
+            final Preference thisPreference = new Preference(getActivity());
+            final long timestamp = tagRegistryTimes[i];
+
+            thisPreference.setTitle(String.format(TAG_FORMAT, i));
+            thisPreference.setSummary(
+                    DateFormat.getDateTimeInstance().format(new Date(tagRegistryTimes[i])));
+            thisPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
+                @Override
+                public boolean onPreferenceClick(Preference preference) {
+
+                    AlertDialog.Builder deleteDialogBuilder = new AlertDialog.Builder(getActivity());
+
+                    deleteDialogBuilder.setTitle(thisPreference.getTitle());
+                    deleteDialogBuilder.setItems(new String[] {"Delete"},
+                            new DialogInterface.OnClickListener() {
+                                @Override
+                                public void onClick(DialogInterface dialog, int which) {
+                                    if (which == 0) {
+                                        if (mNfcUnlock.deregisterTag(timestamp)) {
+                                            loadTagList(mNfcUnlock.getTagRegistryTimes(),
+                                                    pairedTags);
+                                        }
+                                    }
+                                }
+                            });
+
+
+                    deleteDialogBuilder.show();
+
+                    return true;
+                }
+            });
+
+
+            pairedTags.addPreference(thisPreference);
+        }
+    }
+}
diff --git a/src/com/android/settings/PairNfcDevice.java b/src/com/android/settings/PairNfcDevice.java
new file mode 100644
index 0000000..638f0d7
--- /dev/null
+++ b/src/com/android/settings/PairNfcDevice.java
@@ -0,0 +1,161 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.PendingIntent;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.nfc.NfcAdapter;
+import android.nfc.NfcUnlock;
+import android.nfc.Tag;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.PowerManager;
+import android.provider.Settings;
+import android.view.Menu;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+public class PairNfcDevice extends Activity {
+    private static String TAG = PairNfcDevice.class.getName();
+
+    private TextView mStatusText;
+    private ImageView mStatusImage;
+
+    private PendingIntent mPendingIntent;
+    private NfcAdapter mAdapter;
+
+    private Handler mHandler = new Handler();
+    private PowerManager.WakeLock mWakeLock;
+
+    private NfcUnlock mNfcUnlock;
+
+    // If pairing fails, we immediately get a new intent that would not leave time for the user to
+    // read the error message.  So we'll just drop it and the user has to try again.
+    // TEST
+    private boolean mWaitingForDeviceDelayed;
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_nfc_pairing);
+
+        mStatusText = (TextView) findViewById(R.id.status_text);
+        mStatusImage = (ImageView) findViewById(R.id.status_image);
+
+        mAdapter = NfcAdapter.getDefaultAdapter(this);
+        mPendingIntent = PendingIntent.getActivity(
+                this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
+
+        mNfcUnlock = NfcUnlock.getInstance(mAdapter);
+
+        setWaitingForDeviceMode();
+    }
+
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        return false;
+    }
+
+    public void onPause() {
+        super.onPause();
+        mAdapter.disableForegroundDispatch(this);
+        if (mWakeLock != null) {
+            mWakeLock.release();
+        }
+    }
+
+    public void onResume() {
+        super.onResume();
+
+        if (!mAdapter.isEnabled()) {
+            // We need the user to start NFC.
+            AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
+            dialogBuilder.setMessage(R.string.enable_nfc);
+            dialogBuilder.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
+                public void onClick(DialogInterface dialog, int id) {
+                    startActivity(new Intent(Settings.ACTION_NFC_SETTINGS));
+                }
+            });
+            dialogBuilder.show();
+        }
+
+        mAdapter.enableForegroundDispatch(this, mPendingIntent, null, null);
+
+        if (mWakeLock == null) {
+            PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE);
+            mWakeLock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, TAG);
+        }
+        mWakeLock.acquire();
+    }
+
+    @Override
+    public void onNewIntent(Intent intent) {
+        Tag tag = (Tag) intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
+        if (!mWaitingForDeviceDelayed) {
+            processTag(tag);
+        }
+    }
+
+    private void processTag(Tag tag) {
+        if (mNfcUnlock.registerTag(tag)) {
+            setPairingSucceededMode();
+        } else {
+            setPairingFailedMode();
+        }
+    }
+
+    private void setWaitingForDeviceModeDelayed(int delayInMs) {
+        mWaitingForDeviceDelayed = true;
+        mHandler.postDelayed(new Runnable() {
+            @Override
+            public void run() {
+                mWaitingForDeviceDelayed = false;
+                setWaitingForDeviceMode();
+            }
+        }, delayInMs);
+    }
+
+    private void setWaitingForDeviceMode() {
+        mStatusImage.setImageResource(R.drawable.no_ring_detected);
+        mStatusText.setText(R.string.status_no_ring_detected);
+    }
+
+    private void setPairingFailedMode() {
+        setErrorMode(R.string.status_error_pairing_failed);
+    }
+
+    private void setPairingSucceededMode() {
+        mStatusImage.setImageResource(R.drawable.ring_paired);
+        mStatusText.setText(R.string.status_device_paired);
+
+        // Automatically quit.
+        mHandler.postDelayed(new Runnable() {
+            @Override
+            public void run() {
+                finish();
+            }
+        }, 4000);
+    }
+
+    private void setErrorMode(int errorMsgResourceId) {
+        mStatusText.setText(errorMsgResourceId);
+        setWaitingForDeviceModeDelayed(2500);
+    }
+}
diff --git a/src/com/android/settings/SecuritySettings.java b/src/com/android/settings/SecuritySettings.java
index e4dcea1..45c36ac 100644
--- a/src/com/android/settings/SecuritySettings.java
+++ b/src/com/android/settings/SecuritySettings.java
@@ -29,7 +29,9 @@
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.content.pm.UserInfo;
+import android.nfc.NfcUnlock;
 import android.os.Bundle;
+import android.os.SystemProperties;
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.preference.CheckBoxPreference;
@@ -57,6 +59,7 @@
 
     // Lock Settings
     private static final String KEY_UNLOCK_SET_OR_CHANGE = "unlock_set_or_change";
+    private static final String KEY_NFC_UNLOCK_SET_OR_CHANGE = "nfc_unlock_set_or_change";
     private static final String KEY_BIOMETRIC_WEAK_IMPROVE_MATCHING =
             "biometric_weak_improve_matching";
     private static final String KEY_BIOMETRIC_WEAK_LIVELINESS = "biometric_weak_liveliness";
@@ -225,6 +228,17 @@
             }
         }
 
+        // don't display NFC unlock settings if the prop is not enabled
+        if (!NfcUnlock.getPropertyEnabled()) {
+            PreferenceGroup securityCategory =
+                    (PreferenceGroup) root.findPreference(KEY_SECURITY_CATEGORY);
+
+            if (securityCategory != null) {
+                securityCategory.removePreference(
+                        root.findPreference(KEY_NFC_UNLOCK_SET_OR_CHANGE));
+            }
+        }
+
         // Append the rest of the settings
         addPreferencesFromResource(R.xml.security_settings_misc);
 
@@ -520,6 +534,9 @@
         if (KEY_UNLOCK_SET_OR_CHANGE.equals(key)) {
             startFragment(this, "com.android.settings.ChooseLockGeneric$ChooseLockGenericFragment",
                     SET_OR_CHANGE_LOCK_METHOD_REQUEST, null);
+        } else if (KEY_NFC_UNLOCK_SET_OR_CHANGE.equals(key)) {
+            startFragment(this, "com.android.settings.NfcLockFragment",
+                    SET_OR_CHANGE_LOCK_METHOD_REQUEST, null);
         } else if (KEY_BIOMETRIC_WEAK_IMPROVE_MATCHING.equals(key)) {
             ChooseLockSettingsHelper helper =
                     new ChooseLockSettingsHelper(this.getActivity(), this);
