diff --git a/libese-spi/p73/lib/phNxpEse_Api.cpp b/libese-spi/p73/lib/phNxpEse_Api.cpp
old mode 100755
new mode 100644
index 6366350..70070fd
--- a/libese-spi/p73/lib/phNxpEse_Api.cpp
+++ b/libese-spi/p73/lib/phNxpEse_Api.cpp
@@ -27,8 +27,6 @@
 #include <phNxpEse_Internal.h>
 
 #define RECIEVE_PACKET_SOF 0xA5
-#define CHAINED_PACKET_WITHSEQN 0x60
-#define CHAINED_PACKET_WITHOUTSEQN 0x20
 #define PH_PAL_ESE_PRINT_PACKET_TX(data, len) \
   ({ phPalEse_print_packet("SEND", data, len); })
 #define PH_PAL_ESE_PRINT_PACKET_RX(data, len) \
@@ -47,7 +45,6 @@
 static unsigned char* phNxpEse_GgetTimerTlvBuffer(unsigned char* timer_buffer,
                                                   unsigned int value);
 #endif
-static int poll_sof_chained_delay = 0;
 /*********************** Global Variables *************************************/
 
 /* ESE Context structure */
@@ -964,16 +961,9 @@
       headerIndex = 0;
       break;
     }
-    /*If it is Chained packet wait for 100 usec*/
-    if (poll_sof_chained_delay == 1) {
-      ALOGD_IF(ese_debug_enabled, "%s Chained Pkt, delay read %dus",
-               __FUNCTION__, WAKE_UP_DELAY * CHAINED_PKT_SCALER);
-      phPalEse_sleep(WAKE_UP_DELAY * CHAINED_PKT_SCALER);
-    } else {
-      ALOGD_IF(ese_debug_enabled, "%s Normal Pkt, delay read %dus",
-               __FUNCTION__, WAKE_UP_DELAY * NAD_POLLING_SCALER);
-      phPalEse_sleep(WAKE_UP_DELAY * NAD_POLLING_SCALER);
-    }
+    ALOGD_IF(ese_debug_enabled, "%s Normal Pkt, delay read %dus", __FUNCTION__,
+             READ_WAKE_UP_DELAY * NAD_POLLING_SCALER);
+    phPalEse_sleep(READ_WAKE_UP_DELAY * NAD_POLLING_SCALER);
   } while (sof_counter < ESE_NAD_POLLING_MAX);
   if (pBuffer[0] == RECIEVE_PACKET_SOF) {
     ALOGD_IF(ese_debug_enabled, "%s SOF FOUND", __FUNCTION__);
@@ -983,16 +973,6 @@
     if (ret < 0) {
       ALOGE("_spi_read() [HDR]errno : %x ret : %X", errno, ret);
     }
-    if ((pBuffer[1] == CHAINED_PACKET_WITHOUTSEQN) ||
-        (pBuffer[1] == CHAINED_PACKET_WITHSEQN)) {
-      poll_sof_chained_delay = 1;
-      ALOGD_IF(ese_debug_enabled, "poll_sof_chained_delay value is %d ",
-               poll_sof_chained_delay);
-    } else {
-      poll_sof_chained_delay = 0;
-      ALOGD_IF(ese_debug_enabled, "poll_sof_chained_delay value is %d ",
-               poll_sof_chained_delay);
-    }
     total_count = 3;
     nNbBytesToRead = pBuffer[2];
     /* Read the Complete data + one byte CRC*/
diff --git a/libese-spi/p73/pal/spi/phNxpEsePal_spi.cpp b/libese-spi/p73/pal/spi/phNxpEsePal_spi.cpp
index 7957199..21057b6 100755
--- a/libese-spi/p73/pal/spi/phNxpEsePal_spi.cpp
+++ b/libese-spi/p73/pal/spi/phNxpEsePal_spi.cpp
@@ -43,6 +43,7 @@
 
 #define MAX_RETRY_CNT 10
 #define HAL_NFC_SPI_DWP_SYNC 21
+#define RF_ON 1
 
 extern int omapi_status;
 extern bool ese_debug_enabled;
@@ -50,7 +51,8 @@
 static int rf_status;
 unsigned long int configNum1, configNum2;
 // Default max retry count for SPI CLT write blocked in secs
-static unsigned long int gsMaxSpiWriteRetryCnt = 10;
+static const uint8_t DEFAULT_MAX_SPI_WRITE_RETRY_COUNT_RF_ON = 10;
+static const uint8_t MAX_SPI_WRITE_RETRY_COUNT_HW_ERR = 3;
 /*******************************************************************************
 **
 ** Function         phPalEse_spi_close
@@ -236,17 +238,11 @@
   } else {
     /* Do Nothing */
   }
