NFC_NCIHALx_AR3C.7.0.3_N_OpnSrc
diff --git a/Android.mk b/Android.mk
index 7435f7e..84f0685 100644
--- a/Android.mk
+++ b/Android.mk
@@ -52,11 +52,11 @@
 LOCAL_CFLAGS += -DNFC_NXP_ESE=TRUE
 LOCAL_CFLAGS += -DNFC_NXP_ESE_VER=$(JCOP_VER_3_3)
 else
-LOCAL_CFLAGS += -DNFC_NXP_ESE=TRUE
+LOCAL_CFLAGS += -DNFC_NXP_ESE=FALSE
 endif
 
 #### Select the CHIP ####
-NXP_CHIP_TYPE := $(PN553)
+NXP_CHIP_TYPE := $(PN551)
 
 ifeq ($(NXP_CHIP_TYPE),$(PN547C2))
 D_CFLAGS += -DNFC_NXP_CHIP_TYPE=PN547C2
diff --git a/halimpl/pn54x/Android.mk b/halimpl/pn54x/Android.mk
index aeb59b7..ea2e498 100644
--- a/halimpl/pn54x/Android.mk
+++ b/halimpl/pn54x/Android.mk
@@ -51,7 +51,7 @@
 endif
 
 #### Select the CHIP ####
-NXP_CHIP_TYPE := $(PN553)
+NXP_CHIP_TYPE := $(PN551)
 
 ifeq ($(NXP_CHIP_TYPE),$(PN547C2))
 D_CFLAGS += -DNFC_NXP_CHIP_TYPE=PN547C2
@@ -95,7 +95,6 @@
         -DNXP_UICC_ENABLE -DNXP_HW_SELF_TEST
 LOCAL_CFLAGS += -DNFC_NXP_HFO_SETTINGS=FALSE
 LOCAL_CFLAGS += -DNFC_NXP_ESE=TRUE
-LOCAL_CFLAGS += -DNFC_NXP_STAT_DUAL_UICC_EXT_SWITCH=TRUE
 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 a89f724..667ab49 100644
--- a/halimpl/pn54x/common/phNfcCommon.h
+++ b/halimpl/pn54x/common/phNfcCommon.h
@@ -77,8 +77,8 @@
 #define COMPILATION_MW "PN547C2"
 #endif
 /* HAL Version number (Updated as per release) */
-#define NXP_MW_VERSION_MAJ  (7U)
-#define NXP_MW_VERSION_MIN  (00)
+#define NXP_MW_VERSION_MAJ  (0U)
+#define NXP_MW_VERSION_MIN  (3U)
 
 #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 353bb6e..640ed8d 100755
--- a/halimpl/pn54x/configs/NXP_ESE_Features.h
+++ b/halimpl/pn54x/configs/NXP_ESE_Features.h
@@ -17,14 +17,15 @@
 /*
  * NXP ESE features macros definitions
  */
-#if(NFC_NXP_ESE == TRUE)
+
 #ifndef NXP_ESE_FEATURES_H
 #define NXP_ESE_FEATURES_H
 
+#if(NFC_NXP_ESE == TRUE)
+
 // Reset Schemes
 #define NXP_ESE_PN67T_RESET      1
 #define NXP_ESE_APDU_GATE_RESET  2
-
 /** Dual/Triple mode priority schemes **/
 #define NXP_ESE_EXCLUSIVE_WIRED_MODE    1
 #define NXP_ESE_WIRED_MODE_RESUME       2
@@ -32,56 +33,56 @@
 
 #if(NFC_NXP_CHIP_TYPE == PN547C2)
 #define NXP_ESE_WIRED_MODE_DISABLE_DISCOVERY   TRUE
-#endif
 
-#if(NFC_NXP_CHIP_TYPE == PN551)
+#elif((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
     #define NFC_NXP_TRIPLE_MODE_PROTECTION        TRUE
-    #define NXP_ESE_FELICA_CLT                    TRUE
+    #define NXP_ESE_FELICA_CLT                    FALSE
     #define NXP_WIRED_MODE_STANDBY_PROP           TRUE
     //dual mode prio scheme
-    #define NXP_ESE_DUAL_MODE_PRIO_SCHEME        NXP_ESE_WIRED_MODE_TIMEOUT
-    //Reset scheme
-    #define NXP_ESE_RESET_METHOD                 FALSE
+    #define NXP_ESE_DUAL_MODE_PRIO_SCHEME         NXP_ESE_WIRED_MODE_TIMEOUT
+     //Reset scheme
+    #define NXP_ESE_RESET_METHOD                  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                    TRUE
+    #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
-    //Reset scheme
-    #define NXP_ESE_RESET_METHOD                 TRUE
-    #define NXP_ESE_POWER_MODE                   TRUE
-    #define NXP_ESE_P73_ISO_RST                  TRUE
-    #define NXP_WIRED_MODE_STANDBY               TRUE
+    #define NXP_ESE_DUAL_MODE_PRIO_SCHEME         NXP_ESE_WIRED_MODE_TIMEOUT
+    //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
 #endif
 
-#endif                          /* end of #ifndef NXP_ESE_FEATURES_H */
-#else
+#else /*Else of #if(NFC_NXP_ESE == TRUE)*/
 
 #if(NFC_NXP_CHIP_TYPE == PN547C2)
 #define NXP_ESE_WIRED_MODE_DISABLE_DISCOVERY   FALSE
 #endif
 
