NFC_NCIHALx_ARFC.7.1.0_N_OpnSrc
diff --git a/Android.mk b/Android.mk
index d7c0972..28c22be 100644
--- a/Android.mk
+++ b/Android.mk
@@ -13,7 +13,6 @@
 
 #Enable NXP Specific
 D_CFLAGS += -DNXP_EXTNS=TRUE
-D_CFLAGS += -DNFC_NXP_STAT_DUAL_UICC_EXT_SWITCH=TRUE
 D_CFLAGS += -DNFC_NXP_AID_MAX_SIZE_DYN=TRUE
 
 #Enable HCE-F specific
@@ -42,15 +41,17 @@
 JCOP_VER_3_1 := 1
 JCOP_VER_3_2 := 2
 JCOP_VER_3_3 := 3
+JCOP_VER_4_0 := 4
 
 LOCAL_CFLAGS += -DJCOP_VER_3_1=$(JCOP_VER_3_1)
 LOCAL_CFLAGS += -DJCOP_VER_3_2=$(JCOP_VER_3_2)
 LOCAL_CFLAGS += -DJCOP_VER_3_3=$(JCOP_VER_3_3)
+LOCAL_CFLAGS += -DJCOP_VER_4_0=$(JCOP_VER_4_0)
 
 NFC_NXP_ESE:= TRUE
 ifeq ($(NFC_NXP_ESE),TRUE)
 LOCAL_CFLAGS += -DNFC_NXP_ESE=TRUE
-LOCAL_CFLAGS += -DNFC_NXP_ESE_VER=$(JCOP_VER_3_3)
+LOCAL_CFLAGS += -DNFC_NXP_ESE_VER=$(JCOP_VER_4_0)
 else
 LOCAL_CFLAGS += -DNFC_NXP_ESE=FALSE
 endif
@@ -68,10 +69,11 @@
 D_CFLAGS += -DNFC_NXP_CHIP_TYPE=PN553
 endif
 
-#Gemalto SE support
-D_CFLAGS += -DGEMALTO_SE_SUPPORT
-D_CFLAGS += -DNXP_UICC_ENABLE
+ifeq ($(NXP_CHIP_TYPE),$(PN553))
 D_CFLAGS += -DJCOP_WA_ENABLE=FALSE
+else
+D_CFLAGS += -DJCOP_WA_ENABLE=TRUE
+endif
 
 #Routing Entries optimization
 D_CFLAGS += -DNFC_NXP_LISTEN_ROUTE_TBL_OPTIMIZATION=TRUE
@@ -79,7 +81,11 @@
 # Build shared library system/lib/libnfc-nci.so for stack code.
 
 LOCAL_ARM_MODE := arm
-###LOCAL_MULTILIB := 64
+ifeq (true,$(TARGET_IS_64_BIT))
+LOCAL_MULTILIB := 64
+else
+LOCAL_MULTILIB := 32
+endif
 LOCAL_MODULE := libnfc-nci
 LOCAL_SHARED_LIBRARIES := libhardware_legacy libcutils liblog libdl libhardware
 LOCAL_CFLAGS += $(D_CFLAGS)
diff --git a/halimpl/pn54x/Android.mk b/halimpl/pn54x/Android.mk
index d24299b..e47bde8 100644
--- a/halimpl/pn54x/Android.mk
+++ b/halimpl/pn54x/Android.mk
@@ -20,7 +20,6 @@
 
 #Enable NXP Specific
 D_CFLAGS += -DNXP_EXTNS=TRUE
-D_CFLAGS += -DJCOP_WA_ENABLE=FALSE
 
 #variables for NFC_NXP_CHIP_TYPE
 PN547C2 := 1
@@ -74,7 +73,11 @@
 else ifeq ($(NXP_CHIP_TYPE),$(PN553))
 LOCAL_MODULE := nfc_nci.pn54x.default
 endif
-###LOCAL_MULTILIB :=64
+ifeq (true,$(TARGET_IS_64_BIT))
+LOCAL_MULTILIB := 64
+else
+LOCAL_MULTILIB := 32
+endif
 LOCAL_MODULE_RELATIVE_PATH := hw
 LOCAL_SRC_FILES := $(call all-subdir-c-files)  $(call all-subdir-cpp-files)
 LOCAL_SHARED_LIBRARIES := liblog libcutils libhardware_legacy libdl
@@ -92,9 +95,19 @@
     $(LOCAL_PATH)/self-test
 
 LOCAL_CFLAGS += -DANDROID \
-        -DNXP_UICC_ENABLE -DNXP_HW_SELF_TEST
+        -DNXP_HW_SELF_TEST
 LOCAL_CFLAGS += -DNFC_NXP_HFO_SETTINGS=FALSE
-LOCAL_CFLAGS += -DNFC_NXP_ESE=TRUE
+NFC_NXP_ESE:= TRUE
+ifeq ($(NFC_NXP_ESE),TRUE)
+D_CFLAGS += -DNFC_NXP_ESE=TRUE
+ifeq ($(NXP_CHIP_TYPE),$(PN553))
+D_CFLAGS += -DJCOP_WA_ENABLE=FALSE
+else
+D_CFLAGS += -DJCOP_WA_ENABLE=TRUE
+endif
+else
+D_CFLAGS += -DNFC_NXP_ESE=FALSE
+endif
 LOCAL_CFLAGS += $(D_CFLAGS)
 #LOCAL_CFLAGS += -DFELICA_CLT_ENABLE
 #-DNXP_PN547C1_DOWNLOAD
diff --git a/halimpl/pn54x/common/phNfcCommon.h b/halimpl/pn54x/common/phNfcCommon.h
index 24d2231..3514fbb 100644
--- a/halimpl/pn54x/common/phNfcCommon.h
+++ b/halimpl/pn54x/common/phNfcCommon.h
@@ -78,7 +78,7 @@
 #endif
 /* HAL Version number (Updated as per release) */
 #define NXP_MW_VERSION_MAJ  (0U)
-#define NXP_MW_VERSION_MIN  (4U)
+#define NXP_MW_VERSION_MIN  (0x0D)
 
 #define GET_EEPROM_DATA (1U)
 #define SET_EEPROM_DATA (2U)
diff --git a/halimpl/pn54x/configs/NXP_ESE_Features.h b/halimpl/pn54x/configs/NXP_ESE_Features.h
index 640ed8d..34e4d5c 100755
--- a/halimpl/pn54x/configs/NXP_ESE_Features.h
+++ b/halimpl/pn54x/configs/NXP_ESE_Features.h
@@ -33,6 +33,7 @@
 
 #if(NFC_NXP_CHIP_TYPE == PN547C2)
 #define NXP_ESE_WIRED_MODE_DISABLE_DISCOVERY   TRUE
+#define NXP_LEGACY_APDU_GATE                   TRUE
 
 #elif((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
     #define NFC_NXP_TRIPLE_MODE_PROTECTION        TRUE
@@ -42,6 +43,11 @@
     #define NXP_ESE_DUAL_MODE_PRIO_SCHEME         NXP_ESE_WIRED_MODE_TIMEOUT
      //Reset scheme
     #define NXP_ESE_RESET_METHOD                  FALSE
+    #define NXP_ESE_ETSI_READER_ENABLE            TRUE
+    #define NXP_ESE_SVDD_SYNC                     TRUE
+    #define NXP_LEGACY_APDU_GATE                  TRUE
+    #define NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION   TRUE
+    #define NXP_ESE_JCOP_DWNLD_PROTECTION         FALSE
 
 #elif(NFC_NXP_CHIP_TYPE == PN553)
     #define NFC_NXP_TRIPLE_MODE_PROTECTION        FALSE
@@ -49,19 +55,25 @@
     #define NXP_ESE_WIRED_MODE_PRIO               FALSE
     #define NXP_ESE_UICC_EXCLUSIVE_WIRED_MODE     FALSE    // UICC exclusive wired mode
     //dual mode prio scheme
-    #define NXP_ESE_DUAL_MODE_PRIO_SCHEME         NXP_ESE_WIRED_MODE_TIMEOUT
+    #define NXP_ESE_DUAL_MODE_PRIO_SCHEME         NXP_ESE_WIRED_MODE_RESUME
     //reset scheme
     #define NXP_ESE_RESET_METHOD                  TRUE
     #define NXP_ESE_POWER_MODE                    TRUE
     #define NXP_ESE_P73_ISO_RST                   TRUE
     #define NXP_BLOCK_PROPRIETARY_APDU_GATE       FALSE
     #define NXP_WIRED_MODE_STANDBY                TRUE
+    #define NXP_ESE_ETSI_READER_ENABLE            TRUE
+    #define NXP_ESE_SVDD_SYNC                     FALSE
+    #define NXP_LEGACY_APDU_GATE                  FALSE
+    #define NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION   FALSE
+    #define NXP_ESE_JCOP_DWNLD_PROTECTION         TRUE
 #endif
 
 #else /*Else of #if(NFC_NXP_ESE == TRUE)*/
 
 #if(NFC_NXP_CHIP_TYPE == PN547C2)
-#define NXP_ESE_WIRED_MODE_DISABLE_DISCOVERY   FALSE
+#define NXP_ESE_WIRED_MODE_DISABLE_DISCOVERY      FALSE
+#define NXP_LEGACY_APDU_GATE                      FALSE
 #endif
 
 #if((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
@@ -70,18 +82,30 @@
     #define NXP_ESE_FELICA_CLT                    FALSE
      //Reset scheme
     #define NXP_ESE_RESET_METHOD                  FALSE
+    #define NXP_ESE_ETSI_READER_ENABLE            FALSE
+    #define NXP_ESE_SVDD_SYNC                     FALSE
+    #define NXP_LEGACY_APDU_GATE                  FALSE
+    #define NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION   FALSE
+    #define NXP_ESE_DUAL_MODE_PRIO_SCHEME         NXP_ESE_WIRED_MODE_TIMEOUT
+    #define NXP_ESE_JCOP_DWNLD_PROTECTION         FALSE
 
 #elif(NFC_NXP_CHIP_TYPE == PN553)
     #define NFC_NXP_TRIPLE_MODE_PROTECTION        FALSE
-    #define NXP_ESE_FELICA_CLT                   FALSE
-    #define NXP_ESE_WIRED_MODE_PRIO              FALSE    //eSE wired mode prio over UICC wired mode
-    #define NXP_ESE_UICC_EXCLUSIVE_WIRED_MODE    FALSE   // UICC exclusive wired mode
+    #define NXP_ESE_FELICA_CLT                    FALSE
+    #define NXP_ESE_WIRED_MODE_PRIO               FALSE    //eSE wired mode prio over UICC wired mode
+    #define NXP_ESE_UICC_EXCLUSIVE_WIRED_MODE     FALSE   // UICC exclusive wired mode
     //reset scheme
     #define NXP_ESE_RESET_METHOD                  FALSE
     #define NXP_ESE_POWER_MODE                    FALSE
     #define NXP_ESE_P73_ISO_RST                   FALSE
     #define NXP_BLOCK_PROPRIETARY_APDU_GATE       FALSE
     #define NXP_WIRED_MODE_STANDBY                FALSE
+    #define NXP_ESE_ETSI_READER_ENABLE            FALSE
+    #define NXP_ESE_SVDD_SYNC                     FALSE
+    #define NXP_LEGACY_APDU_GATE                  FALSE
+    #define NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION   FALSE
+    #define NXP_ESE_DUAL_MODE_PRIO_SCHEME         NXP_ESE_WIRED_MODE_TIMEOUT
+    #define NXP_ESE_JCOP_DWNLD_PROTECTION         FALSE
 #endif
 
 #endif /*End of #if(NFC_NXP_ESE == TRUE)*/
diff --git a/halimpl/pn54x/configs/NXP_NFCC_Features.h b/halimpl/pn54x/configs/NXP_NFCC_Features.h
index 76a23fd..0217d28 100755
--- a/halimpl/pn54x/configs/NXP_NFCC_Features.h
+++ b/halimpl/pn54x/configs/NXP_NFCC_Features.h
@@ -20,17 +20,39 @@
 
 #ifndef NXP_NFCC_FEATURES_H
 #define NXP_NFCC_FEATURES_H
-#define NXP_NFCC_EMPTY_DATA_PACKET TRUE
+/*Flags common to all chip types*/
+#define NXP_NFCC_EMPTY_DATA_PACKET              TRUE
+#define GEMALTO_SE_SUPPORT                      TRUE
 #if(NFC_NXP_CHIP_TYPE == PN553)
 // Example: define macro like below for each feature
 //#define NXP_NFCC_FEATURE_1  TRUE
-#define NXP_NFCC_MW_RCVRY_BLK_FW_DNLD   TRUE
-#define NXP_NFCC_FORCE_NCI1_0_INIT FALSE
-#define NXP_NFCC_ROUTING_BLOCK_BIT TRUE
+#define NXP_NFCC_I2C_READ_WRITE_IMPROVEMENT     TRUE
+#define NXP_NFCC_MIFARE_TIANJIN                 FALSE
+#define NXP_NFCC_MW_RCVRY_BLK_FW_DNLD           TRUE
+#define NXP_NFCC_DYNAMIC_DUAL_UICC              TRUE
+#define NXP_NFCC_FW_WA                          TRUE
+#define NXP_NFCC_FORCE_NCI1_0_INIT              FALSE
+#define NXP_NFCC_ROUTING_BLOCK_BIT              TRUE
+#define NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH       FALSE
+#define NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH    TRUE
+#define NXP_NFCC_SPI_FW_DOWNLOAD_SYNC           TRUE
+#define NXP_HW_ANTENNA_LOOP4_SELF_TEST          FALSE
 #elif((NFC_NXP_CHIP_TYPE == PN551)||(NFC_NXP_CHIP_TYPE == PN548C2))
+#define NXP_NFCC_I2C_READ_WRITE_IMPROVEMENT     TRUE
 #define NXP_NFCC_AID_MATCHING_PLATFORM_CONFIG   TRUE
-#define NXP_NFCC_ROUTING_BLOCK_BIT_PROP TRUE
+#define NXP_NFCC_DYNAMIC_DUAL_UICC              FALSE
+#define NXP_NFCC_ROUTING_BLOCK_BIT_PROP         TRUE
+#define NXP_NFCC_MIFARE_TIANJIN                 TRUE
+#define NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH       TRUE
+#define NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH    FALSE
+#define NXP_NFCC_SPI_FW_DOWNLOAD_SYNC           FALSE
+#define NXP_HW_ANTENNA_LOOP4_SELF_TEST          TRUE
 #elif(NFC_NXP_CHIP_TYPE  == PN547C2)
+#define NXP_NFCC_I2C_READ_WRITE_IMPROVEMENT     FALSE
 #define NXP_NFCC_AID_MATCHING_PLATFORM_CONFIG   TRUE
+#define NXP_NFCC_MIFARE_TIANJIN                 TRUE
+#define NXP_NFCC_SPI_FW_DOWNLOAD_SYNC           FALSE
+#define NXP_HW_ANTENNA_LOOP4_SELF_TEST          TRUE
 #endif
+
 #endif                          /* end of #ifndef NXP_NFCC_FEATURES_H */
diff --git a/halimpl/pn54x/configs/NXP_Platform_Features.h b/halimpl/pn54x/configs/NXP_Platform_Features.h
index 133b1b1..84e43e5 100755
--- a/halimpl/pn54x/configs/NXP_Platform_Features.h
+++ b/halimpl/pn54x/configs/NXP_Platform_Features.h
@@ -23,7 +23,18 @@
 #define NXP_PLATFORM_FEATURES_H
 
 #if(NFC_NXP_CHIP_TYPE == PN553)
-// Define the platform specific macros
-
+#undef  NXP_NFCC_RESET_RSP_LEN
+#define NXP_NFCC_RESET_RSP_LEN       (0x10U)
 #endif
+
+#if(NFC_NXP_CHIP_TYPE == PN551)
+#undef  NXP_NFCC_RESET_RSP_LEN
+#define NXP_NFCC_RESET_RSP_LEN       (0x11U)
+#endif
+
+#if(NFC_NXP_CHIP_TYPE == PN548AD)
+#undef  NXP_NFCC_RESET_RSP_LEN
+#define NXP_NFCC_RESET_RSP_LEN       (0x11U)
+#endif
+
 #endif                          /* end of #ifndef NXP_PLATFORM_FEATURES_H */
diff --git a/halimpl/pn54x/dnld/phDnldNfc.c b/halimpl/pn54x/dnld/phDnldNfc.c
index 8bb64c7..c24672a 100644
--- a/halimpl/pn54x/dnld/phDnldNfc.c
+++ b/halimpl/pn54x/dnld/phDnldNfc.c
@@ -289,7 +289,7 @@
 #elif(NFC_NXP_CHIP_TYPE == PN548C2)
               || (PHDNLDNFC_HWVER_PN548AD_MRA1_0 == bChipVer)
 #elif(NFC_NXP_CHIP_TYPE == PN553)
-              || (PHDNLDNFC_HWVER_PN553_MRA1_0 == bChipVer) || (PHDNLDNFC_HWVER_PN553_MRA1_0_UPDATED == bChipVer)
+              || (PHDNLDNFC_HWVER_PN553_MRA1_0 == bChipVer) || (PHDNLDNFC_HWVER_PN553_MRA1_0_UPDATED & bChipVer)
 #endif
                 )
             {
diff --git a/halimpl/pn54x/dnld/phDnldNfc.h b/halimpl/pn54x/dnld/phDnldNfc.h
index 052a607..9212473 100644
--- a/halimpl/pn54x/dnld/phDnldNfc.h
+++ b/halimpl/pn54x/dnld/phDnldNfc.h
@@ -45,7 +45,11 @@
 
 #define PHDNLDNFC_HWVER_PN551_MRA1_0         (0x08U)   /* PN551 ChipVersion MRA1.0 */
 #define PHDNLDNFC_HWVER_PN553_MRA1_0         (0x0BU)   /* PN553-NCI1.0 ChipVersion MRA1.0 */
-#define PHDNLDNFC_HWVER_PN553_MRA1_0_UPDATED (0x40U)   /* PN553-NCI1.0 updated FW*/
+/* PN553 A0 -> 0x40 hardware version
+   PN553 B0 -> 0x41
+   PN80T A0 -> 0x50
+   PN80T B0 -> 0x51 */
+#define PHDNLDNFC_HWVER_PN553_MRA1_0_UPDATED (0x40U)
 /*
  * Enum definition contains Download Life Cycle States
  */
diff --git a/halimpl/pn54x/dnld/phNxpNciHal_Dnld.c b/halimpl/pn54x/dnld/phNxpNciHal_Dnld.c
index ef64578..63268d4 100644
--- a/halimpl/pn54x/dnld/phNxpNciHal_Dnld.c
+++ b/halimpl/pn54x/dnld/phNxpNciHal_Dnld.c
@@ -569,16 +569,16 @@
 #elif(NFC_NXP_CHIP_TYPE == PN548C2)
               || (PHDNLDNFC_HWVER_PN548AD_MRA1_0 == bHwVer)
 #elif(NFC_NXP_CHIP_TYPE == PN553)
-              || (PHDNLDNFC_HWVER_PN553_MRA1_0 == bHwVer || PHDNLDNFC_HWVER_PN553_MRA1_0_UPDATED == pRespBuff->pBuff[0])
+              || (PHDNLDNFC_HWVER_PN553_MRA1_0 == bHwVer || PHDNLDNFC_HWVER_PN553_MRA1_0_UPDATED & pRespBuff->pBuff[0])
 #endif
                 )
             {
                 bExpectedLen = PHLIBNFC_IOCTL_DNLD_GETVERLEN_MRA2_1;
                 (gphNxpNciHal_fw_IoctlCtx.bChipVer) = bHwVer;
 #if(NFC_NXP_CHIP_TYPE == PN553)
-                if(PHDNLDNFC_HWVER_PN553_MRA1_0_UPDATED == pRespBuff->pBuff[0])
+                if(PHDNLDNFC_HWVER_PN553_MRA1_0_UPDATED & pRespBuff->pBuff[0])
                 {
-                    (gphNxpNciHal_fw_IoctlCtx.bChipVer) = PHDNLDNFC_HWVER_PN553_MRA1_0_UPDATED;
+                    (gphNxpNciHal_fw_IoctlCtx.bChipVer) = pRespBuff->pBuff[0];
                 }
 #endif
 
diff --git a/halimpl/pn54x/hal/phNxpNciHal.c b/halimpl/pn54x/hal/phNxpNciHal.c
index 1947f93..8f1fd51 100644
--- a/halimpl/pn54x/hal/phNxpNciHal.c
+++ b/halimpl/pn54x/hal/phNxpNciHal.c
@@ -54,7 +54,9 @@
 extern uint8_t icode_send_eof;
 extern uint8_t icode_detected;
 static uint8_t cmd_icode_eof[] = { 0x00, 0x00, 0x00 };
+#if(NXP_NFCC_I2C_READ_WRITE_IMPROVEMENT  == TRUE)
 static uint8_t read_failed_disable_nfc = FALSE;
+#endif
 static uint8_t config_access = FALSE;
 static NFCSTATUS phNxpNciHal_FwDwnld(void);
 static NFCSTATUS phNxpNciHal_SendCmd(uint8_t cmd_len, uint8_t* pcmd_buff);
@@ -70,7 +72,7 @@
 
 extern int phNxpNciHal_CheckFwRegFlashRequired(uint8_t* fw_update_req, uint8_t* rf_update_req);
 phNxpNci_getCfg_info_t* mGetCfg_info = NULL;
-#if ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
+#if(NXP_ESE_SVDD_SYNC == TRUE)
 uint32_t gSvddSyncOff_Delay = 10;
 #endif
 /* global variable to get FW version from NCI response*/
@@ -524,7 +526,6 @@
     NFCSTATUS status = NFCSTATUS_SUCCESS;
     phOsalNfc_Config_t tOsalConfig;
     phTmlNfc_Config_t tTmlConfig;
-    uint8_t nfc_dev_node[260];
     static phLibNfc_Message_t msg;
     int init_retry_cnt=0;
     /*NCI_RESET_CMD*/
@@ -532,8 +533,10 @@
     /*NCI_INIT_CMD*/
     uint8_t cmd_init_nci[] = {0x20,0x01,0x00};
     uint8_t boot_mode = nxpncihal_ctrl.hal_boot_mode;
-    phNxpLog_InitializeLogLevel();
+    char *nfc_dev_node = NULL;
+    const uint16_t max_len = 260;
 
+    phNxpLog_InitializeLogLevel();
 
     /*Create the timer for extns write response*/
     timeoutTimerId = phOsalNfc_Timer_Create();
@@ -569,14 +572,21 @@
     nxpncihal_ctrl.hal_boot_mode = boot_mode;
 
     /*Get the device node name from config file*/
-    memset(nfc_dev_node,0,sizeof(nfc_dev_node));
-    if (!GetNxpStrValue (NAME_NXP_NFC_DEV_NODE, (char *)nfc_dev_node, sizeof (nfc_dev_node)))
+    /* Read the nfc device node name */
+    nfc_dev_node = (char*) malloc (max_len * sizeof (char));
+    if (nfc_dev_node == NULL)
     {
-        NXPLOG_NCIHAL_E("Invalid nfc device node name keeping the default device node /dev/pn54x");
-        strcpy ((char *)nfc_dev_node, "/dev/pn54x");
+        NXPLOG_NCIHAL_E ("malloc of nfc_dev_node failed ");
+        return NFCSTATUS_FAILED;
+    }
+    else if (!GetNxpStrValue (NAME_NXP_NFC_DEV_NODE, nfc_dev_node, max_len*sizeof(uint8_t)))
+    {
+        NXPLOG_NCIHAL_E ("Invalid nfc device node name keeping the default device node /dev/pn54x");
+        strcpy (nfc_dev_node, "/dev/pn54x");
     }
 
-    tTmlConfig.pDevName = (int8_t *) nfc_dev_node;
+    tTmlConfig.pDevName = (int8_t *)nfc_dev_node;
+
     tOsalConfig.dwCallbackThreadId
     = (uintptr_t) nxpncihal_ctrl.gDrvCfg.nClientId;
     tOsalConfig.pLogFile = NULL;
@@ -637,6 +647,11 @@
         phNxpNciHal_cleanup_monitor();
         nxpncihal_ctrl.halStatus = HAL_STATUS_CLOSE;
     }
+    if(nfc_dev_node != NULL)
+    {
+        free(nfc_dev_node);
+        nfc_dev_node = NULL;
+    }
     return status;
 }
 
@@ -833,7 +848,7 @@
 {
     NFCSTATUS status = NFCSTATUS_FAILED;
 
-    if((!(strcmp(COMPILATION_MW,"PN553")) && (rom_version==0x10) && (fw_maj_ver == 0x01)))
+    if((!(strcmp(COMPILATION_MW,"PN553")) && (rom_version==0x11) && (fw_maj_ver == 0x01)))
     {
         status = NFCSTATUS_SUCCESS;
     }
@@ -1012,8 +1027,13 @@
         if(nxpncihal_ctrl.retry_cnt++ < MAX_RETRY_COUNT)
         {
             NXPLOG_NCIHAL_E("write_unlocked failed - PN54X Maybe in Standby Mode - Retry");
+#if(NXP_NFCC_I2C_READ_WRITE_IMPROVEMENT == TRUE)
+            /* 5ms delay to give NFCC wake up delay */
+            usleep(5000);
+#else
             /* 1ms delay to give NFCC wake up delay */
             usleep(1000);
+#endif
             goto retry;
         }
         else
@@ -1110,7 +1130,7 @@
     {
         nxpncihal_ctrl.read_retry_cnt = 0;
     }
-
+#if( NXP_NFCC_I2C_READ_WRITE_IMPROVEMENT  == TRUE)
     if(pInfo->wStatus == NFCSTATUS_READ_FAILED)
     {
         if (nxpncihal_ctrl.p_nfc_stack_cback != NULL)
@@ -1122,7 +1142,7 @@
         }
         return;
     }
-
+#endif
     if (pInfo->wStatus == NFCSTATUS_SUCCESS)
     {
         NXPLOG_NCIHAL_D("read successful status = 0x%x", pInfo->wStatus);
@@ -1263,6 +1283,7 @@
         }
         if(retry_core_init_cnt > 3)
         {
+#if(NXP_NFCC_I2C_READ_WRITE_IMPROVEMENT == TRUE)
             if (nxpncihal_ctrl.p_nfc_stack_cback != NULL)
             {
                 NXPLOG_NCIHAL_D("Posting Core Init Failed\n");
@@ -1271,6 +1292,7 @@
                 (*nxpncihal_ctrl.p_nfc_stack_cback)(HAL_NFC_ERROR_EVT,
                         HAL_NFC_STATUS_ERR_CMD_TIMEOUT);
             }
+#endif
             return NFCSTATUS_FAILED;
         }
 
@@ -1349,7 +1371,7 @@
             goto retry_core_init;
         }
     }
-#if ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
+#if(NXP_ESE_SVDD_SYNC == TRUE)
     if(GetNxpNumValue(NAME_NXP_SVDD_SYNC_OFF_DELAY, (void *)&gSvddSyncOff_Delay, sizeof(gSvddSyncOff_Delay)))
     {
         if(gSvddSyncOff_Delay>20)
@@ -1391,38 +1413,44 @@
     }
 #endif
 
-#if((NFC_NXP_CHIP_TYPE != PN547C2) && (NXP_ESE_DUAL_MODE_PRIO_SCHEME == NXP_ESE_WIRED_MODE_RESUME))
     if(isNxpConfigModified() || (fw_dwnld_flag == 0x01))
     {
+#if((NFC_NXP_CHIP_TYPE != PN547C2) && (NXP_ESE_DUAL_MODE_PRIO_SCHEME == NXP_ESE_WIRED_MODE_RESUME))
+        uint8_t value[] = {0x01};
+#else
+        uint8_t value[] = {0x00};
+#endif
         uint8_t timeOutValue;
         num = 0;
-        uint8_t value[] = {0x01};
         mEEPROM_info.buffer = &value;
         mEEPROM_info.bufflen = sizeof(value);
         mEEPROM_info.request_type = EEPROM_WIREDMODE_RESUME_ENABLE;
         mEEPROM_info.request_mode = SET_EEPROM_DATA;
-        status = request_EEPROM(&mEEPROM_info);
+        request_EEPROM(&mEEPROM_info);
+    }
 
-        if(GetNxpNumValue(NAME_NXP_WIREDMODE_RESUME_TIMEOUT, (void *)&num, sizeof(num)))
+#if((NFC_NXP_CHIP_TYPE != PN547C2) && (NXP_ESE_DUAL_MODE_PRIO_SCHEME == NXP_ESE_WIRED_MODE_RESUME))
+    {
+        uint8_t resume_timeout_buf[NXP_WIREDMODE_RESUME_TIMEOUT_LEN];
+        mEEPROM_info.request_mode = GET_EEPROM_DATA;
+        NXPLOG_NCIHAL_D("Sree Timeout value");
+        if(isNxpConfigModified() || (fw_dwnld_flag == 0x01))
         {
-            if(num == 0x00)
+            NXPLOG_NCIHAL_D("Sree1 Timeout value");
+            if(GetNxpByteArrayValue(NAME_NXP_WIREDMODE_RESUME_TIMEOUT, (char *)buffer, bufflen, &retlen))
             {
-                timeOutValue = 0x02;   // default 2 milliseconds timeout
-            }
-            else
-            {
-                timeOutValue = (uint8_t)num;
+                NXPLOG_NCIHAL_D("Sree2 time out value %x %x %x %x retvalue=%d", resume_timeout_buf[0], resume_timeout_buf[1], resume_timeout_buf[2], resume_timeout_buf[3],retlen);
+                if(retlen>= NXP_WIREDMODE_RESUME_TIMEOUT_LEN)
+                {
+                    memcpy(&resume_timeout_buf, buffer, NXP_STAG_TIMEOUT_BUF_LEN);
+                    mEEPROM_info.request_mode = SET_EEPROM_DATA;
+                }
             }
         }
-        else
-        {
-            timeOutValue = 0x02;   // default 2 milliseconds timeout
-        }
-            mEEPROM_info.buffer = &timeOutValue;
-            mEEPROM_info.bufflen = sizeof(timeOutValue);
-            mEEPROM_info.request_type = EEPROM_WIREDMODE_RESUME_TIMEOUT;
-            mEEPROM_info.request_mode = SET_EEPROM_DATA;
-            status = request_EEPROM(&mEEPROM_info);
+        mEEPROM_info.buffer = resume_timeout_buf;
+        mEEPROM_info.bufflen = sizeof(resume_timeout_buf);
+        mEEPROM_info.request_type = EEPROM_WIREDMODE_RESUME_TIMEOUT;
+        status = request_EEPROM(&mEEPROM_info);
     }
 #endif
 
