diff --git a/Android.mk b/Android.mk
index 0557a87..8f64cba 100644
--- a/Android.mk
+++ b/Android.mk
@@ -105,7 +105,11 @@
 LOCAL_SRC_FILES += Linux_x86/phDal4Nfc_i2c.c
 LOCAL_SRC_FILES += Linux_x86/phDal4Nfc_messageQueueLib.c
 
+# Really verbose:
 #LOCAL_CFLAGS += -DNXP_MESSAGING -DANDROID -DDEBUG -DDAL_TRACE -DINCLUDE_DALINIT_DEINIT -pipe -fomit-frame-pointer -Wall -Wno-trigraphs -Werror-implicit-function-declaration  -fno-strict-aliasing -mapcs -mno-sched-prolog -mabi=aapcs-linux -mno-thumb-interwork -msoft-float -Uarm -fno-common -fpic
+# Just show I2C traffic:
+#LOCAL_CFLAGS += -DNXP_MESSAGING -DANDROID -DINCLUDE_DALINIT_DEINIT -DLOW_LEVEL_TRACES -pipe -fomit-frame-pointer -Wall -Wno-trigraphs -Werror-implicit-function-declaration  -fno-strict-aliasing -mapcs -mno-sched-prolog -mabi=aapcs-linux -mno-thumb-interwork -msoft-float -Uarm -fno-common -fpic
+# Quiet:
 LOCAL_CFLAGS += -DNXP_MESSAGING -DANDROID -DINCLUDE_DALINIT_DEINIT -pipe -fomit-frame-pointer -Wall -Wno-trigraphs -Werror-implicit-function-declaration  -fno-strict-aliasing -mapcs -mno-sched-prolog -mabi=aapcs-linux -mno-thumb-interwork -msoft-float -Uarm -fno-common -fpic
 
 ifeq ($(NFC_BUILD_VARIANT),debug)
diff --git a/Linux_x86/phDal4Nfc.c b/Linux_x86/phDal4Nfc.c
index 1222525..6d3c9fb 100644
--- a/Linux_x86/phDal4Nfc.c
+++ b/Linux_x86/phDal4Nfc.c
@@ -30,6 +30,7 @@
 
 #include <unistd.h>
 #include <pthread.h>
+#include <stdlib.h>
 #ifdef ANDROID
 #include <linux/ipc.h>
 #else
@@ -660,6 +661,7 @@
     phDal4Nfc_Message_t      sMsg;
     phOsalNfc_Message_t      OsalMsg ;
     int i;
+    int i2c_error_count;
 
     pthread_setname_np(pthread_self(), "reader");
 
@@ -676,13 +678,38 @@
         sem_wait(&nfc_read_sem);
         DAL_PRINT("RX Thread Sem UnLock\n");
         /* Issue read operation.*/
+
+    i2c_error_count = 0;
+retry:
 	gReadWriteContext.nNbOfBytesRead=0;
 	DAL_DEBUG("\n*New *** *****Request Length = %d",gReadWriteContext.nNbOfBytesToRead);
 	memsetRet=memset(gReadWriteContext.pReadBuffer,0,gReadWriteContext.nNbOfBytesToRead);
 
 	/* Wait for IRQ !!!  */
-	gReadWriteContext.nNbOfBytesRead = gLinkFunc.read(gReadWriteContext.pReadBuffer, gReadWriteContext.nNbOfBytesToRead);
-        
+    gReadWriteContext.nNbOfBytesRead = gLinkFunc.read(gReadWriteContext.pReadBuffer, gReadWriteContext.nNbOfBytesToRead);
+
+    /* TODO: Remove this hack
+     * Reading the value 0x57 indicates a HW I2C error at I2C address 0x57
+     * (pn544). There should not be false positives because a read of length 1
+     * must be a HCI length read, and a length of 0x57 is impossible (max is 33).
+     */
+    if(gReadWriteContext.nNbOfBytesToRead == 1 && gReadWriteContext.pReadBuffer[0] == 0x57)
+    {
+        i2c_error_count++;
+        DAL_DEBUG("Read 0x57 %d times\n", i2c_error_count);
+        if (i2c_error_count < 5) {
+            usleep(2000);
+            goto retry;
+        }
+        DAL_PRINT("NOTHING TO READ, RECOVER");
+        phOsalNfc_RaiseException(phOsalNfc_e_UnrecovFirmwareErr,1);
+    }
+    else
+    {
+        i2c_error_count = 0;
+#ifdef LOW_LEVEL_TRACES
+        phOsalNfc_PrintData("Received buffer", (uint16_t)gReadWriteContext.nNbOfBytesRead, gReadWriteContext.pReadBuffer);
+#endif
         DAL_DEBUG("Read ok. nbToRead=%d\n", gReadWriteContext.nNbOfBytesToRead);
         DAL_DEBUG("NbReallyRead=%d\n", gReadWriteContext.nNbOfBytesRead);
         DAL_PRINT("ReadBuff[]={ ");
@@ -691,17 +718,16 @@
           DAL_DEBUG("0x%x ", gReadWriteContext.pReadBuffer[i]);
         }
         DAL_PRINT("}\n");