-#if(NFC_NXP_CHIP_TYPE == PN551)
+#if((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
     #define NFC_NXP_TRIPLE_MODE_PROTECTION        FALSE
-    #define NXP_ESE_FELICA_CLT                    FALSE
     #define NXP_WIRED_MODE_STANDBY_PROP           FALSE
-
-    //Reset scheme
-    #define NXP_ESE_RESET_METHOD                 FALSE
+    #define NXP_ESE_FELICA_CLT                    FALSE
+     //Reset scheme
+    #define NXP_ESE_RESET_METHOD                  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
+    //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
+#endif
 
-    //Reset scheme
-    #define NXP_ESE_RESET_METHOD                 FALSE
-    #define NXP_ESE_POWER_MODE                   FALSE
-    #define NXP_ESE_P73_ISO_RST                  FALSE
-    #define NXP_WIRED_MODE_STANDBY               FALSE
-#endif
-#endif
+#endif /*End of #if(NFC_NXP_ESE == TRUE)*/
+#endif /*End of #ifndef NXP_ESE_FEATURES_H */
diff --git a/halimpl/pn54x/dnld/phDnldNfc.c b/halimpl/pn54x/dnld/phDnldNfc.c
index d5bd7a2..8bb64c7 100644
--- a/halimpl/pn54x/dnld/phDnldNfc.c
+++ b/halimpl/pn54x/dnld/phDnldNfc.c
@@ -30,7 +30,7 @@
 uint16_t wMwVer = 0; /* Middleware version no */
 uint16_t wFwVer = 0; /* Firmware version no */
 #if(NFC_NXP_CHIP_TYPE != PN547C2)
-uint8_t gRecFWDwnld; // flag set to true to indicate dummy FW download
+uint8_t gRecFWDwnld; /* flag set to true to indicate dummy FW download */
 #endif
 static pphDnldNfc_DlContext_t gpphDnldContext = NULL; /* Download contex */
 static pphDnldNfc_RspCb_t      UserCb; /* Upper layer call back function */
diff --git a/halimpl/pn54x/dnld/phNxpNciHal_Dnld.c b/halimpl/pn54x/dnld/phNxpNciHal_Dnld.c
index e2fe3ce..ef64578 100644
--- a/halimpl/pn54x/dnld/phNxpNciHal_Dnld.c
+++ b/halimpl/pn54x/dnld/phNxpNciHal_Dnld.c
@@ -36,7 +36,7 @@
 extern uint16_t wFwVer;
 extern uint16_t wMwVer;
 #if(NFC_NXP_CHIP_TYPE != PN547C2)
-extern uint8_t gRecFWDwnld; // flag  set to true to  indicate dummy FW download
+extern uint8_t gRecFWDwnld; /* flag  set to true to  indicate dummy FW download */
 #endif
 /* RF Configuration structure */
 typedef struct phLibNfc_IoctlSetRfConfig
diff --git a/halimpl/pn54x/hal/phNxpNciHal.c b/halimpl/pn54x/hal/phNxpNciHal.c
index ea86486..00e4d2b 100644
--- a/halimpl/pn54x/hal/phNxpNciHal.c
+++ b/halimpl/pn54x/hal/phNxpNciHal.c
@@ -70,7 +70,9 @@
 
 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))
+uint32_t gSvddSyncOff_Delay = 10;
+#endif
 /* global variable to get FW version from NCI response*/
 uint32_t wFwVerRsp;
 /* External global variable to get FW version */
@@ -82,7 +84,7 @@
 extern int kovio_detected;
 extern int disable_kovio;
 #if(NFC_NXP_CHIP_TYPE != PN547C2)
-extern uint8_t gRecFWDwnld;// flag  set to true to  indicate dummy FW download
+extern uint8_t gRecFWDwnld;/* flag  set to true to  indicate dummy FW download */
 static uint8_t gRecFwRetryCount; //variable to hold dummy FW recovery count
 #endif
 static uint8_t write_unlocked_status = NFCSTATUS_SUCCESS;
@@ -1239,7 +1241,7 @@
 #if(NFC_NXP_CHIP_TYPE != PN547C2)
     //initialize dummy FW recovery variables
     gRecFwRetryCount = 0;
-    gRecFWDwnld = 0;
+    gRecFWDwnld = FALSE;
 #endif
     // recovery --start
     /*NCI_INIT_CMD*/
@@ -1347,7 +1349,19 @@
             goto retry_core_init;
         }
     }
-
+#if ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
+    if(GetNxpNumValue(NAME_NXP_SVDD_SYNC_OFF_DELAY, (void *)&gSvddSyncOff_Delay, sizeof(gSvddSyncOff_Delay)))
+    {
+        if(gSvddSyncOff_Delay>20)
+            gSvddSyncOff_Delay=10;
+        NXPLOG_NCIHAL_E("NAME_NXP_SVDD_SYNC_OFF_DELAY success value = %d", gSvddSyncOff_Delay);
+    }
+    else
+    {
+        NXPLOG_NCIHAL_E("NAME_NXP_SVDD_SYNC_OFF_DELAY failed");
+        gSvddSyncOff_Delay = 10;
+    }
+#endif
     config_access = FALSE;
     phNxpNciHal_check_factory_reset();
 
@@ -1527,7 +1541,8 @@
             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");
@@ -1576,7 +1591,14 @@
 
         }
 #endif
-        retlen = 0;
+    }
+    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
@@ -1756,7 +1778,10 @@
                 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");