@@ -1561,8 +1589,7 @@
             goto retry_core_init;
         }
     }
-    if((fw_dwnld_flag == 0x01) || (TRUE == setConfigAlways))
-    {
+
         retlen = 0;
 #if(NFC_NXP_CHIP_TYPE != PN547C2)
         NXPLOG_NCIHAL_D ("Performing TVDD Settings");
@@ -1611,14 +1638,9 @@
 
         }
 #endif
-    }
+
     retlen = 0;
-    num = 0;
-    isfound = GetNxpNumValue(NAME_NXP_RF_UPDATE_REQ, &num, sizeof(num));
-    if ((fw_dwnld_flag == 0x01)||
-            (TRUE == setConfigAlways) ||
-            ((isfound > 0)&&(num == 1)))
-    {
+
 #if(NFC_NXP_CHIP_TYPE != PN547C2)
         config_access = FALSE;
 #endif
@@ -1798,10 +1820,7 @@
                 goto retry_core_init;
             }
         }
-    }
-#if(NFC_NXP_CHIP_TYPE != PN547C2)
-        config_access = TRUE;
-#endif
+
         retlen = 0;
 
         NXPLOG_NCIHAL_D ("Performing NAME_NXP_CORE_CONF Settings");
@@ -2131,12 +2150,18 @@
 
         if(p_core_init_rsp_params[35] > 0)
         {  //if length of last command is 0 then it doesn't need to send last command.
-            if( !(((p_core_init_rsp_params[36] == 0x21) && (p_core_init_rsp_params[37] == 0x03))
-                && (*(p_core_init_rsp_params + 1) == 1)) &&
-                    !((p_core_init_rsp_params[36] == 0x21) && (p_core_init_rsp_params[37] == 0x06) && (p_core_init_rsp_params[39] == 0x00) &&(*(p_core_init_rsp_params + 1) == 0x00)))
+            if( !( (p_core_init_rsp_params[36] == 0x21) &&
+                   (p_core_init_rsp_params[37] == 0x03) &&
+                   (*(p_core_init_rsp_params + 1) == 0x01) )
+                                    &&
+                !( (p_core_init_rsp_params[36] == 0x21) &&
+                   (p_core_init_rsp_params[37] == 0x06) &&
+                   (p_core_init_rsp_params[39] == 0x00) &&
+                   (*(p_core_init_rsp_params + 1) == 0x00) )
+              )
                 //if last command is discovery and RF status is also discovery state, then it doesn't need to execute or similarly
-                // if the last command is deactivate to idle and RF status is also idle , no need to execute the command .
-            {
+                //if the last command is deactivate to idle and RF status is also idle , no need to execute the command .
+             {
                 tmp_len = p_core_init_rsp_params[35];
 
                 /* Check for NXP ext before sending write */
@@ -2565,11 +2590,13 @@
     }
 
     CONCURRENCY_LOCK();
+#if (NXP_NFCC_I2C_READ_WRITE_IMPROVEMENT == TRUE)
     if(read_failed_disable_nfc)
     {
         read_failed_disable_nfc = FALSE;
         goto close_and_return;
     }
+#endif
     if(write_unlocked_status == NFCSTATUS_FAILED)
     {
         NXPLOG_NCIHAL_D("phNxpNciHal_close i2c write failed .Clean and Return");
@@ -2623,7 +2650,9 @@
     {
         NXPLOG_NCIHAL_E ("NCI_CORE_RESET: Failed");
     }
+#if (NXP_NFCC_I2C_READ_WRITE_IMPROVEMENT == TRUE)
     close_and_return:
+#endif
     if (NULL != gpphTmlNfc_Context->pDevHandle)
     {
         phNxpNciHal_close_complete(NFCSTATUS_SUCCESS);
@@ -2964,8 +2993,8 @@
             ret = 0;
         }
         break;
-    case HAL_NFC_IOCTL_P73_ISO_RST:
-        status = phTmlNfc_IoCtl(phTmlNfc_e_P73IsoRstMode);
+    case HAL_NFC_IOCTL_ESE_CHIP_RST:
+        status = phTmlNfc_IoCtl(phTmlNfc_e_eSEChipRstMode);
         if(NFCSTATUS_FAILED != status)
         {
             if(NULL != p_data)
@@ -2973,7 +3002,7 @@
             ret = 0;
         }
         break;
-#if ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
+#if (NXP_ESE_SVDD_SYNC == TRUE)
     case HAL_NFC_IOCTL_REL_SVDD_WAIT:
         status = phTmlNfc_rel_svdd_wait(gpphTmlNfc_Context->pDevHandle);
         NXPLOG_NCIHAL_D("HAL_NFC_IOCTL_P61_REL_SVDD_WAIT retval = %d\n",status);
@@ -2995,7 +3024,27 @@
             }
         }
         break;
-
+#if (NXP_ESE_JCOP_DWNLD_PROTECTION == TRUE)
+    case HAL_NFC_IOCTL_SET_JCP_DWNLD_ENABLE:
+        NXPLOG_NCIHAL_D("HAL_NFC_IOCTL_SET_JCP_DWNLD_ENABLE: \n");
+        status = phTmlNfc_IoCtl(phTmlNfc_e_SetJcopDwnldEnable);
+        if(NFCSTATUS_FAILED != status)
+        {
+            if(NULL != p_data)
+               *(uint16_t*)p_data = (uint16_t)status;
+            ret = 0;
+        }
+        break;
+    case HAL_NFC_IOCTL_SET_JCP_DWNLD_DISABLE:
+        status = phTmlNfc_IoCtl(phTmlNfc_e_SetJcopDwnldDisable);
+        if(NFCSTATUS_FAILED != status)
+        {
+            if(NULL != p_data)
+               *(uint16_t*)p_data = (uint16_t)status;
+            ret = 0;
+        }
+        break;
+#endif
     case HAL_NFC_IOCTL_GET_CONFIG_INFO:
         memcpy(p_data, mGetCfg_info , sizeof(phNxpNci_getCfg_info_t));
         ret = 0;
@@ -3238,6 +3287,7 @@
     if(isfound >0)
     {
         enable_bit = rf_val & 0x40;
+#if(NXP_NFCC_MIFARE_TIANJIN == TRUE)
         if((enable_bit != 0x40) && (rf_enable == 1))
         {
             phNxpNciRfSet.p_rx_data[10] |= 0x40;   // Enable if it is disabled
@@ -3250,8 +3300,25 @@
         {
             flag_send_tianjin_config = FALSE;  // No need to change in RF setting
         }
+#else
+        {
+           enable_bit = phNxpNciRfSet.p_rx_data[11] & 0x10;
+           if((rf_enable == 1) && (enable_bit != 0x10))
+           {
+               NXPLOG_NCIHAL_E("Setting Non-Mifare reader for china tianjin");
+               phNxpNciRfSet.p_rx_data[11] |= 0x10;
+           }else if ((rf_enable == 0) && (enable_bit == 0x10))
+           {
+               NXPLOG_NCIHAL_E("Setting Non-Mifare reader for china tianjin");
+               phNxpNciRfSet.p_rx_data[11] &= 0xEF;
+           }
+           else
+           {
+               flag_send_tianjin_config = FALSE;
+           }
+        }
+#endif
     }
-
     /*check if china block number check is required*/
     rf_val = phNxpNciRfSet.p_rx_data[8];
     isfound = (GetNxpNumValue(NAME_NXP_CHINA_BLK_NUM_CHK_ENABLE, (void *)&cfg_blk_chk_enable, sizeof(cfg_blk_chk_enable)));
@@ -3611,3 +3678,35 @@
     return status;
 }
 
+/*******************************************************************************
+**
+** Function         phNxpNciHal_getFWDownloadFlags
+**
+** Description      Returns the current mode
+**
+** Parameters       none
+**
+** Returns          Current mode download/NCI
+*******************************************************************************/
+int phNxpNciHal_getFWDownloadFlag(uint8_t* fwDnldRequest)
+{
+    int status = NFCSTATUS_FAILED;
+
+    NXPLOG_NCIHAL_D("notifyFwrequest %d", notifyFwrequest);
+    if(notifyFwrequest == TRUE)
+    {
+        status = phNxpNciHal_FwDwnld();
+        if(status == NFCSTATUS_SUCCESS)
+        {
+            *fwDnldRequest = TRUE;
+            notifyFwrequest = FALSE;
+            status = NFCSTATUS_OK;
+        }
+        else
+        {
+            *fwDnldRequest = FALSE;
+        }
+    }
+    return status;
+}
+
diff --git a/halimpl/pn54x/hal/phNxpNciHal.h b/halimpl/pn54x/hal/phNxpNciHal.h
index c048d2e..3843cf0 100644
--- a/halimpl/pn54x/hal/phNxpNciHal.h
+++ b/halimpl/pn54x/hal/phNxpNciHal.h
@@ -19,12 +19,17 @@
 #include <hardware/nfc.h>
 #include <phNxpNciHal_utils.h>
 #include <NXP_ESE_Features.h>
+#ifndef NXP_NFCC_FEATURES_H
+#include <NXP_NFCC_Features.h>
+#endif
 
 /********************* Definitions and structures *****************************/
 #define MAX_RETRY_COUNT       5
 #define NCI_MAX_DATA_LEN      300
 #define NCI_POLL_DURATION     500
 #define HAL_NFC_ENABLE_I2C_FRAGMENTATION_EVT    0x07
+#define NXP_STAG_TIMEOUT_BUF_LEN                0x04 /*FIXME:TODO:remove*/
+#define NXP_WIREDMODE_RESUME_TIMEOUT_LEN        0x04
 #undef P2P_PRIO_LOGIC_HAL_IMP
 
 typedef void (phNxpNciHal_control_granted_callback_t)();
diff --git a/halimpl/pn54x/hal/phNxpNciHal_ext.c b/halimpl/pn54x/hal/phNxpNciHal_ext.c
index 0d90eb4..87e08e4 100644
--- a/halimpl/pn54x/hal/phNxpNciHal_ext.c
+++ b/halimpl/pn54x/hal/phNxpNciHal_ext.c
@@ -23,7 +23,7 @@
 #include <phNxpConfig.h>
 #include <phDnldNfc.h>
 
-#define HAL_EXTNS_WRITE_RSP_TIMEOUT   (1000)                /* Timeout value to wait for response from PN548AD */
+#define HAL_EXTNS_WRITE_RSP_TIMEOUT   (2500)                /* Timeout value to wait for response from PN548AD */
 
 #undef P2P_PRIO_LOGIC_HAL_IMP
 
@@ -61,7 +61,7 @@
 static uint32_t iCoreRstNtfLen;
 
 extern uint32_t timeoutTimerId;
-#if ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
+#if(NXP_ESE_SVDD_SYNC == TRUE)
 extern uint32_t gSvddSyncOff_Delay; /*default delay*/
 #endif
 extern NFCSTATUS read_retry();
@@ -737,7 +737,7 @@
         nxpprofile_ctrl.profile_type = NFC_FORUM_PROFILE;
         status = NFCSTATUS_SUCCESS;
     }
-#if ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
+#if(NXP_ESE_SVDD_SYNC == TRUE)
     else if (p_cmd_data[0] == 0x2F &&
             p_cmd_data[1] == 0x31 &&
             p_cmd_data[2] == 0x01 &&
@@ -858,7 +858,6 @@
         p_rsp_data[2] = 0x02;
         p_rsp_data[3] = 0x00;
         p_rsp_data[4] = 0x00;
-        phNxpNciHal_print_packet("RECV", p_rsp_data,5);
         status = NFCSTATUS_FAILED;
     }
     //2002 0904 3000 3100 3200 5000
@@ -1216,16 +1215,19 @@
     case EEPROM_WIREDMODE_RESUME_ENABLE:
         b_position = 0;
         memIndex = 0x00;
-        addr[0]  = 0xFF; //To be updated actual value
-        addr[1]  = 0xFF; // To be updated actual value
+        addr[0]  = 0xA0; //To be updated actual value
+        addr[1]  = 0x99; // To be updated actual value
         break;
-    
+
     case EEPROM_WIREDMODE_RESUME_TIMEOUT:
-        b_position = 0;
+        mEEPROM_info->update_mode = BYTEWISE;
         memIndex = 0x00;
-        addr[0]  = 0xFF; //To be updated actual value
-        addr[1]  = 0xFF; // To be updated actual value
+        fieldLen = 0x04;
+        len = fieldLen + 4;
+        addr[0]  = 0xA0;
+        addr[1]  = 0xFC;
         break;
+
     case EEPROM_ESE_SVDD_POWER:
         b_position = 0;
         memIndex = 0x00;
diff --git a/halimpl/pn54x/inc/phNxpNciHal_Adaptation.h b/halimpl/pn54x/inc/phNxpNciHal_Adaptation.h
index 21eac55..36222a0 100644
--- a/halimpl/pn54x/inc/phNxpNciHal_Adaptation.h
+++ b/halimpl/pn54x/inc/phNxpNciHal_Adaptation.h
@@ -41,4 +41,5 @@
 int phNxpNciHal_MinOpen(nfc_stack_callback_t *p_cback,
         nfc_stack_data_callback_t *p_data_cback);
 int phNxpNciHal_Minclose(void);
+int phNxpNciHal_getFWDownloadFlag(uint8_t* fwDnldRequest);
 #endif /* _PHNXPNCIHAL_ADAPTATION_H_ */
diff --git a/halimpl/pn54x/libnfc-brcm.conf b/halimpl/pn54x/libnfc-brcm.conf
index bac90df..16f9880 100644
--- a/halimpl/pn54x/libnfc-brcm.conf
+++ b/halimpl/pn54x/libnfc-brcm.conf
@@ -363,7 +363,11 @@
 # NXP PN65T 0x03
 # NXP PN548C2 0x02
 # NXP PN66T 0x03
-NFA_MAX_EE_SUPPORTED=0x03
+# NXP PN551 0x02
+# NXP PN67T 0x03
+# NXP PN553 0x02
+# NXP PN80T 0x04
+NFA_MAX_EE_SUPPORTED=0x04
 
 ###############################################################################
 # NCI Hal Module name
diff --git a/halimpl/pn54x/libnfc-nxp-PN547C2_example.conf b/halimpl/pn54x/libnfc-nxp-PN547C2_example.conf
index e092f3c..9d74bfa 100644
--- a/halimpl/pn54x/libnfc-nxp-PN547C2_example.conf
+++ b/halimpl/pn54x/libnfc-nxp-PN547C2_example.conf
@@ -1,6 +1,5 @@
 ## This file is used by NFC NXP NCI HAL(external/libnfc-nci/halimpl/pn547)
 ## and NFC Service Java Native Interface Extensions (packages/apps/Nfc/nci/jni/extns/pn547)
-
 ###############################################################################
 # Application options 
 # Logging Levels
@@ -9,7 +8,6 @@
 # ANDROID_LOG_WARN           0x02 
 # ANDROID_LOG_ERROR          0x01 
 # ANDROID_LOG_SILENT         0x00
-#
 NXPLOG_EXTNS_LOGLEVEL=0x03
 NXPLOG_NCIHAL_LOGLEVEL=0x03
 NXPLOG_NCIX_LOGLEVEL=0x03
@@ -28,6 +26,7 @@
 ###############################################################################
 # Vzw Feature enable
 VZW_FEATURE_ENABLE=0x01
+
 ###############################################################################
 # File name for Firmware
 NXP_FW_NAME="libpn547_fw.so"
@@ -36,7 +35,6 @@
 # System clock source selection configuration
 #define CLK_SRC_XTAL       1
 #define CLK_SRC_PLL        2
-
 NXP_SYS_CLK_SRC_SEL=0x01
 
 ###############################################################################
@@ -47,13 +45,11 @@
 #define CLK_FREQ_26MHZ         4
 #define CLK_FREQ_38_4MHZ       5
 #define CLK_FREQ_52MHZ         6
-
 NXP_SYS_CLK_FREQ_SEL=0x00
 
 ###############################################################################
 # The timeout value to be used for clock request acknowledgment 
 # min value = 0x01 to max = 0x06
-
 NXP_SYS_CLOCK_TO_CFG=0x01
 
 ###############################################################################
@@ -143,9 +139,11 @@
 # Core configuration rf field filter settings to enable set to 01 to disable set to 00 last bit
 NXP_CORE_RF_FIELD={ 20, 02, 05, 01, A0, 62, 01, 01
         }
+
 ###############################################################################
 # To enable i2c fragmentation set i2c fragmentation enable 0x01 to disable set to 0x00
 NXP_I2C_FRAGMENTATION_ENABLED=0x00
+
 ###############################################################################
 # Core configuration settings 
 NXP_CORE_CONF={ 20, 02, 2B, 0D,
@@ -163,7 +161,7 @@
         82, 01, 0E,
         18, 01, 01 
         }
- 
+
 ###############################################################################
 # Mifare Classic Key settings 
 #NXP_CORE_MFCKEY_SETTING={20, 02, 25,04, A0, 51, 06, A0, A1, A2, A3, A4, A5, 
@@ -176,10 +174,11 @@
 # No secure element 0x00
 # eSE               0x01
 # UICC              0x02
- 
 NXP_DEFAULT_SE=0x02
 
+###############################################################################
 NXP_DEFAULT_NFCEE_TIMEOUT=0x06
+
 ###############################################################################
 #Enable SWP full power mode when phone is power off
 NXP_SWP_FULL_PWR_ON=0x01
@@ -214,33 +213,36 @@
 #PN65T              0x02
 #PN548AD            0x03
 #PN66T              0x04
-
 NXP_NFC_CHIP=0x01
 
+###############################################################################
 #Timeout in secs
 NXP_SWP_RD_START_TIMEOUT=0x0A
+
+###############################################################################
 #Timeout in secs
 NXP_SWP_RD_TAG_OP_TIMEOUT=0x01
+
 ###############################################################################
 # CE when Screen state is locked
+# This setting is for DEFAULT_AID_ROUTE,
+# DEFAULT_DESFIRE_ROUTE and DEFAULT_MIFARE_CLT_ROUTE
 # Disable           0x00
 # Enable            0x01
 NXP_CE_ROUTE_STRICT_DISABLE=0x01
 
-
 ###############################################################################
-
 # AID Matching platform options
 # AID_MATCHING_L 0x01
 # AID_MATCHING_K 0x02
 AID_MATCHING_PLATFORM=0x01
+
 ################################################################################
 #Used to Restrict Type A UICC baud rate
 #0 = default supported
 #1 = 212 maximum supported
 #2 = 424 maximum supported
 #3 = 848 maximum supported
-
 NXP_TYPEA_UICC_BAUD_RATE=0x00
 
 ################################################################################
@@ -249,13 +251,13 @@
 #1 = 212 maximum supported
 #2 = 424 maximum supported
 #3 = 848 maximum supported
-
 NXP_TYPEB_UICC_BAUD_RATE=0x00
-################################################################################
 
+################################################################################
 #Config to allow adding aids
 #NFC on/off is required after this config
 #1 = enabling adding aid  to NFCC routing table.
 #0 = disabling adding aid to NFCC routing table.
 NXP_ENABLE_ADD_AID=0x01
-##################################################################################
+
+################################################################################
\ No newline at end of file
diff --git a/halimpl/pn54x/libnfc-nxp-PN548C2_example.conf b/halimpl/pn54x/libnfc-nxp-PN548C2_example.conf
index 55b769b..839b43f 100644
--- a/halimpl/pn54x/libnfc-nxp-PN548C2_example.conf
+++ b/halimpl/pn54x/libnfc-nxp-PN548C2_example.conf
@@ -1,6 +1,5 @@
 ## This file is used by NFC NXP NCI HAL(external/libnfc-nci/halimpl/pn547)
 ## and NFC Service Java Native Interface Extensions (packages/apps/Nfc/nci/jni/extns/pn547)
-
 ###############################################################################
 # Application options
 # Logging Levels
@@ -9,7 +8,6 @@
 # ANDROID_LOG_WARN           0x02
 # ANDROID_LOG_ERROR          0x01
 # ANDROID_LOG_SILENT         0x00
-#
 NXPLOG_EXTNS_LOGLEVEL=0x03
 NXPLOG_NCIHAL_LOGLEVEL=0x03
 NXPLOG_NCIX_LOGLEVEL=0x03
@@ -37,7 +35,6 @@
 # System clock source selection configuration
 #define CLK_SRC_XTAL       1
 #define CLK_SRC_PLL        2
-
 NXP_SYS_CLK_SRC_SEL=0x02
 
 ###############################################################################
@@ -48,14 +45,12 @@
 #define CLK_FREQ_26MHZ         4
 #define CLK_FREQ_38_4MHZ       5
 #define CLK_FREQ_52MHZ         6
-
 NXP_SYS_CLK_FREQ_SEL=0x02
 
 ###############################################################################
 # The timeout value to be used for clock request acknowledgment
 # min value = 0x01 to max = 0x06
-
-NXP_SYS_CLOCK_TO_CFG=0x01
+NXP_SYS_CLOCK_TO_CFG=0x06
 
 ###############################################################################
 # NXP proprietary settings
@@ -80,16 +75,18 @@
 # Allow NFCC to configure External TVDD, There are currently three
 #configurations (1, 2 and 3) are supported, out of them only one can be
 #supported.
-
 NXP_EXT_TVDD_CFG=0x01
 
+################################################################################
 #config1:SLALM, 3.3V for both RM and CM
 NXP_EXT_TVDD_CFG_1={20, 02, 0B, 02, A0, 66, 01, 00, A0, 0E, 03, 02, 09, 00}
 
+################################################################################
 #config2: use DCDC in CE, use Tx_Pwr_Req, set CFG2 mode, SLALM,
 #monitoring 5V from DCDC, 4.7V for both RM and CM, DCDCWaitTime=4.2ms
 NXP_EXT_TVDD_CFG_2={20, 02, 0B, 02, A0, 66, 01, 00, A0, 0E, 03, 56, 64, 0A}
 
+################################################################################
 #config3: use DCDC in CE, use Tx_Pwr_Req, SLALM, monitoring 5V from DCDC,
 #DCDCWaitTime=4.2ms
 NXP_EXT_TVDD_CFG_3={20, 02, 0B, 02, A0, 66, 01, 01, A0, 0E, 03, 52, 64, 0A}
@@ -164,6 +161,7 @@
 # Core configuration rf field filter settings to enable set to 01 to disable set to 00 last bit
 NXP_CORE_RF_FIELD={ 20, 02, 05, 01, A0, 62, 01, 01
         }
+
 ###############################################################################
 # To enable i2c fragmentation set i2c fragmentation enable 0x01 to disable set to 0x00
 NXP_I2C_FRAGMENTATION_ENABLED=0x00
@@ -199,7 +197,6 @@
 # No secure element 0x00
 # eSE               0x01
 # UICC              0x02
-
 NXP_DEFAULT_SE=0x03
 
 ###############################################################################
@@ -212,23 +209,28 @@
 #PN65T              0x02
 #PN548AD            0x03
 #PN66T              0x04
-
 NXP_NFC_CHIP=0x03
 
 ###############################################################################
 # CE when Screen state is locked
+# This setting is for DEFAULT_AID_ROUTE,
+# DEFAULT_DESFIRE_ROUTE and DEFAULT_MIFARE_CLT_ROUTE
 # Disable           0x00
 # Enable            0x01
 NXP_CE_ROUTE_STRICT_DISABLE=0x01
 
+###############################################################################
 #Timeout in secs to get NFCEE Discover notification
 NXP_DEFAULT_NFCEE_DISC_TIMEOUT=20
 
+###############################################################################
 NXP_DEFAULT_NFCEE_TIMEOUT=0x06
 
+###############################################################################
 #Timeout in secs
 NXP_SWP_RD_START_TIMEOUT=0x0A
 
+###############################################################################
 #Timeout in secs
 NXP_SWP_RD_TAG_OP_TIMEOUT=0x01
 
@@ -291,11 +293,13 @@
 # AID_MATCHING_L 0x01
 # AID_MATCHING_K 0x02
 AID_MATCHING_PLATFORM=0x01
+
 ###############################################################################
 #CHINA_TIANJIN_RF_SETTING
 #Enable  0x01
 #Disable 0x00
 NXP_CHINA_TIANJIN_RF_ENABLED=0x01
+
 ###############################################################################
 #SWP_SWITCH_TIMEOUT_SETTING
 # Allowed range of swp timeout setting is 0x00 to 0x3C [0 - 60].
@@ -303,6 +307,7 @@
 # No Timeout  0x00
 # 10 millisecond timeout 0x0A
 NXP_SWP_SWITCH_TIMEOUT=0x0A
+
 ###############################################################################
 #Dynamic RSSI feature enable
 # Disable 0x00
@@ -314,14 +319,18 @@
 # Disable           0x00
 # Enable            0x01
 NXP_DUAL_UICC_ENABLE=0x00
+
 ###############################################################################
 #Config to allow adding aids
 #NFC on/off is required after this config
 #1 = enabling adding aid  to NFCC routing table.
 #0 = disabling adding aid to NFCC routing table.
 NXP_ENABLE_ADD_AID=0x01
+
 ###############################################################################
 # Enable/Disable checking default proto SE Id
 # Disable           0x00
 # Enable            0x01
 NXP_CHECK_DEFAULT_PROTO_SE_ID=0x01
+
+###############################################################################
\ No newline at end of file
diff --git a/halimpl/pn54x/libnfc-nxp-PN551_example.conf b/halimpl/pn54x/libnfc-nxp-PN551_example.conf
index 02f86e4..92d911c 100644
--- a/halimpl/pn54x/libnfc-nxp-PN551_example.conf
+++ b/halimpl/pn54x/libnfc-nxp-PN551_example.conf
@@ -1,6 +1,5 @@
 ## This file is used by NFC NXP NCI HAL(external/libnfc-nci/halimpl/pn551)
 ## and NFC Service Java Native Interface Extensions (packages/apps/Nfc/nci/jni/extns/pn551)
-
 ###############################################################################
 # Application options
 # Logging Levels
@@ -9,7 +8,6 @@
 # ANDROID_LOG_WARN           0x02
 # ANDROID_LOG_ERROR          0x01
 # ANDROID_LOG_SILENT         0x00
-#
 NXPLOG_EXTNS_LOGLEVEL=0x03
 NXPLOG_NCIHAL_LOGLEVEL=0x03
 NXPLOG_NCIX_LOGLEVEL=0x03
@@ -37,7 +35,6 @@
 # System clock source selection configuration
 #define CLK_SRC_XTAL       1
 #define CLK_SRC_PLL        2
-
 NXP_SYS_CLK_SRC_SEL=0x01
 
 ###############################################################################
@@ -48,13 +45,11 @@
 #define CLK_FREQ_26MHZ         4
 #define CLK_FREQ_38_4MHZ       5
 #define CLK_FREQ_52MHZ         6
-
 NXP_SYS_CLK_FREQ_SEL=0x01
 
 ###############################################################################
 # The timeout value to be used for clock request acknowledgment
 # min value = 0x01 to max = 0x06
-
 NXP_SYS_CLOCK_TO_CFG=0x06
 
 ###############################################################################
@@ -80,16 +75,18 @@
 # Allow NFCC to configure External TVDD, There are currently three
 #configurations (1, 2 and 3) are supported, out of them only one can be
 #supported.
-
 NXP_EXT_TVDD_CFG=0x01
 
+###############################################################################
 #config1:SLALM, 3.3V for both RM and CM
 NXP_EXT_TVDD_CFG_1={20, 02, 0B, 02, A0, 66, 01, 00, A0, 0E, 03, 02, 09, 00}
 
+###############################################################################
 #config2: use DCDC in CE, use Tx_Pwr_Req, set CFG2 mode, SLALM,
 #monitoring 5V from DCDC, 3.3V for both RM and CM, DCDCWaitTime=4.2ms
 NXP_EXT_TVDD_CFG_2={20, 02, 0B, 02, A0, 66, 01, 00, A0, 0E, 03, 56, 24, 08 }
 
+###############################################################################
 #config3: use DCDC in CE, use Tx_Pwr_Req, SLALM, monitoring 5V from DCDC,
 #DCDCWaitTime=4.2ms
 NXP_EXT_TVDD_CFG_3={20, 02, 0B, 02, A0, 66, 01, 01, A0, 0E, 03, 52, 40, 0A}
@@ -162,8 +159,8 @@
 
 ###############################################################################
 # Core configuration rf field filter settings to enable set to 01 to disable set to 00 last bit
-NXP_CORE_RF_FIELD={ 20, 02, 05, 01, A0, 62, 01, 01
-        }
+NXP_CORE_RF_FIELD={ 20, 02, 05, 01, A0, 62, 01, 01 }
+
 ###############################################################################
 # To enable i2c fragmentation set i2c fragmentation enable 0x01 to disable set to 0x00
 NXP_I2C_FRAGMENTATION_ENABLED=0x00
@@ -199,7 +196,6 @@
 # No secure element 0x00
 # eSE               0x01
 # UICC              0x02
-
 NXP_DEFAULT_SE=0x03
 
 ###############################################################################
@@ -214,22 +210,28 @@
 #PN66T              0x04
 #PN551              0x05
 #PN67T              0x06
-
 NXP_NFC_CHIP=0x05
+
 ###############################################################################
 # CE when Screen state is locked
+# This setting is for DEFAULT_AID_ROUTE,
+# DEFAULT_DESFIRE_ROUTE and DEFAULT_MIFARE_CLT_ROUTE
 # Disable           0x00
 # Enable            0x01
 NXP_CE_ROUTE_STRICT_DISABLE=0x01
 
+###############################################################################
 #Timeout in secs to get NFCEE Discover notification
 NXP_DEFAULT_NFCEE_DISC_TIMEOUT=20
 
+###############################################################################
 NXP_DEFAULT_NFCEE_TIMEOUT=0x06
 
