diff --git a/Android.bp b/Android.bp
index 0666007..0a5cd9a 100755
--- a/Android.bp
+++ b/Android.bp
@@ -18,8 +18,6 @@
     proprietary: true,
 
     cflags: [
-        "-DNFC_NXP_CHIP_TYPE=PN557",
-        "-DPN557=1",
         "-Wall",
         "-Werror",
         "-Wextra",
@@ -42,6 +40,7 @@
         "halimpl/tml/phTmlNfc.cc",
         "halimpl/tml/phTmlNfc_i2c.cc",
         "halimpl/tml/spi_spm.cc",
+        "halimpl/utils/NxpNfcCapability.cpp",
         "halimpl/utils/phNxpConfig.cpp",
         "halimpl/utils/phNxpNciHal_utils.cc",
         "halimpl/utils/sparse_crc32.cc",
diff --git a/extns/impl/Nxp_Features.h b/extns/impl/Nxp_Features.h
index 10f2400..6c03877 100755
--- a/extns/impl/Nxp_Features.h
+++ b/extns/impl/Nxp_Features.h
@@ -16,26 +16,16 @@
  *
  ******************************************************************************/
 
-#include <unistd.h>
-#include <string.h>
 #ifndef NXP_FEATURES_H
 #define NXP_FEATURES_H
-
-#define STRMAX_1 40
-#define STRMAX_2 100
-#define FW_DLL_EXTENSION ".so"
+#include <unistd.h>
+#include <string>
 
 #define FW_MOBILE_MAJOR_NUMBER_PN553 0x01
+#define FW_MOBILE_MAJOR_NUMBER_PN81A 0x02
 #define FW_MOBILE_MAJOR_NUMBER_PN551 0x05
-#define FW_MOBILE_MAJOR_NUMBER_PN48AD 0x01
-
-#define NFA_EE_MAX_EE_SUPPORTED 4
-
-#define JCOP_VER_3_1 1
-#define JCOP_VER_3_2 2
-#define JCOP_VER_3_3 3
-#define JCOP_VER_4_0 4
-
+#define FW_MOBILE_MAJOR_NUMBER_PN557 0x01
+ using namespace std;
 typedef enum {
   pn547C2 = 0x01,
   pn65T,
@@ -50,86 +40,12 @@
 } tNFC_chipType;
 
 typedef struct {
-  /*Flags common to all chip types*/
-  uint8_t _NXP_NFCC_EMPTY_DATA_PACKET : 1;
-  uint8_t _GEMALTO_SE_SUPPORT : 1;
-  uint8_t _NFCC_I2C_READ_WRITE_IMPROVEMENT : 1;
-  uint8_t _NFCC_MIFARE_TIANJIN : 1;
-  uint8_t _NFCC_MW_RCVRY_BLK_FW_DNLD : 1;
-  uint8_t _NFCC_DYNAMIC_DUAL_UICC : 1;
-  uint8_t _NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH : 1;
-  uint8_t _NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH : 1;
-  uint8_t _NFCC_FW_WA : 1;
-  uint8_t _NFCC_FORCE_NCI1_0_INIT : 1;
-  uint8_t _NFCC_ROUTING_BLOCK_BIT : 1;
-  uint8_t _NFCC_SPI_FW_DOWNLOAD_SYNC : 1;
-  uint8_t _HW_ANTENNA_LOOP4_SELF_TEST : 1;
-  uint8_t _NFCEE_REMOVED_NTF_RECOVERY : 1;
-  uint8_t _NFCC_FORCE_FW_DOWNLOAD : 1;
-  uint8_t _UICC_CREATE_CONNECTIVITY_PIPE : 1;
-  uint8_t _NFCC_AID_MATCHING_PLATFORM_CONFIG : 1;
-  uint8_t _NFCC_ROUTING_BLOCK_BIT_PROP : 1;
-  uint8_t _NXP_NFC_UICC_ETSI12 : 1;
-  uint8_t _NFA_EE_MAX_EE_SUPPORTED : 3;
-} tNfc_nfccFeatureList;
-
-typedef struct {
-  uint8_t _ESE_EXCLUSIVE_WIRED_MODE : 2;
-  uint8_t _ESE_WIRED_MODE_RESUME : 2;
-  uint8_t _ESE_WIRED_MODE_TIMEOUT : 2;
-  uint8_t _ESE_PN67T_RESET : 2;
-  uint8_t _ESE_APDU_GATE_RESET : 2;
-  uint8_t _ESE_WIRED_MODE_DISABLE_DISCOVERY : 1;
-  uint8_t _LEGACY_APDU_GATE : 1;
-  uint8_t _TRIPLE_MODE_PROTECTION : 1;
-  uint8_t _ESE_FELICA_CLT : 1;
-  uint8_t _WIRED_MODE_STANDBY_PROP : 1;
-  uint8_t _WIRED_MODE_STANDBY : 1;
-  uint8_t _ESE_DUAL_MODE_PRIO_SCHEME : 2;
-  uint8_t _ESE_FORCE_ENABLE : 1;
-  uint8_t _ESE_RESET_METHOD : 1;
-  uint8_t _EXCLUDE_NV_MEM_DEPENDENCY : 1;
-  uint8_t _ESE_ETSI_READER_ENABLE : 1;
-  uint8_t _ESE_SVDD_SYNC : 1;
-  uint8_t _NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION : 1;
-  uint8_t _ESE_JCOP_DWNLD_PROTECTION : 1;
-  uint8_t _UICC_HANDLE_CLEAR_ALL_PIPES : 1;
-  uint8_t _GP_CONTINOUS_PROCESSING : 1;
-  uint8_t _ESE_DWP_SPI_SYNC_ENABLE : 1;
-  uint8_t _ESE_ETSI12_PROP_INIT : 1;
-  uint8_t _ESE_WIRED_MODE_PRIO : 1;
-  uint8_t _ESE_UICC_EXCLUSIVE_WIRED_MODE : 1;
-  uint8_t _ESE_POWER_MODE : 1;
-  uint8_t _ESE_P73_ISO_RST : 1;
-  uint8_t _BLOCK_PROPRIETARY_APDU_GATE : 1;
-  uint8_t _JCOP_WA_ENABLE : 1;
-  uint8_t _NXP_LDR_SVC_VER_2 : 1;
-  uint8_t _NXP_ESE_VER : 3;
-} tNfc_eseFeatureList;
-typedef struct { uint8_t _NFCC_RESET_RSP_LEN; } tNfc_platformFeatureList;
-
-typedef struct {
-  uint8_t _NCI_INTERFACE_UICC_DIRECT;
-  uint8_t _NCI_INTERFACE_ESE_DIRECT;
-  uint8_t _NCI_PWR_LINK_PARAM_CMD_SIZE;
-  uint8_t _NCI_EE_PWR_LINK_ALWAYS_ON;
-  uint8_t _NFA_EE_MAX_AID_ENTRIES;
-  uint8_t _NFC_NXP_AID_MAX_SIZE_DYN : 1;
-  uint8_t _FW_LIB_PATH[STRMAX_2];
-  uint8_t _PLATFORM_LIB_PATH[STRMAX_2];
-  uint8_t _PKU_LIB_PATH[STRMAX_2];
+  tNFC_chipType chipType;
+  std::string _FW_LIB_PATH;
+  std::string _FW_BIN_PATH;
   uint16_t _PHDNLDNFC_USERDATA_EEPROM_OFFSET;
   uint16_t _PHDNLDNFC_USERDATA_EEPROM_LEN;
   uint8_t _FW_MOBILE_MAJOR_NUMBER;
-} tNfc_nfcMwFeatureList;
-
-typedef struct {
-  uint8_t nfcNxpEse : 1;
-  tNFC_chipType chipType;
-  tNfc_nfccFeatureList nfccFL;
-  tNfc_eseFeatureList eseFL;
-  tNfc_platformFeatureList platformFL;
-  tNfc_nfcMwFeatureList nfcMwFL;
 } tNfc_featureList;
 
 extern tNfc_featureList nfcFL;
@@ -137,308 +53,55 @@
 #define CONFIGURE_FEATURELIST(chipType)                                      \
   {                                                                          \
     nfcFL.chipType = chipType;                                               \
-    nfcFL.nfcMwFL._NFC_NXP_AID_MAX_SIZE_DYN = true;                          \
     if (chipType == pn81T) {                                                 \
       nfcFL.chipType = pn557;                                                \
     } else if (chipType == pn80T) {                                          \
       nfcFL.chipType = pn553;                                                \
     } else if (chipType == pn67T) {                                          \
       nfcFL.chipType = pn551;                                                \
-    } else if (chipType == pn66T) {                                          \
-      nfcFL.chipType = pn548C2;                                              \
-    } else if (chipType == pn65T) {                                          \
-      nfcFL.chipType = pn547C2;                                              \
     }                                                                        \
-    if ((chipType == pn65T) || (chipType == pn66T) || (chipType == pn67T) || \
-        (chipType == pn80T) || (chipType == pn81T)) {                        \
-      nfcFL.nfcNxpEse = true;                                                \
-      CONFIGURE_FEATURELIST_NFCC_WITH_ESE(chipType)                          \
-    } else {                                                                 \
-      nfcFL.nfcNxpEse = false;                                               \
       CONFIGURE_FEATURELIST_NFCC(chipType)                                   \
-    }                                                                        \
-  }
-
-#define CONFIGURE_FEATURELIST_NFCC_WITH_ESE(chipType)                 \
-  {                                                                   \
-    nfcFL.nfccFL._NXP_NFCC_EMPTY_DATA_PACKET = true;                  \
-    nfcFL.nfccFL._GEMALTO_SE_SUPPORT = true;                          \
-                                                                      \
-    nfcFL.eseFL._ESE_EXCLUSIVE_WIRED_MODE = 1;                        \
-    nfcFL.eseFL._ESE_WIRED_MODE_RESUME = 2;                           \
-    nfcFL.eseFL._ESE_PN67T_RESET = 1;                                 \
-    nfcFL.eseFL._ESE_APDU_GATE_RESET = 2;                             \
-    nfcFL.eseFL._NXP_ESE_VER = JCOP_VER_4_0;                          \
-    nfcFL.eseFL._NXP_LDR_SVC_VER_2 = true;                            \
-                                                                      \
-    if (chipType == pn81T) {                                          \
-      CONFIGURE_FEATURELIST_NFCC(pn557)                               \
-      nfcFL.nfccFL._NFCC_SPI_FW_DOWNLOAD_SYNC = true;                 \
-      nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED = 4;                      \
-                                                                      \
-      nfcFL.eseFL._ESE_FELICA_CLT = true;                             \
-      nfcFL.eseFL._ESE_DUAL_MODE_PRIO_SCHEME =                        \
-          nfcFL.eseFL._ESE_WIRED_MODE_RESUME;                         \
-      nfcFL.eseFL._ESE_RESET_METHOD = true;                           \
-      nfcFL.eseFL._ESE_POWER_MODE = true;                             \
-      nfcFL.eseFL._ESE_P73_ISO_RST = true;                            \
-      nfcFL.eseFL._WIRED_MODE_STANDBY = true;                         \
-      nfcFL.eseFL._ESE_ETSI_READER_ENABLE = true;                     \
-      nfcFL.eseFL._ESE_SVDD_SYNC = true;                              \
-      nfcFL.eseFL._ESE_JCOP_DWNLD_PROTECTION = true;                  \
-      nfcFL.eseFL._UICC_HANDLE_CLEAR_ALL_PIPES = true;                \
-      nfcFL.eseFL._GP_CONTINOUS_PROCESSING = false;                   \
-      nfcFL.eseFL._ESE_DWP_SPI_SYNC_ENABLE = true;                    \
-      nfcFL.eseFL._ESE_ETSI12_PROP_INIT = true;                       \
-    }                                                                 \
-    if (chipType == pn80T) {                                          \
-      CONFIGURE_FEATURELIST_NFCC(pn553)                               \
-      nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED = 4;                      \
-                                                                      \
-      nfcFL.eseFL._ESE_FELICA_CLT = true;                             \
-      nfcFL.eseFL._WIRED_MODE_STANDBY = true;                         \
-      nfcFL.eseFL._ESE_DUAL_MODE_PRIO_SCHEME =                        \
-          nfcFL.eseFL._ESE_WIRED_MODE_RESUME;                         \
-      nfcFL.eseFL._ESE_RESET_METHOD = true;                           \
-      nfcFL.eseFL._ESE_ETSI_READER_ENABLE = true;                     \
-      nfcFL.eseFL._ESE_SVDD_SYNC = true;                              \
-      nfcFL.eseFL._ESE_JCOP_DWNLD_PROTECTION = true;                  \
-      nfcFL.eseFL._UICC_HANDLE_CLEAR_ALL_PIPES = true;                \
-      nfcFL.eseFL._ESE_DWP_SPI_SYNC_ENABLE = true;                    \
-      nfcFL.eseFL._ESE_POWER_MODE = true;                             \
-      nfcFL.eseFL._ESE_P73_ISO_RST = true;                            \
-                                                                      \
-      nfcFL.nfcMwFL._NCI_PWR_LINK_PARAM_CMD_SIZE = 0x02;              \
-      nfcFL.nfcMwFL._NCI_EE_PWR_LINK_ALWAYS_ON = 0x01;                \
-    } else if (chipType == pn67T) {                                   \
-      CONFIGURE_FEATURELIST_NFCC(pn551)                               \
-      nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED = 3;                      \
-                                                                      \
-      nfcFL.eseFL._TRIPLE_MODE_PROTECTION = true;                     \
-      nfcFL.eseFL._WIRED_MODE_STANDBY_PROP = true;                    \
-      nfcFL.eseFL._ESE_FORCE_ENABLE = true;                           \
-      nfcFL.eseFL._ESE_ETSI_READER_ENABLE = true;                     \
-      nfcFL.eseFL._ESE_SVDD_SYNC = true;                              \
-      nfcFL.eseFL._LEGACY_APDU_GATE = true;                           \
-      nfcFL.eseFL._NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION = true; \
-      nfcFL.eseFL._ESE_DWP_SPI_SYNC_ENABLE = true;                    \
-      nfcFL.eseFL._NXP_ESE_VER = JCOP_VER_3_3;                        \
-    } else if (chipType == pn66T) {                                   \
-      CONFIGURE_FEATURELIST_NFCC(pn548C2)                             \
-      nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED = 3;                      \
-                                                                      \
-      nfcFL.eseFL._TRIPLE_MODE_PROTECTION = true;                     \
-      nfcFL.eseFL._WIRED_MODE_STANDBY_PROP = true;                    \
-      nfcFL.eseFL._ESE_FORCE_ENABLE = true;                           \
-      nfcFL.eseFL._ESE_ETSI_READER_ENABLE = true;                     \
-      nfcFL.eseFL._ESE_SVDD_SYNC = true;                              \
-      nfcFL.eseFL._LEGACY_APDU_GATE = true;                           \
-      nfcFL.eseFL._NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION = true; \
-      nfcFL.eseFL._ESE_DWP_SPI_SYNC_ENABLE = true;                    \
-      nfcFL.eseFL._NXP_ESE_VER = JCOP_VER_3_3;                        \
-    } else if (chipType == pn65T) {                                   \
-      CONFIGURE_FEATURELIST_NFCC(pn547C2)                             \
-      nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED = 3;                      \
-      nfcFL.eseFL._ESE_WIRED_MODE_DISABLE_DISCOVERY = true;           \
-      nfcFL.eseFL._LEGACY_APDU_GATE = true;                           \
-    }                                                                 \
   }
 
 #define CONFIGURE_FEATURELIST_NFCC(chipType)                                \
   {                                                                         \
-    nfcFL.eseFL._ESE_WIRED_MODE_TIMEOUT = 3;                                \
-    nfcFL.eseFL._ESE_WIRED_MODE_DISABLE_DISCOVERY = false;                  \
-    nfcFL.eseFL._LEGACY_APDU_GATE = false;                                  \
-    nfcFL.eseFL._TRIPLE_MODE_PROTECTION = false;                            \
-    nfcFL.eseFL._ESE_FELICA_CLT = false;                                    \
-    nfcFL.eseFL._WIRED_MODE_STANDBY_PROP = false;                           \
-    nfcFL.eseFL._WIRED_MODE_STANDBY = false;                                \
-    nfcFL.eseFL._ESE_DUAL_MODE_PRIO_SCHEME =                                \
-        nfcFL.eseFL._ESE_WIRED_MODE_TIMEOUT;                                \
-    nfcFL.eseFL._ESE_FORCE_ENABLE = false;                                  \
-    nfcFL.eseFL._ESE_RESET_METHOD = false;                                  \
-    nfcFL.eseFL._ESE_ETSI_READER_ENABLE = false;                            \
-    nfcFL.eseFL._ESE_SVDD_SYNC = false;                                     \
-    nfcFL.eseFL._NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION = false;        \
-    nfcFL.eseFL._ESE_JCOP_DWNLD_PROTECTION = false;                         \
-    nfcFL.eseFL._UICC_HANDLE_CLEAR_ALL_PIPES = false;                       \
-    nfcFL.eseFL._GP_CONTINOUS_PROCESSING = false;                           \
-    nfcFL.eseFL._ESE_DWP_SPI_SYNC_ENABLE = false;                           \
-    nfcFL.eseFL._ESE_ETSI12_PROP_INIT = false;                              \
-    nfcFL.eseFL._ESE_WIRED_MODE_PRIO = false;                               \
-    nfcFL.eseFL._ESE_UICC_EXCLUSIVE_WIRED_MODE = false;                     \
-    nfcFL.eseFL._ESE_POWER_MODE = false;                                    \
-    nfcFL.eseFL._ESE_P73_ISO_RST = false;                                   \
-    nfcFL.eseFL._BLOCK_PROPRIETARY_APDU_GATE = false;                       \
-    nfcFL.eseFL._JCOP_WA_ENABLE = true;                                     \
-    nfcFL.eseFL._EXCLUDE_NV_MEM_DEPENDENCY = false;                         \
-    nfcFL.nfccFL._NXP_NFC_UICC_ETSI12 = false;                              \
-    nfcFL.nfccFL._NFCC_SPI_FW_DOWNLOAD_SYNC = false;                        \
+    nfcFL._PHDNLDNFC_USERDATA_EEPROM_OFFSET = 0x023CU;                      \
+    nfcFL._PHDNLDNFC_USERDATA_EEPROM_LEN = 0x0C80U;                         \
                                                                             \
-    nfcFL.platformFL._NFCC_RESET_RSP_LEN = 0;                               \
+    if (chipType == pn557 || chipType == pn81T) {                           \
                                                                             \
-    nfcFL.nfcMwFL._NCI_INTERFACE_UICC_DIRECT = 0x00;                        \
-    nfcFL.nfcMwFL._NCI_INTERFACE_ESE_DIRECT = 0x00;                         \
-    nfcFL.nfcMwFL._NCI_PWR_LINK_PARAM_CMD_SIZE = 0x02;                      \
-    nfcFL.nfcMwFL._NCI_EE_PWR_LINK_ALWAYS_ON = 0x01;                        \
-    nfcFL.nfcMwFL._PHDNLDNFC_USERDATA_EEPROM_OFFSET = 0x023CU;              \
-    nfcFL.nfcMwFL._PHDNLDNFC_USERDATA_EEPROM_LEN = 0x0C80U;                 \
-    nfcFL.nfcMwFL._FW_MOBILE_MAJOR_NUMBER = FW_MOBILE_MAJOR_NUMBER_PN48AD;  \
+      STRCPY_FW_LIB("libpn557_fw")                                          \
+      STRCPY_FW_BIN("pn557")                                                \
                                                                             \
-    if (chipType == pn557) {                                                \
-      nfcFL.nfccFL._NFCC_I2C_READ_WRITE_IMPROVEMENT = true;                 \
-      nfcFL.nfccFL._NFCC_MIFARE_TIANJIN = false;                            \
-      nfcFL.nfccFL._NFCC_MW_RCVRY_BLK_FW_DNLD = true;                       \
-      nfcFL.nfccFL._NFCC_DYNAMIC_DUAL_UICC = true;                          \
-      nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH = false;              \
-      nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH = true;            \
-      nfcFL.nfccFL._NFCC_FW_WA = true;                                      \
-      nfcFL.nfccFL._NFCC_FORCE_NCI1_0_INIT = false;                         \
-      nfcFL.nfccFL._NFCC_SPI_FW_DOWNLOAD_SYNC = true;                       \
-      nfcFL.nfccFL._HW_ANTENNA_LOOP4_SELF_TEST = false;                     \
-      nfcFL.nfccFL._NFCEE_REMOVED_NTF_RECOVERY = true;                      \
-      nfcFL.nfccFL._NFCC_FORCE_FW_DOWNLOAD = true;                          \
-      nfcFL.nfccFL._UICC_CREATE_CONNECTIVITY_PIPE = true;                   \
-      nfcFL.nfccFL._NXP_NFC_UICC_ETSI12 = false;                            \
-      nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED = 3;                            \
+      nfcFL._FW_MOBILE_MAJOR_NUMBER = FW_MOBILE_MAJOR_NUMBER_PN557;         \
+    } else if (chipType == pn553 || chipType == pn80T) {                    \
                                                                             \
-      nfcFL.eseFL._ESE_ETSI12_PROP_INIT = true;                             \
-      nfcFL.eseFL._EXCLUDE_NV_MEM_DEPENDENCY = true;                        \
+      STRCPY_FW_LIB("libpn553_fw")                                          \
+      STRCPY_FW_BIN("pn553")                                                \
                                                                             \
-      nfcFL.platformFL._NFCC_RESET_RSP_LEN = 0x10U;                         \
+      nfcFL._FW_MOBILE_MAJOR_NUMBER = FW_MOBILE_MAJOR_NUMBER_PN553;         \
                                                                             \
-      nfcFL.nfcMwFL._NCI_INTERFACE_UICC_DIRECT = 0x82;                      \
-      nfcFL.nfcMwFL._NCI_INTERFACE_ESE_DIRECT = 0x83;                       \
+    } else if (chipType == pn551 || chipType == pn67T) {                    \
                                                                             \
-    } else if (chipType == pn553) {                                         \
-      nfcFL.nfccFL._NFCC_I2C_READ_WRITE_IMPROVEMENT = true;                 \
-      nfcFL.nfccFL._NFCC_MIFARE_TIANJIN = false;                            \
-      nfcFL.nfccFL._NFCC_MW_RCVRY_BLK_FW_DNLD = true;                       \
-      nfcFL.nfccFL._NFCC_DYNAMIC_DUAL_UICC = true;                          \
-      nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH = false;              \
-      nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH = true;            \
-      nfcFL.nfccFL._NFCC_FW_WA = true;                                      \
-      nfcFL.nfccFL._NFCC_FORCE_NCI1_0_INIT = true;                          \
-      nfcFL.nfccFL._NFCC_ROUTING_BLOCK_BIT = true;                          \
-      nfcFL.nfccFL._NFCC_SPI_FW_DOWNLOAD_SYNC = true;                       \
-      nfcFL.nfccFL._HW_ANTENNA_LOOP4_SELF_TEST = false;                     \
-      nfcFL.nfccFL._NFCEE_REMOVED_NTF_RECOVERY = true;                      \
-      nfcFL.nfccFL._NFCC_FORCE_FW_DOWNLOAD = true;                          \
-      nfcFL.nfccFL._UICC_CREATE_CONNECTIVITY_PIPE = true;                   \
-      nfcFL.nfccFL._NFCC_AID_MATCHING_PLATFORM_CONFIG = false;              \
-      nfcFL.nfccFL._NFCC_ROUTING_BLOCK_BIT_PROP = false;                    \
-      nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED = 3;                            \
+      STRCPY_FW_LIB("libpn551_fw")                                          \
+      STRCPY_FW_BIN("pn551")                                                \
                                                                             \
-      nfcFL.eseFL._ESE_ETSI12_PROP_INIT = true;                             \
-      nfcFL.eseFL._JCOP_WA_ENABLE = false;                                  \
-      nfcFL.eseFL._EXCLUDE_NV_MEM_DEPENDENCY = true;                        \
+      nfcFL._PHDNLDNFC_USERDATA_EEPROM_OFFSET = 0x02BCU;                    \
+      nfcFL._PHDNLDNFC_USERDATA_EEPROM_LEN = 0x0C00U;                       \
+      nfcFL._FW_MOBILE_MAJOR_NUMBER = FW_MOBILE_MAJOR_NUMBER_PN551;         \
                                                                             \
-      nfcFL.platformFL._NFCC_RESET_RSP_LEN = 0x10U;                         \
-                                                                            \
-      nfcFL.nfcMwFL._NCI_INTERFACE_UICC_DIRECT = 0x82;                      \
-      nfcFL.nfcMwFL._NCI_INTERFACE_ESE_DIRECT = 0x83;                       \
-                                                                            \
-      SRTCPY_FW("libpn553tc_fw", "libpn553tc_fw_platform",                  \
-                "libpn553tc_fw_pku")                                        \
-                                                                            \
-      nfcFL.nfcMwFL._FW_MOBILE_MAJOR_NUMBER = FW_MOBILE_MAJOR_NUMBER_PN553; \
-                                                                            \
-    } else if (chipType == pn551) {                                         \
-      nfcFL.nfccFL._NFCC_I2C_READ_WRITE_IMPROVEMENT = true;                 \
-      nfcFL.nfccFL._NFCC_MIFARE_TIANJIN = true;                             \
-      nfcFL.nfccFL._NFCC_MW_RCVRY_BLK_FW_DNLD = false;                      \
-      nfcFL.nfccFL._NFCC_DYNAMIC_DUAL_UICC = false;                         \
-      nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH = true;               \
-      nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH = false;           \
-      nfcFL.nfccFL._NFCC_FW_WA = false;                                     \
-      nfcFL.nfccFL._NFCC_FORCE_NCI1_0_INIT = false;                         \
-      nfcFL.nfccFL._NFCC_ROUTING_BLOCK_BIT = false;                         \
-      nfcFL.nfccFL._NFCC_SPI_FW_DOWNLOAD_SYNC = false;                      \
-      nfcFL.nfccFL._HW_ANTENNA_LOOP4_SELF_TEST = true;                      \
-      nfcFL.nfccFL._NFCEE_REMOVED_NTF_RECOVERY = true;                      \
-      nfcFL.nfccFL._NFCC_FORCE_FW_DOWNLOAD = false;                         \
-      nfcFL.nfccFL._UICC_CREATE_CONNECTIVITY_PIPE = false;                  \
-      nfcFL.nfccFL._NFCC_AID_MATCHING_PLATFORM_CONFIG = true;               \
-      nfcFL.nfccFL._NFCC_ROUTING_BLOCK_BIT_PROP = true;                     \
-      nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED = 2;                            \
-                                                                            \
-      nfcFL.eseFL._ESE_FORCE_ENABLE = true;                                 \
-                                                                            \
-      nfcFL.platformFL._NFCC_RESET_RSP_LEN = 0x11U;                         \
-                                                                            \
-      nfcFL.nfcMwFL._NCI_INTERFACE_UICC_DIRECT = 0x82;                      \
-      nfcFL.nfcMwFL._NCI_INTERFACE_ESE_DIRECT = 0x83;                       \
-                                                                            \
-      SRTCPY_FW("libpn551_fw", "libpn551_fw_platform", "libpn551_fw_pku")   \
-                                                                            \
-      nfcFL.nfcMwFL._PHDNLDNFC_USERDATA_EEPROM_OFFSET = 0x02BCU;            \
-      nfcFL.nfcMwFL._PHDNLDNFC_USERDATA_EEPROM_LEN = 0x0C00U;               \
-      nfcFL.nfcMwFL._FW_MOBILE_MAJOR_NUMBER = FW_MOBILE_MAJOR_NUMBER_PN551; \
-                                                                            \
-    } else if (chipType == pn548C2) {                                       \
-      nfcFL.nfccFL._NFCC_I2C_READ_WRITE_IMPROVEMENT = true;                 \
-      nfcFL.nfccFL._NFCC_MIFARE_TIANJIN = true;                             \
-      nfcFL.nfccFL._NFCC_MW_RCVRY_BLK_FW_DNLD = false;                      \
-      nfcFL.nfccFL._NFCC_DYNAMIC_DUAL_UICC = false;                         \
-      nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH = true;               \
-      nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH = false;           \
-      nfcFL.nfccFL._NFCC_FW_WA = false;                                     \
-      nfcFL.nfccFL._NFCC_FORCE_NCI1_0_INIT = false;                         \
-      nfcFL.nfccFL._NFCC_ROUTING_BLOCK_BIT = false;                         \
-      nfcFL.nfccFL._NFCC_SPI_FW_DOWNLOAD_SYNC = false;                      \
-      nfcFL.nfccFL._HW_ANTENNA_LOOP4_SELF_TEST = true;                      \
-      nfcFL.nfccFL._NFCEE_REMOVED_NTF_RECOVERY = true;                      \
-      nfcFL.nfccFL._NFCC_FORCE_FW_DOWNLOAD = false;                         \
-      nfcFL.nfccFL._UICC_CREATE_CONNECTIVITY_PIPE = false;                  \
-      nfcFL.nfccFL._NFCC_AID_MATCHING_PLATFORM_CONFIG = true;               \
-      nfcFL.nfccFL._NFCC_ROUTING_BLOCK_BIT_PROP = true;                     \
-      nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED = 2;                            \
-                                                                            \
-      nfcFL.eseFL._ESE_FORCE_ENABLE = true;                                 \
-                                                                            \
-      nfcFL.nfcMwFL._NCI_INTERFACE_UICC_DIRECT = 0x82;                      \
-      nfcFL.nfcMwFL._NCI_INTERFACE_ESE_DIRECT = 0x83;                       \
-                                                                            \
-      SRTCPY_FW("libpn548ad_fw", "libpn548ad_fw_platform",                  \
-                "libpn548ad_fw_pku")                                        \
-                                                                            \
-      nfcFL.nfcMwFL._PHDNLDNFC_USERDATA_EEPROM_OFFSET = 0x02BCU;            \
-      nfcFL.nfcMwFL._PHDNLDNFC_USERDATA_EEPROM_LEN = 0x0C00U;               \
-                                                                            \
-    } else if (chipType == pn547C2) {                                       \
-      nfcFL.nfccFL._NFCC_I2C_READ_WRITE_IMPROVEMENT = false;                \
-      nfcFL.nfccFL._NFCC_MIFARE_TIANJIN = true;                             \
-      nfcFL.nfccFL._NFCC_MW_RCVRY_BLK_FW_DNLD = false;                      \
-      nfcFL.nfccFL._NFCC_DYNAMIC_DUAL_UICC = false;                         \
-      nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH = false;              \
-      nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH = false;           \
-      nfcFL.nfccFL._NFCC_FW_WA = false;                                     \
-      nfcFL.nfccFL._NFCC_FORCE_NCI1_0_INIT = false;                         \
-      nfcFL.nfccFL._NFCC_ROUTING_BLOCK_BIT = false;                         \
-      nfcFL.nfccFL._NFCC_SPI_FW_DOWNLOAD_SYNC = false;                      \
-      nfcFL.nfccFL._HW_ANTENNA_LOOP4_SELF_TEST = true;                      \
-      nfcFL.nfccFL._NFCEE_REMOVED_NTF_RECOVERY = true;                      \
-      nfcFL.nfccFL._NFCC_FORCE_FW_DOWNLOAD = false;                         \
-      nfcFL.nfccFL._UICC_CREATE_CONNECTIVITY_PIPE = false;                  \
-      nfcFL.nfccFL._NFCC_AID_MATCHING_PLATFORM_CONFIG = true;               \
-      nfcFL.nfccFL._NFCC_ROUTING_BLOCK_BIT_PROP = false;                    \
-      nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED = 2;                            \
-                                                                            \
-      nfcFL.nfcMwFL._NCI_INTERFACE_UICC_DIRECT = 0x81;                      \
-      nfcFL.nfcMwFL._NCI_INTERFACE_ESE_DIRECT = 0x82;                       \
-                                                                            \
-      SRTCPY_FW("libpn547_fw", "libpn547_fw_platform", "libpn547_fw_pku")   \
     }                                                                       \
   }
-#ifdef __cplusplus
-#define SRTCPY_FW(str1, str2, str3)
-#else
-#define SRTCPY_FW(str1, str2, str3)                                          \
-  snprintf(nfcFL.nfcMwFL._FW_LIB_PATH, STRMAX_2, "%s%s%s", FW_DLL_ROOT_DIR,  \
-           str1, FW_DLL_EXTENSION);                                          \
-  snprintf(nfcFL.nfcMwFL._PLATFORM_LIB_PATH, STRMAX_2, "%s%s%s",             \
-           FW_DLL_ROOT_DIR, str2, FW_DLL_EXTENSION);                         \
-  snprintf(nfcFL.nfcMwFL._PKU_LIB_PATH, STRMAX_2, "%s%s%s", FW_DLL_ROOT_DIR, \
-           str3, FW_DLL_EXTENSION);
-#endif
+#define STRCPY_FW_LIB(str) {                                                \
+  nfcFL._FW_LIB_PATH.clear();                                               \
+  nfcFL._FW_LIB_PATH.append(FW_LIB_ROOT_DIR);                               \
+  nfcFL._FW_LIB_PATH.append(str);                                           \
+  nfcFL._FW_LIB_PATH.append(FW_LIB_EXTENSION);                              \
+}
+#define STRCPY_FW_BIN(str) {                                                \
+  nfcFL._FW_BIN_PATH.clear();                                               \
+  nfcFL._FW_BIN_PATH.append(FW_BIN_ROOT_DIR);                               \
+  nfcFL._FW_BIN_PATH.append(str);                                           \
+  nfcFL._FW_BIN_PATH.append(FW_BIN_EXTENSION);                              \
+}
 #endif