@@ -1967,6 +1992,16 @@
     if(!((*p_core_init_rsp_params > 0) && (*p_core_init_rsp_params < 4)))
     {
 
+        status = phNxpNciHal_send_ext_cmd(sizeof(cmd_reset_nci),cmd_reset_nci);
+        if(status == NFCSTATUS_SUCCESS )
+        {
+            if(phNxpNciHal_send_ext_cmd(sizeof(cmd_init_nci),cmd_init_nci) != NFCSTATUS_SUCCESS)
+                return NFCSTATUS_FAILED;
+        }
+        else
+        {
+            return NFCSTATUS_FAILED;
+        }
         status = phNxpNciHal_send_get_cfgs();
         if(status == NFCSTATUS_SUCCESS)
         {
@@ -2129,7 +2164,7 @@
     config_access = FALSE;
 #if(NFC_NXP_CHIP_TYPE != PN547C2)
     //initialize dummy FW recovery variables
-    gRecFWDwnld = 0;
+    gRecFWDwnld = FALSE;
     gRecFwRetryCount = 0;
 #endif
     if(!((*p_core_init_rsp_params > 0) && (*p_core_init_rsp_params < 4)))
@@ -2909,8 +2944,6 @@
             ret = 0;
         }
         break;
-
-
     case HAL_NFC_IOCTL_P73_ISO_RST:
         status = phTmlNfc_IoCtl(phTmlNfc_e_P73IsoRstMode);
         if(NFCSTATUS_FAILED != status)
@@ -2920,7 +2953,16 @@
             ret = 0;
         }
         break;
-
+#if ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
+    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);
+        if(NFCSTATUS_SUCCESS == status)
+        {
+            ret = 0;
+        }
+        break;
+#endif
 #endif
     case HAL_NFC_IOCTL_SET_BOOT_MODE:
         if(NULL != p_data)
diff --git a/halimpl/pn54x/hal/phNxpNciHal_ext.c b/halimpl/pn54x/hal/phNxpNciHal_ext.c
index cf6cc51..89ab80f 100644
--- a/halimpl/pn54x/hal/phNxpNciHal_ext.c
+++ b/halimpl/pn54x/hal/phNxpNciHal_ext.c
@@ -61,7 +61,9 @@
 static uint32_t iCoreRstNtfLen;
 
 extern uint32_t timeoutTimerId;
-
+#if ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
+extern uint32_t gSvddSyncOff_Delay; /*default delay*/
+#endif
 extern NFCSTATUS read_retry();
 /************** HAL extension functions ***************************************/
 static void hal_extns_write_rsp_timeout_cb(uint32_t TimerId, void *pContext);
@@ -735,7 +737,16 @@
         nxpprofile_ctrl.profile_type = NFC_FORUM_PROFILE;
         status = NFCSTATUS_SUCCESS;
     }