+###############################################################################
 #Timeout in secs
 NXP_SWP_RD_START_TIMEOUT=0x0A
 
+###############################################################################
 #Timeout in secs
 NXP_SWP_RD_TAG_OP_TIMEOUT=0x01
 
@@ -292,11 +294,13 @@
 # AID_MATCHING_L 0x01
 # AID_MATCHING_K 0x02
 AID_MATCHING_PLATFORM=0x01
+
 ###############################################################################
 #CHINA_TIANJIN_RF_SETTING
 #Enable  0x01
 #Disable 0x00
 NXP_CHINA_TIANJIN_RF_ENABLED=0x01
+
 ###############################################################################
 #SWP_SWITCH_TIMEOUT_SETTING
 # Allowed range of swp timeout setting is 0x00 to 0x3C [0 - 60].
@@ -304,29 +308,36 @@
 # No Timeout  0x00
 # 10 millisecond timeout 0x0A
 NXP_SWP_SWITCH_TIMEOUT=0x0A
+
 ###############################################################################
 #Dynamic RSSI feature enable
 # Disable           0x00
 # Enable            0x01
 NXP_AGC_DEBUG_ENABLE=0x00
+
 ###############################################################################
 # UICC mode supported
 # Disable           0x00
 # Enable            0x01
 NXP_DUAL_UICC_ENABLE=0x00
+
 ###############################################################################
 #Config to allow adding aids
 #NFC on/off is required after this config
 #1 = enabling adding aid  to NFCC routing table.
 #0 = disabling adding aid to NFCC routing table.
 NXP_ENABLE_ADD_AID=0x01
+
 ###############################################################################
 # Enable/Disable checking default proto SE Id
 # Disable           0x00
 # Enable            0x01
 NXP_CHECK_DEFAULT_PROTO_SE_ID=0x01
+
 ###############################################################################
 # Restrict routing to first matched rule only.
 # Blacklist enable   0x01
 # Blacklist disable  0x00
 NXP_PROP_BLACKLIST_ROUTING=0x00
+
+###############################################################################
\ No newline at end of file
diff --git a/halimpl/pn54x/libnfc-nxp-PN553_example.conf b/halimpl/pn54x/libnfc-nxp-PN553_example.conf
index 8ac9a05..e4f6a73 100644
--- a/halimpl/pn54x/libnfc-nxp-PN553_example.conf
+++ b/halimpl/pn54x/libnfc-nxp-PN553_example.conf
@@ -1,6 +1,5 @@
 ## This file is used by NFC NXP NCI HAL(external/libnfc-nci/halimpl/pn547)
 ## and NFC Service Java Native Interface Extensions (packages/apps/Nfc/nci/jni/extns/pn547)
-
 ###############################################################################
 # Application options
 # Logging Levels
@@ -9,7 +8,6 @@
 # ANDROID_LOG_WARN           0x02
 # ANDROID_LOG_ERROR          0x01
 # ANDROID_LOG_SILENT         0x00
-#
 NXPLOG_EXTNS_LOGLEVEL=0x03
 NXPLOG_NCIHAL_LOGLEVEL=0x03
 NXPLOG_NCIX_LOGLEVEL=0x03
@@ -37,7 +35,6 @@
 # System clock source selection configuration
 #define CLK_SRC_XTAL       1
 #define CLK_SRC_PLL        2
-
 NXP_SYS_CLK_SRC_SEL=0x01
 
 ###############################################################################
@@ -48,13 +45,11 @@
 #define CLK_FREQ_26MHZ         4
 #define CLK_FREQ_38_4MHZ       5
 #define CLK_FREQ_52MHZ         6
-
 NXP_SYS_CLK_FREQ_SEL=0x01
 
 ###############################################################################
 # The timeout value to be used for clock request acknowledgment
 # min value = 0x01 to max = 0x06
-
 NXP_SYS_CLOCK_TO_CFG=0x01
 
 ###############################################################################
@@ -75,25 +70,20 @@
 # Standby enable settings
 #NXP_CORE_STANDBY={2F, 00, 01, 01}
 
-
 ###############################################################################
 # NXP TVDD configurations settings
-# Allow NFCC to configure External TVDD, There are currently three
-#configurations (1, 2 and 3) are supported, out of them only one can be
-#supported.
-
+# Allow NFCC to configure External TVDD, two configurations (1 and 2) supported,
+# out of them only one can be configured at a time.
 NXP_EXT_TVDD_CFG=0x02
 
+###############################################################################
 #config1:SLALM, 3.3V for both RM and CM
-NXP_EXT_TVDD_CFG_1={20, 02, 0B, 02, A0, 66, 01, 00, A0, 0E, 03, 02, 09, 00}
+NXP_EXT_TVDD_CFG_1={20, 02, 0F, 01, A0, 0E, 0B, 31, 01, 01, 31, 00, 00, 00, 01, 00, D0, 0C}
 
+###############################################################################
 #config2: use DCDC in CE, use Tx_Pwr_Req, set CFG2 mode, SLALM,
 #monitoring 5V from DCDC, 3.3V for both RM and CM, DCDCWaitTime=4.2ms
-NXP_EXT_TVDD_CFG_2={20, 02, 0B, 02, A0, 66, 01, 00, A0, 0E, 03, 56, 43, 02}
-
-#config3: use DCDC in CE, use Tx_Pwr_Req, SLALM, monitoring 5V from DCDC,
-#DCDCWaitTime=4.2ms
-NXP_EXT_TVDD_CFG_3={20, 02, 0B, 02, A0, 66, 01, 01, A0, 0E, 03, 52, 40, 0A}
+NXP_EXT_TVDD_CFG_2={20, 02, 0F, 01, A0, 0E, 0B, 11, 01, C2, B2, 00, B2, 1E, 1F, 00, D0, 0C}
 
 ###############################################################################
 # NXP RF configuration ALM/PLM settings
@@ -131,7 +121,6 @@
 #NXP_RF_CONF_BLK_6={
 #}
 
-
 ###############################################################################
 # Set configuration optimization decision setting
 # Enable    = 0x01
@@ -147,6 +136,7 @@
 # Clock settings A002, A003
 # PbF settings A008
 # Clock timeout settings A004
+# eSE (SVDD) PWR REQ settings A0F2
 NXP_CORE_CONF_EXTN={20, 02, 25, 09,
     A0, EC, 01, 01,
     A0, ED, 01, 01,
@@ -169,11 +159,13 @@
 #       }
 
 ###############################################################################
-# Core configuration rf field filter settings to enable set to 01 to disable set to 00 last bit
-NXP_CORE_RF_FIELD={ 20, 02, 05, 01, A0, 62, 01, 01
-        }
+# Core configuration rf field filter settings to enable set to 01 to disable set
+# to 00 last bit
+NXP_CORE_RF_FIELD={ 20, 02, 05, 01, A0, 62, 01, 01 }
+
 ###############################################################################
-# To enable i2c fragmentation set i2c fragmentation enable 0x01 to disable set to 0x00
+# To enable i2c fragmentation set i2c fragmentation enable 0x01 to disable set
+# to 0x00
 NXP_I2C_FRAGMENTATION_ENABLED=0x00
 
 ###############################################################################
@@ -202,6 +194,7 @@
 #                                     A0, 53, 06, FF, FF, FF, FF, FF, FF,
 #                                     A0, 54, 06, 00, 00, 00, 00, 00, 00}
 
+
 ###############################################################################
 # Default SE Options
 # No secure element 0x00
@@ -229,23 +222,28 @@
 
 ###############################################################################
 # CE when Screen state is locked
+# This setting is for DEFAULT_AID_ROUTE,
+# DEFAULT_DESFIRE_ROUTE and DEFAULT_MIFARE_CLT_ROUTE
 # Disable           0x00
 # Enable            0x01
 NXP_CE_ROUTE_STRICT_DISABLE=0x01
 
+###############################################################################
 #Timeout in secs to get NFCEE Discover notification
 NXP_DEFAULT_NFCEE_DISC_TIMEOUT=20
 
+###############################################################################
 NXP_DEFAULT_NFCEE_TIMEOUT=0x06
 
+###############################################################################
 #Timeout in secs
 NXP_SWP_RD_START_TIMEOUT=0x0A
 
+###############################################################################
 #Timeout in secs
 NXP_SWP_RD_TAG_OP_TIMEOUT=0x01
 
 ###############################################################################
-
 #Set the default AID route Location :
 #This settings will be used when application does not set this parameter
 # host 0x00
@@ -271,6 +269,7 @@
 # UICC 0x02
 # UICC2 0x04
 DEFAULT_MIFARE_CLT_ROUTE=0x02
+
 ###############################################################################
 #Set the default AID Power state :
 #This settings will be used when application does not set this parameter
@@ -308,6 +307,7 @@
 # UICC 0x02
 # UICC2 0x04
 DEFAULT_FELICA_CLT_ROUTE=0x01
+
 ###############################################################################
 #Set the Felica CLT Power state :
 #This settings will be used when application does not set this parameter
@@ -317,27 +317,31 @@
 # bit pos 3 = Screen Lock
 # bit pos 4 = Screen Off
 DEFAULT_FELICA_CLT_PWR_STATE=0x1B
-###############################################################################
 
+###############################################################################
 # AID Matching platform options
 # AID_MATCHING_L 0x01
 # AID_MATCHING_K 0x02
 AID_MATCHING_PLATFORM=0x01
+
 ###############################################################################
 # P61 interface options
 # NFC 0x01
 # SPI 0x02
 NXP_P61_LS_DEFAULT_INTERFACE=0x01
+
 ###############################################################################
 # P61 LTSM interface options
 # NFC 0x01
 # SPI 0x02
 NXP_P61_LTSM_DEFAULT_INTERFACE=0x01
+
 ###############################################################################
 #CHINA_TIANJIN_RF_SETTING
 #Enable  0x01
 #Disable  0x00
 NXP_CHINA_TIANJIN_RF_ENABLED=0x01
+
 ###############################################################################
 #SWP_SWITCH_TIMEOUT_SETTING
 # Allowed range of swp timeout setting is 0x00 to 0x3C [0 - 60].
@@ -345,11 +349,13 @@
 # No Timeout  0x00
 # 10 millisecond timeout 0x0A
 NXP_SWP_SWITCH_TIMEOUT=0x0A
+
 ###############################################################################
 # P61 interface options for JCOP Download
 # NFC 0x01
 # SPI 0x02
 NXP_P61_JCOP_DEFAULT_INTERFACE=0x01
+
 ###############################################################################
 # P61 JCOP OS download  options
 # FRAMEWORK API BY APPLICATION 0x00
@@ -364,8 +370,10 @@
 # LS2.2 0x22
 # AT NFC service intialization
 NXP_LOADER_SERVICE_VERSION=0x22
+
 ###############################################################################
-#Timeout value  in milliseconds for NFCC standby mode.The range is between 5000 msec to 20000 msec and zero is to disable.
+#Timeout value  in milliseconds for NFCC standby mode.The range is between 5000
+#msec to 20000 msec and zero is to disable.
 NXP_NFCC_STANDBY_TIMEOUT=20000
 
 ###############################################################################
@@ -373,6 +381,7 @@
 # Disable           0x00
 # Enable            0x01
 NXP_AGC_DEBUG_ENABLE=0x00
+
 ###############################################################################
 #Virtual Mode ESE and Wired Mode ongoing delay Wired Mode
 # For Technology routing to ESE Technology Mask = 4
@@ -386,35 +395,34 @@
 #For Technology routing to UICC Technology Mask = 4
 #For ISO-DEP Protocol routing to UICC set Mask  = 2
 #For Select AID Routing to UICC       set Mask  = 1
-#It can also take values TECH|PROTO|SELECT_AID  = 7 , 6 , 5 ,3 .To ignore delay  set mask = 0
+#It can also take values TECH|PROTO|SELECT_AID  = 7 , 6 , 5 ,3 .To ignore delay
+#set mask = 0
 NXP_UICC_WIRED_PRT_MASK=0x00
 
-################################################################################
+###############################################################################
 #RF field true delay Wired Mode
 # delay wired mode = 1
 # allow wired mode = 0
 NXP_WIRED_MODE_RF_FIELD_ENABLE=0x00
 
 ###############################################################################
-# UICC mode supported
-# Disable           0x00
-# Enable            0x01
-NXP_DUAL_UICC_ENABLE=0x00
-###############################################################################
 #Config to allow adding aids
 #NFC on/off is required after this config
 #1 = enabling adding aid  to NFCC routing table.
 #0 = disabling adding aid to NFCC routing table.
 NXP_ENABLE_ADD_AID=0x01
-#################################################################################
-# JCOP-3.3 continuous process timeout in msec and value should be in Hexadecimal.
+
+###############################################################################
+# JCOP-3.3 continuous process timeout in msec and value should be in Hexadecimal
 # JCOP CP TIMEOUT
 NXP_CP_TIMEOUT={00, 77}
+
 ###############################################################################
 # Enable/Disable checking default proto SE Id
 # Disable           0x00
 # Enable            0x01
 NXP_CHECK_DEFAULT_PROTO_SE_ID=0x01
+
 ###############################################################################
 #NXP_CN_TRANSIT_BLK_NUM_CHECK_ENABLE
 #Enable/Disable block number checks for china transit use case
@@ -427,3 +435,9 @@
 # Blacklist enable   0x01
 # Blacklist disable  0x00
 NXP_PROP_BLACKLIST_ROUTING=0x00
+
+###############################################################################
+# Timeout value in milliseconds to send response for Felica command received
+NXP_HCEF_CMD_RSP_TIMEOUT_VALUE=5000
+
+###############################################################################
\ No newline at end of file
diff --git a/halimpl/pn54x/libnfc-nxp-PN65T_example.conf b/halimpl/pn54x/libnfc-nxp-PN65T_example.conf
index fab964c..3867c00 100644
--- a/halimpl/pn54x/libnfc-nxp-PN65T_example.conf
+++ b/halimpl/pn54x/libnfc-nxp-PN65T_example.conf
@@ -1,6 +1,5 @@
 ## This file is used by NFC NXP NCI HAL(external/libnfc-nci/halimpl/pn547)
 ## and NFC Service Java Native Interface Extensions (packages/apps/Nfc/nci/jni/extns/pn547)
-
 ###############################################################################
 # Application options
 # Logging Levels
@@ -9,7 +8,6 @@
 # ANDROID_LOG_WARN           0x02
 # ANDROID_LOG_ERROR          0x01
 # ANDROID_LOG_SILENT         0x00
-#
 NXPLOG_EXTNS_LOGLEVEL=0x03
 NXPLOG_NCIHAL_LOGLEVEL=0x03
 NXPLOG_NCIX_LOGLEVEL=0x03
@@ -28,6 +26,7 @@
 ###############################################################################
 # Vzw Feature enable
 VZW_FEATURE_ENABLE=0x01
+
 ###############################################################################
 # File name for Firmware
 NXP_FW_NAME="libpn547_fw.so"
@@ -36,7 +35,6 @@
 # System clock source selection configuration
 #define CLK_SRC_XTAL       1
 #define CLK_SRC_PLL        2
-
 NXP_SYS_CLK_SRC_SEL=0x01
 
 ###############################################################################
@@ -47,13 +45,11 @@
 #define CLK_FREQ_26MHZ         4
 #define CLK_FREQ_38_4MHZ       5
 #define CLK_FREQ_52MHZ         6
-
 NXP_SYS_CLK_FREQ_SEL=0x00
 
 ###############################################################################
 # The timeout value to be used for clock request acknowledgment
 # min value = 0x01 to max = 0x06
-
 NXP_SYS_CLOCK_TO_CFG=0x01
 
 ###############################################################################
@@ -141,12 +137,15 @@
 #       }
 
 ###############################################################################
-# Core configuration rf field filter settings to enable set to 01 to disable set to 00 last bit
+# Core configuration rf field filter settings to enable set to 01 to disable set
+# to 00 last bit
 NXP_CORE_RF_FIELD={ 20, 02, 05, 01, A0, 62, 01, 01
         }
 ###############################################################################
-# To enable i2c fragmentation set i2c fragmentation enable 0x01 to disable set to 0x00
+# To enable i2c fragmentation set i2c fragmentation enable 0x01 to disable set
+# to 0x00
 NXP_I2C_FRAGMENTATION_ENABLED=0x00
+
 ###############################################################################
 # Core configuration settings 
 NXP_CORE_CONF={ 20, 02, 2B, 0D,
@@ -164,7 +163,7 @@
         82, 01, 0E,
         18, 01, 01 
         }
- 
+
 ###############################################################################
 # Mifare Classic Key settings 
 #NXP_CORE_MFCKEY_SETTING={20, 02, 25,04, A0, 51, 06, A0, A1, A2, A3, A4, A5, 
@@ -177,10 +176,11 @@
 # No secure element 0x00
 # eSE               0x01
 # UICC              0x02
- 
 NXP_DEFAULT_SE=0x02
 
+###############################################################################
 NXP_DEFAULT_NFCEE_TIMEOUT=0x06
+
 ###############################################################################
 #Enable SWP full power mode when phone is power off
 NXP_SWP_FULL_PWR_ON=0x01
@@ -215,41 +215,48 @@
 #PN65T              0x02
 #PN548AD            0x03
 #PN66T              0x04
-
 NXP_NFC_CHIP=0x02
 
+###############################################################################
 #Timeout in secs
 NXP_SWP_RD_START_TIMEOUT=0x0A
+
+###############################################################################
 #Timeout in secs
 NXP_SWP_RD_TAG_OP_TIMEOUT=0x01
+
 ###############################################################################
 # CE when Screen state is locked
+# This setting is for DEFAULT_AID_ROUTE,
+# DEFAULT_DESFIRE_ROUTE and DEFAULT_MIFARE_CLT_ROUTE
 # Disable           0x00
 # Enable            0x01
 NXP_CE_ROUTE_STRICT_DISABLE=0x01
 
-
 ###############################################################################
-
 # AID Matching platform options
 # AID_MATCHING_L 0x01
 # AID_MATCHING_K 0x02
 AID_MATCHING_PLATFORM=0x01
+
 ###############################################################################
 # P61 interface options
 # NFC 0x01
 # SPI 0x02
 NXP_P61_LS_DEFAULT_INTERFACE=0x01
+
 ###############################################################################
 # P61 LTSM interface options
 # NFC 0x01
 # SPI 0x02
 NXP_P61_LTSM_DEFAULT_INTERFACE=0x01
+
 ###############################################################################
 #CHINA_TIANJIN_RF_SETTING
 #Enable  0x01
 #Disable 0x00
 NXP_CHINA_TIANJIN_RF_ENABLED=0x01
+
 ###############################################################################
 #SWP_SWITCH_TIMEOUT_SETTING
 # Allowed range of swp timeout setting is 0x00 to 0x3C [0 - 60].
@@ -257,16 +264,19 @@
 # No Timeout  0x00
 # 10 millisecond timeout 0x0A
 NXP_SWP_SWITCH_TIMEOUT=0x0A
+
 ###############################################################################
 # P61 interface options for JCOP Download
 # NFC 0x01
 # SPI 0x02
 NXP_P61_JCOP_DEFAULT_INTERFACE=0x01
+
 ###############################################################################
 # P61 JCOP OS download  options
 # FRAMEWORK API BY APPLICATION 0x00
 # AT BOOT_TIME 0x01
 NXP_JCOPDL_AT_BOOT_ENABLE=0x00
+
 ###############################################################################
 # Loader service version
 # NFC service checks for LS version 2.0 or 2.1
@@ -275,6 +285,7 @@
 # LS2.2 0x22
 # AT NFC service intialization
 NXP_LOADER_SERVICE_VERSION=0x21
+
 ################################################################################
 #Used to Restrict Type A UICC baud rate
 #0 = default supported
@@ -290,10 +301,12 @@
 #2 = 424 maximum supported
 #3 = 848 maximum supported
 NXP_TYPEB_UICC_BAUD_RATE=0x00
+
 ###############################################################################
 #Config to allow adding aids
 #NFC on/off is required after this config
 #1 = enabling adding aid  to NFCC routing table.
 #0 = disabling adding aid to NFCC routing table.
 NXP_ENABLE_ADD_AID=0x01
-#################################################################################
+
+###############################################################################
\ No newline at end of file
diff --git a/halimpl/pn54x/libnfc-nxp-PN66T_example.conf b/halimpl/pn54x/libnfc-nxp-PN66T_example.conf
index 9484005..8c13f6d 100644
--- a/halimpl/pn54x/libnfc-nxp-PN66T_example.conf
+++ b/halimpl/pn54x/libnfc-nxp-PN66T_example.conf
@@ -1,6 +1,5 @@
 ## This file is used by NFC NXP NCI HAL(external/libnfc-nci/halimpl/pn547)
 ## and NFC Service Java Native Interface Extensions (packages/apps/Nfc/nci/jni/extns/pn547)
-
 ###############################################################################
 # Application options
 # Logging Levels
@@ -9,13 +8,13 @@
 # ANDROID_LOG_WARN           0x02
 # ANDROID_LOG_ERROR          0x01
 # ANDROID_LOG_SILENT         0x00
-#
 NXPLOG_EXTNS_LOGLEVEL=0x03
 NXPLOG_NCIHAL_LOGLEVEL=0x03
 NXPLOG_NCIX_LOGLEVEL=0x03
 NXPLOG_NCIR_LOGLEVEL=0x03
 NXPLOG_FWDNLD_LOGLEVEL=0x03
 NXPLOG_TML_LOGLEVEL=0x03
+
 ###############################################################################
 # Nfc Device Node name
 NXP_NFC_DEV_NODE="/dev/pn544"
@@ -36,7 +35,6 @@
 # System clock source selection configuration
 #define CLK_SRC_XTAL       1
 #define CLK_SRC_PLL        2
-
 NXP_SYS_CLK_SRC_SEL=0x02
 
 ###############################################################################
@@ -47,14 +45,12 @@
 #define CLK_FREQ_26MHZ         4
 #define CLK_FREQ_38_4MHZ       5
 #define CLK_FREQ_52MHZ         6
-
 NXP_SYS_CLK_FREQ_SEL=0x02
 
 ###############################################################################
 # The timeout value to be used for clock request acknowledgment
 # min value = 0x01 to max = 0x06
-
-NXP_SYS_CLOCK_TO_CFG=0x01
+NXP_SYS_CLOCK_TO_CFG=0x06
 
 ###############################################################################
 # NXP proprietary settings
@@ -79,16 +75,18 @@
 # Allow NFCC to configure External TVDD, There are currently three
 #configurations (1, 2 and 3) are supported, out of them only one can be
 #supported.
-
 NXP_EXT_TVDD_CFG=0x01
 
+###############################################################################
 #config1:SLALM, 3.3V for both RM and CM
 NXP_EXT_TVDD_CFG_1={20, 02, 0B, 02, A0, 66, 01, 00, A0, 0E, 03, 02, 09, 00}
 
+###############################################################################
 #config2: use DCDC in CE, use Tx_Pwr_Req, set CFG2 mode, SLALM,
 #monitoring 5V from DCDC, 4.7V for both RM and CM, DCDCWaitTime=4.2ms
 NXP_EXT_TVDD_CFG_2={20, 02, 0B, 02, A0, 66, 01, 00, A0, 0E, 03, 56, 64, 0A}
 
+###############################################################################
 #config3: use DCDC in CE, use Tx_Pwr_Req, SLALM, monitoring 5V from DCDC,
 #DCDCWaitTime=4.2ms
 NXP_EXT_TVDD_CFG_3={20, 02, 0B, 02, A0, 66, 01, 01, A0, 0E, 03, 52, 64, 0A}
@@ -129,7 +127,6 @@
 #NXP_RF_CONF_BLK_6={
 #}
 
-
 ###############################################################################
 # Set configuration optimization decision setting
 # Enable    = 0x01
@@ -166,11 +163,13 @@
 #       }
 
 ###############################################################################
-# Core configuration rf field filter settings to enable set to 01 to disable set to 00 last bit
-NXP_CORE_RF_FIELD={ 20, 02, 05, 01, A0, 62, 01, 01
-        }
+# Core configuration rf field filter settings to enable set to 01 to disable set
+# to 00 last bit
+NXP_CORE_RF_FIELD={ 20, 02, 05, 01, A0, 62, 01, 01 }
+
 ###############################################################################
-# To enable i2c fragmentation set i2c fragmentation enable 0x01 to disable set to 0x00
+# To enable i2c fragmentation set i2c fragmentation enable 0x01 to disable set
+# to 0x00
 NXP_I2C_FRAGMENTATION_ENABLED=0x00
 
 ###############################################################################
@@ -204,7 +203,6 @@
 # No secure element 0x00
 # eSE               0x01
 # UICC              0x02
-
 NXP_DEFAULT_SE=0x03
 
 ###############################################################################
@@ -223,23 +221,28 @@
 
 ###############################################################################
 # CE when Screen state is locked
+# This setting is for DEFAULT_AID_ROUTE,
+# DEFAULT_DESFIRE_ROUTE and DEFAULT_MIFARE_CLT_ROUTE
 # Disable           0x00
 # Enable            0x01
 NXP_CE_ROUTE_STRICT_DISABLE=0x01
 
+###############################################################################
 #Timeout in secs to get NFCEE Discover notification
 NXP_DEFAULT_NFCEE_DISC_TIMEOUT=20
 
+###############################################################################
 NXP_DEFAULT_NFCEE_TIMEOUT=0x06
 
+###############################################################################
 #Timeout in secs
 NXP_SWP_RD_START_TIMEOUT=0x0A
 
+###############################################################################
 #Timeout in secs
 NXP_SWP_RD_TAG_OP_TIMEOUT=0x01
 
 ###############################################################################
-
 #Set the default AID route Location :
 #This settings will be used when application does not set this parameter
 # host 0x00
@@ -298,21 +301,25 @@
 # AID_MATCHING_L 0x01
 # AID_MATCHING_K 0x02
 AID_MATCHING_PLATFORM=0x01
+
 ###############################################################################
 # P61 interface options
 # NFC 0x01
 # SPI 0x02
 NXP_P61_LS_DEFAULT_INTERFACE=0x01
+
 ###############################################################################
 # P61 LTSM interface options
 # NFC 0x01
 # SPI 0x02
 NXP_P61_LTSM_DEFAULT_INTERFACE=0x01
+
 ###############################################################################
 #CHINA_TIANJIN_RF_SETTING
 #Enable  0x01
 #Disable  0x00
 NXP_CHINA_TIANJIN_RF_ENABLED=0x01
+
 ###############################################################################
 #SWP_SWITCH_TIMEOUT_SETTING
 # Allowed range of swp timeout setting is 0x00 to 0x3C [0 - 60].
@@ -320,11 +327,13 @@
 # No Timeout  0x00
 # 10 millisecond timeout 0x0A
 NXP_SWP_SWITCH_TIMEOUT=0x0A
+
 ###############################################################################
 # P61 interface options for JCOP Download
 # NFC 0x01
 # SPI 0x02
 NXP_P61_JCOP_DEFAULT_INTERFACE=0x01
+
 ###############################################################################
 # P61 JCOP OS download  options
 # FRAMEWORK API BY APPLICATION 0x00
@@ -339,8 +348,10 @@
 # LS2.2 0x22
 # AT NFC service intialization
 NXP_LOADER_SERVICE_VERSION=0x21
+
 ###############################################################################
-#Timeout value  in milliseconds for NFCC standby mode.The range is between 5000 msec to 20000 msec and zero is to disable.
+#Timeout value  in milliseconds for NFCC standby mode.The range is between 5000
+#msec to 20000 msec and zero is to disable.
 NXP_NFCC_STANDBY_TIMEOUT=20000
 
 ###############################################################################
@@ -362,7 +373,8 @@
 #For Technology routing to UICC Technology Mask = 4
 #For ISO-DEP Protocol routing to UICC set Mask  = 2
 #For Select AID Routing to UICC       set Mask  = 1
-#It can also take values TECH|PROTO|SELECT_AID  = 7 , 6 , 5 ,3 .To ignore delay  set mask = 0
+#It can also take values TECH|PROTO|SELECT_AID  = 7 , 6 , 5 ,3 .To ignore delay
+#set mask = 0
 NXP_UICC_WIRED_PRT_MASK=0x00
 
 ################################################################################
@@ -377,27 +389,34 @@
 #1 = enabling adding aid  to NFCC routing table.
 #0 = disabling adding aid to NFCC routing table.
 NXP_ENABLE_ADD_AID=0x01
+
 ###############################################################################
 # UICC mode supported
 # Disable           0x00
 # Enable            0x01
 NXP_DUAL_UICC_ENABLE=0x00
-#################################################################################
-# JCOP-3.3 continuous process timeout in msec and value should be in Hexadecimal.
+
+###############################################################################
+# JCOP-3.3 continuous process timeout in msec and value should be in Hexadecimal
 # JCOP CP TIMEOUT
 # NXP_CP_TIMEOUT={00, 77}
+
 ###############################################################################
 # Enable/Disable checking default proto SE Id
 # Disable           0x00
 # Enable            0x01
 NXP_CHECK_DEFAULT_PROTO_SE_ID=0x01
+
 ###############################################################################
 # SVDD sync off Delay in ms it can be max 20 ms
 # If out of range timeout used, default delay of 10ms will be set
 NXP_SVDD_SYNC_OFF_DELAY=10
+
 ###############################################################################
 #NXP_CN_TRANSIT_BLK_NUM_CHECK_ENABLE
 #Enable/Disable block number checks for china transit use case
 #Enable  0x01
 #Disable  0x00
-NXP_CN_TRANSIT_BLK_NUM_CHECK_ENABLE=0x01
\ No newline at end of file
+NXP_CN_TRANSIT_BLK_NUM_CHECK_ENABLE=0x01
+
+###############################################################################
\ No newline at end of file
diff --git a/halimpl/pn54x/libnfc-nxp-PN67T_example.conf b/halimpl/pn54x/libnfc-nxp-PN67T_example.conf
index d1b3d85..b273e3b 100644
--- a/halimpl/pn54x/libnfc-nxp-PN67T_example.conf
+++ b/halimpl/pn54x/libnfc-nxp-PN67T_example.conf
@@ -1,6 +1,5 @@
 ## This file is used by NFC NXP NCI HAL(external/libnfc-nci/halimpl/pn547)
 ## and NFC Service Java Native Interface Extensions (packages/apps/Nfc/nci/jni/extns/pn547)
-
 ###############################################################################
 # Application options
 # Logging Levels
@@ -9,7 +8,6 @@
 # ANDROID_LOG_WARN           0x02
 # ANDROID_LOG_ERROR          0x01
 # ANDROID_LOG_SILENT         0x00
-#
 NXPLOG_EXTNS_LOGLEVEL=0x03
 NXPLOG_NCIHAL_LOGLEVEL=0x03
 NXPLOG_NCIX_LOGLEVEL=0x03
@@ -37,7 +35,6 @@
 # System clock source selection configuration
 #define CLK_SRC_XTAL       1
 #define CLK_SRC_PLL        2
-
 NXP_SYS_CLK_SRC_SEL=0x02
 
 ###############################################################################
@@ -48,13 +45,11 @@
 #define CLK_FREQ_26MHZ         4
 #define CLK_FREQ_38_4MHZ       5
 #define CLK_FREQ_52MHZ         6
-
 NXP_SYS_CLK_FREQ_SEL=0x02
 
 ###############################################################################
 # The timeout value to be used for clock request acknowledgment
 # min value = 0x01 to max = 0x06
-
 NXP_SYS_CLOCK_TO_CFG=0x06
 
 ###############################################################################
@@ -80,16 +75,18 @@
 # Allow NFCC to configure External TVDD, There are currently three
 #configurations (1, 2 and 3) are supported, out of them only one can be
 #supported.
-
 NXP_EXT_TVDD_CFG=0x01
 
+###############################################################################
 #config1:SLALM, 3.3V for both RM and CM
 NXP_EXT_TVDD_CFG_1={20, 02, 0B, 02, A0, 66, 01, 00, A0, 0E, 03, 02, 09, 00}
 
+###############################################################################
 #config2: use DCDC in CE, use Tx_Pwr_Req, set CFG2 mode, SLALM,
 #monitoring 5V from DCDC, 4.7V for both RM and CM, DCDCWaitTime=4.2ms
 NXP_EXT_TVDD_CFG_2={20, 02, 0B, 02, A0, 66, 01, 00, A0, 0E, 03, 56, 64, 0A}
 
+###############################################################################
 #config3: use DCDC in CE, use Tx_Pwr_Req, SLALM, monitoring 5V from DCDC,
 #DCDCWaitTime=4.2ms
 NXP_EXT_TVDD_CFG_3={20, 02, 0B, 02, A0, 66, 01, 01, A0, 0E, 03, 52, 64, 0A}
@@ -130,7 +127,6 @@
 #NXP_RF_CONF_BLK_6={
 #}
 
-
 ###############################################################################
 # Set configuration optimization decision setting
 # Enable    = 0x01
@@ -167,11 +163,13 @@
 #       }
 
 ###############################################################################
-# Core configuration rf field filter settings to enable set to 01 to disable set to 00 last bit
-NXP_CORE_RF_FIELD={ 20, 02, 05, 01, A0, 62, 01, 01
-        }
+# Core configuration rf field filter settings to enable set to 01 to disable set
+# to 00 last bit
+NXP_CORE_RF_FIELD={ 20, 02, 05, 01, A0, 62, 01, 01 }
+
 ###############################################################################
-# To enable i2c fragmentation set i2c fragmentation enable 0x01 to disable set to 0x00
+# To enable i2c fragmentation set i2c fragmentation enable 0x01 to disable set
+# to 0x00
 NXP_I2C_FRAGMENTATION_ENABLED=0x00
 
 ###############################################################################
@@ -205,7 +203,6 @@
 # No secure element 0x00
 # eSE               0x01
 # UICC              0x02
-
 NXP_DEFAULT_SE=0x03
 
 ###############################################################################
@@ -224,23 +221,28 @@
 
 ###############################################################################
 # CE when Screen state is locked
+# This setting is for DEFAULT_AID_ROUTE,
+# DEFAULT_DESFIRE_ROUTE and DEFAULT_MIFARE_CLT_ROUTE
 # Disable           0x00
 # Enable            0x01
 NXP_CE_ROUTE_STRICT_DISABLE=0x01
 
+###############################################################################
 #Timeout in secs to get NFCEE Discover notification
 NXP_DEFAULT_NFCEE_DISC_TIMEOUT=20
 
+###############################################################################
 NXP_DEFAULT_NFCEE_TIMEOUT=0x06
 
+###############################################################################
 #Timeout in secs
 NXP_SWP_RD_START_TIMEOUT=0x0A
 
+###############################################################################
 #Timeout in secs
 NXP_SWP_RD_TAG_OP_TIMEOUT=0x01
 
 ###############################################################################
-
 #Set the default AID route Location :
 #This settings will be used when application does not set this parameter
 # host 0x00
@@ -299,21 +301,25 @@
 # AID_MATCHING_L 0x01
 # AID_MATCHING_K 0x02
 AID_MATCHING_PLATFORM=0x01
+
 ###############################################################################
 # P61 interface options
 # NFC 0x01
 # SPI 0x02
 NXP_P61_LS_DEFAULT_INTERFACE=0x01
+
 ###############################################################################
 # P61 LTSM interface options
 # NFC 0x01
 # SPI 0x02
 NXP_P61_LTSM_DEFAULT_INTERFACE=0x01
+
 ###############################################################################
 #CHINA_TIANJIN_RF_SETTING
 #Enable  0x01
 #Disable  0x00
 NXP_CHINA_TIANJIN_RF_ENABLED=0x01
+
 ###############################################################################
 #SWP_SWITCH_TIMEOUT_SETTING
 # Allowed range of swp timeout setting is 0x00 to 0x3C [0 - 60].
@@ -321,11 +327,13 @@
 # No Timeout  0x00
 # 10 millisecond timeout 0x0A
 NXP_SWP_SWITCH_TIMEOUT=0x0A
+
 ###############################################################################
 # P61 interface options for JCOP Download
 # NFC 0x01
 # SPI 0x02
 NXP_P61_JCOP_DEFAULT_INTERFACE=0x01
+
 ###############################################################################
 # P61 JCOP OS download  options
 # FRAMEWORK API BY APPLICATION 0x00
@@ -340,8 +348,10 @@
 # LS2.2 0x22
 # AT NFC service intialization
 NXP_LOADER_SERVICE_VERSION=0x22
+
 ###############################################################################
-#Timeout value  in milliseconds for NFCC standby mode.The range is between 5000 msec to 20000 msec and zero is to disable.
+#Timeout value  in milliseconds for NFCC standby mode.The range is between 5000
+#msec to 20000 msec and zero is to disable.
 NXP_NFCC_STANDBY_TIMEOUT=20000
 
 ###############################################################################
@@ -349,6 +359,7 @@
 # Disable           0x00
 # Enable            0x01
 NXP_AGC_DEBUG_ENABLE=0x00
+
 ###############################################################################
 #Virtual Mode ESE and Wired Mode ongoing delay Wired Mode
 # For Technology routing to ESE Technology Mask = 4
@@ -362,10 +373,11 @@
 #For Technology routing to UICC Technology Mask = 4
 #For ISO-DEP Protocol routing to UICC set Mask  = 2
 #For Select AID Routing to UICC       set Mask  = 1
-#It can also take values TECH|PROTO|SELECT_AID  = 7 , 6 , 5 ,3 .To ignore delay  set mask = 0
+#It can also take values TECH|PROTO|SELECT_AID  = 7 , 6 , 5 ,3 .To ignore delay
+#set mask = 0
 NXP_UICC_WIRED_PRT_MASK=0x00
 
-################################################################################
+###############################################################################
 #RF field true delay Wired Mode
 # delay wired mode = 1
 # allow wired mode = 0
@@ -377,24 +389,29 @@
 #1 = enabling adding aid  to NFCC routing table.
 #0 = disabling adding aid to NFCC routing table.
 NXP_ENABLE_ADD_AID=0x01
+
 ###############################################################################
 # UICC mode supported
 # Disable           0x00
 # Enable            0x01
 NXP_DUAL_UICC_ENABLE=0x00
-#################################################################################
-# JCOP-3.3 continuous process timeout in msec and value should be in Hexadecimal.
+
+###############################################################################
+# JCOP-3.3 continuous process timeout in msec and value should be in Hexadecimal
 # JCOP CP TIMEOUT
 # NXP_CP_TIMEOUT={00, 77}
+
 ###############################################################################
 # Enable/Disable checking default proto SE Id
 # Disable           0x00
 # Enable            0x01
 NXP_CHECK_DEFAULT_PROTO_SE_ID=0x01
+
 ###############################################################################
 # SVDD sync off Delay in ms it can be max 20 ms
 # If out of range timeout used, default delay of 10ms will be set
 NXP_SVDD_SYNC_OFF_DELAY=10
+
 ###############################################################################
 #NXP_CN_TRANSIT_BLK_NUM_CHECK_ENABLE
 #Enable/Disable block number checks for china transit use case
@@ -402,13 +419,15 @@
 #Disable  0x00
 NXP_CN_TRANSIT_BLK_NUM_CHECK_ENABLE=0x01
 
-################################################################################
+###############################################################################
 #Enable Passive Listen Timeout
 # Maximum retry three times, Timeout in millisec
 NXP_NFCC_PASSIVE_LISTEN_TIMEOUT=5000
 
-################################################################################
+###############################################################################
 # Restrict routing to first matched rule only.
 # Blacklist enable   0x01
 # Blacklist disable  0x00
 NXP_PROP_BLACKLIST_ROUTING=0x00
+
+###############################################################################
\ No newline at end of file
diff --git a/halimpl/pn54x/libnfc-nxp-PN80T_example.conf b/halimpl/pn54x/libnfc-nxp-PN80T_example.conf
index db0e2fe..70b0d28 100644
--- a/halimpl/pn54x/libnfc-nxp-PN80T_example.conf
+++ b/halimpl/pn54x/libnfc-nxp-PN80T_example.conf
@@ -1,6 +1,5 @@
 ## This file is used by NFC NXP NCI HAL(external/libnfc-nci/halimpl/pn547)
 ## and NFC Service Java Native Interface Extensions (packages/apps/Nfc/nci/jni/extns/pn547)
-
 ###############################################################################
 # Application options
 # Logging Levels
@@ -9,7 +8,6 @@
 # ANDROID_LOG_WARN           0x02
 # ANDROID_LOG_ERROR          0x01
 # ANDROID_LOG_SILENT         0x00
-#
 NXPLOG_EXTNS_LOGLEVEL=0x03
 NXPLOG_NCIHAL_LOGLEVEL=0x03
 NXPLOG_NCIX_LOGLEVEL=0x03
@@ -37,8 +35,7 @@
 # System clock source selection configuration
 #define CLK_SRC_XTAL       1
 #define CLK_SRC_PLL        2
-
-NXP_SYS_CLK_SRC_SEL=0x01
+NXP_SYS_CLK_SRC_SEL=0x02
 
 ###############################################################################
 # System clock frequency selection configuration
@@ -48,13 +45,11 @@
 #define CLK_FREQ_26MHZ         4
 #define CLK_FREQ_38_4MHZ       5
 #define CLK_FREQ_52MHZ         6
-
 NXP_SYS_CLK_FREQ_SEL=0x01
 
 ###############################################################################
 # The timeout value to be used for clock request acknowledgment
 # min value = 0x01 to max = 0x06
-
 NXP_SYS_CLOCK_TO_CFG=0x06
 
 ###############################################################################
@@ -75,26 +70,21 @@
 # Standby enable settings
 #NXP_CORE_STANDBY={2F, 00, 01, 01}
 
-
 ###############################################################################
 # NXP TVDD configurations settings
-# Allow NFCC to configure External TVDD, There are currently three
-#configurations (1, 2 and 3) are supported, out of them only one can be
-#supported.
-
+# Allow NFCC to configure External TVDD, two configurations (1 and 2) supported,
+# out of them only one can be configured at a time.
 NXP_EXT_TVDD_CFG=0x02
 
+###############################################################################
 #config1:SLALM, 3.3V for both RM and CM
 NXP_EXT_TVDD_CFG_1={20, 02, 0F, 01, A0, 0E, 0B, 31, 01, 01, 31, 00, 00, 00, 01, 00, D0, 0C}
 
+###############################################################################
 #config2: use DCDC in CE, use Tx_Pwr_Req, set CFG2 mode, SLALM,
 #monitoring 5V from DCDC, 3.3V for both RM and CM, DCDCWaitTime=4.2ms
 NXP_EXT_TVDD_CFG_2={20, 02, 0F, 01, A0, 0E, 0B, 11, 01, C2, B2, 00, B2, 1E, 1F, 00, D0, 0C}
 
-#config3: use DCDC in CE, use Tx_Pwr_Req, SLALM, monitoring 5V from DCDC,
-#DCDCWaitTime=4.2ms
-NXP_EXT_TVDD_CFG_3={20, 02, 0B, 02, A0, 66, 01, 01, A0, 0E, 03, 52, 40, 0A}
-
 ###############################################################################
 # NXP RF configuration ALM/PLM settings
 # This section needs to be updated with the correct values based on the platform
@@ -131,7 +121,6 @@
 #NXP_RF_CONF_BLK_6={
 #}
 
-
 ###############################################################################
 # Set configuration optimization decision setting
 # Enable    = 0x01
@@ -147,16 +136,20 @@
 # Clock settings A002, A003
 # PbF settings A008
 # Clock timeout settings A004
-NXP_CORE_CONF_EXTN={20, 02, 25, 09,
+# eSE (SVDD) PWR REQ settings A0F2
+# Window size A0D8
+# DWP Speed   A0D5
+NXP_CORE_CONF_EXTN={20, 02, 29, 0A,
     A0, EC, 01, 01,
     A0, ED, 01, 01,
     A0, 5E, 01, 01,
     A0, 12, 01, 02,
     A0, 40, 01, 01,
-    A0, DD, 01, 2D,
     A0, D1, 01, 02,
     A0, D4, 01, 01,
-    A0, 37, 01, 11
+    A0, 37, 01, 11,
+    A0, D8, 01, 02,
+    A0, D5, 01, 0A
    }
 #       A0, F2, 01, 01,
 #       A0, 40, 01, 01,
@@ -169,11 +162,13 @@
 #       }
 
 ###############################################################################
-# Core configuration rf field filter settings to enable set to 01 to disable set to 00 last bit
-NXP_CORE_RF_FIELD={ 20, 02, 05, 01, A0, 62, 01, 01
-        }
+# Core configuration rf field filter settings to enable set to 01 to disable set
+# to 00 last bit
+NXP_CORE_RF_FIELD={ 20, 02, 05, 01, A0, 62, 01, 01 }
+
 ###############################################################################
-# To enable i2c fragmentation set i2c fragmentation enable 0x01 to disable set to 0x00
+# To enable i2c fragmentation set i2c fragmentation enable 0x01 to disable set
+# to 0x00
 NXP_I2C_FRAGMENTATION_ENABLED=0x00
 
 ###############################################################################
@@ -228,23 +223,28 @@
 
 ###############################################################################
 # CE when Screen state is locked
+# This setting is for DEFAULT_AID_ROUTE,
+# DEFAULT_DESFIRE_ROUTE and DEFAULT_MIFARE_CLT_ROUTE
 # Disable           0x00
 # Enable            0x01
 NXP_CE_ROUTE_STRICT_DISABLE=0x01
 
+###############################################################################
 #Timeout in secs to get NFCEE Discover notification
 NXP_DEFAULT_NFCEE_DISC_TIMEOUT=20
 
+###############################################################################
 NXP_DEFAULT_NFCEE_TIMEOUT=0x06
 
+###############################################################################
 #Timeout in secs
 NXP_SWP_RD_START_TIMEOUT=0x0A
 
+###############################################################################
 #Timeout in secs
 NXP_SWP_RD_TAG_OP_TIMEOUT=0x01
 
 ###############################################################################
-
 #Set the default AID route Location :
 #This settings will be used when application does not set this parameter
 # host 0x00
@@ -324,21 +324,25 @@
 # AID_MATCHING_L 0x01
 # AID_MATCHING_K 0x02
 AID_MATCHING_PLATFORM=0x01
+
 ###############################################################################
 # P61 interface options
 # NFC 0x01
 # SPI 0x02
 NXP_P61_LS_DEFAULT_INTERFACE=0x01
+
 ###############################################################################
 # P61 LTSM interface options
 # NFC 0x01
 # SPI 0x02
 NXP_P61_LTSM_DEFAULT_INTERFACE=0x01
+
 ###############################################################################
 #CHINA_TIANJIN_RF_SETTING
 #Enable  0x01
 #Disable  0x00
 NXP_CHINA_TIANJIN_RF_ENABLED=0x01
+
 ###############################################################################
 #SWP_SWITCH_TIMEOUT_SETTING
 # Allowed range of swp timeout setting is 0x00 to 0x3C [0 - 60].
@@ -346,11 +350,13 @@
 # No Timeout  0x00
 # 10 millisecond timeout 0x0A
 NXP_SWP_SWITCH_TIMEOUT=0x0A
+
 ###############################################################################
 # P61 interface options for JCOP Download
 # NFC 0x01
 # SPI 0x02
 NXP_P61_JCOP_DEFAULT_INTERFACE=0x01
+
 ###############################################################################
 # P61 JCOP OS download  options
 # FRAMEWORK API BY APPLICATION 0x00
@@ -365,8 +371,10 @@
 # LS2.2 0x22
 # AT NFC service intialization
 NXP_LOADER_SERVICE_VERSION=0x22
+
 ###############################################################################
-#Timeout value  in milliseconds for NFCC standby mode.The range is between 5000 msec to 20000 msec and zero is to disable.
+#Timeout value  in milliseconds for NFCC standby mode.The range is between 5000
+#msec to 20000 msec and zero is to disable.
 NXP_NFCC_STANDBY_TIMEOUT=20000
 
 ###############################################################################
@@ -374,6 +382,7 @@
 # Disable           0x00
 # Enable            0x01
 NXP_AGC_DEBUG_ENABLE=0x00
+
 ###############################################################################
 #Virtual Mode ESE and Wired Mode ongoing delay Wired Mode
 # For Technology routing to ESE Technology Mask = 4
@@ -387,7 +396,8 @@
 #For Technology routing to UICC Technology Mask = 4
 #For ISO-DEP Protocol routing to UICC set Mask  = 2
 #For Select AID Routing to UICC       set Mask  = 1
-#It can also take values TECH|PROTO|SELECT_AID  = 7 , 6 , 5 ,3 .To ignore delay  set mask = 0
+#It can also take values TECH|PROTO|SELECT_AID  = 7 , 6 , 5 ,3 .To ignore delay
+#set mask = 0
 NXP_UICC_WIRED_PRT_MASK=0x00
 
 ################################################################################
@@ -397,55 +407,56 @@
 NXP_WIRED_MODE_RF_FIELD_ENABLE=0x00
 
 ###############################################################################
-# UICC mode supported
-# Disable           0x00
-# Enable            0x01
-NXP_DUAL_UICC_ENABLE=0x00
-###############################################################################
 #Config to allow adding aids
 #NFC on/off is required after this config
 #1 = enabling adding aid  to NFCC routing table.
 #0 = disabling adding aid to NFCC routing table.
 NXP_ENABLE_ADD_AID=0x01
+
 ###############################################################################
-# JCOP-3.3 continuous process timeout in msec and value should be in Hexadecimal.
+# JCOP-3.3 continuous process timeout in msec and value should be in Hexadecimal
 # JCOP CP TIMEOUT
 NXP_CP_TIMEOUT={00, 77}
+
 ###############################################################################
 # Enable/Disable checking default proto SE Id
 # Disable           0x00
 # Enable            0x01
 NXP_CHECK_DEFAULT_PROTO_SE_ID=0x01
+
 ###############################################################################
 #NXP_CN_TRANSIT_BLK_NUM_CHECK_ENABLE
 #Enable/Disable block number checks for china transit use case
 #Enable  0x01
 #Disable  0x00
 NXP_CN_TRANSIT_BLK_NUM_CHECK_ENABLE=0x01
+
 ###############################################################################
 # Wired mode resume timeout vaule in wired mode resume feature enable
-NXP_WIREDMODE_RESUME_TIMEOUT = 0x02
+# DWP resume time out in microseconds( 4 bytes hex value and LSB first)
+# example 100000 = 0x0186A0
+# exmaple 150000 = 0x0249F0
+# example 200000 = 0x030D40
+NXP_WIREDMODE_RESUME_TIMEOUT={F0,49,02,00}
+
+
 ###############################################################################
 # Power to eSE is controlled by DH or PMU depending on following configurations
 #define DH_PWR_CONTROL         1
 #define PMU_PWR_CONTROL        2
-
 NXP_ESE_POWER_DH_CONTROL=1
 
 ###############################################################################
+# Timeout value in milliseconds for wired mode resume after RF field event timeout
+NXP_NFCC_RF_FIELD_EVENT_TIMEOUT=3000
+
+###############################################################################
 # NXP PMU Support configuration is sent if PMU_PWR_CONTROL is configured
 # External PMU available in phone ON and phone OFF case if NXP_ESE_POWER_EXT_PMU=1
 # External PMU available only in phone ON case if NXP_ESE_POWER_EXT_PMU=2
-
 NXP_ESE_POWER_EXT_PMU=2
 
 ###############################################################################
-# Enable/Disable mifare desfire CE prio feature
-# Disable           0x00
-# Enable            0x01
-NXP_MIFARE_DESFIRE_DISABLE=0x00
-
-###############################################################################
 # Whether to allow wired mode in desfire and mifare CLT
 # Disable           0x00
 # Enable            0x01
@@ -456,3 +467,19 @@
 # Blacklist enable   0x01
 # Blacklist disable  0x00
 NXP_PROP_BLACKLIST_ROUTING=0x00
+
+###############################################################################
+# Send DWP interface reset command as part of SE open
+# Disable           0x00
+# Enable            0x01
+NXP_DWP_INTF_RESET_ENABLE=0x01
+
+###############################################################################
+# Timeout value in milliseconds for JCOP OS download to complete
+OS_DOWNLOAD_TIMEOUT_VALUE=60000
+
+###############################################################################
+# Timeout value in milliseconds to send response for Felica command received
+NXP_HCEF_CMD_RSP_TIMEOUT_VALUE=5000
+
+###############################################################################
\ No newline at end of file
diff --git a/halimpl/pn54x/nfc_nci.c b/halimpl/pn54x/nfc_nci.c
index 07f723b..ad8b1f4 100644
--- a/halimpl/pn54x/nfc_nci.c
+++ b/halimpl/pn54x/nfc_nci.c
@@ -177,6 +177,25 @@
     return retval;
 }
 
+/*******************************************************************************
+**
+** Function         hal_get_fw_dwnld_flag
+**
+** Description      Notify FW download request.
+**
+** Returns          TRUE if successful otherwise FALSE.
+**
+*******************************************************************************/
+static int hal_get_fw_dwnld_flag(const struct nfc_nci_device *p_dev, uint8_t* fwDnldRequest)
+{
+    int retval = 0;
+    pn547_dev_t* dev = (pn547_dev_t*) p_dev;
+
+    retval = phNxpNciHal_getFWDownloadFlag(fwDnldRequest);
+
+    return retval;
+}
+
 /*************************************
  * Generic device handling.
  *************************************/
@@ -236,6 +255,7 @@
             dev->nci_device.close = hal_close;
             dev->nci_device.control_granted = hal_control_granted;
             dev->nci_device.power_cycle = hal_power_cycle;
+            dev->nci_device.check_fw_dwnld_flag = hal_get_fw_dwnld_flag;
             *device = (hw_device_t*) dev;
         }
     }