diff --git a/halimpl/common/phNfcCommon.h b/halimpl/common/phNfcCommon.h
index 323804c..919b191 100755
--- a/halimpl/common/phNfcCommon.h
+++ b/halimpl/common/phNfcCommon.h
@@ -33,55 +33,10 @@
 #include <pthread.h>
 #include <semaphore.h>
 
-#define FW_DLL_ROOT_DIR "/system/vendor/lib/"
-#define FW_DLL_EXTENSION ".so"
-
-#if (NFC_NXP_CHIP_TYPE == PN548C2)
-
-/* Actual FW library name*/
-#define FW_LIB_PATH FW_DLL_ROOT_DIR "libpn548ad_fw" FW_DLL_EXTENSION
-/* Restore Corrupted PLL Setttings/etc */
-#define PLATFORM_LIB_PATH \
-  FW_DLL_ROOT_DIR "libpn548ad_fw_platform" FW_DLL_EXTENSION
-/* Upgrade the public Key */
-#define PKU_LIB_PATH FW_DLL_ROOT_DIR "libpn548ad_fw_pku" FW_DLL_EXTENSION
-#elif(NFC_NXP_CHIP_TYPE == PN551)
-/* Actual FW library name*/
-#define FW_LIB_PATH FLASH_CONF_ROOT_DIR "libpn551_fw" FW_DLL_EXTENSION
-/* Restore Corrupted PLL Settings/etc */
-#define PLATFORM_LIB_PATH \
-  FW_DLL_ROOT_DIR "libpn551_fw_platform" FW_DLL_EXTENSION
-/* Upgrade the public Key */
-#define PKU_LIB_PATH FW_DLL_ROOT_DIR "libpn551_fw_pku" FW_DLL_EXTENSION
-#elif(NFC_NXP_CHIP_TYPE == PN553)
-/* Actual FW library name*/
-#define FW_LIB_PATH FLASH_CONF_ROOT_DIR "libpn553_fw" FW_DLL_EXTENSION
-/* Restore Corrupted PLL Settings/etc */
-#define PLATFORM_LIB_PATH \
-  FW_DLL_ROOT_DIR "libpn553_fw_platform" FW_DLL_EXTENSION
-/* Upgrade the public Key */
-#define PKU_LIB_PATH FW_DLL_ROOT_DIR "libpn553_fw_pku" FW_DLL_EXTENSION
-#else
-/* Actual FW library name*/
-#define FW_LIB_PATH FW_DLL_ROOT_DIR "libpn547_fw" FW_DLL_EXTENSION
-/* Restore Corrupted PLL Settings/etc */
-#define PLATFORM_LIB_PATH \
-  FW_DLL_ROOT_DIR "libpn547_fw_platform" FW_DLL_EXTENSION
-/* Upgrade the public Key */
-#define PKU_LIB_PATH FW_DLL_ROOT_DIR "libpn547_fw_pku" FW_DLL_EXTENSION
-#endif
-
-#if (NFC_NXP_CHIP_TYPE == PN548C2)
-#define COMPILATION_MW "PN548C2"
-#elif(NFC_NXP_CHIP_TYPE == PN551)
-#define COMPILATION_MW "PN551"
-#elif(NFC_NXP_CHIP_TYPE == PN553)
-#define COMPILATION_MW "PN553"
-#elif(NFC_NXP_CHIP_TYPE == PN557)
-#define COMPILATION_MW "PN557"
-#else
-#define COMPILATION_MW "PN547C2"
-#endif
+#define FW_LIB_ROOT_DIR "/vendor/lib/"
+#define FW_BIN_ROOT_DIR "/vendor/firmware/"
+#define FW_LIB_EXTENSION ".so"
+#define FW_BIN_EXTENSION ".bin"
 
 /* HAL Version number (Updated as per release) */
 #define NXP_MW_VERSION_MAJ (3U)