-
+#if ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
+    else if (p_cmd_data[0] == 0x2F &&
+            p_cmd_data[1] == 0x31 &&
+            p_cmd_data[2] == 0x01 &&
+            p_cmd_data[3] == 0x00)
+    {
+        NXPLOG_NCIHAL_D ("SVDD Sync Off Command - delay it by %d ms", gSvddSyncOff_Delay);
+        usleep(gSvddSyncOff_Delay*1000);
+    }
+#endif
     if (nxpprofile_ctrl.profile_type == EMV_CO_PROFILE)
     {
         if (p_cmd_data[0] == 0x21 &&
diff --git a/halimpl/pn54x/libnfc-nxp-PN66T_example.conf b/halimpl/pn54x/libnfc-nxp-PN66T_example.conf
index 24954cb..9484005 100644
--- a/halimpl/pn54x/libnfc-nxp-PN66T_example.conf
+++ b/halimpl/pn54x/libnfc-nxp-PN66T_example.conf
@@ -72,7 +72,7 @@
 
 ###############################################################################
 # Standby enable settings
-#NXP_CORE_STANDBY={2F, 00, 01, 01}
+# NXP_CORE_STANDBY={2F, 00, 01, 01}
 
 ###############################################################################
 # NXP TVDD configurations settings
@@ -145,7 +145,8 @@
 # Clock settings A002, A003
 # PbF settings A008
 # Clock timeout settings A004
-NXP_CORE_CONF_EXTN={20, 02, 21, 08,
+# A0 9F 02 <svdd ON guard time (msec)> <svdd off guard time(msec)>
+NXP_CORE_CONF_EXTN={20, 02, 26, 09,
     A0, EC, 01, 01,
     A0, ED, 01, 03,
     A0, 5E, 01, 01,
@@ -153,7 +154,8 @@
     A0, 40, 01, 01,
     A0, DD, 01, 2D,
     A0, F2, 01, 01,
-    A0, 96, 01, 01
+    A0, 96, 01, 01,
+    A0, 9F, 02, 08, 08
     }
 #       A0, 41, 01, 02,
 #       A0, 43, 01, 04,
@@ -215,7 +217,8 @@
 #PN65T              0x02
 #PN548AD            0x03
 #PN66T              0x04
-
+#PN551              0x05
+#PN67T              0x06
 NXP_NFC_CHIP=0x04
 
 ###############################################################################
@@ -308,7 +311,7 @@
 ###############################################################################
 #CHINA_TIANJIN_RF_SETTING
 #Enable  0x01
-#Disable 0x00
+#Disable  0x00
 NXP_CHINA_TIANJIN_RF_ENABLED=0x01
 ###############################################################################
 #SWP_SWITCH_TIMEOUT_SETTING
@@ -382,13 +385,17 @@
 #################################################################################
 # JCOP-3.3 continuous process timeout in msec and value should be in Hexadecimal.
 # JCOP CP TIMEOUT
-NXP_CP_TIMEOUT={00, 77}
+# 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
diff --git a/halimpl/pn54x/libnfc-nxp-PN67T_example.conf b/halimpl/pn54x/libnfc-nxp-PN67T_example.conf
index 843eedc..b73bb5f 100644
--- a/halimpl/pn54x/libnfc-nxp-PN67T_example.conf
+++ b/halimpl/pn54x/libnfc-nxp-PN67T_example.conf
@@ -38,7 +38,7 @@
 #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
@@ -49,7 +49,7 @@
 #define CLK_FREQ_38_4MHZ       5
 #define CLK_FREQ_52MHZ         6
 
-NXP_SYS_CLK_FREQ_SEL=0x01
+NXP_SYS_CLK_FREQ_SEL=0x02
 
 ###############################################################################
 # The timeout value to be used for clock request acknowledgment
@@ -73,8 +73,7 @@
 
 ###############################################################################
 # Standby enable settings
-NXP_CORE_STANDBY={2F, 00, 01, 01}
-
+# NXP_CORE_STANDBY={2F, 00, 01, 01}
 
 ###############################################################################
 # NXP TVDD configurations settings
@@ -88,12 +87,12 @@
 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 }
+#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, 40, 0A}
+NXP_EXT_TVDD_CFG_3={20, 02, 0B, 02, A0, 66, 01, 01, A0, 0E, 03, 52, 64, 0A}
 
 ###############################################################################
 # NXP RF configuration ALM/PLM settings
@@ -147,16 +146,18 @@
 # Clock settings A002, A003
 # PbF settings A008
 # Clock timeout settings A004
-NXP_CORE_CONF_EXTN={20, 02, 1D, 07,
+# A0 9F 02 <svdd ON guard time (msec)> <svdd off guard time(msec)>
+NXP_CORE_CONF_EXTN={20, 02, 26, 09,
     A0, EC, 01, 01,
     A0, ED, 01, 03,
     A0, 5E, 01, 01,
     A0, 12, 01, 02,
     A0, 40, 01, 01,
     A0, DD, 01, 2D,
-    A0, 96, 01, 01
+    A0, F2, 01, 01,
+    A0, 96, 01, 01,
+    A0, 9F, 02, 08, 08
     }
-#       A0, F2, 01, 01,
 #       A0, 41, 01, 02,
 #       A0, 43, 01, 04,
 #       A0, 02, 01, 01,
@@ -262,6 +263,7 @@
 # eSE  0x01
 # UICC 0x02
 DEFAULT_MIFARE_CLT_ROUTE=0x02
+
 ###############################################################################
 #Set the default AID Power state :
 #This settings will be used when application does not set this parameter
@@ -370,26 +372,30 @@
 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
+###############################################################################
+# 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 CP TIMEOUT
-NXP_CP_TIMEOUT={00, 77}
+# 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
diff --git a/halimpl/pn54x/tml/phTmlNfc.h b/halimpl/pn54x/tml/phTmlNfc.h
index 6c8acf9..45be9c6 100644
--- a/halimpl/pn54x/tml/phTmlNfc.h
+++ b/halimpl/pn54x/tml/phTmlNfc.h
@@ -108,10 +108,13 @@
     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))
+    phTmlNfc_e_RelP61SvddWait,
+#endif
     phTmlNfc_e_P73IsoRstMode,         /* ISO RST of P73*/
     phTmlNfc_e_SetLegacyPowerScheme,
     phTmlNfc_e_SetExtPMUPowerScheme,
-    phTmlNfc_e_SetPN67TPowerScheme
+    phTmlNfc_e_SetPN67TPowerScheme,
 #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 b356572..135c23d 100644
--- a/halimpl/pn54x/tml/phTmlNfc_i2c.c
+++ b/halimpl/pn54x/tml/phTmlNfc_i2c.c
@@ -516,6 +516,41 @@
     return status;
 }
 
+#if ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
+/*******************************************************************************
+**
+** Function         phTmlNfc_rel_svdd_wait
+**
+** Description
+**
+** Parameters       pDevHandle     - valid device handle
+**
+** Returns          success or failure
+**
+*******************************************************************************/
+NFCSTATUS phTmlNfc_rel_svdd_wait(void *pDevHandle)
+{
+    int ret = -1;
+    NFCSTATUS status = NFCSTATUS_SUCCESS;
+    NXPLOG_TML_D("phTmlNfc_rel_svdd_wait(), enter ");
+
+    if (NULL == pDevHandle)
+    {
+        return NFCSTATUS_FAILED;
+    }
+
+    ret = ioctl((intptr_t)pDevHandle, P544_REL_SVDD_WAIT);
+    if (ret < 0)
+    {
+        if (ret == -EBUSY)
+            ret = NFCSTATUS_BUSY;
+        else
+            ret = NFCSTATUS_FAILED;
+    }
+    NXPLOG_TML_D("phTmlNfc_rel_svdd_wait(), exit  ret %d, status %d", ret, status);
+    return status;
+}
+#endif
 #endif
 /*******************************************************************************
 **
diff --git a/halimpl/pn54x/tml/phTmlNfc_i2c.h b/halimpl/pn54x/tml/phTmlNfc_i2c.h
index 4803e20..e84cc27 100644
--- a/halimpl/pn54x/tml/phTmlNfc_i2c.h
+++ b/halimpl/pn54x/tml/phTmlNfc_i2c.h
@@ -46,7 +46,9 @@
 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_rel_svdd_wait(void *pDevHandle);
+#endif
 /*
  * SPI Request NFCC to enable p61 power, only in param
  * Only for SPI
@@ -78,6 +80,11 @@
 #define P544_GET_ESE_ACCESS _IOW(PN544_MAGIC, 0x06, long)
 
 /*
+  NFC will call the ioctl to release the svdd protection
+*/
+#define P544_REL_SVDD_WAIT _IOW(PN544_MAGIC, 0x07, long)
+
+/*
   NFC and SPI will call the ioctl to update the power scheme
 */
 #define P544_SET_POWER_SCHEME _IOW(PN544_MAGIC, 0x07, long)
