diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index 7192f3f..92cb743 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -157,7 +157,6 @@
     private IntentHandler mIntentHandler;
     private PageDialogsHandler mPageDialogsHandler;
     private NetworkStateHandler mNetworkHandler;
-    private NfcHandler mNfcHandler;
 
     private Message mAutoFillSetupMessage;
 
@@ -228,7 +227,6 @@
         mUrlHandler = new UrlHandler(this);
         mIntentHandler = new IntentHandler(mActivity, this);
         mPageDialogsHandler = new PageDialogsHandler(mActivity, this);
-        mNfcHandler = new NfcHandler(mActivity, this);
 
         startHandler();
         mBookmarksObserver = new ContentObserver(mHandler) {
@@ -255,6 +253,8 @@
     }
 
     void start(final Bundle icicle, final Intent intent) {
+        NfcHandler.register(mActivity, this);
+
         boolean noCrashRecovery = intent.getBooleanExtra(NO_CRASH_RECOVERY, false);
         if (icicle != null || noCrashRecovery) {
             doStart(icicle, intent);
@@ -632,7 +632,6 @@
         }
         mUi.onPause();
         mNetworkHandler.onPause();
-        mNfcHandler.onPause();
 
         WebView.disablePlatformNotifications();
     }
@@ -667,7 +666,6 @@
 
         mUi.onResume();
         mNetworkHandler.onResume();
-        mNfcHandler.onResume();
         WebView.enablePlatformNotifications();
     }
 
diff --git a/src/com/android/browser/NfcHandler.java b/src/com/android/browser/NfcHandler.java
index a8e11d3..6147aea 100644
--- a/src/com/android/browser/NfcHandler.java
+++ b/src/com/android/browser/NfcHandler.java
@@ -20,7 +20,7 @@
 import android.nfc.NdefMessage;
 import android.nfc.NdefRecord;
 import android.nfc.NfcAdapter;
-import android.os.AsyncTask;
+import android.nfc.NfcEvent;
 import android.os.Handler;
 import android.os.Message;
 
@@ -31,46 +31,39 @@
   * when the activity is in the foreground and resumed.
   * Incognito tabs will not be shared over NFC.
   */
-public class NfcHandler implements NfcAdapter.NdefPushCallback {
-    private NfcAdapter mNfcAdapter;
-    private Activity mActivity;
-    private Controller mController;
-    private Handler mHandler;
-    private Tab mCurrentTab;
-    private boolean mIsPrivate;
-    private CountDownLatch mPrivateBrowsingSignal;
+public class NfcHandler implements NfcAdapter.CreateNdefMessageCallback {
+    static final int GET_PRIVATE_BROWSING_STATE_MSG = 100;
 
-    private static final int GET_PRIVATE_BROWSING_STATE_MSG = 100;
+    final Controller mController;
 
-    public NfcHandler(Activity browser, Controller controller) {
-        mActivity = browser;
+    Tab mCurrentTab;
+    boolean mIsPrivate;
+    CountDownLatch mPrivateBrowsingSignal;
+
+    public static void register(Activity activity, Controller controller) {
+        NfcAdapter adapter = NfcAdapter.getDefaultAdapter(activity.getApplicationContext());
+        if (adapter == null) {
+            return;  // NFC not available on this device
+        }
+        adapter.setNdefPushMessageCallback(new NfcHandler(controller), activity);
+    }
+
+    public NfcHandler(Controller controller) {
         mController = controller;
-        mNfcAdapter = NfcAdapter.getDefaultAdapter(mActivity);
-        mHandler = new Handler() {
-            @Override
-            public void handleMessage(Message msg) {
-                if (msg.what == GET_PRIVATE_BROWSING_STATE_MSG) {
-                    mIsPrivate = mCurrentTab.getWebView().isPrivateBrowsingEnabled();
-                    mPrivateBrowsingSignal.countDown();
-                }
+    }
+
+    final Handler mHandler = new Handler() {
+        @Override
+        public void handleMessage(Message msg) {
+            if (msg.what == GET_PRIVATE_BROWSING_STATE_MSG) {
+                mIsPrivate = mCurrentTab.getWebView().isPrivateBrowsingEnabled();
+                mPrivateBrowsingSignal.countDown();
             }
-        };
-    }
-
-    void onPause() {
-        if (mNfcAdapter != null) {
-            mNfcAdapter.disableForegroundNdefPush(mActivity);
         }
-    }
-
-    void onResume() {
-        if (mNfcAdapter != null) {
-            mNfcAdapter.enableForegroundNdefPush(mActivity, this);
-        }
-    }
+    };
 
     @Override
-    public NdefMessage createMessage() {
+    public NdefMessage createNdefMessage(NfcEvent event) {
         mCurrentTab = mController.getCurrentTab();
         if ((mCurrentTab != null) && (mCurrentTab.getWebView() != null)) {
             // We can only read the WebView state on the UI thread, so post
@@ -97,8 +90,4 @@
             return null;
         }
     }
-
-    @Override
-    public void onMessagePushed() {
-    }
 }