-	
+
         /* read completed immediately */
-	sMsg.eMsgType= PHDAL4NFC_READ_MESSAGE;
-	/* Update the state */
-	phDal4Nfc_FillMsg(&sMsg,&OsalMsg);
-	phDal4Nfc_DeferredCall((pphDal4Nfc_DeferFuncPointer_t)phDal4Nfc_DeferredCb,(void *)pmsgType);
-	memsetRet=memset(&sMsg,0,sizeof(phDal4Nfc_Message_t));
-	memsetRet=memset(&OsalMsg,0,sizeof(phOsalNfc_Message_t));
+        sMsg.eMsgType= PHDAL4NFC_READ_MESSAGE;
+        /* Update the state */
+        phDal4Nfc_FillMsg(&sMsg,&OsalMsg);
+        phDal4Nfc_DeferredCall((pphDal4Nfc_DeferFuncPointer_t)phDal4Nfc_DeferredCb,(void *)pmsgType);
+        memsetRet=memset(&sMsg,0,sizeof(phDal4Nfc_Message_t));
+        memsetRet=memset(&OsalMsg,0,sizeof(phOsalNfc_Message_t));
+    }
 
-
-        
     } /* End of thread Loop*/
     return TRUE;
 }
@@ -824,9 +850,15 @@
             break;
         case PHDAL4NFC_WRITE_MESSAGE:
             DAL_PRINT(" Dal deferred write called \n");
+
+#ifdef LOW_LEVEL_TRACES
+            phOsalNfc_PrintData("Send buffer", (uint16_t)gReadWriteContext.nNbOfBytesToWrite, gReadWriteContext.pWriteBuffer);
+#endif
+
             /* DAL_DEBUG("dalMsg->transactInfo.length : %d\n", dalMsg->transactInfo.length); */
             /* Make a Physical WRITE */
-            usleep(3000); /* Wait 3ms before issuing a Write */
+            /* NOTE: need to usleep(3000) here if the write is for SWP */
+            usleep(500);  /* NXP advise 500us sleep required between I2C writes */
             gReadWriteContext.nNbOfBytesWritten = gLinkFunc.write(gReadWriteContext.pWriteBuffer, gReadWriteContext.nNbOfBytesToWrite);
             if (gReadWriteContext.nNbOfBytesWritten != gReadWriteContext.nNbOfBytesToWrite)
             {
diff --git a/Linux_x86/phOsalNfc.c b/Linux_x86/phOsalNfc.c
index 6149fc3..9765e2c 100644
--- a/Linux_x86/phOsalNfc.c
+++ b/Linux_x86/phOsalNfc.c
@@ -150,3 +150,26 @@
     }
 }
 
+/*!
+ * \brief display data bytes.
+ *        This function displays data bytes for debug purpose
+ * \param[in] pString pointer to string to be displayed.
+ * \param[in] length number of bytes to be displayed.
+ * \param[in] pBuffer pointer to data bytes to be displayed.
+ *
+ */
+void phOsalNfc_PrintData(const char *pString, uint32_t length, uint8_t *pBuffer)
+{
+    char print_buffer[512]; // Max length 512 for the download mode
+    int i;
+
+    if(NULL!=pString && length > 1 && length < 34)
+    {
+        print_buffer[0] = '\0';
+        for (i = 0; i < length; i++) {
+            snprintf(&print_buffer[i*5], 6, " 0x%02X", pBuffer[i]);
+        }
+        LOGD("> NFC I2C %s: %s", pString,print_buffer);
+    }
+}
+
diff --git a/inc/phNfcConfig.h b/inc/phNfcConfig.h
index ccc20c0..19a881b 100644
--- a/inc/phNfcConfig.h
+++ b/inc/phNfcConfig.h
@@ -141,7 +141,7 @@
 
 /**< Default Session ID for Initialisation */
 #ifndef DEFAULT_SESSION
-#define DEFAULT_SESSION           "android7"
+#define DEFAULT_SESSION           "android8"
 #endif
 
 
@@ -240,7 +240,7 @@
 #define DEV_MGMT_ACT_GRD_TO_DEFAULT       0x20U
 #endif
 