diff --git a/halimpl/pn54x/utils/phNxpConfig.cpp b/halimpl/pn54x/utils/phNxpConfig.cpp
index 58c4525..bebb4c1 100644
--- a/halimpl/pn54x/utils/phNxpConfig.cpp
+++ b/halimpl/pn54x/utils/phNxpConfig.cpp
@@ -53,6 +53,7 @@
 
 #if 1
 const char transport_config_path[] = "/etc/";
+const char transit_config_path[] = "/data/nfc/";
 #else
 const char transport_config_path[] = "res/";
 #endif
@@ -104,6 +105,7 @@
     bool    getValue(const char* name, unsigned short & rValue) const;
     bool    getValue(const char* name, char* pValue, long len,long* readlen) const;
     const CNfcParam*    find(const char* p_name) const;
+    void    readNxpTransitConfig(const char* fileName) const;
     void    clean();
 private:
     CNfcConfig();
@@ -111,9 +113,12 @@
     void    moveFromList();
     void    moveToList();
     void    add(const CNfcParam* pParam);
+    void    dump();
+    bool    isAllowed(const char* name);
     list<const CNfcParam*> m_list;
     bool    mValidFile;
     unsigned long m_timeStamp;
+    string  mCurrentFile;
 
     unsigned long   state;
 
@@ -216,6 +221,8 @@
     int     base = 0;
     char    c;
     int     bflag = 0;
+    mCurrentFile = name;
+
     state = BEGIN_LINE;
     /* open config file, read it into a buffer */
     if ((fd = fopen(name, "rb")) == NULL)
@@ -228,6 +235,7 @@
         }
         return false;
     }
+    ALOGD("%s Opened %s config %s\n", __func__, (bResetContent ? "base" : "optional"), name);
     stat(name, &buf);
     if(strcmp(default_nxp_config_path, name) == 0)
     {
@@ -480,6 +488,7 @@
         theInstance.readConfig(strPath.c_str(), true);
 #if(NXP_EXTNS == TRUE)
         readOptionalConfig("brcm");
+        theInstance.readNxpTransitConfig("nxpTransit");
 #endif
     }
     return theInstance;