diff --git a/halimpl/common/phNfcTypes.h b/halimpl/common/phNfcTypes.h
index 9f9b222..5333e3c 100755
--- a/halimpl/common/phNfcTypes.h
+++ b/halimpl/common/phNfcTypes.h
@@ -23,6 +23,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
+#include "Nxp_Features.h"
 
 #ifndef TRUE
 #define TRUE (0x01) /* Logical True Value */
diff --git a/halimpl/dnld/phDnldNfc.cc b/halimpl/dnld/phDnldNfc.cc
old mode 100755
new mode 100644
index 93e35d3..1adf3ad
--- a/halimpl/dnld/phDnldNfc.cc
+++ b/halimpl/dnld/phDnldNfc.cc
@@ -24,13 +24,11 @@
 #include <phNxpConfig.h>
 #include <phNxpLog.h>
 #include <phTmlNfc.h>
-
+#include <string>
 static void* pFwHandle; /* Global firmware handle */
-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
-#endif
+uint16_t wMwVer = 0;    /* Middleware version no */
+uint16_t wFwVer = 0;    /* Firmware version no */
+uint8_t gRecFWDwnld;    // flag set to true to indicate dummy FW download
 phTmlNfc_i2cfragmentation_t fragmentation_enabled = I2C_FRAGMENATATION_DISABLED;
 static pphDnldNfc_DlContext_t gpphDnldContext = NULL; /* Download contex */
 #undef EEPROM_Read_Mem_IMP
