diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index faee0c7..911f724 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -38,6 +38,7 @@
 import android.graphics.Picture;
 import android.net.Uri;
 import android.net.http.SslError;
+import android.nfc.NfcAdapter;
 import android.os.AsyncTask;
 import android.os.Bundle;
 import android.os.Environment;
@@ -155,6 +156,7 @@
     private IntentHandler mIntentHandler;
     private PageDialogsHandler mPageDialogsHandler;
     private NetworkStateHandler mNetworkHandler;
+    private NfcHandler mNfcHandler;
 
     private Message mAutoFillSetupMessage;
 
@@ -233,6 +235,7 @@
         mUrlHandler = new UrlHandler(this);
         mIntentHandler = new IntentHandler(mActivity, this);
         mPageDialogsHandler = new PageDialogsHandler(mActivity, this);
+        mNfcHandler = new NfcHandler(mActivity, this);
 
         PowerManager pm = (PowerManager) mActivity
                 .getSystemService(Context.POWER_SERVICE);
@@ -531,6 +534,11 @@
 
     }
 
+
+    public Tab getCurrentTab() {
+        return mTabControl.getCurrentTab();
+    }
+
     @Override
     public void shareCurrentPage() {
         shareCurrentPage(mTabControl.getCurrentTab());
@@ -616,9 +624,11 @@
         }
         mUi.onPause();
         mNetworkHandler.onPause();
+        mNfcHandler.onPause();
 
         WebView.disablePlatformNotifications();
         mCrashRecoveryHandler.backupState();
+
     }
 
     void onSaveInstanceState(Bundle outState, boolean saveImages) {
@@ -649,8 +659,10 @@
             mHandler.removeMessages(RELEASE_WAKELOCK);
             mWakeLock.release();
         }
+
         mUi.onResume();
         mNetworkHandler.onResume();
+        mNfcHandler.onResume();
         WebView.enablePlatformNotifications();
     }
 
@@ -820,6 +832,7 @@
                 mWakeLock.release();
             }
         }
+
         // Performance probe
         if (false) {
             Performance.onPageFinished(tab.getUrl());
diff --git a/src/com/android/browser/NfcHandler.java b/src/com/android/browser/NfcHandler.java
new file mode 100644
index 0000000..bdfe25e
--- /dev/null
+++ b/src/com/android/browser/NfcHandler.java
@@ -0,0 +1,73 @@
+/*
+ * 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.browser;
+
+import android.app.Activity;
+import android.nfc.NdefMessage;
+import android.nfc.NdefRecord;
+import android.nfc.NfcAdapter;
+
+/** This class implements sharing the URL of the currently
+  * shown browser page over NFC. Sharing is only active
+  * 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;
+
+    public NfcHandler(Activity browser, Controller controller) {
+        mActivity = browser;
+        mController = controller;
+        mNfcAdapter = NfcAdapter.getDefaultAdapter(mActivity);
+    }
+
+    void onPause() {
+        if (mNfcAdapter != null) {
+            mNfcAdapter.disableForegroundNdefPush(mActivity);
+        }
+    }
+
+    void onResume() {
+        if (mNfcAdapter != null) {
+            mNfcAdapter.enableForegroundNdefPush(mActivity, this);
+        }
+    }
+
+    @Override
+    public NdefMessage createMessage() {
+        Tab currentTab = mController.getCurrentTab();
+        if (currentTab == null) {
+            return null;
+        }
+        String currentUrl = currentTab.getUrl();
+        if (currentUrl != null && currentTab.getWebView() != null &&
+                    !currentTab.getWebView().isPrivateBrowsingEnabled()) {
+            NdefRecord record = new NdefRecord(NdefRecord.TNF_ABSOLUTE_URI,
+                    NdefRecord.RTD_URI, new byte[] {}, currentUrl.getBytes());
+            NdefMessage msg = new NdefMessage(new NdefRecord[] { record });
+            return msg;
+        } else {
+            return null;
+        }
+    }
+
+    @Override
+    public void onMessagePushed() {
+    }
+}