-/**<  NFCIP Active Mode Configuration
+/**<  NFCIP Active Mode Default Configuration (when acting as Target)
        0x01     106 kbps
        0x02     212 kbps
        0x04     424 kbps
@@ -323,7 +323,7 @@
 /**< Macro to Enable the Peer to Peer Feature */
 #define ENABLE_P2P
 
-#define DEFAULT_NFCIP_INITIATOR_MODE_SUPPORT   0x0FU
+#define DEFAULT_NFCIP_INITIATOR_MODE_SUPPORT   0x3FU
 #define DEFAULT_NFCIP_TARGET_MODE_SUPPORT      0x0FU
 
 /**< Macro to Enable the ISO14443-B Feature */
diff --git a/inc/phNfcTypes.h b/inc/phNfcTypes.h
index 03ce30d..989cfe8 100644
--- a/inc/phNfcTypes.h
+++ b/inc/phNfcTypes.h
@@ -978,10 +978,12 @@
 {
     phNfc_eDefaultP2PMode  = 0x00U,
     phNfc_ePassive106 = 0x01U,
-    phNfc_ePassive212 = 0x02U, 
-    phNfc_ePassive424 = 0x04U, 
-    phNfc_eActive     = 0x08U, 
-    phNfc_eP2P_ALL    = 0x0FU,
+    phNfc_ePassive212 = 0x02U,
+    phNfc_ePassive424 = 0x04U,
+    phNfc_eActive106 = 0x08U,
+    phNfc_eActive212 = 0x10U,
+    phNfc_eActive424 = 0x20U,
+    phNfc_eP2P_ALL   = 0x27U,  /* All Passive and 424 Active */
     phNfc_eInvalidP2PMode = 0xFFU
 } phNfc_eP2PMode_t;
 
diff --git a/src/phFriNfc_Llcp.c b/src/phFriNfc_Llcp.c
index 13f1f92..ac38311 100644
--- a/src/phFriNfc_Llcp.c
+++ b/src/phFriNfc_Llcp.c
@@ -408,7 +408,7 @@
             if (sValueBuffer.length != PHFRINFC_LLCP_TLV_LENGTH_VERSION)
             {
                /* Error : Ill-formed VERSION parameter TLV */
-               return PHNFCSTVAL(CID_FRI_NFC_LLCP, NFCSTATUS_INVALID_PARAMETER);
+               break;
             }
             /* Get VERSION */
             version = sValueBuffer.buffer[0];
@@ -420,7 +420,7 @@
             if (sValueBuffer.length != PHFRINFC_LLCP_TLV_LENGTH_MIUX)
             {
                /* Error : Ill-formed MIUX parameter TLV */
-               return PHNFCSTVAL(CID_FRI_NFC_LLCP, NFCSTATUS_INVALID_PARAMETER);
+               break;
             }
             /* Get MIU */
             sParams.miu = PHFRINFC_LLCP_MIU_DEFAULT + ((sValueBuffer.buffer[0] << 8) | sValueBuffer.buffer[1]) & PHFRINFC_LLCP_TLV_MIUX_MASK;
@@ -432,7 +432,7 @@
             if (sValueBuffer.length != PHFRINFC_LLCP_TLV_LENGTH_WKS)
             {
                /* Error : Ill-formed MIUX parameter TLV */
-               return PHNFCSTVAL(CID_FRI_NFC_LLCP, NFCSTATUS_INVALID_PARAMETER);
+               break;
             }
             /* Get WKS */
             sParams.wks = (sValueBuffer.buffer[0] << 8) | sValueBuffer.buffer[1];
@@ -446,7 +446,7 @@
             if (sValueBuffer.length != PHFRINFC_LLCP_TLV_LENGTH_LTO)
             {
                /* Error : Ill-formed LTO parameter TLV */
-               return PHNFCSTVAL(CID_FRI_NFC_LLCP, NFCSTATUS_INVALID_PARAMETER);
+               break;
             }
             /* Get LTO */
             sParams.lto = sValueBuffer.buffer[0];
@@ -458,7 +458,7 @@
             if (sValueBuffer.length != PHFRINFC_LLCP_TLV_LENGTH_OPT)
             {
                /* Error : Ill-formed OPT parameter TLV */
-               return PHNFCSTVAL(CID_FRI_NFC_LLCP, NFCSTATUS_INVALID_PARAMETER);
+               break;;
             }
             /* Get OPT */
             sParams.option = sValueBuffer.buffer[0] & PHFRINFC_LLCP_TLV_OPT_MASK;
@@ -467,7 +467,7 @@
          default:
          {
             /* Error : Unknown Type */
-            return PHNFCSTVAL(CID_FRI_NFC_LLCP, NFCSTATUS_INVALID_PARAMETER);
+            break;
          }
       }
    }
