diff --git a/core/java/android/nfc/INfcAdapterExtras.aidl b/core/java/android/nfc/INfcAdapterExtras.aidl
index 0c2a2fd..8677a50 100755
--- a/core/java/android/nfc/INfcAdapterExtras.aidl
+++ b/core/java/android/nfc/INfcAdapterExtras.aidl
@@ -16,6 +16,7 @@
 
 package android.nfc;
 
+import android.nfc.ApduList;
 import android.os.Bundle;
 
 
@@ -28,5 +29,6 @@
     Bundle transceive(in byte[] data_in);
     int getCardEmulationRoute();
     void setCardEmulationRoute(int route);
-    void authenticate(in byte[] token);
+    void registerTearDownApdus(String packageName, in ApduList apdu);
+    void unregisterTearDownApdus(String packageName);
 }
diff --git a/nfc-extras/java/com/android/nfc_extras/NfcAdapterExtras.java b/nfc-extras/java/com/android/nfc_extras/NfcAdapterExtras.java
index 99cbb86..6001be9 100644
--- a/nfc-extras/java/com/android/nfc_extras/NfcAdapterExtras.java
+++ b/nfc-extras/java/com/android/nfc_extras/NfcAdapterExtras.java
@@ -18,6 +18,7 @@
 
 import android.annotation.SdkConstant;
 import android.annotation.SdkConstant.SdkConstantType;
+import android.nfc.ApduList;
 import android.nfc.INfcAdapterExtras;
 import android.nfc.NfcAdapter;
 import android.os.RemoteException;
@@ -67,11 +68,7 @@
 
     /** get service handles */
     private static void initService() {
-        final INfcAdapterExtras service = sAdapter.getNfcAdapterExtrasInterface();
-        if (service != null) {
-            // Leave stale rather than receive a null value.
-            sService = service;
-        }
+        sService = sAdapter.getNfcAdapterExtrasInterface();
     }
 
     /**
@@ -88,19 +85,18 @@
             if (sSingleton == null) {
                 try {
                     sAdapter = adapter;
+                    sRouteOff = new CardEmulationRoute(CardEmulationRoute.ROUTE_OFF, null);
                     sSingleton = new NfcAdapterExtras();
                     sEmbeddedEe = new NfcExecutionEnvironment(sSingleton);
-                    sRouteOff = new CardEmulationRoute(CardEmulationRoute.ROUTE_OFF, null);
                     sRouteOnWhenScreenOn = new CardEmulationRoute(
                             CardEmulationRoute.ROUTE_ON_WHEN_SCREEN_ON, sEmbeddedEe);
                     initService();
                 } finally {
-                    if (sService == null) {
-                        sRouteOnWhenScreenOn = null;
-                        sRouteOff = null;
+                    if (sSingleton == null) {
+                        sService = null;
                         sEmbeddedEe = null;
-                        sSingleton = null;
-                        sAdapter = null;
+                        sRouteOff = null;
+                        sRouteOnWhenScreenOn = null;
                     }
                 }
             }
@@ -212,18 +208,17 @@
         return sEmbeddedEe;
     }
 
-    /**
-     * Authenticate the client application.
-     *
-     * Some implementations of NFC Adapter Extras may require applications
-     * to authenticate with a token, before using other methods.
-     *
-     * @param a implementation specific token
-     * @throws a {@link java.lang.SecurityException} if authentication failed
-     */
-    public void authenticate(byte[] token) {
+    public void registerTearDownApdus(String packageName, ApduList apdus) {
         try {
-            sService.authenticate(token);
+            sService.registerTearDownApdus(packageName, apdus);
+        } catch (RemoteException e) {
+            attemptDeadServiceRecovery(e);
+        }
+    }
+
+    public void unregisterTearDownApdus(String packageName) {
+        try {
+            sService.unregisterTearDownApdus(packageName);
         } catch (RemoteException e) {
             attemptDeadServiceRecovery(e);
         }
diff --git a/nfc-extras/java/com/android/nfc_extras/NfcExecutionEnvironment.java b/nfc-extras/java/com/android/nfc_extras/NfcExecutionEnvironment.java
index 63c2de2..eb2f6f8 100644
--- a/nfc-extras/java/com/android/nfc_extras/NfcExecutionEnvironment.java
+++ b/nfc-extras/java/com/android/nfc_extras/NfcExecutionEnvironment.java
@@ -55,64 +55,6 @@
      */
     public static final String EXTRA_AID = "com.android.nfc_extras.extra.AID";
 
-    /**
-     * Broadcast action: A filtered APDU was received.
-     *
-     * <p>This happens when an APDU of interest was matched by the Nfc adapter,
-     * for instance as the result of matching an externally-configured filter.
-     *
-     * <p>The filter configuration mechanism is not currently defined.
-     *
-     * <p>Always contains the extra field {@link EXTRA_APDU_BYTES}.
-     *
-     * @hide
-     */
-    public static final String ACTION_APDU_RECEIVED =
-        "com.android.nfc_extras.action.APDU_RECEIVED";
-
-    /**
-     * Mandatory byte array extra field in {@link #ACTION_APDU_RECEIVED}.
-     *
-     * <p>Contains the bytes of the received APDU.
-     *
-     * @hide
-     */
-    public static final String EXTRA_APDU_BYTES =
-        "com.android.nfc_extras.extra.APDU_BYTES";
-
-    /**
-     * Broadcast action: An EMV card removal event was detected.
-     *
-     * @hide
-     */
-    public static final String ACTION_EMV_CARD_REMOVAL =
-        "com.android.nfc_extras.action.EMV_CARD_REMOVAL";
-
-    /**
-     * Broadcast action: An adapter implementing MIFARE Classic via card
-     * emulation detected that a block has been accessed.
-     *
-     * <p>This may only be issued for the first block that the reader
-     * authenticates to.
-     *
-     * <p>May contain the extra field {@link #EXTRA_MIFARE_BLOCK}.
-     *
-     * @hide
-     */
-    public static final String ACTION_MIFARE_ACCESS_DETECTED =
-        "com.android.nfc_extras.action.MIFARE_ACCESS_DETECTED";
-
-    /**
-     * Optional integer extra field in {@link #ACTION_MIFARE_ACCESS_DETECTED}.
-     *
-     * <p>Provides the block number being accessed.  If not set, the block
-     * number being accessed is unknown.
-     *
-     * @hide
-     */
-    public static final String EXTRA_MIFARE_BLOCK =
-        "com.android.nfc_extras.extra.MIFARE_BLOCK";
-
     NfcExecutionEnvironment(NfcAdapterExtras extras) {
         mExtras = extras;
     }