@@ -622,6 +631,24 @@
 
 /*******************************************************************************
 **
+** Function:    CNfcConfig::readNxpTransitConfig()
+**
+** Description: read Config settings from transit conf file
+**
+** Returns:     none
+**
+*******************************************************************************/
+void CNfcConfig::readNxpTransitConfig(const char* fileName) const
+{
+    string strPath;
+    strPath.assign(transit_config_path);
+    strPath += extra_config_base;
+    strPath += fileName;
+    strPath += extra_config_ext;
+    CNfcConfig::GetInstance().readConfig(strPath.c_str(), false);
+}
+/*******************************************************************************
+**
 ** Function:    CNfcConfig::clean()
 **
 ** Description: reset the setting array
@@ -655,16 +682,72 @@
         m_list.push_back(pParam);
         return;
     }
+    if((mCurrentFile.find("nxpTransit") != std::string::npos) && !isAllowed(pParam->c_str()))
+    {
+        ALOGD("%s Token restricted. Returning", __func__);
+        return;
+    }
     for (list<const CNfcParam*>::iterator it = m_list.begin(), itEnd = m_list.end(); it != itEnd; ++it)
     {
         if (**it < pParam->c_str())
             continue;
-        m_list.insert(it, pParam);
+        if (**it == pParam->c_str())
+            m_list.insert(m_list.erase(it), pParam);
+        else
+            m_list.insert(it, pParam);
+
         return;
     }
     m_list.push_back(pParam);
 }
+/*******************************************************************************
+**
+** Function:    CNfcConfig::dump()
+**
+** Description: prints all elements in the list
+**
+** Returns:     none
+**
+*******************************************************************************/
+void CNfcConfig::dump()
+{
+    ALOGD("%s Enter", __func__);
 
+    for (list<const CNfcParam*>::iterator it = m_list.begin(), itEnd = m_list.end(); it != itEnd; ++it)
+    {
+        if((*it)->str_len()>0)
+            ALOGD("%s %s \t= %s", __func__, (*it)->c_str(),(*it)->str_value());
+        else
+            ALOGD("%s %s \t= (0x%0lX)\n", __func__,(*it)->c_str(),(*it)->numValue());
+    }
+}
+/*******************************************************************************
+**
+** Function:    CNfcConfig::isAllowed()
+**
+** Description: checks if token update is allowed
+**
+** Returns:     true if allowed else false
+**
+*******************************************************************************/
+bool CNfcConfig::isAllowed(const char* name)
+{
+    string token(name);
+    bool stat = false;
+    if((token.find("P2P_LISTEN_TECH_MASK") != std::string::npos)        ||
+            (token.find("HOST_LISTEN_TECH_MASK") != std::string::npos)  ||
+            (token.find("UICC_LISTEN_TECH_MASK") != std::string::npos)  ||
+            (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))
+
+    {
+        stat = true;
+    }
+    return stat;
+}
 /*******************************************************************************
 **
 ** Function:    CNfcConfig::moveFromList()
diff --git a/halimpl/pn54x/utils/phNxpConfig.h b/halimpl/pn54x/utils/phNxpConfig.h
index 75780e0..151891d 100644
--- a/halimpl/pn54x/utils/phNxpConfig.h
+++ b/halimpl/pn54x/utils/phNxpConfig.h
@@ -93,7 +93,6 @@
 #if(NXP_ESE_POWER_MODE==TRUE)
 #define NAME_NXP_ESE_POWER_DH_CONTROL         "NXP_ESE_POWER_DH_CONTROL"
 #define NAME_NXP_ESE_POWER_EXT_PMU            "NXP_ESE_POWER_EXT_PMU"
-
 #define NAME_NXP_ESE_POWER_DH_CONTROL_CFG_1   "NXP_ESE_POWER_DH_CONTROL_CFG_1"
 #endif
 #define NAME_NXP_SWP_SWITCH_TIMEOUT  "NXP_SWP_SWITCH_TIMEOUT"
@@ -108,7 +107,10 @@
 #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))
+#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 6748d7f..911f5a7 100644
--- a/src/adaptation/NfcAdaptation.cpp
+++ b/src/adaptation/NfcAdaptation.cpp
@@ -375,8 +375,13 @@
     int ret = 0; //0 means success
     if ( !GetStrValue ( NAME_NCI_HAL_MODULE, nci_hal_module, sizeof ( nci_hal_module) ) )
     {
-        ALOGE("No HAL module specified in config, falling back to BCM2079x");
-        strlcpy (nci_hal_module, "nfc_nci.bcm2079x", sizeof(nci_hal_module));
+#if(NXP_EXTNS == TRUE)
+    ALOGE("No HAL module specified in config, falling back to pn54x");
+    strlcpy (nci_hal_module, "nfc_nci.pn54x", sizeof(nci_hal_module));
+#else
+    ALOGE("No HAL module specified in config, falling back to BCM2079x");
+    strlcpy (nci_hal_module, "nfc_nci.bcm2079x", sizeof(nci_hal_module));
+#endif
     }
     const hw_module_t* hw_module = NULL;
 
diff --git a/src/adaptation/config.cpp b/src/adaptation/config.cpp
index 90f92b5..00943b1 100644
--- a/src/adaptation/config.cpp
+++ b/src/adaptation/config.cpp
@@ -46,6 +46,10 @@
 
 const char transport_config_path[] = "/etc/";
 
+#if(NXP_EXTNS == TRUE)
+const char transit_config_path[] = "/data/nfc/";
+#endif
+
 #define config_name             "libnfc-brcm.conf"
 #if(NXP_EXTNS == TRUE)
 #define extra_config_base       "libnfc-"
@@ -82,6 +86,9 @@
     bool    getValue(const char* name, unsigned long& rValue) const;
     bool    getValue(const char* name, unsigned short & rValue) const;
     const CNfcParam*    find(const char* p_name) const;
+#if(NXP_EXTNS == TRUE)
+    void    readNxpTransitConfig(const char* fileName) const;
+#endif
     void    clean();
 private:
     CNfcConfig();
@@ -89,6 +96,11 @@
     void    moveFromList();
     void    moveToList();
     void    add(const CNfcParam* pParam);
+#if(NXP_EXTNS == TRUE)
+    void    dump();
+    bool    isAllowed(const char* name);
+    string  mCurrentFile;
+#endif
     list<const CNfcParam*> m_list;
     bool    mValidFile;
 
@@ -191,6 +203,9 @@
     int     i = 0;
     int     base = 0;
     char    c = 0;
+#if(NXP_EXTNS == TRUE)
+    mCurrentFile = name;
+#endif
 
     state = BEGIN_LINE;
     /* open config file, read it into a buffer */
@@ -422,6 +437,7 @@
         theInstance.readConfig(strPath.c_str(), true);
 #if(NXP_EXTNS == TRUE)
         readOptionalConfigExt("nxp");
+        theInstance.readNxpTransitConfig("nxpTransit");
 #endif
 
     }
@@ -536,6 +552,27 @@
     return NULL;
 }
 