diff --git a/halimpl/pn54x/self-test/phNxpNciHal_SelfTest.c b/halimpl/pn54x/self-test/phNxpNciHal_SelfTest.c
index 1bf0fa3..5b91270 100644
--- a/halimpl/pn54x/self-test/phNxpNciHal_SelfTest.c
+++ b/halimpl/pn54x/self-test/phNxpNciHal_SelfTest.c
@@ -16,12 +16,13 @@
 
 #ifdef NXP_HW_SELF_TEST
 
-
 #include <phNxpNciHal_SelfTest.h>
 #include <phNxpLog.h>
 #include <pthread.h>
 #include <phOsalNfc_Timer.h>
 #include <phNxpConfig.h>
+#include <NXP_NFCC_Features.h>
+#include <NXP_Platform_Features.h>
 
 #define HAL_WRITE_RSP_TIMEOUT   (2000)   /* Timeout value to wait for response from PN54X */
 #define HAL_WRITE_MAX_RETRY     (10)
@@ -86,7 +87,7 @@
         },
         {
 #if(NFC_NXP_CHIP_TYPE != PN547C2)
-            0x06, {0x40,0x00,0x03,0x00,0x11,0x00} /* exp_rsp */
+            0x06, {0x40,0x00,0x03,0x00,NXP_NFCC_RESET_RSP_LEN,0x00} /* exp_rsp */
 #else
             0x06, {0x40,0x00,0x03,0x00,0x10,0x00} /* exp_rsp */
 #endif
@@ -158,7 +159,7 @@
         },
         {
 #if(NFC_NXP_CHIP_TYPE != PN547C2)
-            0x06, {0x40,0x00,0x03,0x00,0x11,0x00} /* exp_rsp */
+            0x06, {0x40,0x00,0x03,0x00,NXP_NFCC_RESET_RSP_LEN,0x00} /* exp_rsp */
 #else
             0x06, {0x40,0x00,0x03,0x00,0x10,0x00} /* exp_rsp */
 #endif
@@ -228,7 +229,7 @@
         },
         {
 #if(NFC_NXP_CHIP_TYPE != PN547C2)
-            0x06, {0x40,0x00,0x03,0x00,0x11,0x00} /* exp_rsp */
+            0x06, {0x40,0x00,0x03,0x00,NXP_NFCC_RESET_RSP_LEN,0x00} /* exp_rsp */
 #else
             0x06, {0x40,0x00,0x03,0x00,0x10,0x00} /* exp_rsp */
 #endif
@@ -287,7 +288,7 @@
         },
         {
 #if(NFC_NXP_CHIP_TYPE != PN547C2)
-            0x06, {0x40,0x00,0x03,0x00,0x11,0x00} /* exp_rsp */
+            0x06, {0x40,0x00,0x03,0x00,NXP_NFCC_RESET_RSP_LEN,0x00} /* exp_rsp */
 #else
             0x06, {0x40,0x00,0x03,0x00,0x10,0x00} /* exp_rsp */
 #endif
@@ -390,7 +391,7 @@
         },
         {
 #if(NFC_NXP_CHIP_TYPE != PN547C2)
-            0x06, {0x40,0x00,0x03,0x00,0x11,0x00} /* exp_rsp */
+            0x06, {0x40,0x00,0x03,0x00,NXP_NFCC_RESET_RSP_LEN,0x00} /* exp_rsp */
 #else
             0x06, {0x40,0x00,0x03,0x00,0x10,0x00} /* exp_rsp */
 #endif
@@ -494,7 +495,7 @@
         },
         {
 #if(NFC_NXP_CHIP_TYPE != PN547C2)
-            0x06, {0x40,0x00,0x03,0x00,0x11,0x00} /* exp_rsp */
+            0x06, {0x40,0x00,0x03,0x00,NXP_NFCC_RESET_RSP_LEN,0x00} /* exp_rsp */
 #else
             0x06, {0x40,0x00,0x03,0x00,0x10,0x00} /* exp_rsp */
 #endif
@@ -531,7 +532,7 @@
         },
         {
 #if(NFC_NXP_CHIP_TYPE != PN547C2)
-            0x06, {0x40,0x00,0x03,0x00,0x11,0x00} /* exp_rsp */
+            0x06, {0x40,0x00,0x03,0x00,NXP_NFCC_RESET_RSP_LEN,0x00} /* exp_rsp */
 #else
             0x06, {0x40,0x00,0x03,0x00,0x10,0x00} /* exp_rsp */
 #endif
@@ -636,6 +637,7 @@
         st_validator_testAntenna_AgcVal_FixedNfcLd,
         st_validator_null
     },
+#if(NXP_HW_ANTENNA_LOOP4_SELF_TEST==TRUE)
     {
         {
             0x07, {0x2F, 0x3D, 0x04, 0x08, 0x8C, 0x60, 0x03} /* AGC with NFCLD measurement cmd */
@@ -648,8 +650,8 @@
         },
         st_validator_testAntenna_AgcVal_Differential,
         st_validator_null
-#if(NFC_NXP_CHIP_TYPE != PN547C2)
     },
+#endif
     {
         {
             0x04, {0x2F,0x00,0x01,0x01} /* cmd */
@@ -662,7 +664,6 @@
         },
         st_validator_testEquals, /* validator */
         st_validator_null
-#endif
     }
 };
 