diff --git a/src/phFriNfc_Llcp.h b/src/phFriNfc_Llcp.h
index 4d2e71e..73fa486 100644
--- a/src/phFriNfc_Llcp.h
+++ b/src/phFriNfc_Llcp.h
@@ -119,7 +119,7 @@
 #define PHFRINFC_LLCP_SAP_SDP                      0x01 /**< Service Discovery Protocol SAP.*/
 #define PHFRINFC_LLCP_SAP_SDP_ADVERTISED_FIRST     0x10 /**< First SAP number from SDP-avertised SAP range.*/
 #define PHFRINFC_LLCP_SAP_SDP_UNADVERTISED_FIRST   0x20 /**< First SAP number from SDP-unavertised SAP range.*/
-#define PHFRINFC_LLCP_SAP_NUMBER                   0x30 /**< Number of possible SAP values (also first invalid value).*/
+#define PHFRINFC_LLCP_SAP_NUMBER                   0x40 /**< Number of possible SAP values (also first invalid value).*/
 #define PHFRINFC_LLCP_SAP_DEFAULT                  0xFF /**< Default number when a socket is created or reset */
 /*@}*/
 
diff --git a/src/phFriNfc_LlcpTransport_Connection.c b/src/phFriNfc_LlcpTransport_Connection.c
index fff63b4..fcdb246 100644
--- a/src/phFriNfc_LlcpTransport_Connection.c
+++ b/src/phFriNfc_LlcpTransport_Connection.c
@@ -627,7 +627,7 @@
                if(sValueBuffer.length == 0)
                {
                   /* Error : Ill-formed SN parameter TLV */
-                  return PHNFCSTVAL(CID_FRI_NFC_LLCP,NFCSTATUS_INVALID_PARAMETER);
+                  break;
                }
                /* Get the Service Name */
                *psServiceName = sValueBuffer;
@@ -639,7 +639,7 @@
                if (sValueBuffer.length != PHFRINFC_LLCP_TLV_LENGTH_RW)
                {
                   /* Error : Ill-formed MIUX parameter TLV */
-                  return PHNFCSTVAL(CID_FRI_NFC_LLCP,NFCSTATUS_INVALID_PARAMETER);
+                  break;
                }
                *pRemoteRW_Size = sValueBuffer.buffer[0];
             }break;
@@ -650,10 +650,16 @@
                if (sValueBuffer.length != PHFRINFC_LLCP_TLV_LENGTH_MIUX)
                {
                   /* Error : Ill-formed MIUX parameter TLV */
-                  return PHNFCSTVAL(CID_FRI_NFC_LLCP,NFCSTATUS_INVALID_PARAMETER);
+                  break;
                }
                *pRemoteMIU = PHFRINFC_LLCP_MIU_DEFAULT + (((sValueBuffer.buffer[0] << 8) | sValueBuffer.buffer[1]) & PHFRINFC_LLCP_TLV_MIUX_MASK);
             }break;
+
+            default:
+            {
+               /* Error : Unknown type */
+               break;
+            }
          }
       }
    }
diff --git a/src/phHal4Nfc_P2P.c b/src/phHal4Nfc_P2P.c
index 47a64de..99c5978 100644
--- a/src/phHal4Nfc_P2P.c
+++ b/src/phHal4Nfc_P2P.c
@@ -478,7 +478,7 @@
             Hal4Ctxt->psTrcvCtxtInfo->TransactionTimerId
                 = PH_OSALNFC_INVALID_TIMER_ID;
             Hal4Ctxt->psTrcvCtxtInfo->RecvDataBufferStatus 
-                = NFCSTATUS_MORE_INFORMATION;
+                = NFCSTATUS_PENDING;
         }       
     }
     if(NULL == Hal4Ctxt->psTrcvCtxtInfo)
diff --git a/src/phOsalNfc.h b/src/phOsalNfc.h
index ad55066..246c2e6 100644
--- a/src/phOsalNfc.h
+++ b/src/phOsalNfc.h
@@ -154,6 +154,19 @@
  */
 void phOsalNfc_DbgString(const char *pString);
 
+/*!
+ * \ingroup grp_osal_nfc
+ * \brief Print data buffer
+ *
+ * Outputs given string to debug port.
+ *
+ * \param[in] pString pointer to string to be displayed.
+ * \param[in] length number of bytes to be displayed.
+ * \param[in] pBuffer pointer to data bytes to be displayed.
+ *
+ * \retval None
+ */
+void phOsalNfc_PrintData(const char *pString, uint32_t length, uint8_t *pBuffer);
 
 /*!
  * \ingroup grp_osal_nfc
