diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index d298fbe..f10ae75 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -28,6 +28,7 @@
     <uses-permission android:name="android.permission.READ_PROFILE" />
     <uses-permission android:name="android.permission.WRITE_PROFILE" />
     <uses-permission android:name="android.permission.INTERNET" />
+    <uses-permission android:name="android.permission.NFC" />
     <uses-permission android:name="android.permission.READ_PHONE_STATE" />
     <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
     <uses-permission android:name="com.google.android.googleapps.permission.GOOGLE_AUTH.mail" />
diff --git a/src/com/android/contacts/NfcHandler.java b/src/com/android/contacts/NfcHandler.java
new file mode 100644
index 0000000..1829983
--- /dev/null
+++ b/src/com/android/contacts/NfcHandler.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright (C) 2011 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.contacts;
+
+import com.android.contacts.detail.ContactDetailFragment;
+
+import android.app.Activity;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.net.Uri;
+import android.net.Uri.Builder;
+import android.nfc.NdefMessage;
+import android.nfc.NdefRecord;
+import android.nfc.NfcAdapter;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.Contacts;
+
+import android.util.Log;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+public class NfcHandler implements NfcAdapter.NdefPushCallback {
+    private NfcAdapter mNfcAdapter;
+    private ContactDetailFragment mContactFragment;
+    private static final String TAG = "ContactsNfcHandler";
+
+    public NfcHandler(ContactDetailFragment contactFragment) {
+        mContactFragment = contactFragment;
+        mNfcAdapter = NfcAdapter.getDefaultAdapter(
+                mContactFragment.getActivity());
+    }
+
+    public void onPause() {
+        if (mNfcAdapter != null) {
+            mNfcAdapter.disableForegroundNdefPush(
+                    mContactFragment.getActivity());
+        }
+    }
+
+    public void onResume() {
+        if (mNfcAdapter != null) {
+            mNfcAdapter.enableForegroundNdefPush(
+                    mContactFragment.getActivity(), this);
+        }
+    }
+
+    @Override
+    public NdefMessage createMessage() {
+        // Get the current contact URI
+        Uri contactUri = mContactFragment.getUri();
+        ContentResolver resolver = mContactFragment.getActivity().getContentResolver();
+        if (contactUri != null) {
+            final String lookupKey = Uri.encode(contactUri.getPathSegments().get(2));
+            final Uri shareUri = Contacts.CONTENT_VCARD_URI.buildUpon().
+                    appendPath(lookupKey).
+                    appendQueryParameter(Contacts.QUERY_PARAMETER_VCARD_NO_PHOTO, "true").
+                    build();
+            ByteArrayOutputStream ndefBytes = new ByteArrayOutputStream();
+            byte[] buffer = new byte[1024];
+            int r;
+            try {
+                InputStream vcardInputStream = resolver.openInputStream(shareUri);
+                vcardInputStream = resolver.openInputStream(shareUri);
+                while ((r = vcardInputStream.read(buffer)) > 0) {
+                    ndefBytes.write(buffer, 0, r);
+                }
+
+                NdefRecord vcardRecord = new NdefRecord(NdefRecord.TNF_MIME_MEDIA,
+                        "text/x-vCard".getBytes(), new byte[]{}, ndefBytes.toByteArray());
+                return new NdefMessage(new NdefRecord[] {vcardRecord});
+            } catch (IOException e) {
+                Log.e(TAG, "IOException creating vcard.");
+                return null;
+            }
+        } else {
+            Log.w(TAG, "No contact URI to share.");
+            return null;
+        }
+    }
+
+    @Override
+    public void onMessagePushed() {
+        // We may add a sound/notification here at some point.
+    }
+}
diff --git a/src/com/android/contacts/detail/ContactDetailFragment.java b/src/com/android/contacts/detail/ContactDetailFragment.java
index 41ac0ad..2a0085a 100644
--- a/src/com/android/contacts/detail/ContactDetailFragment.java
+++ b/src/com/android/contacts/detail/ContactDetailFragment.java
@@ -23,6 +23,7 @@
 import com.android.contacts.ContactPresenceIconUtil;
 import com.android.contacts.ContactsUtils;
 import com.android.contacts.GroupMetaData;
+import com.android.contacts.NfcHandler;
 import com.android.contacts.R;
 import com.android.contacts.TypePrecedence;
 import com.android.contacts.editor.SelectAccountDialogFragment;
@@ -120,6 +121,7 @@
     private View mView;
     private Uri mLookupUri;
     private Listener mListener;
+    private NfcHandler mNfcHandler;
 
     private ContactLoader.Result mContactData;
     private ContactDetailHeaderView mHeaderView;
@@ -192,6 +194,7 @@
         if (savedInstanceState != null) {
             mLookupUri = savedInstanceState.getParcelable(KEY_CONTACT_URI);
         }
+        mNfcHandler = new NfcHandler(this);
     }
 
     @Override
@@ -201,6 +204,18 @@
     }
 
     @Override
+    public void onPause() {
+        super.onPause();
+        mNfcHandler.onPause();
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+        mNfcHandler.onResume();
+    }
+
+    @Override
     public void onAttach(Activity activity) {
         super.onAttach(activity);
         mContext = activity;