@@ -244,17 +242,13 @@
       wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_BUSY);
     } else {
       if ((PHDNLDNFC_HWVER_MRA2_1 == bChipVer) ||
-          (PHDNLDNFC_HWVER_MRA2_2 == bChipVer)
-#if (NFC_NXP_CHIP_TYPE == PN551)
-          || (PHDNLDNFC_HWVER_PN551_MRA1_0 == bChipVer)
-#elif (NFC_NXP_CHIP_TYPE == PN548C2)
-          || (PHDNLDNFC_HWVER_PN548AD_MRA1_0 == bChipVer)
-#elif (NFC_NXP_CHIP_TYPE == PN553 || NFC_NXP_CHIP_TYPE == PN557)
-          || (PHDNLDNFC_HWVER_PN553_MRA1_0 == bChipVer) ||
-          (PHDNLDNFC_HWVER_PN553_MRA1_0_UPDATED & bChipVer) ||
-          (PHDNLDNFC_HWVER_PN557_MRA1_0 ==  bChipVer)
-#endif
-              ) {
+          (PHDNLDNFC_HWVER_MRA2_2 == bChipVer) ||
+          ((nfcFL.chipType == pn551) &&
+           (PHDNLDNFC_HWVER_PN551_MRA1_0 == bChipVer)) ||
+          (((nfcFL.chipType == pn553) || (nfcFL.chipType == pn557)) &&
+           ((PHDNLDNFC_HWVER_PN553_MRA1_0 == bChipVer) ||
+            (PHDNLDNFC_HWVER_PN553_MRA1_0_UPDATED & bChipVer) ||
+            (PHDNLDNFC_HWVER_PN557_MRA1_0 == bChipVer)))) {
         (gpphDnldContext->FrameInp.Type) = phDnldNfc_ChkIntg;
       } else {
         (gpphDnldContext->FrameInp.Type) = phDnldNfc_FTNone;
@@ -734,16 +728,10 @@
 **
 *******************************************************************************/
 NFCSTATUS phDnldNfc_InitImgInfo(void) {
-  NFCSTATUS wStatus     = NFCSTATUS_SUCCESS;
-  uint8_t* pImageInfo   = NULL;
+  NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
+  uint8_t* pImageInfo = NULL;
   uint16_t ImageInfoLen = 0;
-  uint8_t fwPathLen     = 0;
-  char* fwFullPath      = NULL;
-  char fwName[50];
-  char fwPath[100];
-
-  memset(fwName, 0, sizeof(fwName));
-  memset(fwPath, 0, sizeof(fwPath));
+  unsigned long fwType = FW_FORMAT_SO;
 
   /* if memory is not allocated then allocate memory for download context
    * structure */
@@ -752,29 +740,22 @@
   gpphDnldContext->FwFormat = FW_FORMAT_UNKNOWN;
 
   /*Read Firmware file name from config file*/
-  if (GetNxpStrValue(NAME_NXP_FW_NAME, (char*)fwName, sizeof(fwName)) == true) {
-    strcpy(fwPath, FW_DLL_ROOT_DIR);
-    strncat(fwPath, fwName, strlen(fwName));
-    fwPathLen = strlen(fwPath);
-    fwFullPath = fwPath;
+  if (GetNxpNumValue(NAME_NXP_FW_TYPE, &fwType, sizeof(fwType)) == true) {
+    NXPLOG_FWDNLD_D("firmware type from conf file: %lu",fwType);
+  } else {
+    NXPLOG_FWDNLD_W("firmware type not found. Taking default value: %lu",fwType);
   }
 
-  if (!memcmp(&fwPath[fwPathLen - 3], ".so", 3) ) {
-    gpphDnldContext->FwFormat = FW_FORMAT_SO;
-  } else  if (!memcmp(&fwPath[fwPathLen - 4], ".bin", 4) ) {
+  if(fwType == FW_FORMAT_BIN) {
     gpphDnldContext->FwFormat = FW_FORMAT_BIN;
-  }
-
-  if(gpphDnldContext->FwFormat == FW_FORMAT_SO) {
-  /* load the library and get the image info pointer */
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-  if (gRecFWDwnld == true)
-    wStatus = phDnldNfc_LoadRecoveryFW(fwFullPath, &pImageInfo, &ImageInfoLen);
-  else
-#endif
-    wStatus = phDnldNfc_LoadFW(fwFullPath, &pImageInfo, &ImageInfoLen);
-  } else if(gpphDnldContext->FwFormat == FW_FORMAT_BIN) {
-      wStatus = phDnldNfc_LoadBinFW(fwFullPath, &pImageInfo, &ImageInfoLen);
+    wStatus = phDnldNfc_LoadBinFW(&pImageInfo, &ImageInfoLen);
+  } else if(fwType == FW_FORMAT_SO) {
+    gpphDnldContext->FwFormat = FW_FORMAT_SO;
+    if (gRecFWDwnld == true) {
+      wStatus = phDnldNfc_LoadRecoveryFW(&pImageInfo, &ImageInfoLen);
+    } else {
+      wStatus = phDnldNfc_LoadFW(&pImageInfo, &ImageInfoLen);
+    }
   } else {
     NXPLOG_FWDNLD_E("firmware file format mismatch!!!\n");
     return NFCSTATUS_FAILED;
@@ -846,13 +827,11 @@
   /* if memory is not allocated then allocate memory for donwload context
    * structure */
   phDnldNfc_SetHwDevHandle();
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
   if (gRecFWDwnld == true)
-    wStatus =
-        phDnldNfc_LoadRecoveryFW(PLATFORM_LIB_PATH, &pImageInfo, &ImageInfoLen);
+    wStatus = phDnldNfc_LoadRecoveryFW(&pImageInfo, &ImageInfoLen);
   else
-#endif
-    wStatus = phDnldNfc_LoadFW(PLATFORM_LIB_PATH, &pImageInfo, &ImageInfoLen);
+    wStatus = phDnldNfc_LoadFW(&pImageInfo, &ImageInfoLen);
+
   if ((pImageInfo == NULL) || (ImageInfoLen == 0)) {
     NXPLOG_FWDNLD_E(
         "Image extraction Failed - invalid imginfo or imginfolen!!");
@@ -903,15 +882,11 @@
   /* if memory is not allocated then allocate memory for donwload context
    * structure */
   phDnldNfc_SetHwDevHandle();
-
-/* load the PKU image library */
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
+  /* load the PKU image library */
   if (gRecFWDwnld == true)
-    wStatus =
-        phDnldNfc_LoadRecoveryFW(PKU_LIB_PATH, &pImageInfo, &ImageInfoLen);
+    wStatus = phDnldNfc_LoadRecoveryFW(&pImageInfo, &ImageInfoLen);
   else
-#endif
-    wStatus = phDnldNfc_LoadFW(PKU_LIB_PATH, &pImageInfo, &ImageInfoLen);
+    wStatus = phDnldNfc_LoadFW(&pImageInfo, &ImageInfoLen);
   if ((pImageInfo == NULL) || (ImageInfoLen == 0)) {
     NXPLOG_FWDNLD_E(
         "Image extraction Failed - invalid imginfo or imginfolen!!");
@@ -955,18 +930,18 @@
 *******************************************************************************/
 void phDnldNfc_CloseFwLibHandle(void) {
   NFCSTATUS wStatus = NFCSTATUS_FAILED;
-  if(gpphDnldContext->FwFormat == FW_FORMAT_SO) {
-      wStatus = phDnldNfc_UnloadFW();
-      if (wStatus != NFCSTATUS_SUCCESS) {
-          NXPLOG_FWDNLD_E("free library FAILED !!\n");
-      } else {
-          NXPLOG_FWDNLD_E("free library SUCCESS !!\n");
-      }
-  } else if(gpphDnldContext->FwFormat == FW_FORMAT_BIN) {
-      if(pFwHandle!=NULL) {
-          free(pFwHandle);
-          pFwHandle = NULL;
-      }
+  if (gpphDnldContext->FwFormat == FW_FORMAT_SO) {
+    wStatus = phDnldNfc_UnloadFW();
+    if (wStatus != NFCSTATUS_SUCCESS) {
+      NXPLOG_FWDNLD_E("free library FAILED !!\n");
+    } else {
+      NXPLOG_FWDNLD_E("free library SUCCESS !!\n");
+    }
+  } else if (gpphDnldContext->FwFormat == FW_FORMAT_BIN) {
+    if (pFwHandle != NULL) {
+      free(pFwHandle);
+      pFwHandle = NULL;
+    }
   }
   return;
 }
@@ -977,40 +952,25 @@
 **
 ** Description      Load the firmware version form firmware lib
 **
-** Parameters       pathName    - Firmware image path
-**                  pImgInfo    - Firmware image handle
+** Parameters       pImgInfo    - Firmware image handle
 **                  pImgInfoLen - Firmware image length
 **
 ** Returns          NFC status
 **
 *******************************************************************************/
-NFCSTATUS phDnldNfc_LoadFW(const char* pathName, uint8_t** pImgInfo,
-                           uint16_t* pImgInfoLen) {
+NFCSTATUS phDnldNfc_LoadFW(uint8_t** pImgInfo, uint16_t* pImgInfoLen) {
   void* pImageInfo = NULL;
   void* pImageInfoLen = NULL;
-  if (pathName == NULL) {
-#if (NFC_NXP_CHIP_TYPE == PN548C2)
-    pathName = "/system/vendor/lib/libpn548ad_fw.so";
-#elif (NFC_NXP_CHIP_TYPE == PN551)
-    pathName = "/system/vendor/lib/libpn551_fw.so";
-#elif (NFC_NXP_CHIP_TYPE == PN553)
-    pathName = "/system/vendor/lib/libpn553_fw.so";
-#elif (NFC_NXP_CHIP_TYPE == PN557)
-    pathName = "/system/vendor/lib/libpn557_fw.so";
-#else
-    pathName = "/system/vendor/lib/libpn547_fw.so";
-#endif
-  }
 
   /* check if the handle is not NULL then free the library */
   if (pFwHandle != NULL) {
-    phDnldNfc_UnloadFW();
+    phDnldNfc_CloseFwLibHandle();
     pFwHandle = NULL;
   }
 
   /* load the DLL file */
-  pFwHandle = dlopen(pathName, RTLD_LAZY);
-  NXPLOG_FWDNLD_D("@@@%s", pathName);
+  pFwHandle = dlopen(nfcFL._FW_LIB_PATH.c_str(), RTLD_LAZY);
+  NXPLOG_FWDNLD_D("@@@%s", nfcFL._FW_LIB_PATH.c_str());
 
   /* if library load failed then handle will be NULL */
   if (pFwHandle == NULL) {
@@ -1047,34 +1007,32 @@
 **
 ** Description      Load the firmware version form firmware lib
 **
-** Parameters       pathName    - Firmware image path
-**                  pImgInfo    - Firmware image handle
+** Parameters       pImgInfo    - Firmware image handle
 **                  pImgInfoLen - Firmware image length
 **
 ** Returns          NFC status
 **
 *******************************************************************************/
-NFCSTATUS phDnldNfc_LoadBinFW(const char* pathName, uint8_t **pImgInfo,
-                              uint16_t* pImgInfoLen) {
-  FILE * pFile = NULL;
+NFCSTATUS phDnldNfc_LoadBinFW(uint8_t** pImgInfo, uint16_t* pImgInfoLen) {
+  FILE* pFile = NULL;
   uint32_t fileSize = 0;
   uint32_t bytesRead = 0;
   long ftellFileSize = 0;
 
   /* check for path name */
-  if (pathName == NULL) {
+  if (nfcFL._FW_BIN_PATH.c_str() == NULL) {
     NXPLOG_FWDNLD_E("Invalid FW file path!!!\n");
     return NFCSTATUS_FAILED;
   }
 
   /* check if the handle is not NULL then free the memory*/
   if (pFwHandle != NULL) {
-    free(pFwHandle);
+    phDnldNfc_CloseFwLibHandle();
     pFwHandle = NULL;
   }
 
   /* Open the FW binary image file to be read */
-  pFile = fopen(pathName, "r");
+  pFile = fopen(nfcFL._FW_BIN_PATH.c_str(), "r");
   if (NULL == pFile) {
     NXPLOG_FWDNLD_E("Failed to load FW binary image file!!!\n");
     return NFCSTATUS_FAILED;
@@ -1086,7 +1044,7 @@
   /* get the actual length of the file */
   ftellFileSize = ftell(pFile);
 
-  if(ftellFileSize > 0) {
+  if (ftellFileSize > 0) {
     fileSize = ftellFileSize;
   } else {
     fileSize = 0;
@@ -1096,17 +1054,18 @@
   fseek(pFile, 0, SEEK_SET);
 
   /* allocate the memory to read the FW binary image */
-  pFwHandle = (void*)malloc(sizeof(uint8_t)*fileSize);
+  pFwHandle = (void*)malloc(sizeof(uint8_t) * fileSize);
 
   /* check for valid memory allocation */
-  if(NULL == pFwHandle) {
+  if (NULL == pFwHandle) {
     NXPLOG_FWDNLD_E("Failed to allocate memory to load FW image !!!\n");
     fclose(pFile);
     return NFCSTATUS_FAILED;
   }
 
   /* Read the actual contents of the FW binary image */
-  bytesRead = (uint32_t)fread(pFwHandle, sizeof(uint8_t), (size_t)fileSize, pFile);
+  bytesRead =
+      (uint32_t)fread(pFwHandle, sizeof(uint8_t), (size_t)fileSize, pFile);
   if (bytesRead != fileSize) {
     NXPLOG_FWDNLD_E("Unable to read the specified size from file !!!\n");
     fclose(pFile);
@@ -1124,7 +1083,6 @@
   return NFCSTATUS_SUCCESS;
 }
 
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
 /*******************************************************************************
 **
 ** Function         phDnldNfc_LoadRecoveryFW
@@ -1133,41 +1091,24 @@
 **                  recovery. This will change the FW version of the NFCC
 **                  firmware and enable flashing of firmware of same version.
 **
-** Parameters       pathName    - Firmware image path
-**                  pImgInfo    - Firmware image handle
+** Parameters       pImgInfo    - Firmware image handle
 **                  pImgInfoLen - Firmware image length
 **
 ** Returns          NFCSTATUS
 **
 *******************************************************************************/
-NFCSTATUS phDnldNfc_LoadRecoveryFW(const char* pathName, uint8_t** pImgInfo,
-                                   uint16_t* pImgInfoLen) {
+NFCSTATUS phDnldNfc_LoadRecoveryFW(uint8_t** pImgInfo, uint16_t* pImgInfoLen) {
   void* pImageInfo = NULL;
   void* pImageInfoLen = NULL;
 
-  /* check for path name */
-  if (pathName == NULL) {
-#if (NFC_NXP_CHIP_TYPE == PN548C2)
-    pathName = "/system/vendor/lib/libpn548ad_fw.so";
-#elif (NFC_NXP_CHIP_TYPE == PN551)
-    pathName = "/system/vendor/lib/libpn551_fw.so";
-#elif (NFC_NXP_CHIP_TYPE == PN553)
-    pathName = "/system/vendor/lib/libpn553_fw.so";
-#elif(NFC_NXP_CHIP_TYPE == PN557)
-    pathName = "/system/vendor/lib/libpn557_fw.so";
-#else
-    pathName = "/system/vendor/lib/libpn547_fw.so";
-#endif
-  }
-
   /* check if the handle is not NULL then free the library */
   if (pFwHandle != NULL) {
-    phDnldNfc_UnloadFW();
+    phDnldNfc_CloseFwLibHandle();
     pFwHandle = NULL;
   }
   /* load the DLL file */
-  pFwHandle = dlopen(pathName, RTLD_LAZY);
-  NXPLOG_FWDNLD_D("phDnldNfc_LoadRecoveryFW %s ", pathName);
+  pFwHandle = dlopen(nfcFL._FW_LIB_PATH.c_str(), RTLD_LAZY);
+  NXPLOG_FWDNLD_D("phDnldNfc_LoadRecoveryFW %s ", nfcFL._FW_LIB_PATH.c_str());
 
   /* if library load failed then handle will be NULL */
   if (pFwHandle == NULL) {
@@ -1197,7 +1138,6 @@
 
   return NFCSTATUS_SUCCESS;
 }
-#endif
 
 /*******************************************************************************
 **
diff --git a/halimpl/dnld/phDnldNfc.h b/halimpl/dnld/phDnldNfc.h
index 248f115..ae672ef 100755
--- a/halimpl/dnld/phDnldNfc.h
+++ b/halimpl/dnld/phDnldNfc.h
@@ -43,9 +43,6 @@
 #define PHDNLDNFC_HWVER_MRA2_1 (0x04U) /* ChipVersion MRA2.1 */
 #define PHDNLDNFC_HWVER_MRA2_2 (0x05U) /* ChipVersion MRA2.2 */
 
-/* PN548AD ChipVersion MRA1.0 */
-#define PHDNLDNFC_HWVER_PN548AD_MRA1_0 (0x08U)
-
 /* PN551 ChipVersion MRA1.0 */
 #define PHDNLDNFC_HWVER_PN551_MRA1_0 (0x08U)
 /* PN553-NCI1.0 ChipVersion MRA1.0 */
@@ -131,14 +128,9 @@
 extern NFCSTATUS phDnldNfc_LoadRecInfo(void);
 extern NFCSTATUS phDnldNfc_LoadPKInfo(void);
 extern void phDnldNfc_CloseFwLibHandle(void);
-extern NFCSTATUS phDnldNfc_LoadFW(const char* pathName, uint8_t** pImgInfo,
-                                  uint16_t* pImgInfoLen);
-extern NFCSTATUS phDnldNfc_LoadBinFW(const char* pathName, uint8_t** pImgInfo,
-                                     uint16_t* pImgInfoLen);
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-extern NFCSTATUS phDnldNfc_LoadRecoveryFW(const char* pathName,
-                                          uint8_t** pImgInfo,
+extern NFCSTATUS phDnldNfc_LoadFW(uint8_t** pImgInfo, uint16_t* pImgInfoLen);
+extern NFCSTATUS phDnldNfc_LoadBinFW(uint8_t** pImgInfo, uint16_t* pImgInfoLen);
+extern NFCSTATUS phDnldNfc_LoadRecoveryFW(uint8_t** pImgInfo,
                                           uint16_t* pImgInfoLen);
-#endif
 extern NFCSTATUS phDnldNfc_UnloadFW(void);
 #endif /* PHDNLDNFC_H */
diff --git a/halimpl/dnld/phDnldNfc_Internal.cc b/halimpl/dnld/phDnldNfc_Internal.cc
index dc87fd5..f5cbb3a 100755
--- a/halimpl/dnld/phDnldNfc_Internal.cc
+++ b/halimpl/dnld/phDnldNfc_Internal.cc
@@ -68,41 +68,6 @@
 /* size of EEPROM offset */
 #define PHDNLDNFC_USERDATA_EEPROM_OFFSIZE (0x02U)
 
-#ifdef NXP_PN547C1_DOWNLOAD
-/* EEPROM offset and length value for PN547C1 */
-/* 16 bits offset indicating user data area start location */
-#define PHDNLDNFC_USERDATA_EEPROM_OFFSET (0x003CU)
-/* 16 bits length of user data area */
-#define PHDNLDNFC_USERDATA_EEPROM_LEN (0x0DC0U)
-#else
-
-#if (NFC_NXP_CHIP_TYPE == PN548C2)
-/* EEPROM offset and length value for PN548AD */
-/* 16 bits offset indicating user data area start location */
-#define PHDNLDNFC_USERDATA_EEPROM_OFFSET (0x02BCU)
-/* 16 bits length of user data area */
-#define PHDNLDNFC_USERDATA_EEPROM_LEN (0x0C00U)
-#elif (NFC_NXP_CHIP_TYPE == PN551)
-/* EEPROM offset and length value for PN551 */
-/* 16 bits offset indicating user data area start location */
-#define PHDNLDNFC_USERDATA_EEPROM_OFFSET (0x02BCU)
-/* 16 bits length of user data area */
-#define PHDNLDNFC_USERDATA_EEPROM_LEN (0x0C00U)
-#elif(NFC_NXP_CHIP_TYPE == PN553 || NFC_NXP_CHIP_TYPE == PN557)
-/* EEPROM offset and length value for PN553/PN557 */
-/* 16 bits offset indicating user data area start location */
-#define PHDNLDNFC_USERDATA_EEPROM_OFFSET (0x02BCU)
-/* 16 bits length of user data area */
-#define PHDNLDNFC_USERDATA_EEPROM_LEN (0x0BC0U)
-#else
-/* EEPROM offset and length value for PN547C2 */
-/* 16 bits offset indicating user data area start location */
-#define PHDNLDNFC_USERDATA_EEPROM_OFFSET (0x023CU)
-/* 16 bits length of user data area */
-#define PHDNLDNFC_USERDATA_EEPROM_LEN (0x0C80U)
-#endif
-
-#endif
 #define PH_LIBNFC_VEN_RESET_ON_DOWNLOAD_TIMEOUT (1)
 
 /* Function prototype declarations */
@@ -718,12 +683,13 @@
     } else if (phDnldNfc_ChkIntg == (pDlContext->FrameInp.Type)) {
       (pDlContext->tCmdRspFrameInfo.dwSendlength) += PHDNLDNFC_MIN_PLD_LEN;
 
-      wChkIntgVal = PHDNLDNFC_USERDATA_EEPROM_OFFSET;
+      wChkIntgVal = nfcFL._PHDNLDNFC_USERDATA_EEPROM_OFFSET;
+
       memcpy(&(pDlContext->tCmdRspFrameInfo
                    .aFrameBuff[PHDNLDNFC_FRAME_RDDATA_OFFSET]),
              &wChkIntgVal, sizeof(wChkIntgVal));
 
-      wChkIntgVal = PHDNLDNFC_USERDATA_EEPROM_LEN;
+      wChkIntgVal = nfcFL._PHDNLDNFC_USERDATA_EEPROM_LEN;
       memcpy(&(pDlContext->tCmdRspFrameInfo
                    .aFrameBuff[PHDNLDNFC_FRAME_RDDATA_OFFSET +
                                PHDNLDNFC_USERDATA_EEPROM_OFFSIZE]),
diff --git a/halimpl/dnld/phDnldNfc_Internal.h b/halimpl/dnld/phDnldNfc_Internal.h
index ed8f32e..d37a16f 100755
--- a/halimpl/dnld/phDnldNfc_Internal.h
+++ b/halimpl/dnld/phDnldNfc_Internal.h
@@ -120,8 +120,8 @@
  */
 typedef enum phDnldNfc_FwFormat {
   FW_FORMAT_UNKNOWN = 0x00,
-  FW_FORMAT_BIN = 0x01,
-  FW_FORMAT_SO = 0x02,
+  FW_FORMAT_SO = 0x01,
+  FW_FORMAT_BIN = 0x02,
 } phDnldNfc_FwFormat_t;
 
 /*
diff --git a/halimpl/dnld/phNxpNciHal_Dnld.cc b/halimpl/dnld/phNxpNciHal_Dnld.cc
old mode 100755
new mode 100644
index a435b07..ceca050
--- a/halimpl/dnld/phNxpNciHal_Dnld.cc
+++ b/halimpl/dnld/phNxpNciHal_Dnld.cc
@@ -35,9 +35,7 @@
 /* External global variable to get FW version */
 extern uint16_t wFwVer;
 extern uint16_t wMwVer;
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
 extern uint8_t gRecFWDwnld;
-#endif
 /* RF Configuration structure */
 typedef struct phLibNfc_IoctlSetRfConfig {
   uint8_t bNumOfParams;   /* Number of Rf configurable parameters to be set */
@@ -178,33 +176,19 @@
 static NFCSTATUS (*phNxpNciHal_dwnld_seqhandler[])(void* pContext,
                                                    NFCSTATUS status,
                                                    void* pInfo) = {
-#if (NFC_NXP_CHIP_TYPE == PN547C2)
-    phNxpNciHal_fw_dnld_normal,
-    phNxpNciHal_fw_dnld_normal,
-#endif
-    phNxpNciHal_fw_dnld_get_sessn_state,
-    phNxpNciHal_fw_dnld_get_version,
-    phNxpNciHal_fw_dnld_log_read,
-    phNxpNciHal_fw_dnld_write,
-    phNxpNciHal_fw_dnld_get_sessn_state,
-    phNxpNciHal_fw_dnld_get_version,
-    phNxpNciHal_fw_dnld_log,
-    phNxpNciHal_fw_dnld_chk_integrity,
-    NULL};
+    phNxpNciHal_fw_dnld_get_sessn_state, phNxpNciHal_fw_dnld_get_version,
+    phNxpNciHal_fw_dnld_log_read, phNxpNciHal_fw_dnld_write,
+    phNxpNciHal_fw_dnld_get_sessn_state, phNxpNciHal_fw_dnld_get_version,
+    phNxpNciHal_fw_dnld_log, phNxpNciHal_fw_dnld_chk_integrity, NULL};
 
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
 /* Array of pointers to start dummy fw download seq */
 static NFCSTATUS (*phNxpNciHal_dummy_rec_dwnld_seqhandler[])(void* pContext,
                                                              NFCSTATUS status,
                                                              void* pInfo) = {
-    phNxpNciHal_fw_dnld_normal,
-    phNxpNciHal_fw_dnld_normal,
-    phNxpNciHal_fw_dnld_get_sessn_state,
-    phNxpNciHal_fw_dnld_get_version,
-    phNxpNciHal_fw_dnld_log_read,
-    phNxpNciHal_fw_dnld_write,
+    phNxpNciHal_fw_dnld_normal,          phNxpNciHal_fw_dnld_normal,
+    phNxpNciHal_fw_dnld_get_sessn_state, phNxpNciHal_fw_dnld_get_version,
+    phNxpNciHal_fw_dnld_log_read,        phNxpNciHal_fw_dnld_write,
     NULL};
-#endif
 
 /* Download Recovery Sequence */
 static NFCSTATUS (*phNxpNciHal_dwnld_rec_seqhandler[])(void* pContext,
@@ -538,23 +522,18 @@
       bHwVer &= 0x0F; /* 0x0F is the mask to extract chip version */
 
       if ((PHDNLDNFC_HWVER_MRA2_1 == bHwVer) ||
-          (PHDNLDNFC_HWVER_MRA2_2 == bHwVer)
-#if (NFC_NXP_CHIP_TYPE == PN551)
-          || (PHDNLDNFC_HWVER_PN551_MRA1_0 == bHwVer)
-#elif (NFC_NXP_CHIP_TYPE == PN548C2)
-          || (PHDNLDNFC_HWVER_PN548AD_MRA1_0 == bHwVer)
-#elif(NFC_NXP_CHIP_TYPE == PN553 || NFC_NXP_CHIP_TYPE == PN557)
-          || (PHDNLDNFC_HWVER_PN553_MRA1_0 == bHwVer ||
-              PHDNLDNFC_HWVER_PN553_MRA1_0_UPDATED & pRespBuff->pBuff[0])
-#endif
-              ) {
+          (PHDNLDNFC_HWVER_MRA2_2 == bHwVer) ||
+          ((nfcFL.chipType == pn551) &&
+           (PHDNLDNFC_HWVER_PN551_MRA1_0 == bHwVer)) ||
+          (((nfcFL.chipType == pn553) || (nfcFL.chipType == pn557)) &&
+           (PHDNLDNFC_HWVER_PN553_MRA1_0 == bHwVer ||
+            PHDNLDNFC_HWVER_PN553_MRA1_0_UPDATED & pRespBuff->pBuff[0]))) {
         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 ((nfcFL.chipType == pn553) &&
+            (PHDNLDNFC_HWVER_PN553_MRA1_0_UPDATED & pRespBuff->pBuff[0])) {
           (gphNxpNciHal_fw_IoctlCtx.bChipVer) = pRespBuff->pBuff[0];
         }
-#endif
       } else if ((bHwVer >= PHDNLDNFC_HWVER_MRA1_0) &&
                  (bHwVer <= PHDNLDNFC_HWVER_MRA2_0)) {
         bExpectedLen = PHLIBNFC_IOCTL_DNLD_GETVERLEN;
@@ -1511,7 +1490,7 @@
 
   while (seq_handler[seq_counter] != NULL) {
     status = NFCSTATUS_FAILED;
-    status = (seq_handler[seq_counter])((void *)pContext, status, &pInfo);
+    status = (seq_handler[seq_counter])((void*)pContext, status, &pInfo);
     if (NFCSTATUS_SUCCESS != status) {
       NXPLOG_FWDNLD_E(" phNxpNciHal_fw_seq_handler : FAILED");
       break;
@@ -1719,13 +1698,10 @@
   /* Get firmware version */
   if (NFCSTATUS_SUCCESS == phDnldNfc_InitImgInfo()) {
     NXPLOG_FWDNLD_D("phDnldNfc_InitImgInfo:SUCCESS");
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
     if (gRecFWDwnld == true) {
       status =
           phNxpNciHal_fw_seq_handler(phNxpNciHal_dummy_rec_dwnld_seqhandler);
-    } else
-#endif
-    {
+    } else {
       status = phNxpNciHal_fw_seq_handler(phNxpNciHal_dwnld_seqhandler);
     }
   } else {
@@ -1733,7 +1709,7 @@
   }
 
   /* Chage to normal mode */
-  status = phNxpNciHal_fw_dnld_complete((void *)pContext, status, &pInfo);
+  status = phNxpNciHal_fw_dnld_complete((void*)pContext, status, &pInfo);
   /*if (NFCSTATUS_SUCCESS == status)
   {
       NXPLOG_FWDNLD_D(" phNxpNciHal_fw_dnld_complete : SUCCESS");
@@ -1747,14 +1723,8 @@
 }
 
 static NFCSTATUS phLibNfc_VerifyCrcStatus(uint8_t bCrcStatus) {
-#if ((NFC_NXP_CHIP_TYPE == PN551) || (NFC_NXP_CHIP_TYPE == PN553)\
-    || (NFC_NXP_CHIP_TYPE == PN557))
   uint8_t bBitPos = 1;
   uint8_t bShiftVal = 2;
-#else
-  uint8_t bBitPos = 0;
-  uint8_t bShiftVal = 1;
-#endif
   NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
   while (bBitPos < 7) {
     if (!(bCrcStatus & bShiftVal)) {
diff --git a/halimpl/hal/phNxpNciHal.cc b/halimpl/hal/phNxpNciHal.cc
index 24c994f..65bc7d9 100755
--- a/halimpl/hal/phNxpNciHal.cc
+++ b/halimpl/hal/phNxpNciHal.cc
@@ -37,22 +37,7 @@
 #define PN547C2_CLOCK_SETTING
 #undef PN547C2_FACTORY_RESET_DEBUG
 #define CORE_RES_STATUS_BYTE 3
-/* FW Mobile major number */
-#define FW_MOBILE_MAJOR_NUMBER_PN553 0x01
-#define FW_MOBILE_MAJOR_NUMBER_PN81A 0x02
-#define FW_MOBILE_MAJOR_NUMBER_PN551 0x05
-#define FW_MOBILE_MAJOR_NUMBER_PN48AD 0x01
-#define FW_MOBILE_MAJOR_NUMBER_PN557 0x01
 
-#if (NFC_NXP_CHIP_TYPE == PN551)
-#define FW_MOBILE_MAJOR_NUMBER FW_MOBILE_MAJOR_NUMBER_PN551
-#elif (NFC_NXP_CHIP_TYPE == PN553)
-#define FW_MOBILE_MAJOR_NUMBER FW_MOBILE_MAJOR_NUMBER_PN553
-#elif(NFC_NXP_CHIP_TYPE == PN557)
-#define FW_MOBILE_MAJOR_NUMBER FW_MOBILE_MAJOR_NUMBER_PN557
-#else
-#define FW_MOBILE_MAJOR_NUMBER FW_MOBILE_MAJOR_NUMBER_PN48AD
-#endif
 /* Processing of ISO 15693 EOF */
 extern uint8_t icode_send_eof;
 extern uint8_t icode_detected;
@@ -80,16 +65,10 @@
 extern uint16_t wFwVer;
 extern uint16_t fw_maj_ver;
 extern uint16_t rom_version;
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
 extern uint8_t gRecFWDwnld;
 static uint8_t gRecFwRetryCount;  // variable to hold dummy FW recovery count
-#endif
 static uint8_t Rx_data[NCI_MAX_DATA_LEN];
 extern int phPalEse_spi_ioctl(phPalEse_ControlCode_t eControlCode,void *pDevHandle, long level);
-#if (NFC_NXP_CHIP_TYPE == PN548C2)
-uint8_t discovery_cmd[50] = {0};
-uint8_t discovery_cmd_len = 0;
-#endif
 uint32_t timeoutTimerId = 0;
 bool nfc_debug_enabled = true;
 
@@ -128,10 +107,8 @@
 NFCSTATUS phNxpNciHal_china_tianjin_rf_setting(void);
 static void phNxpNciHal_gpio_restore(phNxpNciHal_GpioInfoState state);
 static void phNxpNciHal_initialize_debug_enabled_flag();
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
 static NFCSTATUS phNxpNciHalRFConfigCmdRecSequence();
 static NFCSTATUS phNxpNciHal_CheckRFCmdRespStatus();
-#endif
 int check_config_parameter();
 /******************************************************************************
  * Function         phNxpNciHal_initialize_debug_enabled_flag
@@ -356,20 +333,9 @@
   /* extract the firmware's major no */
   ufw_current_major_no = ((0x00FF) & (wFwVer >> 8U));
 
-  NXPLOG_NCIHAL_D("%s current_major_no = 0x%x", __FUNCTION__,
-                  ufw_current_major_no);
-  if ((ufw_current_major_no == FW_MOBILE_MAJOR_NUMBER) ||
-      ((ufw_current_major_no == FW_MOBILE_MAJOR_NUMBER_PN81A &&
+  if ((ufw_current_major_no == nfcFL._FW_MOBILE_MAJOR_NUMBER) ||
+      ((ufw_current_major_no == FW_MOBILE_MAJOR_NUMBER_PN81A) &&
         (nxpncihal_ctrl.nci_info.nci_version == NCI_VERSION_2_0)))
-#if (NFC_NXP_CHIP_TYPE == PN553)
-      || ((rom_version == 0x00) &&
-          (ufw_current_major_no == FW_MOBILE_MAJOR_NUMBER_PN81A))
-#elif (NFC_NXP_CHIP_TYPE == PN557)
-      || ((rom_version == FW_MOBILE_MAJOR_NUMBER) &&
-          (ufw_current_major_no == FW_MOBILE_MAJOR_NUMBER_PN557))
-#endif
-          )
-
   {
     status = NFCSTATUS_SUCCESS;
   } else if (ufw_current_major_no == sfw_infra_major_no) {
@@ -405,11 +371,9 @@
       }
     }
   }
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
   else if (gRecFWDwnld == TRUE) {
     status = NFCSTATUS_SUCCESS;
   }
-#endif
   else if (wFwVerRsp == 0) {
     NXPLOG_NCIHAL_E(
         "FW Version not received by NCI command >>> Force Firmware download");
@@ -562,10 +526,6 @@
   tOsalConfig.pLogFile = NULL;
   tTmlConfig.dwGetMsgThreadId = (uintptr_t)nxpncihal_ctrl.gDrvCfg.nClientId;
 
-#if (NFC_NXP_CHIP_TYPE == PN548C2)
-  memset(discovery_cmd, 0, sizeof(discovery_cmd));
-  discovery_cmd_len = 0;
-#endif
 
   /* Initialize TML layer */
   wConfigStatus = phTmlNfc_Init(&tTmlConfig);
@@ -628,17 +588,17 @@
     goto clean_and_return;
   }
 
-  status = phNxpNciHal_send_ext_cmd(sizeof(cmd_init_nci2_0), cmd_init_nci2_0);
-  if (status == NFCSTATUS_SUCCESS) {
-    if (nxpncihal_ctrl.nci_info.nci_version != NCI_VERSION_2_0) {
-      NXPLOG_NCIHAL_E("Chip is in NCI1.0 mode reset the chip again");
+  if(nxpncihal_ctrl.nci_info.nci_version == NCI_VERSION_2_0) {
+    status = phNxpNciHal_send_ext_cmd(sizeof(cmd_init_nci2_0), cmd_init_nci2_0);
+  } else {
+    status = phNxpNciHal_send_ext_cmd(sizeof(cmd_init_nci), cmd_init_nci);
+    if(status == NFCSTATUS_SUCCESS && (nfcFL.chipType == pn557)) {
+      NXPLOG_NCIHAL_E("Chip is in NCI1.0 mode reset the chip to 2.0 mode");
       status = phNxpNciHal_send_ext_cmd(sizeof(cmd_reset_nci), cmd_reset_nci);
-      if (status == NFCSTATUS_SUCCESS) {
-        if (nxpncihal_ctrl.nci_info.nci_version == NCI_VERSION_2_0) {
-          status = phNxpNciHal_send_ext_cmd(sizeof(cmd_init_nci2_0),
-                                            cmd_init_nci2_0);
-        } else {
-          status = phNxpNciHal_send_ext_cmd(sizeof(cmd_init_nci), cmd_init_nci);
+      if(status == NFCSTATUS_SUCCESS) {
+        status = phNxpNciHal_send_ext_cmd(sizeof(cmd_init_nci2_0), cmd_init_nci2_0);
+        if(status == NFCSTATUS_SUCCESS) {
+          goto init_retry;
         }
       }
     }
@@ -792,26 +752,18 @@
  ******************************************************************************/
 int phNxpNciHal_fw_mw_ver_check() {
   NFCSTATUS status = NFCSTATUS_FAILED;
-  if (!(strcmp(COMPILATION_MW, "PN557")) &&
+  if ((nfcFL.chipType == pn557) &&
       (rom_version == FW_MOBILE_ROM_VERSION_PN557) &&
       (fw_maj_ver == 0x01)) {
     status = NFCSTATUS_SUCCESS;
-  } else if (!(strcmp(COMPILATION_MW, "PN553")) &&
+  } else if ((nfcFL.chipType == pn553) &&
       (rom_version == FW_MOBILE_ROM_VERSION_PN553) &&
       (fw_maj_ver == 0x01 || fw_maj_ver == 0x02)) {
     status = NFCSTATUS_SUCCESS;
-  } else if (!strcmp(COMPILATION_MW, "PN551") &&
+  } else if ((nfcFL.chipType == pn551) &&
              (rom_version == FW_MOBILE_ROM_VERSION_PN551) &&
              (fw_maj_ver == 0x05)) {
     status = NFCSTATUS_SUCCESS;
-  } else if (!strcmp(COMPILATION_MW, "PN548C2") &&
-             (rom_version == FW_MOBILE_ROM_VERSION_PN548AD) &&
-             (fw_maj_ver == 0x01)) {
-    status = NFCSTATUS_SUCCESS;
-  } else if (!strcmp(COMPILATION_MW, "PN547C2") &&
-             (rom_version == FW_MOBILE_ROM_VERSION_PN547C2) &&
-             (fw_maj_ver == 0x01)) {
-    status = NFCSTATUS_SUCCESS;
   }
   return status;
 }
@@ -1174,10 +1126,8 @@
   static uint8_t cmd_ven_enable[] = {0x20, 0x02, 0x05, 0x01,
                                          0xA0, 0x07, 0x01, 0x01};
 
-#ifndef NXP_NFC_CHIP_PN81T
   static uint8_t android_l_aid_matching_mode_on_cmd[] = {
       0x20, 0x02, 0x05, 0x01, 0xA0, 0x91, 0x01, 0x01};
-#endif
   static uint8_t swp_switch_timeout_cmd[] = {0x20, 0x02, 0x06, 0x01, 0xA0,
                                              0xF3, 0x02, 0x00, 0x00};
   config_success = true;
@@ -1190,11 +1140,9 @@
   int temp_fix = 1;
 #endif
   unsigned long num = 0;
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
   // initialize dummy FW recovery variables
   gRecFwRetryCount = 0;
   gRecFWDwnld = 0;
-#endif
   // recovery --start
   /*NCI_INIT_CMD*/
   static uint8_t cmd_init_nci[] = {0x20, 0x01, 0x00};
@@ -1367,7 +1315,6 @@
     retlen = 0;
     fw_download_success = 0;
 
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
     NXPLOG_NCIHAL_D("Performing TVDD Settings");
     isfound = GetNxpNumValue(NAME_NXP_EXT_TVDD_CFG, &num, sizeof(num));
     if (isfound > 0) {
@@ -1408,17 +1355,13 @@
         NXPLOG_NCIHAL_E("Wrong Configuration Value %ld", num);
       }
     }
-#endif
     retlen = 0;
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
     config_access = false;
-#endif
     NXPLOG_NCIHAL_D("Performing RF Settings BLK 1");
     isfound = GetNxpByteArrayValue(NAME_NXP_RF_CONF_BLK_1, (char*)buffer,
                                    bufflen, &retlen);
     if (retlen > 0) {
       status = phNxpNciHal_send_ext_cmd(retlen, buffer);
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
       if (status == NFCSTATUS_SUCCESS) {
         status = phNxpNciHal_CheckRFCmdRespStatus();
         /*STATUS INVALID PARAM 0x09*/
@@ -1428,7 +1371,6 @@
           goto retry_core_init;
         }
       } else
-#endif
           if (status != NFCSTATUS_SUCCESS) {
         NXPLOG_NCIHAL_E("RF Settings BLK 1 failed");
         retry_core_init_cnt++;
@@ -1442,7 +1384,6 @@
                                    bufflen, &retlen);
     if (retlen > 0) {
       status = phNxpNciHal_send_ext_cmd(retlen, buffer);
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
       if (status == NFCSTATUS_SUCCESS) {
         status = phNxpNciHal_CheckRFCmdRespStatus();
         /*STATUS INVALID PARAM 0x09*/
@@ -1452,7 +1393,6 @@
           goto retry_core_init;
         }
       } else
-#endif
           if (status != NFCSTATUS_SUCCESS) {
         NXPLOG_NCIHAL_E("RF Settings BLK 2 failed");
         retry_core_init_cnt++;
@@ -1466,7 +1406,6 @@
                                    bufflen, &retlen);
     if (retlen > 0) {
       status = phNxpNciHal_send_ext_cmd(retlen, buffer);
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
       if (status == NFCSTATUS_SUCCESS) {
         status = phNxpNciHal_CheckRFCmdRespStatus();
         /*STATUS INVALID PARAM 0x09*/
@@ -1476,7 +1415,6 @@
           goto retry_core_init;
         }
       } else
-#endif
           if (status != NFCSTATUS_SUCCESS) {
         NXPLOG_NCIHAL_E("RF Settings BLK 3 failed");
         retry_core_init_cnt++;
@@ -1490,7 +1428,6 @@
                                    bufflen, &retlen);
     if (retlen > 0) {
       status = phNxpNciHal_send_ext_cmd(retlen, buffer);
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
       if (status == NFCSTATUS_SUCCESS) {
         status = phNxpNciHal_CheckRFCmdRespStatus();
         /*STATUS INVALID PARAM 0x09*/
@@ -1500,7 +1437,6 @@
           goto retry_core_init;
         }
       } else
-#endif
           if (status != NFCSTATUS_SUCCESS) {
         NXPLOG_NCIHAL_E("RF Settings BLK 4 failed");
         retry_core_init_cnt++;
@@ -1514,7 +1450,6 @@
                                    bufflen, &retlen);
     if (retlen > 0) {
       status = phNxpNciHal_send_ext_cmd(retlen, buffer);
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
       if (status == NFCSTATUS_SUCCESS) {
         status = phNxpNciHal_CheckRFCmdRespStatus();
         /*STATUS INVALID PARAM 0x09*/
@@ -1524,7 +1459,6 @@
           goto retry_core_init;
         }
       } else
-#endif
           if (status != NFCSTATUS_SUCCESS) {
         NXPLOG_NCIHAL_E("RF Settings BLK 5 failed");
         retry_core_init_cnt++;
@@ -1538,7 +1472,6 @@
                                    bufflen, &retlen);
     if (retlen > 0) {
       status = phNxpNciHal_send_ext_cmd(retlen, buffer);
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
       if (status == NFCSTATUS_SUCCESS) {
         status = phNxpNciHal_CheckRFCmdRespStatus();
         /*STATUS INVALID PARAM 0x09*/
@@ -1548,7 +1481,6 @@
           goto retry_core_init;
         }
       } else
-#endif
           if (status != NFCSTATUS_SUCCESS) {
         NXPLOG_NCIHAL_E("RF Settings BLK 6 failed");
         retry_core_init_cnt++;
@@ -1556,9 +1488,7 @@
       }
     }
     retlen = 0;
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
     config_access = true;
-#endif
     NXPLOG_NCIHAL_D("Performing NAME_NXP_CORE_CONF_EXTN Settings");
     isfound = GetNxpByteArrayValue(NAME_NXP_CORE_CONF_EXTN, (char*)buffer,
                                    bufflen, &retlen);
@@ -1587,15 +1517,12 @@
     }
 
     retlen = 0;
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
     config_access = false;
-#endif
     isfound = GetNxpByteArrayValue(NAME_NXP_CORE_RF_FIELD, (char*)buffer,
                                    bufflen, &retlen);
     if (retlen > 0) {
       /* NXP ACT Proprietary Ext */
       status = phNxpNciHal_send_ext_cmd(retlen, buffer);
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
       if (status == NFCSTATUS_SUCCESS) {
         status = phNxpNciHal_CheckRFCmdRespStatus();
         /*STATUS INVALID PARAM 0x09*/
@@ -1605,19 +1532,15 @@
           goto retry_core_init;
         }
       } else
-#endif
           if (status != NFCSTATUS_SUCCESS) {
         NXPLOG_NCIHAL_E("Setting NXP_CORE_RF_FIELD status failed");
         retry_core_init_cnt++;
         goto retry_core_init;
       }
     }
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
     config_access = true;
-#endif
 
     retlen = 0;
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
     /* NXP SWP switch timeout Setting*/
     if (GetNxpNumValue(NAME_NXP_SWP_SWITCH_TIMEOUT, (void*)&retlen,
                        sizeof(retlen))) {
@@ -1652,7 +1575,6 @@
       NXPLOG_NCIHAL_E("phNxpNciHal_china_tianjin_rf_setting failed");
       return NFCSTATUS_FAILED;
     }
-#endif
     // Update eeprom value
     status = phNxpNciHal_set_mw_eeprom();
     if (status != NFCSTATUS_SUCCESS) {
@@ -1727,9 +1649,8 @@
     }
   }
 
-#ifndef NXP_NFC_CHIP_PN81T
   /* Android L AID Matching Platform Setting*/
-  if (GetNxpNumValue(NAME_AID_MATCHING_PLATFORM, (void*)&retlen,
+  if ((nfcFL.chipType != pn557) && GetNxpNumValue(NAME_AID_MATCHING_PLATFORM, (void*)&retlen,
                      sizeof(retlen))) {
     if (1 == retlen) {
       status =
@@ -1752,7 +1673,6 @@
       }
     }
   }
-#endif
 
   if ((*p_core_init_rsp_params > 0) && (*p_core_init_rsp_params < 4)) {
     static phLibNfc_Message_t msg;
@@ -1883,11 +1803,9 @@
     free(buffer);
     buffer = NULL;
   }
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
   // initialize dummy FW recovery variables
   gRecFWDwnld = 0;
   gRecFwRetryCount = 0;
-#endif
   if (!((*p_core_init_rsp_params > 0) && (*p_core_init_rsp_params < 4)))
     phNxpNciHal_core_initialized_complete(status);
   else {
@@ -1909,7 +1827,6 @@
 #endif
   return NFCSTATUS_SUCCESS;
 }
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
 /******************************************************************************
  * Function         phNxpNciHal_CheckRFCmdRespStatus
  *
@@ -1986,7 +1903,6 @@
   gRecFWDwnld = false;
   return status;
 }
-#endif
 /******************************************************************************
  * Function         phNxpNciHal_core_initialized_complete
  *
@@ -2582,12 +2498,11 @@
   if (nxpprofile_ctrl.bClkSrcVal == CLK_SRC_PLL) {
     static uint8_t set_clock_cmd[] = {0x20, 0x02, 0x09, 0x02, 0xA0, 0x03,
                                       0x01, 0x11, 0xA0, 0x04, 0x01, 0x01};
-#if (NFC_NXP_CHIP_TYPE == PN553 || NFC_NXP_CHIP_TYPE == PN557)
     uint8_t param_clock_src = 0x00;
-#else
-    uint8_t param_clock_src = CLK_SRC_PLL;
-    param_clock_src = param_clock_src << 3;
-#endif
+    if((nfcFL.chipType != pn553)&&(nfcFL.chipType != pn557)) {
+      uint8_t param_clock_src = CLK_SRC_PLL;
+      param_clock_src = param_clock_src << 3;
+    }
 
     if (nxpprofile_ctrl.bClkFreqVal == CLK_FREQ_13MHZ) {
       param_clock_src |= 0x00;
@@ -2603,11 +2518,11 @@
       param_clock_src |= 0x05;
     } else {
       NXPLOG_NCIHAL_E("Wrong clock freq, send default PLL@19.2MHz");
-#if (NFC_NXP_CHIP_TYPE == PN553 || NFC_NXP_CHIP_TYPE == PN557)
-      param_clock_src = 0x01;
-#else
-      param_clock_src = 0x11;
-#endif
+      if((nfcFL.chipType == pn553) || (nfcFL.chipType == pn557)) {
+        param_clock_src = 0x01;
+      } else {
+        param_clock_src = 0x11;
+      }
     }
 
     set_clock_cmd[7] = param_clock_src;
@@ -2803,9 +2718,9 @@
 int check_config_parameter() {
   uint8_t param_clock_src = CLK_SRC_PLL;
   if (nxpprofile_ctrl.bClkSrcVal == CLK_SRC_PLL) {
-#if (NFC_NXP_CHIP_TYPE != PN553 && NFC_NXP_CHIP_TYPE != PN557)
-    param_clock_src = param_clock_src << 3;
-#endif
+    if((nfcFL.chipType != pn553)&&(nfcFL.chipType != pn557)) {
+      param_clock_src = param_clock_src << 3;
+    }
     if (nxpprofile_ctrl.bClkFreqVal == CLK_FREQ_13MHZ) {
       param_clock_src |= 0x00;
     } else if (nxpprofile_ctrl.bClkFreqVal == CLK_FREQ_19_2MHZ) {
@@ -2970,6 +2885,26 @@
 #endif
 }
 
+/*******************************************************************************
+**
+** Function         phNxpNciHal_configFeatureList
+**
+** Description      Configures the featureList based on chip type
+**                  HW Version information number will provide chipType.
+**                  HW Version can be obtained from CORE_INIT_RESPONSE(NCI 1.0)
+**                  or CORE_RST_NTF(NCI 2.0)
+**
+** Parameters       CORE_INIT_RESPONSE/CORE_RST_NTF, len
+**
+** Returns          none
+*******************************************************************************/
+void phNxpNciHal_configFeatureList(uint8_t* init_rsp, uint16_t rsp_len) {
+    nxpncihal_ctrl.chipType = pConfigFL->processChipType(init_rsp,rsp_len);
+    tNFC_chipType chipType = nxpncihal_ctrl.chipType;
+    CONFIGURE_FEATURELIST(chipType);
+    NXPLOG_NCIHAL_D("NFC_GetFeatureList ()chipType = %d", chipType);
+}
+
 /******************************************************************************
  * Function         phNxpNciHal_print_res_status
  *
@@ -3037,73 +2972,3 @@
     }
   }
 }
-
-#if (NFC_NXP_CHIP_TYPE == PN548C2)
-NFCSTATUS phNxpNciHal_core_reset_recovery() {
-  NFCSTATUS status = NFCSTATUS_FAILED;
-
-  /*NCI_INIT_CMD*/
-  static uint8_t cmd_init_nci[] = {0x20, 0x01, 0x00};
-  /*NCI_RESET_CMD*/
-  static uint8_t cmd_reset_nci[] = {0x20, 0x00, 0x01,
-                                    0x00};  // keep configuration
-  static uint8_t cmd_init_nci2_0[] = {0x20, 0x01, 0x02, 0x00, 0x00};
-  /* reset config cache */
-  uint8_t retry_core_init_cnt = 0;
-
-  if (discovery_cmd_len == 0) {
-    goto FAILURE;
-  }
-  NXPLOG_NCIHAL_D("%s: recovery", __func__);
-
-retry_core_init:
-  if (retry_core_init_cnt > 3) {
-    goto FAILURE;
-  }
-
-  status = phTmlNfc_IoCtl(phTmlNfc_e_ResetDevice);
-  if (status != NFCSTATUS_SUCCESS) {
-    NXPLOG_NCIHAL_D("PN54X Reset - FAILED\n");
-    goto FAILURE;
-  }
-  status = phNxpNciHal_send_ext_cmd(sizeof(cmd_reset_nci), cmd_reset_nci);
-  if ((status != NFCSTATUS_SUCCESS) &&
-      (nxpncihal_ctrl.retry_cnt >= MAX_RETRY_COUNT)) {
-    retry_core_init_cnt++;
-    goto retry_core_init;
-  } else if (status != NFCSTATUS_SUCCESS) {
-    NXPLOG_NCIHAL_D("NCI_CORE_RESET: Failed");
-    retry_core_init_cnt++;
-    goto retry_core_init;
-  }
-  if (nxpncihal_ctrl.nci_info.nci_version == NCI_VERSION_2_0) {
-    status = phNxpNciHal_send_ext_cmd(sizeof(cmd_init_nci2_0), cmd_init_nci2_0);
-  } else {
-    status = phNxpNciHal_send_ext_cmd(sizeof(cmd_init_nci), cmd_init_nci);
-  }
-  if (status != NFCSTATUS_SUCCESS) {
-    NXPLOG_NCIHAL_D("NCI_CORE_INIT : Failed");
-    retry_core_init_cnt++;
-    goto retry_core_init;
-  }
-
-  status = phNxpNciHal_send_ext_cmd(discovery_cmd_len, discovery_cmd);
-  if (status != NFCSTATUS_SUCCESS) {
-    NXPLOG_NCIHAL_D("RF_DISCOVERY : Failed");
-    retry_core_init_cnt++;
-    goto retry_core_init;
-  }
-
-  return NFCSTATUS_SUCCESS;
-FAILURE:
-  abort();
-}
-
-void phNxpNciHal_discovery_cmd_ext(uint8_t* p_cmd_data, uint16_t cmd_len) {
-  NXPLOG_NCIHAL_D("phNxpNciHal_discovery_cmd_ext");
-  if (cmd_len > 0 && cmd_len <= sizeof(discovery_cmd)) {
-    memcpy(discovery_cmd, p_cmd_data, cmd_len);
-    discovery_cmd_len = cmd_len;
-  }
-}
-#endif
diff --git a/halimpl/hal/phNxpNciHal.h b/halimpl/hal/phNxpNciHal.h
index ce71856..e9cfe06 100755
--- a/halimpl/hal/phNxpNciHal.h
+++ b/halimpl/hal/phNxpNciHal.h
@@ -18,6 +18,7 @@
 
 #include <hardware/nfc.h>
 #include <phNxpNciHal_utils.h>
+#include "NxpNfcCapability.h"
 
 /********************* Definitions and structures *****************************/
 #define MAX_RETRY_COUNT 5
@@ -35,8 +36,6 @@
 #define FW_MOBILE_ROM_VERSION_PN551 0x10
 #define FW_MOBILE_ROM_VERSION_PN553 0x11
 #define FW_MOBILE_ROM_VERSION_PN557 0x12
-#define FW_MOBILE_ROM_VERSION_PN548AD 0x10
-#define FW_MOBILE_ROM_VERSION_PN547C2 0x08
 /* NCI Data */
 
 #define NCI_MT_CMD 0x20
@@ -49,7 +48,6 @@
 #define NCI_MSG_CORE_INIT 0x01
 #define NCI_MT_MASK 0xE0
 #define NCI_OID_MASK 0x3F
-#define NXP_NFC_CHIP_PN81T
 
 #define NXP_MAX_CONFIG_STRING_LEN 260
 
@@ -129,6 +127,7 @@
 
   /* to store and restore gpio values */
   phNxpNciGpioInfo_t phNxpNciGpioInfo;
+  tNFC_chipType chipType;
 } phNxpNciHal_Control_t;
 
 typedef struct phNxpNciClock {
@@ -177,8 +176,13 @@
 void phNxpNciHal_request_control(void);
 void phNxpNciHal_release_control(void);
 int phNxpNciHal_write_unlocked(uint16_t data_len, const uint8_t* p_data);
-#if (NFC_NXP_CHIP_TYPE == PN548C2)
-NFCSTATUS phNxpNciHal_core_reset_recovery();
-void phNxpNciHal_discovery_cmd_ext(uint8_t* p_cmd_data, uint16_t cmd_len);
-#endif
+/*******************************************************************************
+**
+** Function         phNxpNciHal_configFeatureList
+**
+** Description      Configures the featureList based on chip type
+
+** Returns          none
+*******************************************************************************/
+void phNxpNciHal_configFeatureList(uint8_t* init_rsp, uint16_t rsp_len);
 #endif /* _PHNXPNCIHAL_H_ */
diff --git a/halimpl/hal/phNxpNciHal_ext.cc b/halimpl/hal/phNxpNciHal_ext.cc
index 4240c58..646a07b 100755
--- a/halimpl/hal/phNxpNciHal_ext.cc
+++ b/halimpl/hal/phNxpNciHal_ext.cc
@@ -36,9 +36,6 @@
 extern bool nfc_debug_enabled;
 uint8_t icode_detected = 0x00;
 uint8_t icode_send_eof = 0x00;
-#if (NFC_NXP_CHIP_TYPE == PN548C2)
-uint8_t nfcdep_detected = 0x00;
-#endif
 static uint8_t ee_disc_done = 0x00;
 uint8_t EnableP2P_PrioLogic = false;
 static uint32_t RfDiscID = 1;
@@ -100,9 +97,6 @@
 *******************************************************************************/
 NFCSTATUS phNxpNciHal_process_ext_rsp(uint8_t* p_ntf, uint16_t* p_len) {
   NFCSTATUS status = NFCSTATUS_SUCCESS;
-#if (NFC_NXP_CHIP_TYPE == PN547C2)
-  uint16_t rf_technology_length_param = 0;
-#endif
 
   if (p_ntf[0] == 0x61 && p_ntf[1] == 0x05 && p_ntf[4] == 0x03 &&
       p_ntf[5] == 0x05 && nxpprofile_ctrl.profile_type == EMV_CO_PROFILE) {
@@ -142,11 +136,6 @@
   status = NFCSTATUS_SUCCESS;
 
   if (p_ntf[0] == 0x61 && p_ntf[1] == 0x05) {
-#if (NFC_NXP_CHIP_TYPE == PN548C2)
-    if (nfcdep_detected) {
-      nfcdep_detected = 0x00;
-    }
-#endif
 
     switch (p_ntf[4]) {
       case 0x00:
@@ -160,9 +149,6 @@
         break;
       case 0x03:
         NXPLOG_NCIHAL_D("NxpNci: RF Interface = NFC-DEP");
-#if (NFC_NXP_CHIP_TYPE == PN548C2)
-        nfcdep_detected = 0x01;
-#endif
         break;
       case 0x80:
         NXPLOG_NCIHAL_D("NxpNci: RF Interface = MIFARE");
@@ -195,11 +181,7 @@
       case 0x80:
         NXPLOG_NCIHAL_D("NxpNci: Protocol = MIFARE");
         break;
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
       case 0x81:
-#else
-      case 0x8A:
-#endif
         NXPLOG_NCIHAL_D("NxpNci: Protocol = Kovio");
         break;
       default:
@@ -226,11 +208,7 @@
       case 0x06:
         NXPLOG_NCIHAL_D("NxpNci: Mode = 15693 Passive Poll");
         break;
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
       case 0x70:
-#else
-      case 0x77:
-#endif
         NXPLOG_NCIHAL_D("NxpNci: Mode = Kovio");
         break;
       case 0x80:
@@ -324,18 +302,6 @@
     status = NFCSTATUS_FAILED;
     return status;
   }
-#if (NFC_NXP_CHIP_TYPE == PN547C2)
-  else if (p_ntf[0] == 0x61 && p_ntf[1] == 0x05 && p_ntf[4] == 0x02 &&
-           p_ntf[5] == 0x80 && p_ntf[6] == 0x00) {
-    NXPLOG_NCIHAL_D(
-        "Going through workaround - iso-dep  interface  mifare protocol with "
-        "sak value not equal to 0x20");
-    rf_technology_length_param = p_ntf[9];
-    if ((p_ntf[9 + rf_technology_length_param] & 0x20) != 0x20) {
-      p_ntf[4] = 0x80;
-    }
-  }
-#endif
   else if (*p_len == 4 && p_ntf[0] == 0x4F && p_ntf[1] == 0x11 &&
            p_ntf[2] == 0x01) {
     if (p_ntf[3] == 0x00) {
@@ -429,6 +395,7 @@
 static NFCSTATUS phNxpNciHal_ext_process_nfc_init_rsp(uint8_t* p_ntf,
                                                       uint16_t* p_len) {
   NFCSTATUS status = NFCSTATUS_SUCCESS;
+
   /* Parsing CORE_RESET_RSP and CORE_RESET_NTF to update NCI version.*/
   if (p_ntf == NULL || *p_len == 0x00) {
     return NFCSTATUS_FAILED;
@@ -450,6 +417,10 @@
         p_ntf[3] == CORE_RESET_TRIGGER_TYPE_POWERED_ON) {
       NXPLOG_NCIHAL_D("CORE_RESET_NTF NCI2.0 reason CORE_RESET_CMD received !");
       nxpncihal_ctrl.nci_info.nci_version = p_ntf[5];
+      NXPLOG_NCIHAL_D("nci_version : 0x%02x",nxpncihal_ctrl.nci_info.nci_version);
+      if(!nxpncihal_ctrl.hal_open_status) {
+        phNxpNciHal_configFeatureList(p_ntf,*p_len);
+      }
       int len = p_ntf[2] + 2; /*include 2 byte header*/
       wFwVerRsp = (((uint32_t)p_ntf[len - 2]) << 16U) |
                   (((uint32_t)p_ntf[len - 1]) << 8U) | p_ntf[len];
@@ -467,17 +438,6 @@
       }
       NXPLOG_NCIHAL_E("CORE_RESET_NTF received !");
       NXPLOG_NCIR_E("len = %3d > %s", *p_len, print_buffer);
-
-#if (NFC_NXP_CHIP_TYPE == PN548C2)
-      if (nfcdep_detected &&
-          !(p_ntf[2] == 0x06 && p_ntf[3] == 0xA0 && p_ntf[4] == 0x00 &&
-            ((p_ntf[5] == 0xC9 && p_ntf[6] == 0x95 && p_ntf[7] == 0x00 &&
-              p_ntf[8] == 0x00) ||
-             (p_ntf[5] == 0x07 && p_ntf[6] == 0x39 && p_ntf[7] == 0xF2 &&
-              p_ntf[8] == 0x00)))) {
-        nfcdep_detected = 0x00;
-      }
-#endif
       phNxpNciHal_emergency_recovery();
       status = NFCSTATUS_FAILED;
     } /* Parsing CORE_INIT_RSP*/
@@ -487,6 +447,9 @@
       NXPLOG_NCIHAL_D("CORE_INIT_RSP NCI2.0 received !");
     } else {
       NXPLOG_NCIHAL_D("CORE_INIT_RSP NCI1.0 received !");
+      if(!nxpncihal_ctrl.hal_open_status) {
+        phNxpNciHal_configFeatureList(p_ntf,*p_len);
+      }
       int len = p_ntf[2] + 2; /*include 2 byte header*/
       wFwVerRsp = (((uint32_t)p_ntf[len - 2]) << 16U) |
                   (((uint32_t)p_ntf[len - 1]) << 8U) | p_ntf[len];
@@ -705,18 +668,11 @@
     if (nxpncihal_ctrl.nci_info.nci_version != NCI_VERSION_2_0) {
       NXPLOG_NCIHAL_D("> Going through workaround - set host list");
 
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
       *cmd_len = 8;
 
       p_cmd_data[2] = 0x05;
       p_cmd_data[6] = 0x02;
       p_cmd_data[7] = 0xC0;
-#else
-      *cmd_len = 7;
-
-      p_cmd_data[2] = 0x04;
-      p_cmd_data[6] = 0xC0;
-#endif
 
       NXPLOG_NCIHAL_D("> Going through workaround - set host list - END");
       status = NFCSTATUS_SUCCESS;
@@ -740,10 +696,6 @@
     NXPLOG_NCIHAL_D("> Polling Loop Started");
     icode_detected = 0;
     icode_send_eof = 0;
-#if (NFC_NXP_CHIP_TYPE == PN548C2)
-    // Cache discovery cmd for recovery
-    phNxpNciHal_discovery_cmd_ext(p_cmd_data, *cmd_len);
-#endif
   }
   // 22000100
   else if (p_cmd_data[0] == 0x22 && p_cmd_data[1] == 0x00 &&
@@ -902,30 +854,6 @@
     }
   }
 
-#if (NFC_NXP_CHIP_TYPE == PN548C2)
-  if (p_cmd_data[0] == 0x20 && p_cmd_data[1] == 0x02) {
-    uint8_t temp;
-    uint8_t* p = p_cmd_data + 4;
-    uint8_t* end = p_cmd_data + *cmd_len;
-    while (p < end) {
-      if (*p == 0x53)  // LF_T3T_FLAGS
-      {
-        NXPLOG_NCIHAL_D("> Going through workaround - LF_T3T_FLAGS swap");
-        temp = *(p + 3);
-        *(p + 3) = *(p + 2);
-        *(p + 2) = temp;
-        NXPLOG_NCIHAL_D("> Going through workaround - LF_T3T_FLAGS - End");
-        status = NFCSTATUS_SUCCESS;
-        break;
-      }
-      if (*p == 0xA0) {
-        p += *(p + 2) + 3;
-      } else {
-        p += *(p + 1) + 2;
-      }
-    }
-  }
-#endif
 
   return status;
 }
diff --git a/halimpl/inc/phNxpNciHal_SelfTest.h b/halimpl/inc/phNxpNciHal_SelfTest.h
index ee7c8d6..3c0aed4 100755
--- a/halimpl/inc/phNxpNciHal_SelfTest.h
+++ b/halimpl/inc/phNxpNciHal_SelfTest.h
@@ -118,15 +118,10 @@
  **                  otherwise NFCSTATUS_FAILED.
  **
  ******************************************************************************/
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
 NFCSTATUS phNxpNciHal_PrbsTestStart(phNxpNfc_PrbsType_t prbs_type,
                                     phNxpNfc_PrbsHwType_t hw_prbs_type,
                                     phNxpNfc_Tech_t tech,
                                     phNxpNfc_Bitrate_t bitrate);
-#else
-NFCSTATUS phNxpNciHal_PrbsTestStart(phNxpNfc_Tech_t tech,
-                                    phNxpNfc_Bitrate_t bitrate);
-#endif
 /*******************************************************************************
  **
  ** Function         phNxpNciHal_PrbsTestStop
diff --git a/halimpl/libnfc-nxp-PN553_example.conf b/halimpl/libnfc-nxp-PN553_example.conf
index 818e473..e11e495 100755
--- a/halimpl/libnfc-nxp-PN553_example.conf
+++ b/halimpl/libnfc-nxp-PN553_example.conf
@@ -28,8 +28,10 @@
 VZW_FEATURE_ENABLE=0x01
 
 ###############################################################################
-# File name for Firmware
-NXP_FW_NAME="libpn553_fw.so"
+# Firmware file type
+#.so file   0x01
+#.bin file  0x02
+NXP_FW_TYPE=0x01
 
 ###############################################################################
 # System clock source selection configuration
diff --git a/halimpl/libnfc-nxp-PN553_example_NCI2_0.conf b/halimpl/libnfc-nxp-PN553_example_NCI2_0.conf
index 935b73e..f683666 100755
--- a/halimpl/libnfc-nxp-PN553_example_NCI2_0.conf
+++ b/halimpl/libnfc-nxp-PN553_example_NCI2_0.conf
@@ -28,8 +28,10 @@
 VZW_FEATURE_ENABLE=0x01
 
 ###############################################################################
-# File name for Firmware
-NXP_FW_NAME="libpn553_fw.so"
+# Firmware file type
+#.so file   0x01
+#.bin file  0x02
+NXP_FW_TYPE=0x01
 
 ###############################################################################
 # System clock source selection configuration
diff --git a/halimpl/libnfc-nxp-PN80T_example.conf b/halimpl/libnfc-nxp-PN80T_example.conf
index 45d276c..634435c 100755
--- a/halimpl/libnfc-nxp-PN80T_example.conf
+++ b/halimpl/libnfc-nxp-PN80T_example.conf
@@ -28,8 +28,10 @@
 VZW_FEATURE_ENABLE=0x01
 
 ###############################################################################
-# File name for Firmware
-NXP_FW_NAME="libpn553_fw.so"
+# Firmware file type
+#.so file   0x01
+#.bin file  0x02
+NXP_FW_TYPE=0x01
 
 ###############################################################################
 # System clock source selection configuration
diff --git a/halimpl/libnfc-nxp-PN80T_example_NCI2_0.conf b/halimpl/libnfc-nxp-PN80T_example_NCI2_0.conf
index 185b07d..aa4883d 100755
--- a/halimpl/libnfc-nxp-PN80T_example_NCI2_0.conf
+++ b/halimpl/libnfc-nxp-PN80T_example_NCI2_0.conf
@@ -28,8 +28,10 @@
 VZW_FEATURE_ENABLE=0x01
 
 ###############################################################################
-# File name for Firmware
-NXP_FW_NAME="libpn553_fw.so"
+# Firmware file type
+#.so file   0x01
+#.bin file  0x02
+NXP_FW_TYPE=0x01
 
 ###############################################################################
 # System clock source selection configuration
diff --git a/halimpl/libnfc-nxp-PN81T_example_NCI2_0.conf b/halimpl/libnfc-nxp-PN81T_example_NCI2_0.conf
index 979d04d..a2b9465 100755
--- a/halimpl/libnfc-nxp-PN81T_example_NCI2_0.conf
+++ b/halimpl/libnfc-nxp-PN81T_example_NCI2_0.conf
@@ -29,10 +29,10 @@
 VZW_FEATURE_ENABLE=0x01
 
 ###############################################################################
-# File name for Firmware
-# for library format ex: libpn5xx_fw.so
-# for binary format ex: pn5xx.bin
-NXP_FW_NAME="pn557.bin"
+# Firmware file type
+#.so file   0x01
+#.bin file  0x02
+NXP_FW_TYPE=0x01
 
 ###############################################################################
 # System clock source selection configuration
diff --git a/halimpl/self-test/phNxpNciHal_SelfTest.cc b/halimpl/self-test/phNxpNciHal_SelfTest.cc
index b1ebaf5..ed77862 100755
--- a/halimpl/self-test/phNxpNciHal_SelfTest.cc
+++ b/halimpl/self-test/phNxpNciHal_SelfTest.cc
@@ -76,26 +76,17 @@
 static uint8_t st_validator_testAntenna_AgcVal_Differential(
     nci_data_t* exp, phTmlNfc_TransactInfo_t* act);
 
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
 NFCSTATUS phNxpNciHal_getPrbsCmd(phNxpNfc_PrbsType_t prbs_type,
                                  phNxpNfc_PrbsHwType_t hw_prbs_type,
                                  uint8_t tech, uint8_t bitrate,
                                  uint8_t* prbs_cmd, uint8_t prbs_cmd_len);
-#else
-NFCSTATUS phNxpNciHal_getPrbsCmd(uint8_t tech, uint8_t bitrate,
-                                 uint8_t* prbs_cmd, uint8_t prbs_cmd_len);
-#endif
 /* Test data to validate SWP line 2*/
 static nci_test_data_t swp2_test_data[] = {
     {{
          0x04, {0x20, 0x00, 0x01, 0x00} /* cmd */
      },
      {
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
          0x06, {0x40, 0x00, 0x03, 0x00, 0x11, 0x00} /* exp_rsp */
-#else
-         0x06, {0x40, 0x00, 0x03, 0x00, 0x10, 0x00} /* exp_rsp */
-#endif
      },
      {
          0x00, {0x00} /* ext_ntf */
@@ -103,18 +94,10 @@
      st_validator_testEquals, /* validator */
      st_validator_null},
     {{
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
          0x05, {0x20, 0x01, 0x02, 0x00, 0x00} /* cmd */
-#else
-         0x03, {0x20, 0x01, 0x00}
-#endif
      },
      {
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
          0x4, {0x40, 0x01, 0x19, 0x00} /* exp_rsp */
-#else
-         0x4, {0x40, 0x01, 0x17, 0x00}
-#endif
      },
      {
          0x00, {0x00} /* ext_ntf */
@@ -153,11 +136,7 @@
          0x04, {0x20, 0x00, 0x01, 0x00} /* cmd */
      },
      {
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
          0x06, {0x40, 0x00, 0x03, 0x00, 0x11, 0x00} /* exp_rsp */
-#else
-         0x06, {0x40, 0x00, 0x03, 0x00, 0x10, 0x00} /* exp_rsp */
-#endif
      },
      {
          0x00, {0x00} /* ext_ntf */
@@ -165,18 +144,10 @@
      st_validator_testEquals, /* validator */
      st_validator_null},
     {{
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
          0x05, {0x20, 0x01, 0x02, 0x00, 0x00} /* cmd */
-#else
-         0x03, {0x20, 0x01, 0x00}
-#endif
      },
      {
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
          0x4, {0x40, 0x01, 0x19, 0x00} /* exp_rsp */
-#else
-         0x4, {0x40, 0x01, 0x17, 0x00}
-#endif
      },
      {
          0x00, {0x00} /* ext_ntf */
@@ -213,11 +184,7 @@
          0x04, {0x20, 0x00, 0x01, 0x00} /* cmd */
      },
      {
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
          0x06, {0x40, 0x00, 0x03, 0x00, 0x11, 0x00} /* exp_rsp */
-#else
-         0x06, {0x40, 0x00, 0x03, 0x00, 0x10, 0x00}             /* exp_rsp */
-#endif
      },
      {
          0x00, {0x00} /* ext_ntf */
@@ -225,25 +192,16 @@
      st_validator_testEquals, /* validator */
      st_validator_null},
     {{
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
          0x05, {0x20, 0x01, 0x02, 0x00, 0x00} /* cmd */
-#else
-         0x03, {0x20, 0x01, 0x00}                               /* cmd */
-#endif
      },
      {
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
          0x4, {0x40, 0x01, 0x19, 0x00} /* exp_rsp */
-#else
-         0x4, {0x40, 0x01, 0x17, 0x00}                          /* exp_rsp */
-#endif
      },
      {
          0x00, {0x00} /* ext_ntf */
      },
      st_validator_testEquals, /* validator */
      st_validator_null
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
     },
     {{
          0x04, {0x2F, 0x00, 0x01, 0x00} /* cmd */
@@ -256,7 +214,6 @@
      },
      st_validator_testEquals, /* validator */
      st_validator_null
-#endif
     }};
 
 /* for rf field test, first requires to disable the standby mode */
@@ -265,11 +222,7 @@
          0x04, {0x20, 0x00, 0x01, 0x00} /* cmd */
      },
      {
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
          0x06, {0x40, 0x00, 0x03, 0x00, 0x11, 0x00} /* exp_rsp */
-#else
-         0x06, {0x40, 0x00, 0x03, 0x00, 0x10, 0x00}             /* exp_rsp */
-#endif
      },
      {
          0x00, {0x00} /* ext_ntf */
@@ -277,25 +230,16 @@
      st_validator_testEquals, /* validator */
      st_validator_null},
     {{
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
          0x05, {0x20, 0x01, 0x02, 0x00, 0x00} /* cmd */
-#else
-         0x03, {0x20, 0x01, 0x00}                               /* cmd */
-#endif
      },
      {
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
          0x4, {0x40, 0x01, 0x19, 0x00} /* exp_rsp */
-#else
-         0x4, {0x40, 0x01, 0x17, 0x00}                          /* exp_rsp */
-#endif
      },
      {
          0x00, {0x00} /* ext_ntf */
      },
      st_validator_testEquals, /* validator */
      st_validator_null},
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
     {{
          0x03, {0x2F, 0x02, 0x00} /* cmd */
      },
@@ -318,13 +262,8 @@
      },
      st_validator_testEquals, /* validator */
      st_validator_null},
-#endif
     {{
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
          0x05, {0x2F, 0x3D, 0x02, 0x20, 0x01} /* cmd */
-#else
-         0x08, {0x2F, 0x3D, 0x05, 0x20, 0x01, 0x00, 0x00, 0x00} /* cmd */
-#endif
      },
      {
          0x04, {0x4F, 0x3D, 0x05, 0x00} /* exp_rsp */
@@ -334,7 +273,6 @@
      },
      st_validator_testEquals, /* validator */
      st_validator_null
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
     },
     {{
          0x04, {0x2F, 0x00, 0x01, 0x01} /* cmd */
@@ -347,7 +285,6 @@
      },
      st_validator_testEquals, /* validator */
      st_validator_null
-#endif
     }};
 
 static nci_test_data_t rf_field_off_test_data[] = {
@@ -355,11 +292,7 @@
          0x04, {0x20, 0x00, 0x01, 0x00} /* cmd */
      },
      {
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
          0x06, {0x40, 0x00, 0x03, 0x00, 0x11, 0x00} /* exp_rsp */
-#else
-         0x06, {0x40, 0x00, 0x03, 0x00, 0x10, 0x00}             /* exp_rsp */
-#endif
      },
      {
          0x00, {0x00} /* ext_ntf */
@@ -367,25 +300,16 @@
      st_validator_testEquals, /* validator */
      st_validator_null},
     {{
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
          0x05, {0x20, 0x01, 0x02, 0x00, 0x00} /* cmd */
-#else
-         0x03, {0x20, 0x01, 0x00}                               /* cmd */
-#endif
      },
      {
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
          0x4, {0x40, 0x01, 0x19, 0x00} /* exp_rsp */
-#else
-         0x4, {0x40, 0x01, 0x17, 0x00}                          /* exp_rsp */
-#endif
      },
      {
          0x00, {0x00} /* ext_ntf */
      },
      st_validator_testEquals, /* validator */
      st_validator_null},
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
     {{
          0x03, {0x2F, 0x02, 0x00} /* cmd */
      },
@@ -408,13 +332,8 @@
      },
      st_validator_testEquals, /* validator */
      st_validator_null},
-#endif
     {{
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
          0x05, {0x2F, 0x3D, 0x02, 0x20, 0x00} /* cmd */
-#else
-         0x08, {0x2F, 0x3D, 0x05, 0x20, 0x00, 0x00, 0x00, 0x00} /* cmd */
-#endif
      },
      {
          0x04, {0x4F, 0x3D, 0x05, 0x00} /* exp_rsp */
@@ -424,7 +343,6 @@
      },
      st_validator_testEquals, /* validator */
      st_validator_null
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
     },
     {{
          0x04, {0x2F, 0x00, 0x01, 0x01} /* cmd */
@@ -437,7 +355,6 @@
      },
      st_validator_testEquals, /* validator */
      st_validator_null
-#endif
     }};
 
 /* Download pin test data 1 */
@@ -446,11 +363,7 @@
          0x04, {0x20, 0x00, 0x01, 0x00} /* cmd */
      },
      {
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
          0x06, {0x40, 0x00, 0x03, 0x00, 0x11, 0x00} /* exp_rsp */
-#else
-         0x06, {0x40, 0x00, 0x03, 0x00, 0x10, 0x00}             /* exp_rsp */
-#endif
      },
      {
          0x00, {0x00} /* ext_ntf */
@@ -479,11 +392,7 @@
          0x04, {0x20, 0x00, 0x01, 0x00} /* cmd */
      },
      {
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
          0x06, {0x40, 0x00, 0x03, 0x00, 0x11, 0x00} /* exp_rsp */
-#else
-         0x06, {0x40, 0x00, 0x03, 0x00, 0x10, 0x00}             /* exp_rsp */
-#endif
      },
      {
          0x00, {0x00} /* ext_ntf */
@@ -491,18 +400,10 @@
      st_validator_testEquals, /* validator */
      st_validator_null},
     {{
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
          0x05, {0x20, 0x01, 0x02, 0x00, 0x00} /* cmd */
-#else
-         0x03, {0x20, 0x01, 0x00}                               /* cmd */
-#endif
      },
      {
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
          0x4, {0x40, 0x01, 0x19, 0x00} /* exp_rsp */
-#else
-         0x4, {0x40, 0x01, 0x17, 0x00}                          /* exp_rsp */
-#endif
      },
      {
          0x00, {0x00} /* ext_ntf */
@@ -520,7 +421,6 @@
      },
      st_validator_testEquals, /* validator */
      st_validator_null},
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
     {{
          0x04, {0x2F, 0x00, 0x01, 0x00} /* cmd */
      },
@@ -532,7 +432,6 @@
      },
      st_validator_testEquals, /* validator */
      st_validator_null},
-#endif
     {{
          0x05,
          {0x2F, 0x3D, 0x02, 0x01, 0x80} /* TxLDO cureent measurement cmd */
@@ -546,13 +445,8 @@
      st_validator_testAntenna_Txldo,
      st_validator_null},
     {{
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
          0x07,
          {0x2F, 0x3D, 0x04, 0x02, 0xC8, 0x60, 0x03} /* AGC measurement cmd */
-#else
-         0x07,
-         {0x2F, 0x3D, 0x04, 0x02, 0xCD, 0x60, 0x03} /* AGC measurement cmd */
-#endif
      },
      {
          0x03, {0x4F, 0x3D, 05} /* exp_rsp */
@@ -588,7 +482,6 @@
      },
      st_validator_testAntenna_AgcVal_Differential,
      st_validator_null
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
     },
     {{
          0x04, {0x2F, 0x00, 0x01, 0x01} /* cmd */
@@ -601,7 +494,6 @@
      },
      st_validator_testEquals, /* validator */
      st_validator_null
-#endif
     }};
 
 /************** Self test functions ***************************************/
@@ -1457,27 +1349,17 @@
  **
  ******************************************************************************/
 
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
 NFCSTATUS phNxpNciHal_PrbsTestStart(phNxpNfc_PrbsType_t prbs_type,
                                     phNxpNfc_PrbsHwType_t hw_prbs_type,
                                     phNxpNfc_Tech_t tech,
                                     phNxpNfc_Bitrate_t bitrate)
-#else
-NFCSTATUS phNxpNciHal_PrbsTestStart(phNxpNfc_Tech_t tech,
-                                    phNxpNfc_Bitrate_t bitrate)
-#endif
 {
   NFCSTATUS status = NFCSTATUS_FAILED;
 
   nci_test_data_t prbs_cmd_data;
 
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
   uint8_t rsp_cmd_info[] = {0x4F, 0x30, 0x01, 0x00};
   prbs_cmd_data.cmd.len = 0x09;
-#else
-  uint8_t rsp_cmd_info[] = {0x4F, 0x30, 0x01, 0x00};
-  prbs_cmd_data.cmd.len = 0x07;
-#endif
 
   memcpy(prbs_cmd_data.exp_rsp.p_data, &rsp_cmd_info[0], sizeof(rsp_cmd_info));
   prbs_cmd_data.exp_rsp.len = sizeof(rsp_cmd_info);
@@ -1492,14 +1374,9 @@
 
 //    [NCI] -> [0x2F 0x30 0x04 0x00 0x00 0x01 0xFF]
 
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
   status =
       phNxpNciHal_getPrbsCmd(prbs_type, hw_prbs_type, tech, bitrate,
                              prbs_cmd_data.cmd.p_data, prbs_cmd_data.cmd.len);
-#else
-  status = phNxpNciHal_getPrbsCmd(tech, bitrate, prbs_cmd_data.cmd.p_data,
-                                  prbs_cmd_data.cmd.len);
-#endif
 
   if (status == NFCSTATUS_FAILED) {
     // Invalid Param.
@@ -1571,15 +1448,10 @@
 ** Returns          NFCSTATUS_SUCCESS if successful,otherwise NFCSTATUS_FAILED.
 **
 *******************************************************************************/
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
 NFCSTATUS phNxpNciHal_getPrbsCmd(phNxpNfc_PrbsType_t prbs_type,
                                  phNxpNfc_PrbsHwType_t hw_prbs_type,
                                  uint8_t tech, uint8_t bitrate,
                                  uint8_t* prbs_cmd, uint8_t prbs_cmd_len)
-#else
-NFCSTATUS phNxpNciHal_getPrbsCmd(uint8_t tech, uint8_t bitrate,
-                                 uint8_t* prbs_cmd, uint8_t prbs_cmd_len)
-#endif
 {
   NFCSTATUS status = NFCSTATUS_SUCCESS;
   int position_tech_param = 0;
@@ -1588,18 +1460,13 @@
   NXPLOG_NCIHAL_D("phNxpNciHal_getPrbsCmd - tech 0x%x bitrate = 0x%x", tech,
                   bitrate);
   if (NULL == prbs_cmd ||
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
       prbs_cmd_len != 0x09)
-#else
-      prbs_cmd_len != 0x07)
-#endif
   {
     return status;
   }
 
   prbs_cmd[0] = 0x2F;
   prbs_cmd[1] = 0x30;
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
   prbs_cmd[2] = 0x06;
   prbs_cmd[3] = (uint8_t)prbs_type;
   // 0xFF Error value used for validation.
@@ -1610,17 +1477,6 @@
   prbs_cmd[8] = 0xFF;
   position_tech_param = 5;
   position_bit_param = 6;
-#else
-  prbs_cmd[2] = 0x04;
-  // 0xFF Error value used for validation.
-  prbs_cmd[3] = 0xFF;  // TECH
-  // 0xFF Error value used for validation.
-  prbs_cmd[4] = 0xFF;  // BITRATE
-  prbs_cmd[5] = 0x01;
-  prbs_cmd[6] = 0xFF;
-  position_tech_param = 3;
-  position_bit_param = 4;
-#endif
 
   switch (tech) {
     case NFC_RF_TECHNOLOGY_A:
diff --git a/halimpl/utils/NxpNfcCapability.cpp b/halimpl/utils/NxpNfcCapability.cpp
new file mode 100644
index 0000000..fc0a6c3
--- /dev/null
+++ b/halimpl/utils/NxpNfcCapability.cpp
@@ -0,0 +1,94 @@
+/******************************************************************************
+ *
+ *  Copyright (C) 2015 NXP Semiconductors
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ ******************************************************************************/
+#define LOG_TAG "NxpHal"
+#include "NxpNfcCapability.h"
+#include <phNxpLog.h>
+
+capability* capability::instance = NULL;
+tNFC_chipType capability::chipType = pn81T;
+tNfc_featureList nfcFL;
+
+capability::capability() {}
+
+capability* capability::getInstance() {
+  if (NULL == instance) {
+    instance = new capability();
+  }
+  return instance;
+}
+
+tNFC_chipType capability::processChipType(uint8_t* msg, uint16_t msg_len) {
+  if ((msg != NULL) && (msg_len != 0)) {
+    if (msg[0] == 0x60 && msg[1] == 00) {
+      if ((msg[offsetRstFwVersion] == 0x12) &&
+          (msg[offsetRstFwVersion + 1] == 0x01)) {
+        chipType = pn81T;
+      } else if ((msg[offsetRstFwVersion] == 0x11) &&
+                 (msg[offsetRstFwVersion + 1] == 0x02)) {
+        chipType = pn553;
+      }
+    } else if ((offsetInitFwVersion < msg_len) &&
+               (msg[offsetInitFwVersion] == 0x12)) {
+      chipType = pn81T;
+    }
+
+    else if (offsetHwVersion < msg_len) {
+      ALOGD("%s HwVersion : 0x%02x", __func__, msg[offsetHwVersion]);
+      switch (msg[offsetHwVersion]) {
+        case 0x40:  // PN553 A0
+        case 0x41:  // PN553 B0
+          // NQ310
+          chipType = pn553;
+          break;
+
+        case 0x50:  // PN553 A0 + P73
+        case 0x51:  // PN553 B0 + P73 , NQ440
+          // NQ330
+          chipType = pn80T;
+          break;
+
+        case 0x98:
+          chipType = pn551;
+          break;
+
+        case 0xA8:
+        case 0x08:
+          chipType = pn67T;
+          break;
+
+        case 0x28:
+        case 0x48:  // NQ210
+          chipType = pn548C2;
+          break;
+
+        case 0x18:
+        case 0x58:  // NQ220
+          chipType = pn66T;
+          break;
+
+        default:
+          chipType = pn80T;
+      }
+    } else {
+      ALOGD("%s Wrong msg_len. Setting Default ChiptType pn80T", __func__);
+      chipType = pn81T;
+    }
+  }
+  ALOGD("%s Product : %s", __func__, product[chipType]);
+  return chipType;
+}
diff --git a/halimpl/utils/NxpNfcCapability.h b/halimpl/utils/NxpNfcCapability.h
new file mode 100644
index 0000000..41e7b64
--- /dev/null
+++ b/halimpl/utils/NxpNfcCapability.h
@@ -0,0 +1,41 @@
+/******************************************************************************
+ *
+ *  Copyright (C) 2015 NXP Semiconductors
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ ******************************************************************************/
+#ifndef __CAP_H__
+#define __CAP_H__
+#include "Nxp_Features.h"
+#define pConfigFL (capability::getInstance())
+
+class capability {
+ private:
+  static capability* instance;
+  const uint16_t offsetHwVersion = 24;
+  const uint16_t offsetInitFwVersion = 25;
+  const uint16_t offsetRstFwVersion = 9;
+  /*product[] will be used to print product version and
+  should be kept in accordance with tNFC_chipType*/
+  const char* product[11] = {"UNKNOWN", "PN547C2", "PN65T", "PN548C2",
+                             "PN66T",   "PN551",   "PN67T", "PN553",
+                             "PN80T",   "PN557",   "PN81T"};
+  capability();
+
+ public:
+  static tNFC_chipType chipType;
+  static capability* getInstance();
+  tNFC_chipType processChipType(uint8_t* msg, uint16_t msg_len);
+};
+#endif
diff --git a/halimpl/utils/phNxpConfig.h b/halimpl/utils/phNxpConfig.h
index 496cc24..e775d7c 100755
--- a/halimpl/utils/phNxpConfig.h
+++ b/halimpl/utils/phNxpConfig.h
@@ -65,7 +65,7 @@
 #define NAME_MIFARE_READER_ENABLE "MIFARE_READER_ENABLE"
 #define NAME_FW_STORAGE "FW_STORAGE"
 #define NAME_NXP_NFC_DEV_NODE "NXP_NFC_DEV_NODE"
-#define NAME_NXP_FW_NAME "NXP_FW_NAME"
+#define NAME_NXP_FW_TYPE "NXP_FW_TYPE"
 #define NAME_NXP_FW_PROTECION_OVERRIDE "NXP_FW_PROTECION_OVERRIDE"
 #define NAME_NXP_SYS_CLK_SRC_SEL "NXP_SYS_CLK_SRC_SEL"
 #define NAME_NXP_SYS_CLK_FREQ_SEL "NXP_SYS_CLK_FREQ_SEL"
diff --git a/halimpl/utils/phNxpNciHal_utils.cc b/halimpl/utils/phNxpNciHal_utils.cc
old mode 100755
new mode 100644
index fb51285..4f50a10
--- a/halimpl/utils/phNxpNciHal_utils.cc
+++ b/halimpl/utils/phNxpNciHal_utils.cc
@@ -23,12 +23,6 @@
 #include <phNxpNciHal.h>
 #include <phNxpNciHal_utils.h>
 
-#if (NFC_NXP_CHIP_TYPE == PN548C2)
-extern uint8_t discovery_cmd[50];
-extern uint8_t discovery_cmd_len;
-extern uint8_t nfcdep_detected;
-#endif
-
 /*********************** Link list functions **********************************/
 
 /*******************************************************************************
@@ -343,10 +337,9 @@
 **
 *******************************************************************************/
 phNxpNciHal_Monitor_t* phNxpNciHal_get_monitor(void) {
- if(nxpncihal_monitor == NULL)
- {
+  if (nxpncihal_monitor == NULL) {
     NXPLOG_NCIHAL_E("nxpncihal_monitor is null");
- }
+  }
   return nxpncihal_monitor;
 }
 
@@ -464,18 +457,6 @@
 *******************************************************************************/
 
 void phNxpNciHal_emergency_recovery(void) {
-#if (NFC_NXP_CHIP_TYPE == PN548C2)
-  if (nfcdep_detected && discovery_cmd_len != 0) {
-    pthread_t pthread;
-    pthread_attr_t attr;
-    pthread_attr_init(&attr);
-    pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
-    if (pthread_create(&pthread, &attr, (void*)phNxpNciHal_core_reset_recovery,
-                       NULL) == 0) {
-      return;
-    }
-  }
-#endif
   NXPLOG_NCIHAL_E("%s: abort()", __func__);
   abort();
 }