@@ -2028,7 +2029,11 @@
     if(status == NFCSTATUS_SUCCESS)
     {
         if((gtxldo_status == NFCSTATUS_SUCCESS) && (gagc_value_status == NFCSTATUS_SUCCESS) &&
-           (gagc_nfcld_status == NFCSTATUS_SUCCESS) && (gagc_differential_status == NFCSTATUS_SUCCESS))
+           (gagc_nfcld_status == NFCSTATUS_SUCCESS)
+#if(NXP_HW_ANTENNA_LOOP4_SELF_TEST==TRUE)
+           && (gagc_differential_status == NFCSTATUS_SUCCESS)
+#endif
+          )
         {
             antenna_st_status = NFCSTATUS_SUCCESS;
             NXPLOG_NCIHAL_D("phNxpNciHal_AntennaSelfTest - SUCESS\n");
diff --git a/halimpl/pn54x/tml/phTmlNfc.c b/halimpl/pn54x/tml/phTmlNfc.c
index 69d1220..08afc06 100644
--- a/halimpl/pn54x/tml/phTmlNfc.c
+++ b/halimpl/pn54x/tml/phTmlNfc.c
@@ -33,7 +33,9 @@
  */
 #define PHTMLNFC_MAXTIME_RETRANSMIT (200U)
 #define MAX_WRITE_RETRY_COUNT 0x03
-#define MAX_READ_RETRY_COUNT 0x05
+#if (NXP_NFCC_I2C_READ_WRITE_IMPROVEMENT == TRUE)
+#define MAX_READ_RETRY_COUNT  0x05
+#endif
 /* Retry Count = Standby Recovery time of NFCC / Retransmission time + 1 */
 static uint8_t bCurrentRetryCount = (2000 / PHTMLNFC_MAXTIME_RETRANSMIT) + 1;
 
@@ -347,7 +349,10 @@
     NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
     int32_t dwNoBytesWrRd = PH_TMLNFC_RESET_VALUE;
     uint8_t temp[260];
+#if (NXP_NFCC_I2C_READ_WRITE_IMPROVEMENT == TRUE)
     static uint8_t read_count = 0;
+#endif
+
     /* Transaction info buffer to be passed to Callback Thread */
     static phTmlNfc_TransactInfo_t tTransactionInfo;
     /* Structure containing Tml callback function and parameters to be invoked
@@ -385,6 +390,7 @@
                 if (-1 == dwNoBytesWrRd)
                 {
                     NXPLOG_TML_E("PN54X - Error in I2C Read.....\n");
+#if (NXP_NFCC_I2C_READ_WRITE_IMPROVEMENT == TRUE)
                     if(read_count <= MAX_READ_RETRY_COUNT)
                     {
                         read_count++;
@@ -410,12 +416,15 @@
                         phTmlNfc_DeferredCall(gpphTmlNfc_Context->dwCallbackThreadId, &tMsg);
                         return;
                     }
+#endif
                     sem_post(&gpphTmlNfc_Context->rxSemaphore);
                 }
                 else if(dwNoBytesWrRd > 260)
                 {
                     NXPLOG_TML_E("Numer of bytes read exceeds the limit 260.....\n");
+#if (NXP_NFCC_I2C_READ_WRITE_IMPROVEMENT == TRUE)
                     read_count = 0;
+#endif
                     sem_post(&gpphTmlNfc_Context->rxSemaphore);
                 }
                 else
@@ -686,7 +695,18 @@
 NFCSTATUS phTmlNfc_Shutdown(void)
 {
     NFCSTATUS wShutdownStatus = NFCSTATUS_SUCCESS;
+#if(NFC_NXP_ESE == TRUE)
+    nfc_service_pid = 0;
 
+    if(!phTmlNfc_IoCtl(phTmlNfc_e_SetNfcServicePid))
+    {
+       NXPLOG_TML_D("nfc service reset pid done");
+    }
+    else
+    {
+       NXPLOG_TML_D("nfc service reset pid failed");
+    }
+#endif
     /* Check whether TML is Initialized */
     if (NULL != gpphTmlNfc_Context)
     {
@@ -958,26 +978,45 @@
                 {
                     /*Block reader thread until VEN Toggling is completed*/
                     /*Reset PN54X*/
+                    uint8_t read_flag = FALSE;
+                    if (gpphTmlNfc_Context->tReadInfo.bEnable)
+                    {
+                        gpphTmlNfc_Context->tReadInfo.bEnable = 0;
+                        read_flag = TRUE;
+                    }
                     gpphTmlNfc_Context->tReadInfo.bEnable = 0;
                     phTmlNfc_i2c_reset(gpphTmlNfc_Context->pDevHandle, 0);
                     usleep(10 * 1000);
                     phTmlNfc_i2c_reset(gpphTmlNfc_Context->pDevHandle, 1);
                     usleep(100 * 1000);
-                    gpphTmlNfc_Context->tReadInfo.bEnable = 1;
-                    sem_post(&gpphTmlNfc_Context->rxSemaphore);
+                    if (read_flag)
+                    {
+                        gpphTmlNfc_Context->tReadInfo.bEnable = 1;
+                        sem_post(&gpphTmlNfc_Context->rxSemaphore);
+                    }
                     break;
                 }
             case phTmlNfc_e_EnableDownloadMode:
                 {
                     phTmlNfc_ConfigNciPktReTx(phTmlNfc_e_DisableRetrans, 0);
                     gpphTmlNfc_Context->tReadInfo.bEnable = 0;
-                    (void)phTmlNfc_i2c_reset(gpphTmlNfc_Context->pDevHandle,2);
+                    wStatus = phTmlNfc_i2c_reset(gpphTmlNfc_Context->pDevHandle,2);
                     usleep(100 * 1000);
                     gpphTmlNfc_Context->tReadInfo.bEnable = 1;
                     sem_post(&gpphTmlNfc_Context->rxSemaphore);
                     break;
                 }
 #if(NFC_NXP_ESE == TRUE)
+            case phTmlNfc_e_SetJcopDwnldEnable:
+                {
+                    wStatus = phTmlNfc_i2c_set_Jcop_dwnld_state(gpphTmlNfc_Context->pDevHandle, 2);
+                    break;
+                }
+            case phTmlNfc_e_SetJcopDwnldDisable:
+                {
+                    wStatus = phTmlNfc_i2c_set_Jcop_dwnld_state(gpphTmlNfc_Context->pDevHandle, 4);
+                    break;
+                }
             case phTmlNfc_e_SetNfcServicePid:
             {
                 wStatus = phTmlNfc_set_pid(gpphTmlNfc_Context->pDevHandle, nfc_service_pid);
@@ -1013,7 +1052,7 @@
                 wStatus = phTmlNfc_i2c_set_p61_power_state(gpphTmlNfc_Context->pDevHandle, 4);
                 break;
             }
-            case phTmlNfc_e_P73IsoRstMode:
+            case phTmlNfc_e_eSEChipRstMode:
             {
                 wStatus = phTmlNfc_i2c_reset(gpphTmlNfc_Context->pDevHandle, 3);
                 break;
diff --git a/halimpl/pn54x/tml/phTmlNfc.h b/halimpl/pn54x/tml/phTmlNfc.h
index 45be9c6..4bba392 100644
--- a/halimpl/pn54x/tml/phTmlNfc.h
+++ b/halimpl/pn54x/tml/phTmlNfc.h
@@ -27,7 +27,9 @@
 #define PHTMLNFC_H
 
 #include <phNfcCommon.h>
-
+#ifndef NXP_NFCC_FEATURES_H
+#include <NXP_NFCC_Features.h>
+#endif
 /*
  * Message posted by Reader thread upon
  * completion of requested operation
@@ -108,13 +110,15 @@
     phTmlNfc_e_SetP61DisableMode, /* Set the ese vdd gpio to low*/
     phTmlNfc_e_SetP61EnableMode, /* Set the ese vdd gpio to high*/
     phTmlNfc_e_RelP61Access, /*Release the P61 lock*/
-#if ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
+#if (NXP_ESE_SVDD_SYNC == TRUE)
     phTmlNfc_e_RelP61SvddWait,
 #endif
-    phTmlNfc_e_P73IsoRstMode,         /* ISO RST of P73*/
+    phTmlNfc_e_eSEChipRstMode,         /* ISO RST of P73*/
     phTmlNfc_e_SetLegacyPowerScheme,
     phTmlNfc_e_SetExtPMUPowerScheme,
     phTmlNfc_e_SetPN67TPowerScheme,
+    phTmlNfc_e_SetJcopDwnldEnable,
+    phTmlNfc_e_SetJcopDwnldDisable
 #endif
 } phTmlNfc_ControlCode_t ;  /* Control code for IOCTL call */
 
diff --git a/halimpl/pn54x/tml/phTmlNfc_i2c.c b/halimpl/pn54x/tml/phTmlNfc_i2c.c
index 135c23d..5ab53f0 100644
--- a/halimpl/pn54x/tml/phTmlNfc_i2c.c
+++ b/halimpl/pn54x/tml/phTmlNfc_i2c.c
@@ -325,15 +325,25 @@
 *******************************************************************************/
 int phTmlNfc_i2c_reset(void *pDevHandle, long level)
 {
-    int ret;
+    int ret = -1;
+
     NXPLOG_TML_D("phTmlNfc_i2c_reset(), VEN level %ld", level);
 
     if (NULL == pDevHandle)
     {
         return -1;
     }
-
     ret = ioctl((intptr_t)pDevHandle, PN544_SET_PWR, level);
+    if(ret < 0)
+    {
+        NXPLOG_TML_E("%s :failed errno = 0x%x", __FUNCTION__, errno);
+        if(level == 2 && errno == EBUSY)
+        {
+           notifyFwrequest = TRUE;
+        }else{
+           notifyFwrequest = FALSE;
+        }
+    }
     if(level == 2 && ret == 0)
     {
         bFwDnldFlag = TRUE;
@@ -346,6 +356,52 @@
 #if(NFC_NXP_ESE == TRUE)
 /*******************************************************************************
 **
+** Function         phTmlNfc_i2c_set_Jcop_dwnld_state
+**
+** Description      This function set jcop download state.
+**
+** Parameters       pDevHandle     - valid device handle
+**
+** Returns          NFCSTATUS
+**
+**
+*******************************************************************************/
+NFCSTATUS phTmlNfc_i2c_set_Jcop_dwnld_state(void *pDevHandle, long level)
+{
+    int ret = -1;
+    NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
+
+    NXPLOG_TML_D("phTmlNfc_i2c_set_Jcop_dwnld_state(), level %ld", level);
+
+    if (NULL == pDevHandle)
+        return NFCSTATUS_FAILED;
+
+    ret = ioctl((intptr_t)pDevHandle, PN544_SET_DWNLD_STATUS, (unsigned long) level);
+    if(ret < 0)
+    {
+        NXPLOG_TML_E("%s : failed errno = 0x%x", __FUNCTION__, errno);
+        if(errno == -EBUSY)
+        {
+            wStatus = NFCSTATUS_BUSY;
+        }
+        else if(errno == -EBADRQC)
+        {
+            wStatus = NFCSTATUS_INVALID_FORMAT;
+        }
+        else if(errno == -EINVAL)
+        {
+            wStatus = NFCSTATUS_INVALID_PARAMETER;
+        }
+        else
+        {
+            wStatus = NFCSTATUS_FAILED;
+        }
+    }
+    return wStatus;
+}
+
+/*******************************************************************************
+**
 ** Function         phTmlNfc_set_pid
 **
 ** Description
@@ -516,7 +572,7 @@
     return status;
 }
 
-#if ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
+#if (NXP_ESE_SVDD_SYNC == TRUE)
 /*******************************************************************************
 **
 ** Function         phTmlNfc_rel_svdd_wait
diff --git a/halimpl/pn54x/tml/phTmlNfc_i2c.h b/halimpl/pn54x/tml/phTmlNfc_i2c.h
index 54b7fce..575d344 100644
--- a/halimpl/pn54x/tml/phTmlNfc_i2c.h
+++ b/halimpl/pn54x/tml/phTmlNfc_i2c.h
@@ -21,6 +21,9 @@
 /* Basic type definitions */
 #include <phNfcTypes.h>
 #include <phTmlNfc.h>
+#include <NXP_ESE_Features.h>
+
+#define PN544_MAGIC 0xE9
 
 /* Function declarations */
 void phTmlNfc_i2c_close(void *pDevHandle);
@@ -29,8 +32,8 @@
 int phTmlNfc_i2c_write(void *pDevHandle,uint8_t * pBuffer, int nNbBytesToWrite);
 int phTmlNfc_i2c_reset(void *pDevHandle,long level);
 bool_t getDownloadFlag(void);
+bool_t notifyFwrequest;
 phTmlNfc_i2cfragmentation_t fragmentation_enabled;
-#define PN544_MAGIC 0xE9
 
 /*
  * PN544 power control via ioctl
@@ -38,7 +41,7 @@
  * PN544_SET_PWR(1): power on
  * PN544_SET_PWR(2): reset and power on with firmware download enabled
  */
-#define PN544_SET_PWR    _IOW(PN544_MAGIC, 0x01, unsigned int)
+#define PN544_SET_PWR    _IOW(PN544_MAGIC, 0x01, long)
 
 #if(NFC_NXP_ESE == TRUE)
 NFCSTATUS phTmlNfc_i2c_get_p61_power_state(void *pDevHandle);
@@ -46,7 +49,8 @@
 NFCSTATUS phTmlNfc_set_pid(void *pDevHandle, long pid);
 NFCSTATUS phTmlNfc_set_power_scheme(void *pDevHandle, long id);
 NFCSTATUS phTmlNfc_get_ese_access(void *pDevHandle, long timeout);
-#if ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
+NFCSTATUS phTmlNfc_i2c_set_Jcop_dwnld_state(void *pDevHandle, long level);
+#if (NXP_ESE_SVDD_SYNC == TRUE)
 NFCSTATUS phTmlNfc_rel_svdd_wait(void *pDevHandle);
 #endif
 /*
@@ -55,19 +59,19 @@
  * level 1 = Enable power
  * level 0 = Disable power
  */
-#define P61_SET_SPI_PWR    _IOW(PN544_MAGIC, 0x02, unsigned int)
+#define P61_SET_SPI_PWR    _IOW(PN544_MAGIC, 0x02, long)
 
 /* SPI or DWP can call this ioctl to get the current
  * power state of P61
  *
 */
-#define P61_GET_PWR_STATUS    _IOR(PN544_MAGIC, 0x03, unsigned int)
+#define P61_GET_PWR_STATUS    _IOR(PN544_MAGIC, 0x03, long)
 
 /* DWP side this ioctl will be called
  * level 1 = Wired access is enabled/ongoing
  * level 0 = Wired access is disalbed/stopped
 */
-#define P61_SET_WIRED_ACCESS _IOW(PN544_MAGIC, 0x04, unsigned int)
+#define P61_SET_WIRED_ACCESS _IOW(PN544_MAGIC, 0x04, long)
 
 /*
   NFC Init will call the ioctl to register the PID with the i2c driver
@@ -83,9 +87,15 @@
   NFC and SPI will call the ioctl to update the power scheme
 */
 #define P544_SET_POWER_SCHEME _IOW(PN544_MAGIC, 0x07, long)
-
+#if (NXP_ESE_SVDD_SYNC == TRUE)
 /*
   NFC will call the ioctl to release the svdd protection
 */
 #define P544_REL_SVDD_WAIT _IOW(PN544_MAGIC, 0x08, long)
 #endif
+/* SPI or DWP can call this ioctl to set the JCOP download
+ * state of P61
+ *
+*/
+#define PN544_SET_DWNLD_STATUS    _IOW(PN544_MAGIC, 0x09, long)
+#endif
diff --git a/halimpl/pn54x/utils/phNxpConfig.cpp b/halimpl/pn54x/utils/phNxpConfig.cpp
index bebb4c1..84f7037 100644
--- a/halimpl/pn54x/utils/phNxpConfig.cpp
+++ b/halimpl/pn54x/utils/phNxpConfig.cpp
@@ -740,8 +740,7 @@
             (token.find("POLLING_TECH_MASK") != std::string::npos)      ||
             (token.find("NXP_RF_CONF_BLK") != std::string::npos)        ||
             (token.find("NXP_CN_TRANSIT_BLK_NUM_CHECK_ENABLE") != std::string::npos) ||
-            (token.find("NXP_FWD_FUNCTIONALITY_ENABLE") != std::string::npos) ||
-            (token.find("NXP_RF_UPDATE_REQ") != std::string::npos))
+            (token.find("NXP_FWD_FUNCTIONALITY_ENABLE") != std::string::npos))
 
     {
         stat = true;
diff --git a/halimpl/pn54x/utils/phNxpConfig.h b/halimpl/pn54x/utils/phNxpConfig.h
index 0803eda..9f7fcd1 100644
--- a/halimpl/pn54x/utils/phNxpConfig.h
+++ b/halimpl/pn54x/utils/phNxpConfig.h
@@ -110,10 +110,9 @@
 #define NAME_NXP_WIREDMODE_RESUME_TIMEOUT  "NXP_WIREDMODE_RESUME_TIMEOUT"
 #define NAME_NXP_UICC_LISTEN_TECH_MASK      "UICC_LISTEN_TECH_MASK"
 #define NAME_NXP_HOST_LISTEN_TECH_MASK      "HOST_LISTEN_TECH_MASK"
-#if ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
+#if(NXP_ESE_SVDD_SYNC == TRUE)
 #define NAME_NXP_SVDD_SYNC_OFF_DELAY "NXP_SVDD_SYNC_OFF_DELAY"
 #endif
-#define NAME_NXP_RF_UPDATE_REQ        "NXP_RF_UPDATE_REQ"
 /* default configuration */
 #define default_storage_location "/data/nfc"
 
diff --git a/src/adaptation/NfcAdaptation.cpp b/src/adaptation/NfcAdaptation.cpp
index 911f5a7..a0910cf 100644
--- a/src/adaptation/NfcAdaptation.cpp
+++ b/src/adaptation/NfcAdaptation.cpp
@@ -178,6 +178,12 @@
         nfa_ee_max_ee_cfg = num;
         ALOGD("%s: Overriding NFA_EE_MAX_EE_SUPPORTED to use %d", func, nfa_ee_max_ee_cfg);
     }
+    else
+    {
+        nfa_ee_max_ee_cfg = NFA_HCI_MAX_HOST_IN_NETWORK;
+        ALOGD("%s: NFA_EE_MAX_EE_SUPPORTED default value to use %d", func, nfa_ee_max_ee_cfg);
+    }
+
     if ( GetNumValue ( NAME_NFA_POLL_BAIL_OUT_MODE, &num, sizeof ( num ) ) )
     {
         nfa_poll_bail_out_mode = num;
@@ -563,9 +569,28 @@
     return -1;
 }
 
+/*******************************************************************************
+**
+** Function:    NfcAdaptation::HalGetFwDwnldFlag
+**
+** Description: Get FW Download Flag.
+**
+** Returns:     SUCESS or FAIL.
+**
+*******************************************************************************/
+int NfcAdaptation::HalGetFwDwnldFlag (UINT8* fwDnldRequest)
+{
+    const char* func = "NfcAdaptation::HalGetFwDwnldFlag";
+    int status = NFA_STATUS_FAILED;
+    ALOGD ("%s", func);
+    if (mHalDeviceContext)
+    {
+        status = mHalDeviceContext->check_fw_dwnld_flag(mHalDeviceContext, fwDnldRequest);
+    }
+    return status;
+}
 #endif
 
-
 /*******************************************************************************
 **
 ** Function:    NfcAdaptation::HalCoreInitialized
@@ -699,7 +724,7 @@
     static UINT8 cmd_init_nci_size  = sizeof(cmd_init_nci)  / sizeof(UINT8);
     tNFC_FWUpdate_Info_t fw_update_inf;
     UINT8 p_core_init_rsp_params;
-    UINT8 fw_dwnld_status = NFC_STATUS_FAILED;
+    UINT16 fw_dwnld_status = NFC_STATUS_FAILED;
     evt_status = NFC_STATUS_FAILED;
 #endif
     HalInitialize ();
diff --git a/src/hal/include/nci_defs.h b/src/hal/include/nci_defs.h
index 7f5bba9..d8870d8 100755
--- a/src/hal/include/nci_defs.h
+++ b/src/hal/include/nci_defs.h
@@ -194,7 +194,10 @@
 #define NCI_STATUS_EE_TRANSMISSION_ERR  0xC1
 #define NCI_STATUS_EE_PROTOCOL_ERR      0xC2
 #define NCI_STATUS_EE_TIMEOUT           0xC3
-
+#if (NXP_EXTNS == TRUE)
+#define NCI_STATUS_WIRED_SESSION_ABORTED 0xE6
+#define NCI_STATUS_DWP_APDU_DROPPPED     0xE5  /* todo: need to place new error code when FW is readey*/
+#endif
 
 typedef UINT8 tNCI_STATUS;
 
diff --git a/src/hal/include/nfc_hal_api.h b/src/hal/include/nfc_hal_api.h
index 5645dcc..4220aea 100755
--- a/src/hal/include/nfc_hal_api.h
+++ b/src/hal/include/nfc_hal_api.h
@@ -106,14 +106,14 @@
 typedef void (tHAL_API_CLOSE) (void);
 typedef void (tHAL_API_CORE_INITIALIZED) (UINT8 *p_core_init_rsp_params);
 typedef void (tHAL_API_WRITE) (UINT16 data_len, UINT8 *p_data);
-#if(NXP_EXTNS == TRUE)
-typedef int (tHAL_API_IOCTL) (long arg, void *p_data);
-#endif
 typedef BOOLEAN (tHAL_API_PREDISCOVER) (void);
 typedef void (tHAL_API_CONTROL_GRANTED) (void);
 typedef void (tHAL_API_POWER_CYCLE) (void);
 typedef UINT8 (tHAL_API_GET_MAX_NFCEE) (void);
-
+#if(NXP_EXTNS == TRUE)
+typedef int (tHAL_API_IOCTL) (long arg, void *p_data);
+typedef int (tHAL_API_GET_FW_DWNLD_FLAG)(UINT8 *fwDnldRequest);
+#endif
 
 #define NFC_HAL_DM_PRE_SET_MEM_LEN  5
 typedef struct
@@ -142,14 +142,14 @@
     tHAL_API_CLOSE *close;
     tHAL_API_CORE_INITIALIZED *core_initialized;
     tHAL_API_WRITE *write;
-#if(NXP_EXTNS == TRUE)
-    tHAL_API_IOCTL *ioctl;
-#endif
     tHAL_API_PREDISCOVER *prediscover;
     tHAL_API_CONTROL_GRANTED *control_granted;
     tHAL_API_POWER_CYCLE *power_cycle;
     tHAL_API_GET_MAX_NFCEE *get_max_ee;
-
+#if(NXP_EXTNS == TRUE)
+    tHAL_API_IOCTL *ioctl;
+    tHAL_API_GET_FW_DWNLD_FLAG *check_fw_dwnld_flag;
+#endif
 } tHAL_NFC_ENTRY;
 
 #if(NXP_EXTNS == TRUE)
diff --git a/src/include/NXP_ESE_Features.h b/src/include/NXP_ESE_Features.h
index 640ed8d..75be818 100755
--- a/src/include/NXP_ESE_Features.h
+++ b/src/include/NXP_ESE_Features.h
@@ -33,6 +33,7 @@
 
 #if(NFC_NXP_CHIP_TYPE == PN547C2)
 #define NXP_ESE_WIRED_MODE_DISABLE_DISCOVERY   TRUE
+#define NXP_LEGACY_APDU_GATE                   TRUE
 
 #elif((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
     #define NFC_NXP_TRIPLE_MODE_PROTECTION        TRUE
@@ -42,6 +43,11 @@
     #define NXP_ESE_DUAL_MODE_PRIO_SCHEME         NXP_ESE_WIRED_MODE_TIMEOUT
      //Reset scheme
     #define NXP_ESE_RESET_METHOD                  FALSE
+    #define NXP_ESE_ETSI_READER_ENABLE            TRUE
+    #define NXP_ESE_SVDD_SYNC                     TRUE
+    #define NXP_LEGACY_APDU_GATE                  TRUE
+    #define NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION   TRUE
+    #define NXP_ESE_JCOP_DWNLD_PROTECTION         FALSE
 
 #elif(NFC_NXP_CHIP_TYPE == PN553)
     #define NFC_NXP_TRIPLE_MODE_PROTECTION        FALSE
@@ -49,19 +55,25 @@
     #define NXP_ESE_WIRED_MODE_PRIO               FALSE
     #define NXP_ESE_UICC_EXCLUSIVE_WIRED_MODE     FALSE    // UICC exclusive wired mode
     //dual mode prio scheme
-    #define NXP_ESE_DUAL_MODE_PRIO_SCHEME         NXP_ESE_WIRED_MODE_TIMEOUT
+    #define NXP_ESE_DUAL_MODE_PRIO_SCHEME         NXP_ESE_WIRED_MODE_RESUME
     //reset scheme
     #define NXP_ESE_RESET_METHOD                  TRUE
     #define NXP_ESE_POWER_MODE                    TRUE
     #define NXP_ESE_P73_ISO_RST                   TRUE
     #define NXP_BLOCK_PROPRIETARY_APDU_GATE       FALSE
     #define NXP_WIRED_MODE_STANDBY                TRUE
+    #define NXP_ESE_ETSI_READER_ENABLE            TRUE
+    #define NXP_ESE_SVDD_SYNC                     FALSE
+    #define NXP_LEGACY_APDU_GATE                  FALSE
+    #define NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION   FALSE
+    #define NXP_ESE_JCOP_DWNLD_PROTECTION         TRUE
 #endif
 
 #else /*Else of #if(NFC_NXP_ESE == TRUE)*/
 
 #if(NFC_NXP_CHIP_TYPE == PN547C2)
-#define NXP_ESE_WIRED_MODE_DISABLE_DISCOVERY   FALSE
+#define NXP_ESE_WIRED_MODE_DISABLE_DISCOVERY      FALSE
+#define NXP_LEGACY_APDU_GATE                      FALSE
 #endif
 
 #if((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
@@ -70,18 +82,29 @@
     #define NXP_ESE_FELICA_CLT                    FALSE
      //Reset scheme
     #define NXP_ESE_RESET_METHOD                  FALSE
+    #define NXP_ESE_ETSI_READER_ENABLE            FALSE
+    #define NXP_ESE_SVDD_SYNC                     FALSE
+    #define NXP_LEGACY_APDU_GATE                  FALSE
+    #define NXP_ESE_DUAL_MODE_PRIO_SCHEME         NXP_ESE_WIRED_MODE_TIMEOUT
+    #define NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION   FALSE
+    #define NXP_ESE_JCOP_DWNLD_PROTECTION         TRUE
 
 #elif(NFC_NXP_CHIP_TYPE == PN553)
     #define NFC_NXP_TRIPLE_MODE_PROTECTION        FALSE
-    #define NXP_ESE_FELICA_CLT                   FALSE
-    #define NXP_ESE_WIRED_MODE_PRIO              FALSE    //eSE wired mode prio over UICC wired mode
-    #define NXP_ESE_UICC_EXCLUSIVE_WIRED_MODE    FALSE   // UICC exclusive wired mode
+    #define NXP_ESE_FELICA_CLT                    FALSE
+    #define NXP_ESE_WIRED_MODE_PRIO               FALSE    //eSE wired mode prio over UICC wired mode
+    #define NXP_ESE_UICC_EXCLUSIVE_WIRED_MODE     FALSE   // UICC exclusive wired mode
     //reset scheme
     #define NXP_ESE_RESET_METHOD                  FALSE
     #define NXP_ESE_POWER_MODE                    FALSE
     #define NXP_ESE_P73_ISO_RST                   FALSE
     #define NXP_BLOCK_PROPRIETARY_APDU_GATE       FALSE
     #define NXP_WIRED_MODE_STANDBY                FALSE
+    #define NXP_ESE_ETSI_READER_ENABLE            FALSE
+    #define NXP_ESE_SVDD_SYNC                     FALSE
+    #define NXP_ESE_DUAL_MODE_PRIO_SCHEME         NXP_ESE_WIRED_MODE_TIMEOUT
+    #define NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION   FALSE
+    #define NXP_ESE_JCOP_DWNLD_PROTECTION         TRUE
 #endif
 
 #endif /*End of #if(NFC_NXP_ESE == TRUE)*/
diff --git a/src/include/NXP_NFCC_Features.h b/src/include/NXP_NFCC_Features.h
index 2607b03..d04f331 100755
--- a/src/include/NXP_NFCC_Features.h
+++ b/src/include/NXP_NFCC_Features.h
@@ -20,16 +20,38 @@
 
 #ifndef NXP_NFCC_FEATURES_H
 #define NXP_NFCC_FEATURES_H
-#define NXP_NFCC_EMPTY_DATA_PACKET TRUE
+/*Flags common to all chip types*/
+#define NXP_NFCC_EMPTY_DATA_PACKET              TRUE
+#define GEMALTO_SE_SUPPORT                      TRUE
 #if(NFC_NXP_CHIP_TYPE == PN553)
 // Example: define macro like below for each feature
 //#define NXP_NFCC_FEATURE_1  TRUE
-#define NXP_NFCC_MW_RCVRY_BLK_FW_DNLD   TRUE
-#define NXP_NFCC_DYNAMIC_DUAL_UICC      TRUE
-#define NXP_NFCC_FW_WA                  TRUE
-#define NXP_NFCC_ROUTING_BLOCK_BIT      TRUE
+#define NXP_NFCC_I2C_READ_WRITE_IMPROVEMENT     TRUE
+#define NXP_NFCC_MIFARE_TIANJIN                 FALSE
+#define NXP_NFCC_MW_RCVRY_BLK_FW_DNLD           TRUE
+#define NXP_NFCC_DYNAMIC_DUAL_UICC              TRUE
+#define NXP_NFCC_FW_WA                          TRUE
+#define NXP_NFCC_FORCE_NCI1_0_INIT              FALSE
+#define NXP_NFCC_ROUTING_BLOCK_BIT              TRUE
+#define NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH       FALSE
+#define NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH    TRUE
+#define NXP_NFCC_SPI_FW_DOWNLOAD_SYNC           TRUE
+#define NXP_HW_ANTENNA_LOOP4_SELF_TEST          FALSE
 #elif((NFC_NXP_CHIP_TYPE == PN551)||(NFC_NXP_CHIP_TYPE == PN548C2))
-#define NXP_NFCC_DYNAMIC_DUAL_UICC      FALSE
-#define NXP_NFCC_ROUTING_BLOCK_BIT_PROP TRUE
+#define NXP_NFCC_I2C_READ_WRITE_IMPROVEMENT     TRUE
+#define NXP_NFCC_AID_MATCHING_PLATFORM_CONFIG   TRUE
+#define NXP_NFCC_DYNAMIC_DUAL_UICC              FALSE
+#define NXP_NFCC_ROUTING_BLOCK_BIT_PROP         TRUE
+#define NXP_NFCC_MIFARE_TIANJIN                 TRUE
+#define NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH       TRUE
+#define NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH    FALSE
+#define NXP_NFCC_SPI_FW_DOWNLOAD_SYNC           FALSE
+#define NXP_HW_ANTENNA_LOOP4_SELF_TEST          TRUE
+#elif(NFC_NXP_CHIP_TYPE  == PN547C2)
+#define NXP_NFCC_I2C_READ_WRITE_IMPROVEMENT     FALSE
+#define NXP_NFCC_AID_MATCHING_PLATFORM_CONFIG   TRUE
+#define NXP_NFCC_MIFARE_TIANJIN                 TRUE
+#define NXP_NFCC_SPI_FW_DOWNLOAD_SYNC           FALSE
+#define NXP_HW_ANTENNA_LOOP4_SELF_TEST          TRUE
 #endif
 #endif                          /* end of #ifndef NXP_NFCC_FEATURES_H */
diff --git a/src/include/NfcAdaptation.h b/src/include/NfcAdaptation.h
index d8331e6..ef6247e 100644
--- a/src/include/NfcAdaptation.h
+++ b/src/include/NfcAdaptation.h
@@ -91,6 +91,7 @@
     void    DownloadFirmware ();
 #if(NXP_EXTNS == TRUE)
     void MinInitialize ();
+    int HalGetFwDwnldFlag (UINT8* fwDnldRequest);
 #endif
 
 private:
diff --git a/src/include/config.h b/src/include/config.h
index b7e0246..0510f14 100644
--- a/src/include/config.h
+++ b/src/include/config.h
@@ -131,19 +131,29 @@
 #define NAME_NFA_POLL_BAIL_OUT_MODE     "NFA_POLL_BAIL_OUT_MODE"
 #define NAME_NFA_PROPRIETARY_CFG        "NFA_PROPRIETARY_CFG"
 #if(NXP_EXTNS == TRUE)
-#if(NXP_NFCC_ROUTING_BLOCK_BIT==TRUE)
-#define NAME_NXP_PROP_BLACKLIST_ROUTING "NXP_PROP_BLACKLIST_ROUTING"
-#endif
 #define NAME_NXP_NFCC_STANDBY_TIMEOUT   "NXP_NFCC_STANDBY_TIMEOUT"
 #define NAME_NXP_CP_TIMEOUT             "NXP_CP_TIMEOUT"
 #define NAME_NXP_CORE_SCRN_OFF_AUTONOMOUS_ENABLE   "NXP_CORE_SCRN_OFF_AUTONOMOUS_ENABLE"
+#define NAME_NXP_ALLOW_WIRED_IN_MIFARE_DESFIRE_CLT "NXP_ALLOW_WIRED_IN_MIFARE_DESFIRE_CLT"
+#define NAME_NXP_NFCC_RF_FIELD_EVENT_TIMEOUT    "NXP_NFCC_RF_FIELD_EVENT_TIMEOUT"
+#if(NXP_NFCC_ROUTING_BLOCK_BIT==TRUE)
+#define NAME_NXP_PROP_BLACKLIST_ROUTING "NXP_PROP_BLACKLIST_ROUTING"
+#endif
+#if(NXP_ESE_DUAL_MODE_PRIO_SCHEME == NXP_ESE_WIRED_MODE_TIMEOUT)
 #define NAME_NXP_MIFARE_DESFIRE_DISABLE    "NXP_MIFARE_DESFIRE_DISABLE"
-#define NAME_NXP_ALLOW_WIRED_IN_MIFARE_DESFIRE_CLT    "NXP_ALLOW_WIRED_IN_MIFARE_DESFIRE_CLT"
+#endif
 #if(NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH == TRUE)
 #define NAME_NXP_DUAL_UICC_ENABLE       "NXP_DUAL_UICC_ENABLE"
 #endif
-#define NAME_NXP_NFCC_PASSIVE_LISTEN_TIMEOUT       "NXP_NFCC_PASSIVE_LISTEN_TIMEOUT"
+#if(NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION == TRUE)
+#define NAME_NXP_NFCC_PASSIVE_LISTEN_TIMEOUT    "NXP_NFCC_PASSIVE_LISTEN_TIMEOUT"
 #endif
+#if(NXP_ESE_JCOP_DWNLD_PROTECTION == TRUE)
+#define NAME_OS_DOWNLOAD_TIMEOUT_VALUE    "OS_DOWNLOAD_TIMEOUT_VALUE"
+#endif
+#define NAME_NXP_HCEF_CMD_RSP_TIMEOUT_VALUE "NXP_HCEF_CMD_RSP_TIMEOUT_VALUE"
+#endif
+
 #define                     LPTD_PARAM_LEN (40)
 
 // default configuration
diff --git a/src/include/nfc_target.h b/src/include/nfc_target.h
index d292d01..8434eb9 100644
--- a/src/include/nfc_target.h
+++ b/src/include/nfc_target.h
@@ -272,7 +272,7 @@
 
 /* Maximum time to discover NFCEE */
 #ifndef NFA_EE_DISCV_TIMEOUT_VAL
-#define NFA_EE_DISCV_TIMEOUT_VAL    2000
+#define NFA_EE_DISCV_TIMEOUT_VAL    4000
 #endif
 
 /* Number of times reader/writer should attempt to resend a command on failure */
@@ -746,6 +746,9 @@
 *****************************************************************************/
 #ifndef HAL_WRITE
 #define HAL_WRITE(p)    {nfc_cb.p_hal->write(p->len, (UINT8 *)(p+1) + p->offset); GKI_freebuf(p);}
+#if (NXP_EXTNS == TRUE)
+#define HAL_RE_WRITE(p)    {nfc_cb.p_hal->write(p->len, (UINT8 *)(p+1) + p->offset);}
+#endif
 
 #ifdef NFC_HAL_SHARED_GKI
 
diff --git a/src/nfa/ce/nfa_ce_act.c b/src/nfa/ce/nfa_ce_act.c
index b75c507..f89f2f0 100755
--- a/src/nfa/ce/nfa_ce_act.c
+++ b/src/nfa/ce/nfa_ce_act.c
@@ -354,6 +354,7 @@
             UINT8_TO_STREAM (p_params, NCI_PARAM_LEN_LF_T3T_ID);                     /* length */
             UINT16_TO_BE_STREAM (p_params, p_cb->listen_info[i].t3t_system_code);    /* System Code */
             ARRAY_TO_BE_STREAM (p_params,  p_cb->listen_info[i].t3t_nfcid2, NCI_RF_F_UID_LEN);
+
             /* Set mask for this ID */
             t3t_flags2_mask &= ~((UINT16) (1<<t3t_idx));
             t3t_idx++;
@@ -380,12 +381,10 @@
     UINT16_TO_STREAM (p_params, t3t_flags2_mask);            /* Mask of IDs to disable listening */
 #endif
     tlv_size = (UINT8) (p_params-tlv);
-
-    if(appl_dta_mode_flag == 0x01){
+    if(appl_dta_mode_flag == 0x01) {
         nfa_dm_cb.eDtaMode = NFA_DTA_HCEF_MODE;
     }
     nfa_dm_check_set_config (tlv_size, (UINT8 *)tlv, FALSE);
-
 }
 
 /*******************************************************************************
diff --git a/src/nfa/dm/nfa_dm_act.c b/src/nfa/dm/nfa_dm_act.c
index 39f6199..c9ef7fa 100755
--- a/src/nfa/dm/nfa_dm_act.c
+++ b/src/nfa/dm/nfa_dm_act.c
@@ -382,12 +382,14 @@
         break;
 
     case NFC_EE_DISCOVER_REQ_REVT:               /* EE Discover Req notification */
-//        if (nfa_dm_is_active() &&
-//            (nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_DISCOVERY) )
-//        {
-//            nfa_dm_rf_deactivate (NFA_DEACTIVATE_TYPE_IDLE);
-//        }
-        nfa_ee_proc_evt (event, p_data);
+#if((NFC_NXP_ESE == TRUE) && (NXP_EXTNS == TRUE) && (NXP_ESE_ETSI_READER_ENABLE != TRUE))
+       if (nfa_dm_is_active() &&
+           (nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_DISCOVERY) )
+       {
+           nfa_dm_rf_deactivate (NFA_DEACTIVATE_TYPE_IDLE);
+       }
+#endif
+       nfa_ee_proc_evt (event, p_data);
         break;
 
 #endif
@@ -464,7 +466,7 @@
         else
         {
 #endif
-#if (NFC_NXP_ESE ==  TRUE && ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551)))
+#if ((NFC_NXP_ESE ==  TRUE) && (NXP_ESE_ETSI_READER_ENABLE == TRUE))
             conn_evt.status = p_data->status;
             nfa_dm_conn_cback_event_notify (NFA_RECOVERY_EVT, &conn_evt);
 #endif
@@ -475,6 +477,12 @@
 
     case NFC_NFCC_TRANSPORT_ERR_REVT:
         NFA_TRACE_DEBUG1 ("flags:0x%08x", nfa_dm_cb.flags);
+#if(NXP_EXTNS == TRUE && NXP_NFCC_I2C_READ_WRITE_IMPROVEMENT == TRUE)
+        if(p_data->status == NFC_STATUS_FAILED)
+        {
+            dm_cback_data.status = p_data->status;
+        }
+#endif
         dm_cback_evt = (event == NFC_NFCC_TIMEOUT_REVT) ? NFA_DM_NFCC_TIMEOUT_EVT : NFA_DM_NFCC_TRANSPORT_ERR_EVT;
         (*nfa_dm_cb.p_dm_cback) (dm_cback_evt, NULL);
         break;
@@ -1203,7 +1211,11 @@
 
     NFA_TRACE_DEBUG0 ("nfa_dm_act_enable_listening ()");
 
-    nfa_dm_cb.flags &= (~NFA_DM_FLAGS_LISTEN_DISABLED & ~NFA_DM_FLAGS_PASSIVE_LISTEN_DISABLED);
+    nfa_dm_cb.flags &= (~NFA_DM_FLAGS_LISTEN_DISABLED
+#if(NXP_EXTNS == TRUE && NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION == TRUE)
+             & ~NFA_DM_FLAGS_PASSIVE_LISTEN_DISABLED
+#endif
+    );
     evt_data.status = NFA_STATUS_OK;
     nfa_dm_conn_cback_event_notify (NFA_LISTEN_ENABLED_EVT, &evt_data);
 
@@ -1233,6 +1245,7 @@
     return (TRUE);
 }
 
+#if(NXP_EXTNS == TRUE && NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION == TRUE)
 /*******************************************************************************
 **
 ** Function         nfa_dm_act_disable_passive_listening
@@ -1254,7 +1267,7 @@
 
     return (TRUE);
 }
-
+#endif
 /*******************************************************************************
 **
 ** Function         nfa_dm_act_pause_p2p
diff --git a/src/nfa/dm/nfa_dm_api.c b/src/nfa/dm/nfa_dm_api.c
index 1e48e33..544f768 100755
--- a/src/nfa/dm/nfa_dm_api.c
+++ b/src/nfa/dm/nfa_dm_api.c
@@ -561,6 +561,7 @@
     return (NFA_STATUS_FAILED);
 }
 
+#if(NXP_EXTNS == TRUE && NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION == TRUE)
 /*******************************************************************************
 **
 ** Function         NFA_DisablePassiveListening
@@ -593,6 +594,8 @@
 
     return (NFA_STATUS_FAILED);
 }
+#endif
+
 /*******************************************************************************
 **
 ** Function         NFA_PauseP2p
@@ -1358,6 +1361,25 @@
 #if(NXP_EXTNS == TRUE)
 /*******************************************************************************
 **
+** Function         NFA_checkNfcStateBusy()
+**
+** Description      This function returns whether NFC process is busy or not
+
+**
+** Returns          if Nfc state busy return true otherwise false.
+**
+*******************************************************************************/
+BOOLEAN NFA_checkNfcStateBusy()
+{
+
+    if(nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_DISCOVERY)
+        return FALSE;
+
+    return TRUE;
+}
+
+/*******************************************************************************
+**
 ** Function       NFA_SetReaderMode
 **
 ** Description:
diff --git a/src/nfa/dm/nfa_dm_discover.c b/src/nfa/dm/nfa_dm_discover.c
index 1d77bd9..f4d23a6 100755
--- a/src/nfa/dm/nfa_dm_discover.c
+++ b/src/nfa/dm/nfa_dm_discover.c
@@ -102,7 +102,7 @@
 static UINT16 P2P_PRIO_LOGIC_DEACT_NTF_TIMEOUT = 200; /* timeout value 2 sec waiting for deactivate ntf */
 #endif
 
-#if(NFC_NXP_ESE == TRUE && ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551)))
+#if(NFC_NXP_ESE == TRUE && (NXP_ESE_ETSI_READER_ENABLE == TRUE))
 BOOLEAN etsi_reader_in_progress = FALSE;
 #endif
 /*******************************************************************************
@@ -133,13 +133,14 @@
         NFA_TRACE_DEBUG1 ("nfa_dm_get_rf_discover_config () removing active listen A/B 0x%x", dm_disc_mask);
         dm_disc_mask &= ~NFA_DM_DISC_MASK_NFC_DEP;
     }
-
+#if((NXP_EXTNS == TRUE) && (NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION == TRUE))
     if (nfa_dm_cb.flags & NFA_DM_FLAGS_PASSIVE_LISTEN_DISABLED)
     {
         NFA_TRACE_DEBUG1 ("nfa_dm_get_rf_discover_config () passive listen disabled, rm listen from 0x%x", dm_disc_mask);
         dm_disc_mask &= NFA_DM_DISC_MASK_ACTIVE_LISTEN;
         dm_disc_mask |= (NFA_DM_DISC_MASK_LAA_NFC_DEP | NFA_DM_DISC_MASK_LFA_NFC_DEP);
     }
+#endif
     /* Check polling A */
     if (dm_disc_mask & ( NFA_DM_DISC_MASK_PA_T1T
                         |NFA_DM_DISC_MASK_PA_T2T
@@ -1156,7 +1157,7 @@
     (void)p_tle;
 
     NFA_TRACE_ERROR0 ("nfa_dm_disc_deact_ntf_timeout_cback()");
-#if(NFC_NXP_ESE == TRUE && ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551)))
+#if((NFC_NXP_ESE == TRUE) && (NXP_ESE_ETSI_READER_ENABLE == TRUE))
     if (nfc_cb.num_disc_maps == 1)
     {
     NFC_TRACE_ERROR0 ("reset Nfc..!!");
@@ -1168,7 +1169,7 @@
     {
 #endif
         nfa_dm_disc_force_to_idle();
-#if(NFC_NXP_ESE == TRUE && ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551)))
+#if((NFC_NXP_ESE == TRUE) && (NXP_ESE_ETSI_READER_ENABLE == TRUE))
     }
 #endif
 }
@@ -3406,6 +3407,13 @@
     }
     else
     {
+#if(NXP_EXTNS == TRUE)
+        if (nfa_dm_cb.disc_cb.kovio_tle.in_use)
+        {
+            nfa_sys_stop_timer (&nfa_dm_cb.disc_cb.kovio_tle);
+            nfa_dm_disc_kovio_timeout_cback (&nfa_dm_cb.disc_cb.kovio_tle);
+        }
+#endif
         nfa_dm_disc_sm_execute (NFA_DM_RF_DEACTIVATE_CMD, (void *) &deactivate_type);
         return NFA_STATUS_OK;
     }
diff --git a/src/nfa/dm/nfa_dm_main.c b/src/nfa/dm/nfa_dm_main.c
index 1dce30b..458f30a 100755
--- a/src/nfa/dm/nfa_dm_main.c
+++ b/src/nfa/dm/nfa_dm_main.c
@@ -90,7 +90,9 @@
     nfa_dm_act_disable_polling,         /* NFA_DM_API_DISABLE_POLLING_EVT       */
     nfa_dm_act_enable_listening,        /* NFA_DM_API_ENABLE_LISTENING_EVT      */
     nfa_dm_act_disable_listening,       /* NFA_DM_API_DISABLE_LISTENING_EVT     */
+#if((NXP_EXTNS == TRUE) && (NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION == TRUE))
     nfa_dm_act_disable_passive_listening,/* NFA_DM_API_DISABLE_PASSIVE_LISTENING_EVT     */
+#endif
     nfa_dm_act_pause_p2p,               /* NFA_DM_API_PAUSE_P2P_EVT             */
     nfa_dm_act_resume_p2p,              /* NFA_DM_API_RESUME_P2P_EVT            */
     nfa_dm_act_send_raw_frame,          /* NFA_DM_API_RAW_FRAME_EVT             */
@@ -494,7 +496,7 @@
 #endif
        (updated_len || app_init)
 #if(NXP_EXTNS == TRUE)
-       && (appl_dta_mode_flag == 0x00 || nfa_dm_cb.eDtaMode == NFA_DTA_HCEF_MODE) )
+       && (appl_dta_mode_flag == 0x00 || nfa_dm_cb.eDtaMode == NFA_DTA_HCEF_MODE))
        || ((appl_dta_mode_flag) && (app_init)))
 #endif
     {
@@ -602,8 +604,10 @@
     case NFA_DM_API_DISABLE_LISTENING_EVT:
         return "NFA_DM_API_DISABLE_LISTENING_EVT";
 
+#if((NXP_EXTNS == TRUE) && (NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION == TRUE))
     case NFA_DM_API_DISABLE_PASSIVE_LISTENING_EVT:
         return "NFA_DM_API_DISABLE_PASSIVE_LISTENING_EVT";
+#endif
 
     case NFA_DM_API_PAUSE_P2P_EVT:
         return "NFA_DM_API_PAUSE_P2P_EVT";
diff --git a/src/nfa/ee/nfa_ee_act.c b/src/nfa/ee/nfa_ee_act.c
index 44aac7e..9879ae2 100755
--- a/src/nfa/ee/nfa_ee_act.c
+++ b/src/nfa/ee/nfa_ee_act.c
@@ -2347,19 +2347,19 @@
     UINT8   new_size;
     tNFA_STATUS status = NFA_STATUS_OK;
 #if(NXP_NFCC_ROUTING_BLOCK_BIT==TRUE)
-    UINT8 value=0x00;
+    UINT8 route_blacklist_mask=0x00;
     long retlen = 0;
-    NFA_TRACE_DEBUG1 ("NAME_NXP_PROP_BLACKLIST_ROUTING enter=0x%x",value);
+    NFA_TRACE_DEBUG1 ("NAME_NXP_PROP_BLACKLIST_ROUTING enter=0x%x",route_blacklist_mask);
     if(GetNumValue(NAME_NXP_PROP_BLACKLIST_ROUTING, (void *)&retlen, sizeof(retlen)))
     {
         if(retlen == 0x01)
         {
-            value =NFA_EE_NXP_ROUTE_BLOCK_BIT;
-            NFA_TRACE_DEBUG1 ("NAME_NXP_PROP_BLACKLIST_ROUTING change=0x%x",value);
+            route_blacklist_mask =NFA_EE_NXP_ROUTE_BLOCK_BIT;
+            NFA_TRACE_DEBUG1 ("NAME_NXP_PROP_BLACKLIST_ROUTING change=0x%x",route_blacklist_mask);
          }
         else
         {
-            NFA_TRACE_DEBUG1 ("NAME_NXP_PROP_BLACKLIST_ROUTING exit=0x%x",value);
+            NFA_TRACE_DEBUG1 ("NAME_NXP_PROP_BLACKLIST_ROUTING exit=0x%x",route_blacklist_mask);
         }
     }
 #endif
@@ -2393,13 +2393,13 @@
                     //This aid is for prefix match.
                     *pp   = NFC_ROUTE_TAG_AID|NFA_EE_AE_NXP_PREFIX_MATCH;
 #if(NXP_NFCC_ROUTING_BLOCK_BIT==TRUE)
-                    *pp  |= (NFA_EE_NXP_ROUTE_BLOCK_BIT & value)?NFA_EE_NXP_ROUTE_BLOCK_BIT:0x00;
+                    *pp  |= route_blacklist_mask;
 #endif
                 } else {
                     //This aid is for exact match.
                     *pp   = NFC_ROUTE_TAG_AID;
 #if(NXP_NFCC_ROUTING_BLOCK_BIT==TRUE)
-                    *pp  |= (NFA_EE_NXP_ROUTE_BLOCK_BIT & value)?NFA_EE_NXP_ROUTE_BLOCK_BIT:0x00;
+                    *pp  |= route_blacklist_mask;
 #endif
                 }
                 *pp++;
