diff --git a/nci/jni/NativeNfcManager.cpp b/nci/jni/NativeNfcManager.cpp
index c8d6b55..77d31cc 100755
--- a/nci/jni/NativeNfcManager.cpp
+++ b/nci/jni/NativeNfcManager.cpp
@@ -28,7 +28,6 @@
 #include "NfcJniUtil.h"
 #include "NfcTag.h"
 #include "PeerToPeer.h"
-#include "Pn544Interop.h"
 #include "PowerSwitch.h"
 #include "RoutingManager.h"
 #include "SyncEvent.h"
@@ -380,7 +379,7 @@
                                        __func__);
           }
         }
-      } else if (pn544InteropIsBusy() == false) {
+      } else {
         NfcTag::getInstance().connectionEventHandler(connEvent, eventData);
 
         // We know it is not activating for P2P.  If it activated in
@@ -1253,7 +1252,6 @@
   tNFA_STATUS status = NFA_STATUS_OK;
   DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("%s: enter;", __func__);
 
-  pn544InteropAbortNow();
   if (sDiscoveryEnabled == false) {
     DLOG_IF(INFO, nfc_debug_enabled)
         << StringPrintf("%s: already disabled", __func__);
@@ -1394,7 +1392,6 @@
 
   sIsDisabling = true;
 
-  pn544InteropAbortNow();
   RoutingManager::getInstance().onNfccShutdown();
   PowerSwitch::getInstance().initialize(PowerSwitch::UNKNOWN_LEVEL);
   HciEventManager::getInstance().finalize();
diff --git a/nci/jni/NativeNfcTag.cpp b/nci/jni/NativeNfcTag.cpp
index 4b815aa..7f7727d 100644
--- a/nci/jni/NativeNfcTag.cpp
+++ b/nci/jni/NativeNfcTag.cpp
@@ -30,7 +30,6 @@
 #include "Mutex.h"
 #include "NfcJniUtil.h"
 #include "NfcTag.h"
-#include "Pn544Interop.h"
 
 #include "ndef_utils.h"
 #include "nfa_api.h"
@@ -1218,10 +1217,6 @@
       ndef[1] = NDEF_MODE_READ_WRITE;
     e->ReleaseIntArrayElements(ndefInfo, ndef, 0);
     status = NFA_STATUS_FAILED;
-  } else if ((sCheckNdefStatus == NFA_STATUS_TIMEOUT) &&
-             (NfcTag::getInstance().getProtocol() == NFC_PROTOCOL_ISO_DEP)) {
-    pn544InteropStopPolling();
-    status = sCheckNdefStatus;
   } else {
     DLOG_IF(INFO, nfc_debug_enabled)
         << StringPrintf("%s: unknown status 0x%X", __func__, sCheckNdefStatus);
diff --git a/nci/jni/Pn544Interop.cpp b/nci/jni/Pn544Interop.cpp
deleted file mode 100644
index 6d89056..0000000
--- a/nci/jni/Pn544Interop.cpp
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Copyright (C) 2012 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.
- */
-
-/*****************************************************************************
-**
-**  Description:    Implement operations that provide compatibility with NXP
-**                  PN544 controller.  Specifically facilitate peer-to-peer
-**                  operations with PN544 controller.
-**
-*****************************************************************************/
-#include "Pn544Interop.h"
-#include "IntervalTimer.h"
-#include "Mutex.h"
-#include "NfcTag.h"
-
-#include <android-base/stringprintf.h>
-#include <base/logging.h>
-
-using android::base::StringPrintf;
-
-extern bool nfc_debug_enabled;
-
-namespace android {
-extern void startStopPolling(bool isStartPolling);
-}
-
-/*****************************************************************************
-**
-** private variables and functions
-**
-*****************************************************************************/
-
-static const int gIntervalTime =
-    1000;  // millisecond between the check to restore polling
-static IntervalTimer gTimer;
-static Mutex gMutex;
-static void pn544InteropStartPolling(
-    union sigval);              // callback function for interval timer
-static bool gIsBusy = false;    // is timer busy?
-static bool gAbortNow = false;  // stop timer during next callback
-
-/*******************************************************************************
-**
-** Function:        pn544InteropStopPolling
-**
-** Description:     Stop polling to let NXP PN544 controller poll.
-**                  PN544 should activate in P2P mode.
-**
-** Returns:         None
-**
-*******************************************************************************/
-void pn544InteropStopPolling() {
-  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("%s: enter", __func__);
-  gMutex.lock();
-  gTimer.kill();
-  android::startStopPolling(false);
-  gIsBusy = true;
-  gAbortNow = false;
-  gTimer.set(gIntervalTime,
-             pn544InteropStartPolling);  // after some time, start polling again
-  gMutex.unlock();
-  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("%s: exit", __func__);
-}
-
-/*******************************************************************************
-**
-** Function:        pn544InteropStartPolling
-**
-** Description:     Start polling when activation state is idle.
-**                  sigval: Unused.
-**
-** Returns:         None
-**
-*******************************************************************************/
-void pn544InteropStartPolling(union sigval) {
-  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("%s: enter", __func__);
-  gMutex.lock();
-  NfcTag::ActivationState state = NfcTag::getInstance().getActivationState();
-
-  if (gAbortNow) {
-    DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("%s: abort now", __func__);
-    gIsBusy = false;
-    goto TheEnd;
-  }
-
-  if (state == NfcTag::Idle) {
-    DLOG_IF(INFO, nfc_debug_enabled)
-        << StringPrintf("%s: start polling", __func__);
-    android::startStopPolling(true);
-    gIsBusy = false;
-  } else {
-    DLOG_IF(INFO, nfc_debug_enabled)
-        << StringPrintf("%s: try again later", __func__);
-    gTimer.set(
-        gIntervalTime,
-        pn544InteropStartPolling);  // after some time, start polling again
-  }
-
-TheEnd:
-  gMutex.unlock();
-  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("%s: exit", __func__);
-}
-
-/*******************************************************************************
-**
-** Function:        pn544InteropIsBusy
-**
-** Description:     Is the code performing operations?
-**
-** Returns:         True if the code is busy.
-**
-*******************************************************************************/
-bool pn544InteropIsBusy() {
-  bool isBusy = false;
-  gMutex.lock();
-  isBusy = gIsBusy;
-  gMutex.unlock();
-  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("%s: %u", __func__, isBusy);
-  return isBusy;
-}
-
-/*******************************************************************************
-**
-** Function:        pn544InteropAbortNow
-**
-** Description:     Request to abort all operations.
-**
-** Returns:         None.
-**
-*******************************************************************************/
-void pn544InteropAbortNow() {
-  DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("%s", __func__);
-  gMutex.lock();
-  gAbortNow = true;
-  gMutex.unlock();
-}
diff --git a/nci/jni/Pn544Interop.h b/nci/jni/Pn544Interop.h
deleted file mode 100644
index 3d1bc20..0000000
--- a/nci/jni/Pn544Interop.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (C) 2012 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.
- */
-
-/*****************************************************************************
-**
-**  Description:    Implement operations that provide compatibility with NXP
-**                  PN544 controller.  Specifically facilitate peer-to-peer
-**                  operations with PN544 controller.
-**
-*****************************************************************************/
-#pragma once
-#include "NfcJniUtil.h"
-
-/*******************************************************************************
-**
-** Function:        pn544InteropStopPolling
-**
-** Description:     Stop polling to let NXP PN544 controller poll.
-**                  PN544 should activate in P2P mode.
-**
-** Returns:         None
-**
-*******************************************************************************/
-void pn544InteropStopPolling();
-
-/*******************************************************************************
-**
-** Function:        pn544InteropIsBusy
-**
-** Description:     Is the code performing operations?
-**
-** Returns:         True if the code is busy.
-**
-*******************************************************************************/
-bool pn544InteropIsBusy();
-
-/*******************************************************************************
-**
-** Function:        pn544InteropAbortNow
-**
-** Description:     Request to abort all operations.
-**
-** Returns:         None.
-**
-*******************************************************************************/
-void pn544InteropAbortNow();