+#if(NXP_EXTNS == TRUE)
+/*******************************************************************************
+**
+** Function:    CNfcConfig::readNxpTransitConfig()
+**
+** Description: read Config settings from transit conf file
+**
+** Returns:     none
+**
+*******************************************************************************/
+void CNfcConfig::readNxpTransitConfig(const char* fileName) const
+{
+    string strPath;
+    strPath.assign(transit_config_path);
+    strPath += extra_config_base;
+    strPath += fileName;
+    strPath += extra_config_ext;
+    CNfcConfig::GetInstance().readConfig(strPath.c_str(), false);
+}
+#endif
+
 /*******************************************************************************
 **
 ** Function:    CNfcConfig::clean()
@@ -571,16 +608,82 @@
         m_list.push_back(pParam);
         return;
     }
+#if(NXP_EXTNS == TRUE)
+    if((mCurrentFile.find("nxpTransit") != std::string::npos) && !isAllowed(pParam->c_str()))
+    {
+        ALOGD("%s Token restricted. Returning", __func__);
+        return;
+    }
+#endif
     for (list<const CNfcParam*>::iterator it = m_list.begin(), itEnd = m_list.end(); it != itEnd; ++it)
     {
         if (**it < pParam->c_str())
             continue;
+#if(NXP_EXTNS == TRUE)
+        /*If pParam->c_str() already exist in the list replace it*/
+        if (**it == pParam->c_str())
+            m_list.insert(m_list.erase(it), pParam);
+        else
+            m_list.insert(it, pParam);
+#else
         m_list.insert(it, pParam);
+#endif
         return;
     }
     m_list.push_back(pParam);
 }
 
+#if(NXP_EXTNS == TRUE)
+/*******************************************************************************
+**
+** Function:    CNfcConfig::dump()
+**
+** Description: prints all elements in the list
+**
+** Returns:     none
+**
+*******************************************************************************/
+void CNfcConfig::dump()
+{
+    ALOGD("%s Enter", __func__);
+
+    for (list<const CNfcParam*>::iterator it = m_list.begin(), itEnd = m_list.end(); it != itEnd; ++it)
+    {
+        if((*it)->str_len()>0)
+            ALOGD("%s %s \t= %s", __func__, (*it)->c_str(),(*it)->str_value());
+        else
+            ALOGD("%s %s \t= (0x%0lX)\n", __func__,(*it)->c_str(),(*it)->numValue());
+    }
+}
+
+/*******************************************************************************
+**
+** Function:    CNfcConfig::isAllowed()
+**
+** Description: checks if token update is allowed
+**
+** Returns:     true if allowed else false
+**
+*******************************************************************************/
+bool CNfcConfig::isAllowed(const char* name)
+{
+    string token(name);
+    bool stat = false;
+    if((token.find("P2P_LISTEN_TECH_MASK") != std::string::npos)        ||
+            (token.find("HOST_LISTEN_TECH_MASK") != std::string::npos)  ||
+            (token.find("UICC_LISTEN_TECH_MASK") != std::string::npos)  ||
+            (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))
+
+    {
+        stat = true;
+    }
+    return stat;
+}
+#endif
+
 /*******************************************************************************
 **
 ** Function:    CNfcConfig::moveFromList()
diff --git a/src/include/NXP_ESE_Features.h b/src/include/NXP_ESE_Features.h
index 3d986ca..640ed8d 100755
--- a/src/include/NXP_ESE_Features.h
+++ b/src/include/NXP_ESE_Features.h
@@ -17,38 +17,32 @@
 /*
  * NXP ESE features macros definitions
  */
-#if(NFC_NXP_ESE == TRUE)
+
 #ifndef NXP_ESE_FEATURES_H
 #define NXP_ESE_FEATURES_H
 
-#if(NFC_NXP_CHIP_TYPE == PN547C2)
-#define NXP_ESE_WIRED_MODE_DISABLE_DISCOVERY   TRUE
-#endif
+#if(NFC_NXP_ESE == TRUE)
 
 // Reset Schemes
 #define NXP_ESE_PN67T_RESET      1
 #define NXP_ESE_APDU_GATE_RESET  2
-
 /** Dual/Triple mode priority schemes **/
 #define NXP_ESE_EXCLUSIVE_WIRED_MODE    1
 #define NXP_ESE_WIRED_MODE_RESUME       2
 #define NXP_ESE_WIRED_MODE_TIMEOUT      3
 
-// Example: define macro like below for each feature
-//#define NXP_ESE_FEATURE_1  TRUE
-
 #if(NFC_NXP_CHIP_TYPE == PN547C2)
 #define NXP_ESE_WIRED_MODE_DISABLE_DISCOVERY   TRUE
-#endif
 
-#if(NFC_NXP_CHIP_TYPE == PN551)
+#elif((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
     #define NFC_NXP_TRIPLE_MODE_PROTECTION        TRUE
-    #define NXP_WIRED_MODE_STANDBY_PROP           TRUE
     #define NXP_ESE_FELICA_CLT                    FALSE
+    #define NXP_WIRED_MODE_STANDBY_PROP           TRUE
     //dual mode prio scheme
     #define NXP_ESE_DUAL_MODE_PRIO_SCHEME         NXP_ESE_WIRED_MODE_TIMEOUT
      //Reset scheme
     #define NXP_ESE_RESET_METHOD                  FALSE
+
 #elif(NFC_NXP_CHIP_TYPE == PN553)
     #define NFC_NXP_TRIPLE_MODE_PROTECTION        FALSE
     #define NXP_ESE_FELICA_CLT                    TRUE
@@ -64,34 +58,24 @@
     #define NXP_WIRED_MODE_STANDBY                TRUE
 #endif
 
-#endif                          /* end of #ifndef NXP_ESE_FEATURES_H */
-
-#else
+#else /*Else of #if(NFC_NXP_ESE == TRUE)*/
 
 #if(NFC_NXP_CHIP_TYPE == PN547C2)
 #define NXP_ESE_WIRED_MODE_DISABLE_DISCOVERY   FALSE
 #endif
 