@@ -2467,7 +2467,7 @@
             /*Setting blocking bit for ISO-DEP and ISO7816 protocol only*/
             if(nfa_ee_proto_list[xx]==NFC_PROTOCOL_ISO_DEP || nfa_ee_proto_list[xx] == NFC_PROTOCOL_ISO7816)
             {
-                *proto_pp  |= (NFA_EE_NXP_ROUTE_BLOCK_BIT & value)?NFA_EE_NXP_ROUTE_BLOCK_BIT:0x00;
+                *proto_pp  |= route_blacklist_mask;
             }
 #endif
             *proto_pp++;
@@ -2500,7 +2500,6 @@
         *proto_pp++   = NFC_PROTOCOL_NFC_DEP;
         proto_tlv_ctr++;
     }
-
 /* store  the Technology based routing entries in temporary buffer */
 for (xx = 0; xx < NFA_EE_NUM_TECH; xx++)
 {
@@ -2601,7 +2600,7 @@
             /*Setting blocking bit for ISO-DEP and ISO7816 protocol only*/
             if(nfa_ee_proto_list[xx]==NFC_PROTOCOL_ISO_DEP || nfa_ee_proto_list[xx] == NFC_PROTOCOL_ISO7816)
             {
-                *pp  |= (NFA_EE_NXP_ROUTE_BLOCK_BIT & value)?NFA_EE_NXP_ROUTE_BLOCK_BIT:0x00;
+                *pp  |= route_blacklist_mask;
             }
 #endif
             *pp++;
@@ -2664,12 +2663,12 @@
                 if(p_cb->aid_rt_info[xx] & NFA_EE_AE_NXP_PREFIX_MATCH) {
 #if(NXP_NFCC_ROUTING_BLOCK_BIT==FALSE)
                     //This aid is for prefix match.
-                    *pp++   = (NFC_ROUTE_TAG_AID|NFA_EE_AE_NXP_PREFIX_MATCH)|((NFA_EE_NXP_ROUTE_BLOCK_BIT & value)?NFA_EE_NXP_ROUTE_BLOCK_BIT:0x00);
+                    *pp++   = (NFC_ROUTE_TAG_AID|NFA_EE_AE_NXP_PREFIX_MATCH)|(route_blacklist_mask);
 #endif
                 } else {
 #if(NXP_NFCC_ROUTING_BLOCK_BIT==FALSE)
                     //This aid is for exact match.
-                    *pp++   = NFC_ROUTE_TAG_AID|((NFA_EE_NXP_ROUTE_BLOCK_BIT & value)?NFA_EE_NXP_ROUTE_BLOCK_BIT:0x00);
+                    *pp++   = NFC_ROUTE_TAG_AID|(route_blacklist_mask);
 #endif
                 }
 #else
@@ -2907,7 +2906,7 @@
 void nfa_ee_discv_timeout(tNFA_EE_MSG *p_data)
 {
     (void)p_data;
-
+    NFA_TRACE_DEBUG0("nfa_ee_discv_timeout ()");
     NFC_NfceeDiscover(FALSE);
     if (nfa_ee_cb.p_enable_cback)
         (*nfa_ee_cb.p_enable_cback)(NFA_EE_DISC_STS_OFF);
diff --git a/src/nfa/ee/nfa_ee_main.c b/src/nfa/ee/nfa_ee_main.c
index 91cc6dc..27554e2 100755
--- a/src/nfa/ee/nfa_ee_main.c
+++ b/src/nfa/ee/nfa_ee_main.c
@@ -710,7 +710,7 @@
     NFA_TRACE_DEBUG2 ("nfa_ee_evt_hdlr (): Event 0x%02x, State: %d", p_evt_data->hdr.event, nfa_ee_cb.em_state);
 #endif
 
-#if(NXP_EXTNS == TRUE)
+#if 0
     /*This is required to receive Reader Over SWP event*/
     if(p_evt_data->hdr.event == NFA_EE_NCI_DISC_NTF_EVT)
     {
diff --git a/src/nfa/hci/nfa_hci_act.c b/src/nfa/hci/nfa_hci_act.c
index 4ec29c9..18f728d 100755
--- a/src/nfa/hci/nfa_hci_act.c
+++ b/src/nfa/hci/nfa_hci_act.c
@@ -1099,7 +1099,9 @@
                         {
                             nfa_hci_cb.w4_rsp_evt   = TRUE;
                             nfa_hci_cb.hci_state    = NFA_HCI_STATE_WAIT_RSP;
-
+#if (NXP_EXTNS == TRUE)
+                            nfa_hci_cb.hciResponseTimeout = p_evt_data->send_evt.rsp_timeout;
+#endif
                             nfa_sys_start_timer (&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT, p_evt_data->send_evt.rsp_timeout);
                         }
                         else if (p_pipe->local_gate == NFA_HCI_LOOP_BACK_GATE)
@@ -2769,6 +2771,7 @@
                 evt_data.admin_rsp_rcvd.status = status;
                 nfa_hci_cb.hci_state = NFA_HCI_STATE_IDLE;
                 /* Send NFA_HCI_CMD_SENT_EVT to notify success */
+                nfa_hciu_send_to_all_apps (NFA_HCI_CONFIG_DONE_EVT, &evt_data);
             }
             break;
     }
diff --git a/src/nfa/hci/nfa_hci_api.c b/src/nfa/hci/nfa_hci_api.c
index 1293564..9c79a61 100755
--- a/src/nfa/hci/nfa_hci_api.c
+++ b/src/nfa/hci/nfa_hci_api.c
@@ -1058,7 +1058,6 @@
 }
 #endif
 #if(NXP_EXTNS == TRUE)