-  ALOGE("NXP_SPI_WRITE_TIMEOUT value is... : %ld secs", configNum2);
-  if (configNum2 > 0) {
-    gsMaxSpiWriteRetryCnt = configNum2;
-    ALOGE(" spi_write_timeout Wait time ... : %ld", gsMaxSpiWriteRetryCnt);
-  } else {
-    /* Do Nothing */
-  }
 
+  unsigned int maxRetryCount = 0, retryDelay = 0;
   while (numWrote < nNbBytesToWrite) {
     // usleep(5000);
-    if (rf_status == 0) {
+    if (rf_status != RF_ON) {
       ret = write((intptr_t)pDevHandle, pBuffer + numWrote,
                   nNbBytesToWrite - numWrote);
     } else {
@@ -259,19 +255,23 @@
       return -1;
     } else {
       ALOGE("_spi_write() errno : %x", errno);
-      ALOGD_IF(ese_debug_enabled, "rf_status value is %d", rf_status);
-      if ((errno == EINTR || errno == EAGAIN || rf_status == 1) &&
-          (retryCount < gsMaxSpiWriteRetryCnt)) {
-        /*Configure retry count or timeout here,now its configured for 2*10
-         * secs*/
-        if (retryCount > gsMaxSpiWriteRetryCnt) {
-          ret = -1;
-          break;
-        }
 
+      if (rf_status == RF_ON) {
+        maxRetryCount = (configNum2 > 0)
+                            ? configNum2
+                            : DEFAULT_MAX_SPI_WRITE_RETRY_COUNT_RF_ON;
+        retryDelay = 1000 * WRITE_WAKE_UP_DELAY;
+        ALOGD_IF(ese_debug_enabled, "spi_Write failed as RF is ON.");
+      } else {
+        maxRetryCount = MAX_SPI_WRITE_RETRY_COUNT_HW_ERR;
+        retryDelay = WRITE_WAKE_UP_DELAY;
+        ALOGD_IF(ese_debug_enabled, "spi_write failed");
+      }
+
+      if (retryCount < maxRetryCount) {
         retryCount++;
-        /* 5ms delay to give ESE wake up delay */
-        phPalEse_sleep(1000 * WAKE_UP_DELAY);
+        /*wait for eSE wake up*/
+        phPalEse_sleep(retryDelay);
         ALOGE("_spi_write() failed. Going to retry, counter:%ld !", retryCount);
         continue;
       }
diff --git a/libese-spi/p73/pal/spi/phNxpEsePal_spi.h b/libese-spi/p73/pal/spi/phNxpEsePal_spi.h
index 95ce060..1033694 100755
--- a/libese-spi/p73/pal/spi/phNxpEsePal_spi.h
+++ b/libese-spi/p73/pal/spi/phNxpEsePal_spi.h
@@ -42,15 +42,17 @@
 /*!
  * \brief ESE wakeup delay in case of write error retry
  */
-#define WAKE_UP_DELAY 1000
+#define WRITE_WAKE_UP_DELAY 1000
+
+/*!
+ * \brief ESE SOF polling delay
+ */
+#define READ_WAKE_UP_DELAY 100
+
 /*!
  * \brief ESE wakeup delay in case of write error retry
  */
 #define NAD_POLLING_SCALER 10
-/*!
- * \brief ESE wakeup delay in case of write error retry
- */
-#define CHAINED_PKT_SCALER 1
 
 /* Function declarations */
 /**
