diff --git a/src/com/android/contacts/NfcHandler.java b/src/com/android/contacts/NfcHandler.java
index e059a3d..e3e94a9 100644
--- a/src/com/android/contacts/NfcHandler.java
+++ b/src/com/android/contacts/NfcHandler.java
@@ -20,13 +20,11 @@
 
 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.nfc.NfcEvent;
 import android.provider.ContactsContract.Contacts;
 
 import android.util.Log;
@@ -43,33 +41,26 @@
   * will be called to create the data to be sent over the link,
   * which is a vCard in this case.
   */
-public class NfcHandler implements NfcAdapter.NdefPushCallback {
-    private NfcAdapter mNfcAdapter;
-    private ContactDetailFragment mContactFragment;
-    private static final String TAG = "ContactsNfcHandler";
+public class NfcHandler implements NfcAdapter.CreateNdefMessageCallback {
+
+    static final String TAG = "ContactNfcHandler";
+
+    final ContactDetailFragment mContactFragment;
+
+    public static void register(Activity activity, ContactDetailFragment contactFragment) {
+        NfcAdapter adapter = NfcAdapter.getDefaultAdapter(activity.getApplicationContext());
+        if (adapter == null) {
+            return;  // NFC not available on this device
+        }
+        adapter.setNdefPushMessageCallback(new NfcHandler(contactFragment), activity);
+    }
 
     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() {
+    public NdefMessage createNdefMessage(NfcEvent event) {
         // Get the current contact URI
         Uri contactUri = mContactFragment.getUri();
         ContentResolver resolver = mContactFragment.getActivity().getContentResolver();
@@ -100,8 +91,4 @@
             return null;
         }
     }
-
-    @Override
-    public void onMessagePushed() {
-    }
 }
diff --git a/src/com/android/contacts/detail/ContactDetailFragment.java b/src/com/android/contacts/detail/ContactDetailFragment.java
index b2e20ca..0e3f100 100644
--- a/src/com/android/contacts/detail/ContactDetailFragment.java
+++ b/src/com/android/contacts/detail/ContactDetailFragment.java
@@ -137,7 +137,6 @@
     private OnScrollListener mVerticalScrollListener;
     private Uri mLookupUri;
     private Listener mListener;
-    private NfcHandler mNfcHandler;
 
     private ContactLoader.Result mContactData;
     private ImageView mStaticPhotoView;
@@ -239,7 +238,6 @@
             mLookupUri = savedInstanceState.getParcelable(KEY_CONTACT_URI);
             mListState = savedInstanceState.getParcelable(KEY_LIST_STATE);
         }
-        mNfcHandler = new NfcHandler(this);
     }
 
     @Override
@@ -254,13 +252,11 @@
     @Override
     public void onPause() {
         super.onPause();
-        mNfcHandler.onPause();
     }
 
     @Override
     public void onResume() {
         super.onResume();
-        mNfcHandler.onResume();
     }
 
     @Override
diff --git a/src/com/android/contacts/detail/ContactDetailLayoutController.java b/src/com/android/contacts/detail/ContactDetailLayoutController.java
index b26f8eb..6b8829e 100644
--- a/src/com/android/contacts/detail/ContactDetailLayoutController.java
+++ b/src/com/android/contacts/detail/ContactDetailLayoutController.java
@@ -17,10 +17,12 @@
 package com.android.contacts.detail;
 
 import com.android.contacts.ContactLoader;
+import com.android.contacts.NfcHandler;
 import com.android.contacts.R;
 import com.android.contacts.activities.ContactDetailActivity.FragmentKeyListener;
 
 import android.animation.ObjectAnimator;
+import android.app.Activity;
 import android.app.FragmentManager;
 import android.app.FragmentTransaction;
 import android.content.Context;
@@ -54,7 +56,7 @@
         TWO_COLUMN, VIEW_PAGER_AND_TAB_CAROUSEL, FRAGMENT_CAROUSEL,
     }
 
-    private final Context mContext;
+    private final Activity mActivity;
     private final LayoutInflater mLayoutInflater;
     private final FragmentManager mFragmentManager;
 
@@ -79,7 +81,7 @@
 
     private LayoutMode mLayoutMode;
 
-    public ContactDetailLayoutController(Context context, Bundle savedState,
+    public ContactDetailLayoutController(Activity activity, Bundle savedState,
             FragmentManager fragmentManager, View viewContainer, ContactDetailFragment.Listener
             contactDetailFragmentListener) {
 
@@ -88,8 +90,8 @@
                     + "without a non-null FragmentManager");
         }
 
-        mContext = context;
-        mLayoutInflater = (LayoutInflater) context.getSystemService(
+        mActivity = activity;
+        mLayoutInflater = (LayoutInflater) activity.getSystemService(
                 Context.LAYOUT_INFLATER_SERVICE);
         mFragmentManager = fragmentManager;
         mContactDetailFragmentListener = contactDetailFragmentListener;
@@ -134,6 +136,7 @@
         }
 
         mDetailFragment.setListener(mContactDetailFragmentListener);
+        NfcHandler.register(mActivity, mDetailFragment);
 
         // Read from savedState if possible
         int currentPageIndex = 0;
@@ -445,7 +448,7 @@
             mTabCarouselAnimator = ObjectAnimator.ofFloat(
                     mTabCarousel, "y", desiredValue).setDuration(75);
             mTabCarouselAnimator.setInterpolator(AnimationUtils.loadInterpolator(
-                    mContext, android.R.anim.accelerate_decelerate_interpolator));
+                    mActivity, android.R.anim.accelerate_decelerate_interpolator));
         }
 
         private void cancelTabCarouselAnimator() {