-#if (JCOP_WA_ENABLE == TRUE)
 /*******************************************************************************
 **
 ** Function         NFA_HciW4eSETransaction_Complete
@@ -1093,7 +1092,6 @@
     }
     NFA_TRACE_API0 ("NFA_HciW4eSETransaction_Complete; End");
 }
-#endif
 
 /*******************************************************************************
 **
diff --git a/src/nfa/hci/nfa_hci_main.c b/src/nfa/hci/nfa_hci_main.c
index 02de5b9..e4f5c63 100755
--- a/src/nfa/hci/nfa_hci_main.c
+++ b/src/nfa/hci/nfa_hci_main.c
@@ -78,10 +78,10 @@
 
 static void nfa_hci_sys_enable (void);
 static void nfa_hci_sys_disable (void);
-void nfa_hci_rsp_timeout (tNFA_HCI_EVENT_DATA *p_evt_data);
 static void nfa_hci_conn_cback (UINT8 conn_id, tNFC_CONN_EVT event, tNFC_CONN *p_data);
 static void nfa_hci_set_receive_buf (UINT8 pipe);
 #if (NXP_EXTNS == TRUE)
+void nfa_hci_rsp_timeout (tNFA_HCI_EVENT_DATA *p_evt_data);
 static void nfa_hci_assemble_msg (UINT8 *p_data, UINT16 data_len, UINT8 pipe);
 static UINT8 nfa_ee_ce_p61_completed = 0x00;
 #else
@@ -162,6 +162,18 @@
                     nfa_hciu_send_get_param_cmd (NFA_HCI_ADMIN_PIPE, NFA_HCI_HOST_LIST_INDEX);
                 }
             }
+#if(NXP_EXTNS == TRUE)
+            /* All the EE_DISC_NTF's received
+             * Avoid 4sec delay during HCI initialization
+             */
+            if (nfa_hci_cb.w4_hci_netwk_init &&
+                nfa_hci_cb.timer.in_use)
+            {
+                nfa_sys_stop_timer (&nfa_hci_cb.timer);
+                nfa_hci_cb.w4_hci_netwk_init = FALSE;
+                nfa_hciu_send_get_param_cmd (NFA_HCI_ADMIN_PIPE, NFA_HCI_HOST_LIST_INDEX);
+            }
+#endif
         }
         else if (nfa_hci_cb.num_nfcee <= 1)
         {
@@ -230,6 +242,8 @@
     nfa_hci_cb.hci_state = NFA_HCI_STATE_STARTUP;
 #if (NXP_EXTNS == TRUE)
     nfa_ee_ce_p61_completed = 0;
+    nfa_hci_cb.bIsHciResponseTimedout = FALSE;
+    nfa_hci_cb.bIsRspPending = FALSE;
 #endif
     /* register message handler on NFA SYS */
     nfa_sys_register (NFA_ID_HCI, &nfa_hci_sys_reg);
@@ -833,7 +847,20 @@
     char    buff[100];
     static  BOOLEAN is_first_chain_pkt = TRUE;
 #endif
-
+#if ((NXP_EXTNS == TRUE) && (NXP_ESE_DUAL_MODE_PRIO_SCHEME == NXP_ESE_WIRED_MODE_RESUME))
+    if(event == NFC_HCI_RESTART_TIMER)
+    {
+        if(nfa_hci_cb.IsHciTimerExtended)
+        {
+            nfa_sys_start_timer (&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT, NFA_HCI_EXTENDED_PKT_RSP_TIMEOUT);
+        }
+        else
+        {
+            nfa_sys_start_timer (&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT, nfa_hci_cb.hciResponseTimeout);
+        }
+        return;
+    }
+#endif
     if (event == NFC_CONN_CREATE_CEVT)
     {
         nfa_hci_cb.conn_id   = conn_id;
@@ -1105,37 +1132,33 @@
 
     /* If we got a response, cancel the response timer. Also, if waiting for */
     /* a single response, we can go back to idle state                       */
-    if (
-#if (NXP_EXTNS == TRUE)
-            (pipe == NFA_HCI_APDU_PIPE) &&(
-#endif
-                    (nfa_hci_cb.hci_state == NFA_HCI_STATE_WAIT_RSP)
-                    &&((nfa_hci_cb.type == NFA_HCI_RESPONSE_TYPE) || (nfa_hci_cb.w4_rsp_evt && (nfa_hci_cb.type == NFA_HCI_EVENT_TYPE)
-                    ))
-#if (NXP_EXTNS == TRUE)
-            )
-#endif
-    )
+    if ( (nfa_hci_cb.hci_state == NFA_HCI_STATE_WAIT_RSP) &&
+         ((nfa_hci_cb.type == NFA_HCI_RESPONSE_TYPE) || (nfa_hci_cb.w4_rsp_evt && (nfa_hci_cb.type == NFA_HCI_EVENT_TYPE)))
+       )
     {
-        nfa_sys_stop_timer (&nfa_hci_cb.timer);
 #if (NXP_EXTNS == TRUE)
-        is_first_chain_pkt = TRUE;
-        if(nfa_hci_cb.inst == NFA_HCI_EVT_WTX)
+        if(pipe == NFA_HCI_APDU_PIPE)
         {
-            if(nfa_hci_cb.w4_rsp_evt == TRUE)
+            nfa_sys_stop_timer (&nfa_hci_cb.timer);
+            is_first_chain_pkt = TRUE;
+            if(nfa_hci_cb.inst == NFA_HCI_EVT_WTX)
             {
-                const INT32 rsp_timeout = NFA_HCI_WTX_RESP_TIMEOUT; //3-sec
-                nfa_sys_start_timer (&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT, rsp_timeout);
+                if(nfa_hci_cb.w4_rsp_evt == TRUE)
+                {
+                    const INT32 rsp_timeout = NFA_HCI_WTX_RESP_TIMEOUT; //3-sec
+                    nfa_sys_start_timer (&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT, rsp_timeout);
+                }
+            }
+            else
+            {
+                nfa_ee_ce_p61_completed = 0;
+                nfa_hci_cb.hci_state  = NFA_HCI_STATE_IDLE;
             }
         }
-        else
+#else
+        nfa_sys_stop_timer (&nfa_hci_cb.timer);
+        nfa_hci_cb.hci_state  = NFA_HCI_STATE_IDLE;
 #endif
-        {
-#if (NXP_EXTNS == TRUE)
-            nfa_ee_ce_p61_completed = 0;
-#endif
-             nfa_hci_cb.hci_state  = NFA_HCI_STATE_IDLE;
-        }
     }
 
     switch (pipe)
@@ -1168,21 +1191,18 @@
         break;
     }
 
-    if (
+    if ( (nfa_hci_cb.type == NFA_HCI_RESPONSE_TYPE) || (nfa_hci_cb.w4_rsp_evt && (nfa_hci_cb.type == NFA_HCI_EVENT_TYPE)
 #if (NXP_EXTNS == TRUE)
-            (pipe == NFA_HCI_APDU_PIPE) && (
+         && (nfa_hci_cb.inst != NFA_HCI_EVT_WTX)
 #endif
-                    (nfa_hci_cb.type == NFA_HCI_RESPONSE_TYPE) || (nfa_hci_cb.w4_rsp_evt && (nfa_hci_cb.type == NFA_HCI_EVENT_TYPE)
-#if (NXP_EXTNS == TRUE)
-                            && (nfa_hci_cb.inst != NFA_HCI_EVT_WTX)
-#endif
-                    )
-#if (NXP_EXTNS == TRUE)
-            )
-#endif
-    )
+       ) )
     {
-        nfa_hci_cb.w4_rsp_evt = FALSE;
+#if (NXP_EXTNS == TRUE)
+        if(pipe == NFA_HCI_APDU_PIPE)
+#endif
+        {
+            nfa_hci_cb.w4_rsp_evt = FALSE;
+        }
     }
 
     /* Send a message to ouselves to check for anything to do */
@@ -1301,7 +1321,11 @@
 
     case NFA_HCI_STATE_WAIT_RSP:
         nfa_hci_cb.hci_state = NFA_HCI_STATE_IDLE;
-
+#if(NXP_EXTNS == TRUE)
+        nfa_hci_cb.IsChainedPacket = FALSE;
+        nfa_hci_cb.bIsHciResponseTimedout = TRUE;
+        nfa_hci_cb.bIsRspPending = FALSE;
+#endif
         if (nfa_hci_cb.w4_rsp_evt)
         {
             nfa_hci_cb.w4_rsp_evt       = FALSE;
@@ -1312,7 +1336,9 @@
             evt_data.rcvd_evt.p_evt_buf = NULL;
             nfa_hci_cb.rsp_buf_size     = 0;
             nfa_hci_cb.p_rsp_buf        = NULL;
-
+#if (NXP_EXTNS == TRUE)
+            evt_data.evt_sent.evt_type  = nfa_hci_cb.evt_sent.evt_type;
+#endif
             break;
         }
 
diff --git a/src/nfa/hci/nfa_hci_utils.c b/src/nfa/hci/nfa_hci_utils.c
index d69460e..3e6e7f8 100755
--- a/src/nfa/hci/nfa_hci_utils.c
+++ b/src/nfa/hci/nfa_hci_utils.c
@@ -339,7 +339,9 @@
     UINT16          data_len;
     tNFA_STATUS     status = NFA_STATUS_OK;
     UINT16          max_seg_hcp_pkt_size = nfa_hci_cb.buff_size;
-
+#if (NXP_EXTNS == TRUE)
+    nfa_hci_cb.IsChainedPacket = FALSE;
+#endif
 #if (BT_TRACE_VERBOSE == TRUE)
     char    buff[100];
 
@@ -368,6 +370,9 @@
             if (msg_len > data_len)
             {
                 *p_data++ = (NFA_HCI_MESSAGE_FRAGMENTATION << 7) | (pipe_id & 0x7F);
+#if (NXP_EXTNS == TRUE)
+                nfa_hci_cb.IsChainedPacket = TRUE;
+#endif
             }
             else
             {
@@ -421,7 +426,12 @@
             nfa_hci_cb.hci_state = NFA_HCI_STATE_WAIT_RSP;
         nfa_sys_start_timer (&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT, p_nfa_hci_cfg->hcp_response_timeout);
     }
-
+#if (NXP_EXTNS == TRUE)
+    else if (type == NFA_HCI_EVENT_TYPE)
+    {
+        nfa_hci_cb.evt_sent.evt_type = instruction;
+    }
+#endif
     return status;
 }
 
@@ -932,7 +942,9 @@
         {
             evt_data.deleted.status = NFA_STATUS_OK;
             evt_data.deleted.pipe   = pp->pipe_id;
-
+#if (NXP_EXTNS == TRUE)
+            evt_data.deleted.host = host;
+#endif
             nfa_hciu_send_to_app (NFA_HCI_DELETE_PIPE_EVT, &evt_data, pg->gate_owner);
         }
         nfa_hciu_release_pipe (pp->pipe_id);
diff --git a/src/nfa/include/nfa_api.h b/src/nfa/include/nfa_api.h
index fe32186..422f505 100644
--- a/src/nfa/include/nfa_api.h
+++ b/src/nfa/include/nfa_api.h
@@ -57,7 +57,7 @@
 **  Constants and data types
 *****************************************************************************/
 
-/* Max length of Application ID in 7816-4 */
+/* Max length of Appliction ID in 7816-4 */
 #define NFA_MAX_AID_LEN     NFC_MAX_AID_LEN
 #define NFA_MIN_AID_LEN     5 /* per NCI specification */
 
@@ -98,6 +98,9 @@
 #define NFA_STATUS_BAD_LENGTH           NFC_STATUS_BAD_LENGTH     /* data len exceeds MIU                             */
 #define NFA_STATUS_BAD_HANDLE           NFC_STATUS_BAD_HANDLE     /* invalid handle                                   */
 #define NFA_STATUS_CONGESTED            NFC_STATUS_CONGESTED      /* congested                                        */
+#if (NXP_EXTNS == TRUE)
+#define NFA_STATUS_WIRED_SESSION_ABORTED  NFC_STATUS_WIRED_SESSION_ABORTED  /* WIRED_SESSION_ABORTED error */
+#endif
 typedef UINT8 tNFA_STATUS;
 
 /* Handle for NFA registrations and connections */
@@ -335,8 +338,10 @@
 #define NFA_CE_ESE_LISTEN_CONFIGURED_EVT        40  /* ESE Listen configured                        */
 #define NFA_ACTIVATED_UPDATE_EVT                41  /* Activated intf for updating the   tech variables */
 #define NFA_RECOVERY_EVT                        42  /*Recovery*/
-#endif
+#if(NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION == TRUE)
 #define NFA_PASSIVE_LISTEN_DISABLED_EVT         44  /* Passive Listening disabled event                     */
+#endif
+#endif
 /* NFC deactivation type */
 #define NFA_DEACTIVATE_TYPE_IDLE        NFC_DEACTIVATE_TYPE_IDLE
 #define NFA_DEACTIVATE_TYPE_SLEEP       NFC_DEACTIVATE_TYPE_SLEEP
@@ -988,6 +993,7 @@
 *******************************************************************************/
 NFC_API extern tNFA_STATUS NFA_DisableListening (void);
 
+#if((NXP_EXTNS == TRUE) && (NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION == TRUE))
 /*******************************************************************************
 **
 ** Function         NFA_DisablePassiveListening
@@ -1004,6 +1010,7 @@
 **
 *******************************************************************************/
 NFC_API extern tNFA_STATUS NFA_DisablePassiveListening (void);
+#endif
 
 /*******************************************************************************
 **
@@ -1417,6 +1424,18 @@
 **
 *******************************************************************************/
 NFC_API extern tNFA_MW_VERSION NFA_GetMwVersion ();
+
+/*******************************************************************************
+**
+** Function         NFA_checkNfcStateBusy()
+**
+** Description      This function returns whether NFC process is busy or not.
+**
+** Returns          if Nfc state busy return true otherwise false.
+**
++*******************************************************************************/
+NFC_API extern BOOLEAN NFA_checkNfcStateBusy();
+
 #if(NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH == TRUE)
 NFC_API extern void NFA_EE_HCI_Control(BOOLEAN mode);
 NFC_API extern tNFA_STATUS NFA_ResetNfcc();
diff --git a/src/nfa/include/nfa_ee_api.h b/src/nfa/include/nfa_ee_api.h
index 6b17bce..515141c 100644
--- a/src/nfa/include/nfa_ee_api.h
+++ b/src/nfa/include/nfa_ee_api.h
@@ -128,7 +128,18 @@
 #define NFA_EE_STATUS_DEACTIVATING      (NFA_EE_STATUS_PENDING+NFC_NFCEE_STATUS_INACTIVE)
 typedef UINT8 tNFA_EE_STATUS;
 
-
+/* list of events for controlling DWP transceive state */
+typedef enum
+{
+    NFCC_RF_FIELD_EVT,
+    NFCC_ACTIVATED_NTF,
+    NFCC_DEACTIVATED_NTF,
+    NFCC_ACTION_NTF,
+    NFCC_CE_DATA_EVT,
+#if(NXP_EXTNS == TRUE && NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION == TRUE)
+    NFCC_RF_TIMEOUT_EVT
+#endif
+}tNFCC_EVTS_NTF;
 
 /* additional NFCEE Info */
 typedef struct
diff --git a/src/nfa/include/nfa_hci_api.h b/src/nfa/include/nfa_hci_api.h
index 9e7fe45..3a78bd3 100755
--- a/src/nfa/include/nfa_hci_api.h
+++ b/src/nfa/include/nfa_hci_api.h
@@ -185,6 +185,9 @@
 {
     tNFA_STATUS     status;                             /* Status of delete pipe operation */
     UINT8           pipe;                               /* The dynamic pipe for delete operation */
+#if (NXP_EXTNS == TRUE)
+    UINT8           host;                               /* The host Id for delete pipe operation */
+#endif
 } tNFA_HCI_DELETE_PIPE;
 
 /* Data for NFA_HCI_HOST_LIST_EVT */
@@ -253,6 +256,9 @@
 typedef struct
 {
     tNFA_STATUS     status;                             /* Status of Event send operation */
+#if (NXP_EXTNS == TRUE)
+    UINT8           evt_type;
+#endif
 } tNFA_HCI_EVENT_SENT;
 
 /* Data for NFA_HCI_ADD_STATIC_PIPE_EVT */
@@ -675,7 +681,6 @@
 NFC_API extern tNFA_STATUS NFA_HciConfigureNfceeETSI12 (UINT8 hostId);
 #endif
 #if(NXP_EXTNS == TRUE)
-#if (JCOP_WA_ENABLE == TRUE)
 /*******************************************************************************
 **
 ** Function         NFA_HciW4eSETransaction_Complete
@@ -688,7 +693,6 @@
 *******************************************************************************/
 NFC_API extern void NFA_HciW4eSETransaction_Complete(tNFA_HCI_TRANSCV_STATE type);
 #endif
-#endif
 
 #ifdef __cplusplus
 }
diff --git a/src/nfa/int/nfa_dm_int.h b/src/nfa/int/nfa_dm_int.h
index f65077f..4917965 100755
--- a/src/nfa/int/nfa_dm_int.h
+++ b/src/nfa/int/nfa_dm_int.h
@@ -66,7 +66,9 @@
     NFA_DM_API_DISABLE_POLLING_EVT,
     NFA_DM_API_ENABLE_LISTENING_EVT,
     NFA_DM_API_DISABLE_LISTENING_EVT,
+#if(NXP_EXTNS == TRUE && NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION == TRUE)
     NFA_DM_API_DISABLE_PASSIVE_LISTENING_EVT,
+#endif
     NFA_DM_API_PAUSE_P2P_EVT,
     NFA_DM_API_RESUME_P2P_EVT,
     NFA_DM_API_RAW_FRAME_EVT,
@@ -335,9 +337,10 @@
 #define NFA_DM_DISC_MASK_LFA_NFC_DEP            0x08000000
 #define NFA_DM_DISC_MASK_L_LEGACY               0x10000000
 #define NFA_DM_DISC_MASK_LISTEN                 0xFFFF0000
-
 #define NFA_DM_DISC_MASK_NFC_DEP                0x0C481848
+#if(NXP_EXTNS == TRUE && NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION == TRUE)
 #define NFA_DM_DISC_MASK_ACTIVE_LISTEN          0xFF00FFFF
+#endif
 
 typedef UINT32  tNFA_DM_DISC_TECH_PROTO_MASK;
 
@@ -447,7 +450,9 @@
 #define NFA_DM_FLAGS_LISTEN_DISABLED            0x00001000  /* NFA_DisableListening() is called and engaged                         */
 #define NFA_DM_FLAGS_P2P_PAUSED                 0x00002000  /* NFA_PauseP2p() is called and engaged                         */
 #define NFA_DM_FLAGS_POWER_OFF_SLEEP            0x00008000  /* Power Off Sleep                                                      */
+#if(NXP_EXTNS == TRUE && NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION == TRUE)
 #define NFA_DM_FLAGS_PASSIVE_LISTEN_DISABLED    0x00010000  /* NFA_DisablePassiveListening() is called and engaged                  */
+#endif
 /* stored parameters */
 typedef struct
 {
@@ -620,7 +625,9 @@
 BOOLEAN nfa_dm_act_disable_polling (tNFA_DM_MSG *p_data);
 BOOLEAN nfa_dm_act_enable_listening (tNFA_DM_MSG *p_data);
 BOOLEAN nfa_dm_act_disable_listening (tNFA_DM_MSG *p_data);
+#if(NXP_EXTNS == TRUE && NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION == TRUE)
 BOOLEAN nfa_dm_act_disable_passive_listening (tNFA_DM_MSG *p_data);
+#endif
 BOOLEAN nfa_dm_act_pause_p2p (tNFA_DM_MSG *p_data);
 BOOLEAN nfa_dm_act_resume_p2p (tNFA_DM_MSG *p_data);
 BOOLEAN nfa_dm_act_send_raw_frame (tNFA_DM_MSG *p_data);
diff --git a/src/nfa/int/nfa_hci_int.h b/src/nfa/int/nfa_hci_int.h
index 0dd1155..f472894 100755
--- a/src/nfa/int/nfa_hci_int.h
+++ b/src/nfa/int/nfa_hci_int.h
@@ -91,6 +91,7 @@
 #define NFA_HCI_MAX_RSP_WAIT_TIME           0x0C
 #define NFA_HCI_CHAIN_PKT_RSP_TIMEOUT       30000    /* After the reception of WTX, maximum response timeout value is 30 sec */
 #define NFA_HCI_WTX_RESP_TIMEOUT            3000     /* Wait time to give response timeout to application if WTX not received*/
+#define NFA_HCI_EXTENDED_PKT_RSP_TIMEOUT    30000   /* extended time out for CE deactivation*/
 #endif
 
 typedef UINT8 tNFA_HCI_STATE;
@@ -481,6 +482,12 @@
     UINT8                           host_id[NFA_HCI_MAX_NO_HOST_ETSI12];    /* Host id ETSI 12 compliant */
     UINT8                           host_controller_version;                 /* no of host controller version */
     UINT8                           current_nfcee;                      /* current Nfcee under execution  */
+    BOOLEAN                         IsHciTimerExtended;
+    UINT32                          hciResponseTimeout;
+    BOOLEAN                         IsChainedPacket;
+    BOOLEAN                         bIsHciResponseTimedout;
+    BOOLEAN                         bIsRspPending;
+    tNFA_HCI_EVENT_SENT             evt_sent;
 #endif
     UINT8                           type;                               /* Instruction type of incoming message */
     UINT8                           inst;                               /* Instruction of incoming message */
diff --git a/src/nfc/include/nfc_api.h b/src/nfc/include/nfc_api.h
index b7abd71..b028a40 100755
--- a/src/nfc/include/nfc_api.h
+++ b/src/nfc/include/nfc_api.h
@@ -80,18 +80,20 @@
 #define NFC_STATUS_EE_TIMEOUT           NCI_STATUS_EE_TIMEOUT           /* EE Timeout           */
 
 #if (NXP_EXTNS == TRUE)
+#define NFC_STATUS_WIRED_SESSION_ABORTED NCI_STATUS_WIRED_SESSION_ABORTED    /* WIRED_SESSION_ABORT error */
+#define NFC_STATUS_DWP_APDU_DROPPPED     NCI_STATUS_DWP_APDU_DROPPPED    /* FW dropped the APDU because UICC switch */
 //DTA API for MW Version need to change according to release
 #define NXP_EN_PN547C2                  0
 #define NXP_EN_PN65T                    0
-#define NXP_EN_PN548C2                  0
-#define NXP_EN_PN66T                    0
-#define NXP_EN_PN551                    0
-#define NXP_EN_PN67T                    0
+#define NXP_EN_PN548C2                  1
+#define NXP_EN_PN66T                    1
+#define NXP_EN_PN551                    1
+#define NXP_EN_PN67T                    1
 #define NXP_EN_PN553                    1
 #define NXP_EN_PN80T                    1
 #define NXP_ANDROID_VER                 (7U) /* NXP android version */
 #define NFC_NXP_MW_VERSION_MAJ          (0U) /* MW Major Version */
-#define NFC_NXP_MW_VERSION_MIN          (4U) /* MW Minor Version */
+#define NFC_NXP_MW_VERSION_MIN          (0x0D) /* MW Minor Version */
 #endif
 /* 0xE0 ~0xFF are proprietary status codes */
 #define NFC_STATUS_CMD_STARTED          0xE3/* Command started successfully                     */
@@ -118,6 +120,15 @@
 #define NFC_NFCC_INIT_MAX_RETRY         2
 #define NFC_NORMAL_BOOT_MODE            0
 #define NFC_FAST_BOOT_MODE              1
+#define NXP_FEATURE_ENABLED           ((unsigned char)0x01)    /* flag to indicate NXP feature is enabled*/
+#define NXP_FEATURE_DISABLED          ((unsigned char)0x00)    /* flag to indicate NXP feature is enabled*/
+ /**********************************************
+  * NFC Config Parameter IDs defined by NXP NFC
+  **********************************************/
+#define NXP_NFC_SET_CONFIG_PARAM_EXT  ((unsigned char)0xA0)    /* NXP NFC set config extension ID*/
+#define NXP_NFC_PARAM_ID_SWP1         ((unsigned char)0xEC)    /*SWP1 parameter ID  UICC*/
+#define NXP_NFC_PARAM_ID_SWP2         ((unsigned char)0xED)    /*SWP1 parameter ID  ESE */
+#define NXP_NFC_PARAM_ID_SWP1A        ((unsigned char)0xD4)    /*SWP1 parameter ID  UICC2 */
 #endif
 
 
@@ -208,7 +219,10 @@
 #define NFC_FIRST_REVT      0x5000
 #define NFC_FIRST_CEVT      0x6000
 #define NFC_FIRST_TEVT      0x8000
-
+#if (NXP_EXTNS == TRUE)
+void nfc_ncif_rffield_ntf_timeout();
+void nfc_ncif_allow_dwp_transmission();
+#endif
 /* the events reported on tNFC_RESPONSE_CBACK */
 enum
 {
@@ -245,8 +259,12 @@
     NFC_ERROR_CEVT,                         /* 4  generic or interface error    */
     NFC_DATA_START_CEVT,                    /* 5  received the first fragment on RF link */
 #if (NXP_EXTNS == TRUE)
-    NFC_RF_WTX_CEVT                         /* 6  received rf wtx */
+    NFC_RF_WTX_CEVT,                        /* 6  received rf wtx */
 #endif
+#if(NFC_NXP_CHIP_TYPE != PN547C2)
+    NFC_RF_TRANSMISSION_ERROR,              /* 7 CE Error events */
+#endif
+    NFC_HCI_RESTART_TIMER
 };
 typedef UINT16 tNFC_CONN_EVT;
 
@@ -293,8 +311,17 @@
     UINT8           major_version;       /* Major Version */
     UINT8           minor_version;       /* Minor Version  */
 } tNFC_FW_VERSION;
-#endif
 
+#if (NXP_ESE_JCOP_DWNLD_PROTECTION == TRUE)
+typedef enum jcop_dwnld_state{
+    JCP_DWNLD_IDLE,                         /* jcop dwnld is not ongoing*/
+    JCP_DWNLD_INIT,                         /* jcop dwonload init state*/
+    JCP_DWNLD_START,                        /* download started */
+    JCP_SPI_DWNLD_COMPLETE,                 /* jcop download complete in spi interface*/
+    JCP_DWP_DWNLD_COMPLETE,                 /* jcop download complete */
+} jcop_dwnld_state_t;
+#endif
+#endif
 
 /* the data type associated with NFC_NFCEE_DISCOVER_REVT */
 typedef struct
@@ -910,7 +937,9 @@
 #define NFC_MAX_CONN_ID                15
 #define NFC_ILLEGAL_CONN_ID            0xFF
 #define NFC_RF_CONN_ID                 0    /* the static connection ID for RF traffic */
-
+#if(NXP_EXTNS == TRUE)
+#define NFC_NFCEE_CONN_ID              0x03    /* the connection ID for NFCEE */
+#endif
 
 
 /*************************************
@@ -1355,6 +1384,20 @@
 *******************************************************************************/
 NFC_API extern tNFC_STATUS NFC_SendNxpNciCommand (BT_HDR        *p_data,
                                tNFC_VS_CBACK *p_cback);
+
+#if (NXP_ESE_JCOP_DWNLD_PROTECTION)
+/*******************************************************************************
+**
+** Function         NFC_SetP61Status
+**
+** Description      This function set the JCOP download
+**                  state to pn544 driver.
+**
+** Returns          0 if api call success, else -1
+**
+*******************************************************************************/
+NFC_API extern INT32 NFC_SetP61Status (void *pdata, jcop_dwnld_state_t isJcopState);
+#endif
 #endif
 
 /*******************************************************************************
@@ -1510,14 +1553,14 @@
 INT32 NFC_DisableWired (void *pdata);
 /*******************************************************************************
 **
-** Function         NFC_P73ISOReset
+** Function         NFC_eSEChipReset
 **
-** Description      This function request to reset P73
+** Description      This function request to reset ESE using ISO_RST feature.
 **
 ** Returns          0 if api call success, else -1
 **
 *******************************************************************************/
-INT32 NFC_P73ISOReset (void *pdata);
+INT32 NFC_eSEChipReset (void *pdata);
 /*******************************************************************************
 **
 ** Function         NFC_EnableWired
@@ -1558,7 +1601,7 @@
 
 #endif
 
-#if ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
+#if(NXP_ESE_SVDD_SYNC == TRUE)
 /*******************************************************************************
 **
 ** Function         NFC_RelSvddWait
diff --git a/src/nfc/int/nfc_int.h b/src/nfc/int/nfc_int.h
index 5a26390..337af9f 100644
--- a/src/nfc/int/nfc_int.h
+++ b/src/nfc/int/nfc_int.h
@@ -72,6 +72,7 @@
 #define NFC_TTYPE_WAIT_2_DEACTIVATE         1
 #if(NXP_EXTNS == TRUE)
 #define NFC_TTYPE_NCI_WAIT_DATA_NTF         2
+#define NFC_TTYPE_NCI_WAIT_RF_FIELD_NTF     3
 #endif
 #define NFC_TTYPE_LLCP_LINK_MANAGER         100
 #define NFC_TTYPE_LLCP_LINK_INACT           101
@@ -273,6 +274,11 @@
     i2c_data            i2c_data_t;         /* holding i2c fragmentation data */
 #if(NXP_EXTNS == TRUE)
     UINT8               boot_mode;
+    BOOLEAN             bBlockWiredMode;
+    BOOLEAN             bRetransmitDwpPacket;
+    BOOLEAN             bIsCreditNtfRcvd;
+    TIMER_LIST_ENT      rf_filed_event_timeout_timer;
+    BT_HDR              *temp_data;
 #endif
 } tNFC_CB;
 
@@ -351,6 +357,7 @@
 NFC_API extern void nfc_ncif_proc_get_config_rsp (BT_HDR *p_msg);
 NFC_API extern void nfc_ncif_proc_data (BT_HDR *p_msg);
 #if(NXP_EXTNS == TRUE)
+NFC_API extern UINT8 nfc_ncif_retransmit_data (tNFC_CONN_CB *p_cb, BT_HDR *p_data);
 NFC_API extern tNFC_STATUS nfc_ncif_store_FWVersion(UINT8 * p_buf);
 #if((NFC_NXP_CHIP_TYPE != PN547C2) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
 NFC_API extern tNFC_STATUS nfc_ncif_set_MaxRoutingTableSize(UINT8 * p_buf);
diff --git a/src/nfc/llcp/llcp_dlc.c b/src/nfc/llcp/llcp_dlc.c
index 5613202..1851ed8 100755
--- a/src/nfc/llcp/llcp_dlc.c
+++ b/src/nfc/llcp/llcp_dlc.c
@@ -55,6 +55,10 @@
 static tLLCP_STATUS llcp_dlsm_connected (tLLCP_DLCB *p_dlcb, tLLCP_DLC_EVENT event, void *p_data);
 static tLLCP_STATUS llcp_dlsm_w4_remote_dm (tLLCP_DLCB *p_dlcb, tLLCP_DLC_EVENT event, void *p_data);
 
+#if(NXP_EXTNS == TRUE)
+extern unsigned char appl_dta_mode_flag;
+#endif
+
 #if (BT_TRACE_VERBOSE == TRUE)
 static char *llcp_dlsm_get_state_name (tLLCP_DLC_STATE state);
 static char *llcp_dlsm_get_event_name (tLLCP_DLC_EVENT event);
@@ -662,7 +666,18 @@
     if (llcp_util_parse_connect (p_data, length, &params) != LLCP_STATUS_SUCCESS)
     {
         LLCP_TRACE_ERROR0 ("llcp_dlc_proc_connect_pdu (): Bad format CONNECT");
-        llcp_util_send_dm (ssap, dsap, LLCP_SAP_DM_REASON_NO_SERVICE );
+        /* fix to pass TC_CTO_TAR_BI_02_x (x=5) test case
+         * As per the LLCP test specification v1.2.00 by receiving erroneous SNL PDU
+         * i'e with improper length and service name "urn:nfc:sn:dta-co-echo-in", the IUT should not
+         * send any PDU except SYMM PDU*/
+        if((appl_dta_mode_flag == 1)){
+            if(p_data[1] == strlen(&p_data[2])){
+                LLCP_TRACE_DEBUG0 ("llcp_dlc_proc_connect_pdu () Strings are not equal");
+                llcp_util_send_dm (ssap, dsap, LLCP_SAP_DM_REASON_NO_SERVICE );
+            }
+        }else{
+            llcp_util_send_dm (ssap, dsap, LLCP_SAP_DM_REASON_NO_SERVICE );
+        }
         return;
     }
 
diff --git a/src/nfc/llcp/llcp_link.c b/src/nfc/llcp/llcp_link.c
index fb56ab2..34fed58 100755
--- a/src/nfc/llcp/llcp_link.c
+++ b/src/nfc/llcp/llcp_link.c
@@ -467,11 +467,11 @@
 
     llcp_cb.overall_tx_congested = FALSE;
     llcp_cb.overall_rx_congested = FALSE;
-
-   /*As per the LLCP test specification v1.2.00 for test case TC_LLC_TAR_BV_04
-    * the receiving LLC shall commence sending an LLC PDU to the remote
-    * LLC. So, after IUT receiving DISC PDU from LT(remote device), IUT shall send DISC PDU to LT.
-    * appl_dta_mode_flag condition is added to fulfill above requirement*/
+    /* As per the LLCP test specification v1.2.00 for test case TC_LLC_TAR_BV_04
+     * the receiving LLC shall commence sending an LLC PDU to the remote
+     * LLC. So, after IUT receiving DISC PDU from LT(remote device), IUT shall send DISC PDU to LT.
+     * appl_dta_mode_flag condition is added to fulfill above requirement
+     */
     if (  (reason == LLCP_LINK_FRAME_ERROR)
         ||(reason == LLCP_LINK_LOCAL_INITIATED)
         || ((appl_dta_mode_flag) && (reason == LLCP_LINK_REMOTE_INITIATED) && (llcp_cb.lcb.is_initiator == FALSE)))
@@ -944,7 +944,8 @@
     */
     llcp_link_check_congestion ();
 