-// Example: define macro like below for each feature
-//#define NXP_ESE_FEATURE_1  TRUE
-
-#if(NFC_NXP_CHIP_TYPE == PN547C2)
-#define NXP_ESE_WIRED_MODE_DISABLE_DISCOVERY   FALSE
-#endif
-
-#if(NFC_NXP_CHIP_TYPE == PN551)
+#if((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
     #define NFC_NXP_TRIPLE_MODE_PROTECTION        FALSE
     #define NXP_WIRED_MODE_STANDBY_PROP           FALSE
     #define NXP_ESE_FELICA_CLT                    FALSE
-
      //Reset scheme
     #define NXP_ESE_RESET_METHOD                  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
-    #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
@@ -99,4 +83,6 @@
     #define NXP_BLOCK_PROPRIETARY_APDU_GATE       FALSE
     #define NXP_WIRED_MODE_STANDBY                FALSE
 #endif
-#endif
+
+#endif /*End of #if(NFC_NXP_ESE == TRUE)*/
+#endif /*End of #ifndef NXP_ESE_FEATURES_H */
diff --git a/src/nfa/ee/nfa_ee_act.c b/src/nfa/ee/nfa_ee_act.c
index dd7742f..1422105 100755
--- a/src/nfa/ee/nfa_ee_act.c
+++ b/src/nfa/ee/nfa_ee_act.c
@@ -2467,7 +2467,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++)
 {
diff --git a/src/nfc/include/nfc_api.h b/src/nfc/include/nfc_api.h
index 45e50fe..62911c9 100755
--- a/src/nfc/include/nfc_api.h
+++ b/src/nfc/include/nfc_api.h
@@ -83,15 +83,15 @@
 //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_PN553                    1
-#define NXP_EN_PN80T                    1
-#define NXP_ANDROID_VER                 (4U) /* NXP android version */
-#define NFC_NXP_MW_VERSION_MAJ          (7U) /* MW Major Version */
-#define NFC_NXP_MW_VERSION_MIN          (00) /* MW Minor Version */
+#define NXP_EN_PN548C2                  1
+#define NXP_EN_PN66T                    1
+#define NXP_EN_PN551                    1
+#define NXP_EN_PN67T                    1
+#define NXP_EN_PN553                    0
+#define NXP_EN_PN80T                    0
+#define NXP_ANDROID_VER                 (7U) /* NXP android version */
+#define NFC_NXP_MW_VERSION_MAJ          (0U) /* MW Major Version */
+#define NFC_NXP_MW_VERSION_MIN          (3U) /* MW Minor Version */
 #endif
 /* 0xE0 ~0xFF are proprietary status codes */
 #define NFC_STATUS_CMD_STARTED          0xE3/* Command started successfully                     */
@@ -1557,6 +1557,21 @@
 INT32 NFC_RelEseAccess (void *pdata);
 
 #endif
+
+#if ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
+/*******************************************************************************
+**
+** Function         NFC_RelSvddWait
+**
+** Description      This function release wait for svdd change
+**                  of P61. Status would be updated to pdata
+**
+** Returns          0 if api call success, else -1
+**
+*******************************************************************************/
+INT32 NFC_RelSvddWait (void *pdata);
+#endif
+
 #endif
 
 #endif
diff --git a/src/nfc/nfc/nfc_main.c b/src/nfc/nfc/nfc_main.c
index f4cee7d..9de4555 100644
--- a/src/nfc/nfc/nfc_main.c
+++ b/src/nfc/nfc/nfc_main.c
@@ -1696,6 +1696,24 @@
     return (nfc_cb.p_hal->ioctl(HAL_NFC_IOCTL_P61_REL_ACCESS, pdata));
 }
 #endif
+
+#if ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
+/*******************************************************************************
+**
+** Function         NFC_RelSvddWait
+**
+** Description      This function release wait for svdd change
+**                  of P61. Status would be updated to pdata
+**
+** Returns          0 if api call success, else -1
+**
+*******************************************************************************/
+INT32 NFC_RelSvddWait (void *pdata)
+{
+    return (nfc_cb.p_hal->ioctl(HAL_NFC_IOCTL_REL_SVDD_WAIT, pdata));
+}
+#endif
+
 #endif
 
 #if(NXP_EXTNS == TRUE)
diff --git a/src/nfc/tags/rw_t3t.c b/src/nfc/tags/rw_t3t.c
index 79ee256..a6ac5f2 100644
--- a/src/nfc/tags/rw_t3t.c
+++ b/src/nfc/tags/rw_t3t.c
@@ -2392,8 +2392,9 @@
         break;
 
     case NFC_DATA_CEVT:     /* check for status in tNFC_CONN */
-        if (  (p_data->data.status == NFC_STATUS_OK)
-            ||(p_data->data.status == NFC_STATUS_CONTINUE)  )
+        if (  (p_data != NULL)
+            &&(  (p_data->data.status == NFC_STATUS_OK)
+               ||(p_data->data.status == NFC_STATUS_CONTINUE)  )  )
         {
             rw_t3t_data_cback (conn_id, &(p_data->data));
             break;
@@ -2417,7 +2418,7 @@
 
         if (event == NFC_ERROR_CEVT)
             rw_t3t_process_error (NFC_STATUS_TIMEOUT);
-        else
+        else if(p_data)
             rw_t3t_process_error (p_data->status);
 #if(NXP_EXTNS == TRUE)
         if(p_data != NULL)