-    if(llcp_cb.lcb.symm_state == LLCP_LINK_SYMM_LOCAL_XMIT_NEXT)
+    if(llcp_cb.lcb.symm_state == LLCP_LINK_SYMM_LOCAL_XMIT_NEXT ||
+                    (appl_dta_mode_flag && llcp_cb.lcb.link_state == LLCP_LINK_STATE_DEACTIVATING))
     {
         LLCP_TRACE_DEBUG0 ("llcp_link_check_send_data () in state of LLCP_LINK_SYMM_LOCAL_XMIT_NEXT");
 
@@ -1388,7 +1389,10 @@
         {
             /* this indicates that DISC PDU had been sent out to peer */
             /* initiator may wait for SYMM PDU */
-            llcp_link_process_link_timeout ();
+            if(appl_dta_mode_flag == 0x01)
+                llcp_util_send_disc (LLCP_SAP_LM, LLCP_SAP_LM);
+             else
+                 llcp_link_process_link_timeout ();
         }
         else
         {
diff --git a/src/nfc/llcp/llcp_sdp.c b/src/nfc/llcp/llcp_sdp.c
index 4dd9001..201fd17 100755
--- a/src/nfc/llcp/llcp_sdp.c
+++ b/src/nfc/llcp/llcp_sdp.c
@@ -462,7 +462,23 @@
                 p_value = p;
                 BE_STREAM_TO_UINT8 (tid, p_value);
                 sap = llcp_sdp_get_sap_by_name ((char*) p_value, (UINT8) (length - 1));
+#if(NXP_EXTNS == TRUE)
+                /* fix to pass TC_CTO_TAR_BI_03_x (x=5) test case
+                 * As per the LLCP test specification v1.2.00 by receiving erroneous SNL PDU
+                 * i'e with improper service name "urn:nfc:sn:dta-co-echo-in", the IUT should not
+                 * send any PDU except SYMM PDU*/
+                if((appl_dta_mode_flag == 1) && (sap == 0x00)){
+                    LLCP_TRACE_DEBUG1 ("llcp_sdp_proc_snl () In dta mode sap == 0x00 p_value = %s", p_value);
+                    if((length-1) == strlen(p_value)){
+                        LLCP_TRACE_DEBUG0 ("DEBUG> llcp_sdp_proc_snl () Strings are not equal");
+                        llcp_sdp_send_sdres (tid, sap);
+                    }
+                }else{
+                    llcp_sdp_send_sdres (tid, sap);
+                }
+#else
                 llcp_sdp_send_sdres (tid, sap);
+#endif
             }
             else
             {
diff --git a/src/nfc/nfc/nfc_main.c b/src/nfc/nfc/nfc_main.c
index 9de4555..60cb45c 100644
--- a/src/nfc/nfc/nfc_main.c
+++ b/src/nfc/nfc/nfc_main.c
@@ -677,7 +677,7 @@
 #else
     NFC_TRACE_DEBUG2 ("nfc_main_hal_cback event: 0x%x, status=%d", event, status);
 #endif
-#if(NXP_EXTNS == TRUE)
+#if((NXP_EXTNS == TRUE) && (NXP_NFCC_I2C_READ_WRITE_IMPROVEMENT == TRUE))
     tNFC_RESPONSE eventData;
 #endif
     switch (event)
@@ -707,7 +707,7 @@
     case HAL_NFC_REQUEST_CONTROL_EVT:
     case HAL_NFC_RELEASE_CONTROL_EVT:
     case HAL_NFC_ERROR_EVT:
-#if(NXP_EXTNS == TRUE)
+#if((NXP_EXTNS == TRUE) && (NXP_NFCC_I2C_READ_WRITE_IMPROVEMENT == TRUE))
     case HAL_NFC_POST_MIN_INIT_CPLT_EVT:
 
         if(status == HAL_NFC_STATUS_ERR_CMD_TIMEOUT)
@@ -814,7 +814,7 @@
     /* Open HAL transport. */
     nfc_set_state (NFC_STATE_W4_HAL_OPEN);
 #if(NXP_EXTNS == TRUE)
-    UINT8 boot_mode = nfc_cb.boot_mode;
+    UINT16 boot_mode = nfc_cb.boot_mode;
     if(nfc_cb.boot_mode == NFC_FAST_BOOT_MODE)
     {
         nfc_cb.p_hal->ioctl(HAL_NFC_IOCTL_SET_BOOT_MODE,(void*)&boot_mode);
@@ -843,7 +843,7 @@
 {
     NFC_TRACE_API1 ("NFC_Disable (): nfc_state = %d", nfc_cb.nfc_state);
 #if(NXP_EXTNS == TRUE)
-    UINT8 boot_mode = NFC_NORMAL_BOOT_MODE;
+    UINT16 boot_mode = NFC_NORMAL_BOOT_MODE;
 #endif
     if ((nfc_cb.nfc_state == NFC_STATE_NONE) || (nfc_cb.nfc_state == NFC_STATE_NFCC_POWER_OFF_SLEEP))
     {
@@ -908,6 +908,10 @@
     nfc_cb.reassembly       = TRUE;
 #if(NXP_EXTNS == TRUE)
     nfc_cb.boot_mode        = p_hal_entry_cntxt->boot_mode;
+    nfc_cb.bBlockWiredMode  = FALSE;
+    nfc_cb.bRetransmitDwpPacket = FALSE;
+    nfc_cb.bIsCreditNtfRcvd = FALSE;
+    nfc_cb.temp_data = NULL;
     if(p_hal_entry_cntxt->boot_mode == NFC_NORMAL_BOOT_MODE)
     {
 #endif
@@ -1628,7 +1632,8 @@
 {
     return (nfc_cb.p_hal->ioctl(HAL_NFC_IOCTL_P61_ENABLE_MODE, pdata));
 }
-#if (NXP_EXTNS == TRUE) && (NXP_WIRED_MODE_STANDBY == TRUE)
+#if (NXP_EXTNS == TRUE)
+#if (NXP_WIRED_MODE_STANDBY == TRUE)
 /*******************************************************************************
 +**
 ** Function         NFC_Nfcee_PwrLinkCtrl
@@ -1649,20 +1654,42 @@
      return nci_snd_pwr_nd_lnk_ctrl_cmd(nfcee_id, cfg_value);
 }
 #endif
-
+#if (NXP_ESE_JCOP_DWNLD_PROTECTION == TRUE)
 /*******************************************************************************
 **
-** Function         NFC_P73ISOReset
+** Function         NFC_SetP61Status
 **
-** Description      This function request to pn54x driver to
-**                  hard reset of P73 using ISO RST configuration.
+** Description      This function set the JCOP download
+**                  state to pn544 driver.
 **
 ** Returns          0 if api call success, else -1
 **
 *******************************************************************************/
-INT32 NFC_P73ISOReset (void *pdata)
+INT32 NFC_SetP61Status (void *pdata, jcop_dwnld_state_t isJcopState)
 {
-    return (nfc_cb.p_hal->ioctl(HAL_NFC_IOCTL_P73_ISO_RST, pdata));
+    if(isJcopState == JCP_DWNLD_START)
+        isJcopState = (nfc_cb.p_hal->ioctl(HAL_NFC_IOCTL_SET_JCP_DWNLD_ENABLE, pdata));
+    else if(isJcopState == JCP_DWP_DWNLD_COMPLETE)
+        isJcopState = (nfc_cb.p_hal->ioctl(HAL_NFC_IOCTL_SET_JCP_DWNLD_DISABLE, pdata));
+
+    return isJcopState;
+}
+#endif
+#endif
+
+/*******************************************************************************
+**
+** Function         NFC_eSEChipReset
+**
+** Description      This function request to pn54x driver to
+**                  chip reset the ESE using ISO_RST pin configuration.
+**
+** Returns          0 if api call success, else -1
+**
+*******************************************************************************/
+INT32 NFC_eSEChipReset (void *pdata)
+{
+    return (nfc_cb.p_hal->ioctl(HAL_NFC_IOCTL_ESE_CHIP_RST, pdata));
 }
 
 #if((NFC_NXP_ESE_VER == JCOP_VER_3_1) || (NFC_NXP_ESE_VER == JCOP_VER_3_2))
@@ -1697,7 +1724,7 @@
 }
 #endif
 
-#if ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
+#if(NXP_ESE_SVDD_SYNC == TRUE)
 /*******************************************************************************
 **
 ** Function         NFC_RelSvddWait
diff --git a/src/nfc/nfc/nfc_ncif.c b/src/nfc/nfc/nfc_ncif.c
index a59d79b..0345a9c 100644
--- a/src/nfc/nfc/nfc_ncif.c
+++ b/src/nfc/nfc/nfc_ncif.c
@@ -74,6 +74,8 @@
 
 #if(NXP_EXTNS == TRUE)
 #define NFC_NCI_WAIT_DATA_NTF_TOUT      2
+#define NFC_NCI_RFFIELD_EVT_TIMEOUT     2
+UINT8 temp_buff[660];
 #endif
 
 #define NFC_PB_ATTRIB_REQ_FIXED_BYTES   1
@@ -93,7 +95,7 @@
 extern void nfa_hci_rsp_timeout (tNFA_HCI_EVENT_DATA *p_evt_data);
 #endif
 
-#if(NFC_NXP_ESE == TRUE && ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551)))
+#if((NFC_NXP_ESE == TRUE) && (NXP_ESE_ETSI_READER_ENABLE == TRUE))
 void disc_deact_ntf_timeout_handler(tNFC_RESPONSE_EVT event);
 extern BOOLEAN etsi_reader_in_progress;
 #endif
@@ -186,7 +188,7 @@
         */
         UINT8 *buffer = NULL;
         UINT16 bufflen = 0x100;
-        UINT8 fw_dwnld_status = NFC_STATUS_FAILED;
+        UINT16 fw_dwnld_status = NFC_STATUS_FAILED;
         tNFC_STATUS status = NFC_STATUS_FAILED;
         tNFC_FWUpdate_Info_t fw_update_inf;
         tNFC_CONN_CB * p_cb = NULL;
@@ -342,8 +344,36 @@
     nfc_cb.flags  &= ~NFC_FL_DEACTIVATING;
     nci_snd_deactivate_cmd ((UINT8) ((TIMER_PARAM_TYPE) nfc_cb.deactivate_timer.param));
 }
+#if (NXP_EXTNS == TRUE)
+/*******************************************************************************
+**
+** Function         nfc_ncif_retransmit_data
+**
+** Description      Retransmission of lost packet
+**
+** Returns          void
+**
+*******************************************************************************/
+UINT8 nfc_ncif_retransmit_data (tNFC_CONN_CB *p_cb, BT_HDR *p_data)
+{
+    NFC_TRACE_ERROR0 ("nfc_ncif_retransmit_data");
+    if(p_data == NULL)
+    {
+        NFC_TRACE_ERROR0 ("nfc_ncif_retransmit_data: p_data is NULL");
+        return NCI_STATUS_FAILED;
+    }
+    if (p_cb->num_buff != NFC_CONN_NO_FC)
+        p_cb->num_buff--;
 
-
+    HAL_RE_WRITE(p_data);
+    if(p_cb->conn_id != NFC_RF_CONN_ID)
+    {
+        //Start waiting for credit ntf
+        nfc_start_timer (&nfc_cb.nci_wait_data_ntf_timer, (UINT16)(NFC_TTYPE_NCI_WAIT_DATA_NTF), NFC_NCI_WAIT_DATA_NTF_TOUT);
+    }
+    return NCI_STATUS_OK;
+}
+#endif
 /*******************************************************************************
 **
 ** Function         nfc_ncif_send_data
@@ -357,16 +387,16 @@
 *******************************************************************************/
 UINT8 nfc_ncif_send_data (tNFC_CONN_CB *p_cb, BT_HDR *p_data)
 {
-    UINT8 *pp;
-    UINT8 *ps;
+    UINT8   *pp;
+    UINT8   *ps;
     UINT8   ulen = NCI_MAX_PAYLOAD_SIZE;
-    BT_HDR *p;
+    BT_HDR  *p;
     UINT8   pbf = 1;
     UINT8   buffer_size = p_cb->buff_size;
     UINT8   hdr0 = p_cb->conn_id;
     BOOLEAN fragmented = FALSE;
-
 #if(NXP_EXTNS == TRUE)
+    UINT8* pTemp;
     if(core_reset_init_num_buff == TRUE)
     {
         NFC_TRACE_ERROR0("Reinitializing the num_buff");
@@ -415,6 +445,14 @@
         GKI_enqueue (&p_cb->tx_q, p_data);
     }
 
+#if((NXP_EXTNS == TRUE) && (NXP_ESE_DUAL_MODE_PRIO_SCHEME == NXP_ESE_WIRED_MODE_RESUME))
+    if((nfc_cb.bBlockWiredMode) && (p_cb->conn_id == NFC_NFCEE_CONN_ID))
+    {
+        /* CE is activated on UICC hence return simply without sedning data */
+        return (NCI_STATUS_OK);
+    }
+#endif
+
     /* try to send the first data packet in the tx queue  */
     p_data = (BT_HDR *)GKI_getfirst (&p_cb->tx_q);
 
@@ -469,6 +507,18 @@
         if (p_cb->num_buff != NFC_CONN_NO_FC)
             p_cb->num_buff--;
 
+#if((NXP_EXTNS == TRUE) && (NXP_ESE_DUAL_MODE_PRIO_SCHEME == NXP_ESE_WIRED_MODE_RESUME))
+        if(p_cb->conn_id == NFC_NFCEE_CONN_ID)
+        {
+            nfc_cb.temp_data = (BT_HDR*)temp_buff;
+            nfc_cb.temp_data->offset = p->offset;
+            pTemp = (UINT8*)(nfc_cb.temp_data+1) + nfc_cb.temp_data->offset;
+            nfc_cb.temp_data->len = p->len;
+            memcpy(pTemp, (UINT8*)(p+1)+(p->offset), p->len);
+            nfa_hci_cb.bIsRspPending = TRUE;
+        }
+#endif
+
         /* send to HAL */
         HAL_WRITE(p);
 #if(NXP_EXTNS == TRUE)
@@ -479,6 +529,8 @@
         }
         if(p_cb->conn_id != NFC_RF_CONN_ID)
         {
+            /* Start waiting for credit ntf */
+            nfc_cb.bIsCreditNtfRcvd = FALSE;
             nfc_start_timer (&nfc_cb.nci_wait_data_ntf_timer, (UINT16)(NFC_TTYPE_NCI_WAIT_DATA_NTF), NFC_NCI_WAIT_DATA_NTF_TOUT);
         }
         if (!fragmented)
@@ -607,7 +659,8 @@
                 nfc_cb.nxpCbflag = TRUE;
             }
 #endif
-
+            /* Indicate command is pending */
+            nfc_cb.nci_cmd_window--;
             /* send to HAL */
             HAL_WRITE(p_buf);
             if (get_i2c_fragmentation_enabled () == I2C_FRAGMENATATION_ENABLED)
@@ -615,8 +668,6 @@
                 nfc_cb.i2c_data_t.nci_cmd_channel_busy= 1;
                 NFC_TRACE_DEBUG0 ("setting channel busy flag");
             }
-            /* Indicate command is pending */
-            nfc_cb.nci_cmd_window--;
 
             /* start NFC command-timeout timer */
             nfc_start_timer (&nfc_cb.nci_wait_rsp_timer, (UINT16)(NFC_TTYPE_NCI_WAIT_RSP), nfc_cb.nci_wait_rsp_tout);
@@ -760,7 +811,7 @@
         /* make sure this is the RSP we are waiting for before updating the command window */
         if ((old_gid != gid) || (old_oid != oid))
         {
-#if(NFC_NXP_ESE == TRUE && ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551)))
+#if(NFC_NXP_ESE == TRUE && (NXP_ESE_ETSI_READER_ENABLE == TRUE))
             if(((gid == NCI_GID_RF_MANAGE)&&(oid == NCI_MSG_RF_DISCOVER)) && (etsi_reader_in_progress == TRUE))
             {
                 NFC_TRACE_DEBUG0 ("Changing disc_state and disc_flags");
@@ -783,7 +834,7 @@
                 NFC_TRACE_ERROR2 ("nfc_ncif_process_event unexpected rsp: gid:0x%x, oid:0x%x", gid, oid);
                 return TRUE;
             }
-#if(NFC_NXP_ESE == TRUE && ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551)))
+#if((NFC_NXP_ESE == TRUE) && (NXP_ESE_ETSI_READER_ENABLE == TRUE))
             }
 #endif
         }
@@ -929,6 +980,30 @@
 void nfc_ncif_event_status (tNFC_RESPONSE_EVT event, UINT8 status)
 {
     tNFC_RESPONSE   evt_data;
+
+#if((NXP_EXTNS == TRUE) && (NXP_ESE_DUAL_MODE_PRIO_SCHEME == NXP_ESE_WIRED_MODE_RESUME))
+    if((status == NFC_STATUS_WIRED_SESSION_ABORTED) || (status == NFC_STATUS_DWP_APDU_DROPPPED))
+    {
+        tNFC_CONN_CB *p_cb;
+        nfc_cb.bBlockWiredMode = TRUE;
+        p_cb = nfc_find_conn_cb_by_conn_id(nfa_hci_cb.conn_id);
+        if(!nfa_hci_cb.IsHciTimerExtended)
+        {
+            nfa_sys_stop_timer(&nfa_hci_cb.timer);
+            nfa_hci_cb.IsHciTimerExtended = TRUE;
+            if(p_cb && p_cb->p_cback)
+                (*p_cb->p_cback)(nfa_hci_cb.conn_id, NFC_HCI_RESTART_TIMER, (tNFC_CONN *)&evt_data);
+        }
+        if((status == NFC_STATUS_DWP_APDU_DROPPPED) && (!nfc_cb.bIsCreditNtfRcvd))
+        {
+            nfc_cb.bRetransmitDwpPacket = TRUE;
+            nfc_stop_timer(&nfc_cb.nci_wait_data_ntf_timer);
+            if(!p_cb->num_buff)
+                p_cb->num_buff++;
+        }
+    }
+#endif
+
     if (nfc_cb.p_resp_cback)
     {
         evt_data.status = (tNFC_STATUS) status;
@@ -968,6 +1043,27 @@
 void nfc_ncif_proc_rf_field_ntf (UINT8 rf_status)
 {
     tNFC_RESPONSE   evt_data;
+
+    NFC_TRACE_DEBUG0( "nfc_ncif_proc_rf_field_ntf");
+
+#if((NXP_EXTNS == TRUE) && (NXP_ESE_DUAL_MODE_PRIO_SCHEME == NXP_ESE_WIRED_MODE_RESUME))
+    if(rf_status == 0x01)
+    {
+        NFC_TRACE_DEBUG0("nfc_ncif_proc_rf_field_ntf ON_EVT");
+        nfc_cb.bBlockWiredMode = TRUE;
+        nfc_start_timer(&nfc_cb.rf_filed_event_timeout_timer, (UINT16)(NFC_TTYPE_NCI_WAIT_RF_FIELD_NTF), NFC_NCI_RFFIELD_EVT_TIMEOUT);
+    }
+    else
+    {
+        nfc_stop_timer(&nfc_cb.rf_filed_event_timeout_timer);
+        if(nfc_cb.bBlockWiredMode)
+        {
+            nfc_cb.bBlockWiredMode = FALSE;
+            nfc_ncif_allow_dwp_transmission();
+        }
+    }
+#endif
+
     if (nfc_cb.p_resp_cback)
     {
         evt_data.status            = (tNFC_STATUS) NFC_STATUS_OK;
@@ -977,6 +1073,76 @@
 }
 #endif
 
+#if (NXP_EXTNS == TRUE)
+/*******************************************************************************
+**
+** Function         nfc_ncif_allow_dwp_transmission
+**
+** Description      This function is called when CE deactivation/RF event timedout/RF OFF event
+**                  eSE action notification
+**
+** Returns          void
+**
+*******************************************************************************/
+void nfc_ncif_allow_dwp_transmission()
+{
+    tNFC_RESPONSE   evt_data;
+    tNFC_CONN_CB *p_cb;
+    NFC_TRACE_DEBUG0("nfc_ncif_allow_dwp_transmission");
+    p_cb = nfc_find_conn_cb_by_conn_id(nfa_hci_cb.conn_id);
+
+    if((p_cb)&&(p_cb->conn_id == NFC_NFCEE_CONN_ID))
+    {
+        if(nfa_hci_cb.bIsHciResponseTimedout)
+        {
+            nfa_hci_cb.IsHciTimerExtended =  FALSE;
+            nfc_cb.bRetransmitDwpPacket  = FALSE;
+            nfa_hci_cb.bIsHciResponseTimedout = FALSE;
+            nfa_hci_cb.bIsRspPending = FALSE;
+        }
+        if(nfa_hci_cb.IsHciTimerExtended)
+        {
+            nfa_sys_stop_timer(&nfa_hci_cb.timer);
+            nfa_hci_cb.IsHciTimerExtended = FALSE;
+        }
+        if(nfc_cb.bRetransmitDwpPacket)
+        {
+            nfc_ncif_retransmit_data(p_cb, nfc_cb.temp_data);
+            nfc_cb.bRetransmitDwpPacket = FALSE;
+            if(p_cb->p_cback)
+                (*p_cb->p_cback)(nfa_hci_cb.conn_id, NFC_HCI_RESTART_TIMER, (tNFC_CONN *)&evt_data);
+        }
+        else if(((nfa_hci_cb.hci_state == NFA_HCI_STATE_WAIT_RSP) && (nfa_hci_cb.w4_rsp_evt)) ||
+                (nfa_hci_cb.IsChainedPacket))
+        {
+            nfc_ncif_send_data (p_cb, NULL);
+            if(p_cb->p_cback)
+                (*p_cb->p_cback)(nfa_hci_cb.conn_id, NFC_HCI_RESTART_TIMER, (tNFC_CONN *)&evt_data);
+        }
+    }
+}
+
+/*******************************************************************************
+**
+** Function         nfc_ncif_rffield_ntf_timeout
+**
+** Description      This function is called when RF field event timedout
+**                  To aviod infinite dwp block on RF_ON event
+**
+** Returns          void
+**
+*******************************************************************************/
+void nfc_ncif_rffield_ntf_timeout()
+{
+    NFC_TRACE_DEBUG0("nfc_ncif_rffield_ntf_timeout");
+    if (nfc_cb.bBlockWiredMode)
+    {
+        nfc_cb.bBlockWiredMode = FALSE;
+        nfc_ncif_allow_dwp_transmission();
+    }
+}
+#endif
+
 /*******************************************************************************
 **
 ** Function         nfc_ncif_proc_credits
@@ -1016,6 +1182,7 @@
             {
                 nfc_stop_timer (&nfc_cb.nci_wait_data_ntf_timer);
             }
+            nfc_cb.bIsCreditNtfRcvd = TRUE;
 #endif
             if(get_i2c_fragmentation_enabled() == I2C_FRAGMENATATION_ENABLED){
                  nfc_ncif_update_data_queue();
@@ -1369,6 +1536,13 @@
 #if (NFC_RW_ONLY == FALSE)
     else if(evt_data.activate.intf_param.type == NCI_INTERFACE_NFC_DEP)
     {
+#if((NXP_EXTNS == TRUE) && (NXP_ESE_DUAL_MODE_PRIO_SCHEME == NXP_ESE_WIRED_MODE_RESUME))
+        if(nfc_cb.bBlockWiredMode)
+        {
+            nfc_cb.bBlockWiredMode = FALSE;
+            nfc_ncif_allow_dwp_transmission();
+        }
+#endif
         /* Make max payload of NCI aligned to max payload of NFC-DEP for better performance */
         if (buff_size > NCI_NFC_DEP_MAX_DATA)
             buff_size = NCI_NFC_DEP_MAX_DATA;
@@ -1487,6 +1661,19 @@
         GKI_freebuf (p_data);
     }
 
+#if((NXP_EXTNS == TRUE) && (NXP_ESE_DUAL_MODE_PRIO_SCHEME == NXP_ESE_WIRED_MODE_RESUME))
+    if((is_ntf) && (nfc_cb.bBlockWiredMode))
+    {
+        nfc_cb.bBlockWiredMode = FALSE;
+        if((nfa_hci_cb.bIsRspPending) && (!nfa_hci_cb.bIsHciResponseTimedout))
+        {
+            nci_snd_nfcee_mode_set(0xC0, NFC_MODE_ACTIVATE);
+            nfa_hci_cb.bIsRspPending = FALSE;
+        }
+        nfc_ncif_allow_dwp_transmission();
+    }
+#endif
+
     if (p_cb->p_cback)
         (*p_cb->p_cback) (NFC_RF_CONN_ID, NFC_DEACTIVATE_CEVT, (tNFC_CONN *) p_deact);
 
@@ -1580,6 +1767,37 @@
             }
             break;
         }
+
+#if((NXP_EXTNS == TRUE) && (NXP_ESE_DUAL_MODE_PRIO_SCHEME == NXP_ESE_WIRED_MODE_RESUME))
+        nfc_stop_timer(&nfc_cb.rf_filed_event_timeout_timer);
+        tNFC_CONN_CB *p_cb;
+        p_cb = nfc_find_conn_cb_by_conn_id(nfa_hci_cb.conn_id);
+        if(evt_data.nfcee_id != 0xC0)
+        {
+            nfc_cb.bBlockWiredMode = TRUE;
+            if(nfa_hci_cb.IsChainedPacket)
+            {
+                nfa_hci_cb.IsHciTimerExtended = TRUE;
+                if(p_cb && p_cb->p_cback)
+                    (*p_cb->p_cback)(nfa_hci_cb.conn_id, NFC_HCI_RESTART_TIMER, (tNFC_CONN *)&evt_data);
+            }
+        }
+        else
+        {
+            if((evt_data.act_data.trigger == NCI_EE_TRIG_RF_TECHNOLOGY) ||
+                ((evt_data.act_data.trigger == NCI_EE_TRIG_RF_PROTOCOL) &&
+                    (evt_data.act_data.param.protocol == NCI_PROTOCOL_ISO_DEP)))
+            {
+                nfc_cb.bBlockWiredMode = TRUE;
+            }
+            else
+            {
+                nfc_cb.bBlockWiredMode = FALSE;
+                nfc_ncif_allow_dwp_transmission();
+            }
+        }
+#endif
+
         (*p_cback) (NFC_EE_ACTION_REVT, (void *) &evt_data);
     }
 }
@@ -1978,7 +2196,7 @@
     tNFC_CONN_CB * p_cb = &nfc_cb.conn_cb[NFC_RF_CONN_ID];
 #if (NXP_EXTNS == TRUE)
     static UINT8 retry_cnt = 0;
-    UINT8 fw_status,
+    UINT16 fw_status,
           fw_dwnld_status = NCI_STATUS_FAILED,
           fw_mw_ver_status = NCI_STATUS_FAILED;
     tNFC_FWUpdate_Info_t fw_update_inf;
@@ -2494,7 +2712,7 @@
 }
 #endif
 
-#if(NFC_NXP_ESE == TRUE && ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551)))
+#if((NFC_NXP_ESE == TRUE) && (NXP_EXTNS == TRUE) && (NXP_ESE_ETSI_READER_ENABLE == TRUE))
 void disc_deact_ntf_timeout_handler(tNFC_RESPONSE_EVT event)
 {
     tNFC_RESPONSE   evt_data;
diff --git a/src/nfc/nfc/nfc_task.c b/src/nfc/nfc/nfc_task.c
index 80c3aa5..01236c6 100755
--- a/src/nfc/nfc/nfc_task.c
+++ b/src/nfc/nfc/nfc_task.c
@@ -159,10 +159,15 @@
                 nfc_cb.i2c_data_t.data_stored = 0;
             }
             nfc_ncif_credit_ntf_timeout();
-#endif
             break;
         }
-#if(NXP_EXTNS == TRUE)
+#if(NXP_ESE_DUAL_MODE_PRIO_SCHEME == NXP_ESE_WIRED_MODE_RESUME)
+        case NFC_TTYPE_NCI_WAIT_RF_FIELD_NTF:
+        {
+            nfc_ncif_rffield_ntf_timeout();
+            break;
+        }
+#endif
         case NFC_TTYPE_LISTEN_ACTIVATION:
             {
                 extern uint8_t sListenActivated;
diff --git a/src/nfc/tags/rw_t1t.c b/src/nfc/tags/rw_t1t.c
index f119aef..0111813 100755
--- a/src/nfc/tags/rw_t1t.c
+++ b/src/nfc/tags/rw_t1t.c
@@ -291,11 +291,6 @@
                 GKI_freebuf ((BT_HDR *) (p_data->data.p_data));
                 p_data->data.p_data = NULL;
             }
-        }else if((p_data != NULL) && (p_data->data.p_data != NULL))
-        {
-        /* Free the response buffer in case of invalid response*/
-            GKI_freebuf((BT_HDR *) (p_data->data.p_data));
-            p_data->data.p_data = NULL;
         }
         /* Data event with error status...fall through to NFC_ERROR_CEVT case */
 
diff --git a/src/nfc/tags/rw_t2t.c b/src/nfc/tags/rw_t2t.c
index d9fd147..54557e9 100644
--- a/src/nfc/tags/rw_t2t.c
+++ b/src/nfc/tags/rw_t2t.c
@@ -340,12 +340,6 @@
                 p_data->data.p_data = NULL;
             }
         }
-        else if((p_data != NULL) && (p_data->data.p_data != NULL))
-        {
-        /* Free the response buffer in case of invalid response*/
-            GKI_freebuf((BT_HDR *) (p_data->data.p_data));
-            p_data->data.p_data = NULL;
-        }
         /* Data event with error status...fall through to NFC_ERROR_CEVT case */
 
     case NFC_ERROR_CEVT:
diff --git a/src/nfc/tags/rw_t3t.c b/src/nfc/tags/rw_t3t.c
index a6ac5f2..bf44026 100644
--- a/src/nfc/tags/rw_t3t.c
+++ b/src/nfc/tags/rw_t3t.c
@@ -2399,7 +2399,7 @@
             rw_t3t_data_cback (conn_id, &(p_data->data));
             break;
         }
-        else if (p_data->data.p_data != NULL)
+        else if ((p_data != NULL) && (p_data->data.p_data != NULL))
         {
             RW_TRACE_DEBUG2 ("rw_t3t_conn_cback: p_data->data.p_data=0x%X p_data->data.status=0x%02x", p_data->data.p_data, p_data->data.status);
             /* Free the response buffer in case of error response */
diff --git a/src/nfc/tags/rw_t4t.c b/src/nfc/tags/rw_t4t.c
index 46a6525..e8bb7fb 100644
--- a/src/nfc/tags/rw_t4t.c
+++ b/src/nfc/tags/rw_t4t.c
@@ -2074,6 +2074,9 @@
         }
         else if (p_t4t->state != RW_T4T_STATE_IDLE)
         {
+#if (NXP_EXTNS == TRUE)
+            rw_data.status = (tNFC_STATUS) (*(UINT8*) p_data);
+#endif
             rw_t4t_handle_error (rw_data.status, 0, 0);
         }
         else