diff --git a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuDb.c b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuDb.c
index 391bc35..0ac16db 100755
--- a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuDb.c
+++ b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuDb.c
@@ -3403,3 +3403,217 @@
   return(onuGponDb_s.onuGponGenTbl_s.onuLinkStatusCallback);
 }
 
+/*******************************************************************************
+**
+**  onuGponDbPONIdTypeABitGet
+**  ____________________________________________________________________________
+**
+**  DESCRIPTION: The function returns PON Id type A bit (from PON-ID maintenance)
+**
+**  PARAMETERS:  None
+**
+**  OUTPUTS:     None
+**
+**  RETURNS:     ponIdTypeABit
+**
+*******************************************************************************/
+MV_U8 onuGponDbPONIdTypeABitGet(void)
+{
+  return(onuGponDb_s.onuGponOperParamsTbl_s.onuGponPONIdTypeABit);
+}
+
+/*******************************************************************************
+**
+**  onuGponDbPONIdTypeABitSet
+**  ____________________________________________________________________________
+**
+**  DESCRIPTION: The function sets PON Id type A bit (from PON-ID maintenance)
+**               in the database
+**
+**  PARAMETERS:  MV_U8 ponIdTypeABit
+**
+**  OUTPUTS:     None
+**
+**  RETURNS:     MV_OK
+**
+*******************************************************************************/
+MV_STATUS onuGponDbPONIdTypeABitSet(MV_U8 ponIdTypeABit)
+{
+  onuGponDb_s.onuGponOperParamsTbl_s.onuGponPONIdTypeABit = ponIdTypeABit;
+
+  return(MV_OK);
+}
+
+/*******************************************************************************
+**
+**  onuGponDbPONIdClassTypeGet
+**  ____________________________________________________________________________
+**
+**  DESCRIPTION: The function returns PONIdClassType (from PON-ID maintenance)
+**
+**  PARAMETERS:  None
+**
+**  OUTPUTS:     None
+**
+**  RETURNS:     ponIdClassType
+**
+*******************************************************************************/
+MV_U8 onuGponDbPONIdClassTypeGet(void)
+{
+  return(onuGponDb_s.onuGponOperParamsTbl_s.onuGponPONIdClassType);
+}
+
+/*******************************************************************************
+**
+**  onuGponDbPONIdClassTypeGet
+**  ____________________________________________________________________________
+**
+**  DESCRIPTION: The function returns PONIdClassType (from PON-ID maintenance)
+**
+**  PARAMETERS:  None
+**
+**  OUTPUTS:     None
+**
+**  RETURNS:     ponIdClassType
+**
+*******************************************************************************/
+MV_U8* onuGponDbPONIdClassTypeStrGet(void)
+{
+  MV_U8   *ponIdClassTypeText[] = {"Class A", "Class B","Class B+","Class C","Class C+","reserved"};
+  MV_U8   *ret;
+
+  if (onuGponDb_s.onuGponOperParamsTbl_s.onuGponPONIdClassType > ONU_GPON_PON_ID_TYPE_CLASS_MAX)
+  {
+    ret = ponIdClassTypeText[ONU_GPON_PON_ID_TYPE_CLASS_MAX];
+  }
+  else
+  {
+    ret = ponIdClassTypeText[onuGponDb_s.onuGponOperParamsTbl_s.onuGponPONIdClassType];
+  }
+  return ret;
+}
+
+/*******************************************************************************
+**
+**  onuGponDbPONIdClassTypeSet
+**  ____________________________________________________________________________
+**
+**  DESCRIPTION: The function sets PONIdClassType (from PON-ID maintenance)
+**               in the database
+**
+**  PARAMETERS:  MV_U8 ponIdClassType
+**
+**  OUTPUTS:     None
+**
+**  RETURNS:     MV_OK
+**
+*******************************************************************************/
+MV_STATUS onuGponDbPONIdClassTypeSet(MV_U8 ponIdClassType)
+{
+  MV_STATUS ret = MV_OK;
+
+  if (ponIdClassType > ONU_GPON_PON_ID_TYPE_CLASS_MAX)
+  {
+    ret = MV_BAD_PARAM;
+  }
+  else
+  {
+    onuGponDb_s.onuGponOperParamsTbl_s.onuGponPONIdClassType = ponIdClassType;
+  }
+
+  return(ret);
+}
+
+/*******************************************************************************
+**
+**  onuGponDbPONIdBytesInfoGet
+**  ____________________________________________________________________________
+**
+**  DESCRIPTION: The function returns PONId bytes info array (from PON-ID maintenance)
+**
+**  PARAMETERS:  None
+**
+**  OUTPUTS:     None
+**
+**  RETURNS:     ponIdBytesInfo
+**
+*******************************************************************************/
+void onuGponDbPONIdBytesInfoGet(MV_U8 *ponIdBytesInfo)
+{
+  memcpy(ponIdBytesInfo, &(onuGponDb_s.onuGponOperParamsTbl_s.onuGponPONIdBytesInfo[0]), ONU_GPON_PON_ID_BYTES_LEN);
+}
+
+/*******************************************************************************
+**
+**  onuGponDbPONIdBytesInfoSet
+**  ____________________________________________________________________________
+**
+**  DESCRIPTION: The function sets PONId bytes info array (from PON-ID maintenance)
+**               in the database
+**
+**  PARAMETERS:  MV_U8* ponIdBytesInfo
+**
+**  OUTPUTS:     None
+**
+**  RETURNS:     MV_OK
+**
+*******************************************************************************/
+MV_STATUS onuGponDbPONIdBytesInfoSet(MV_U8 *ponIdBytesInfo)
+{
+  MV_STATUS ret = MV_OK;
+
+  if (ponIdBytesInfo == NULL)
+  {
+    ret = MV_BAD_PARAM;
+  }
+  else
+  {
+    memcpy(&(onuGponDb_s.onuGponOperParamsTbl_s.onuGponPONIdBytesInfo[0]), ponIdBytesInfo, ONU_GPON_PON_ID_BYTES_LEN);
+  }
+
+  return(ret);
+}
+
+/*******************************************************************************
+**
+**  onuGponDbPONIdOpticalLevelGet
+**  ____________________________________________________________________________
+**
+**  DESCRIPTION: The function returns PONId Tx Optical Level (from PON-ID maintenance)
+**
+**  PARAMETERS:  None
+**
+**  OUTPUTS:     None
+**
+**  RETURNS:     onuGponPONIdTxOpticalLevel
+**
+*******************************************************************************/
+MV_U16 onuGponDbPONIdOpticalLevelGet(void)
+{
+  return(onuGponDb_s.onuGponOperParamsTbl_s.onuGponPONIdTxOpticalLevel);
+}
+
+/*******************************************************************************
+**
+**  onuGponDbPONIdOpticalLevelSet
+**  ____________________________________________________________________________
+**
+**  DESCRIPTION: The function sets PONId Tx Optical Level (from PON-ID maintenance)
+**               in the database
+**
+**  PARAMETERS:  MV_U16 ponIdTxOpticalLevel
+**
+**  OUTPUTS:     None
+**
+**  RETURNS:     MV_OK
+**
+*******************************************************************************/
+MV_STATUS onuGponDbPONIdOpticalLevelSet(MV_U16 ponIdTxOpticalLevel)
+{
+  MV_STATUS ret = MV_OK;
+
+  onuGponDb_s.onuGponOperParamsTbl_s.onuGponPONIdTxOpticalLevel = ponIdTxOpticalLevel;
+
+  return(ret);
+}
+
diff --git a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuDb.h b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuDb.h
index 535b6ea..5c9ae9f 100755
--- a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuDb.h
+++ b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuDb.h
@@ -88,11 +88,14 @@
 /******************************************************************************/
 
 /* GPON Definitions */
-#define ONU_GPON_SN_LEN          (8)
-#define ONU_GPON_PASS_LEN        (10)
-#define ONU_GPON_PREAMBLE_LEN    (3)
-#define ONU_GPON_DELIMITER_LEN   (3)
-#define ONU_GPON_MSG_LEN         (3)
+#define ONU_GPON_SN_LEN                 (8)
+#define ONU_GPON_PASS_LEN               (10)
+#define ONU_GPON_PREAMBLE_LEN           (3)
+#define ONU_GPON_DELIMITER_LEN          (3)
+#define ONU_GPON_MSG_LEN                (3)
+#define ONU_GPON_MSG_LEN                (3)
+#define ONU_GPON_PON_ID_BYTES_LEN       (7)
+#define ONU_GPON_PON_ID_TYPE_CLASS_MAX  (4)
 
 /* Enums
 ------------------------------------------------------------------------------*/
@@ -200,6 +203,10 @@
   MV_BOOL onuGponGemPortSave[GPON_ONU_MAX_GEM_PORTS];
   MV_U8   onuGponPassword[ONU_GPON_PASS_LEN];       /* ONU password */
   MV_U16  onuGponReiSeqNum;                         /* ONU REI sequence number */
+  MV_U8   onuGponPONIdTypeABit;                     /* PON-ID Type A-bit */
+  MV_U8   onuGponPONIdClassType;                    /* PON-ID Class type */
+  MV_U8   onuGponPONIdBytesInfo[ONU_GPON_PON_ID_BYTES_LEN];               /* PON-ID Bytes info*/
+  MV_U16  onuGponPONIdTxOpticalLevel;               /* PON-ID Type TxOpticalLevel */
 }S_OnuGponOperParamsTbl;
 
 /**************************************/
@@ -372,6 +379,15 @@
 MV_U32    onuGponDbTcontResetGet(void);
 MV_VOID   onuGponDbGemRestoreSet(MV_BOOL gem_restore);
 MV_BOOL   onuGponDbGemRestoreGet(MV_VOID);
+MV_U8     onuGponDbPONIdTypeABitGet(void);
+MV_STATUS onuGponDbPONIdTypeABitSet(MV_U8 ponIdTypeABit);
+MV_U8     onuGponDbPONIdClassTypeGet(void);
+MV_U8*    onuGponDbPONIdClassTypeStrGet(void);
+MV_STATUS onuGponDbPONIdClassTypeSet(MV_U8 ponIdClassType);
+void      onuGponDbPONIdBytesInfoGet(MV_U8 *ponIdBytesInfo);
+MV_STATUS onuGponDbPONIdBytesInfoSet(MV_U8 *ponIdBytesInfo);
+MV_U16    onuGponDbPONIdOpticalLevelGet(void);
+MV_STATUS onuGponDbPONIdOpticalLevelSet(MV_U16 ponIdTxOpticalLevel);
 
 /* ONU GPON BW Alloc param table API functions */
 MV_STATUS onuGponDbBwAllocSet(MV_U32 entry, MV_U32 allocId, MV_BOOL valid);
diff --git a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuInit.c b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuInit.c
index 773fa42..73ee3ff 100755
--- a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuInit.c
+++ b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuInit.c
@@ -1001,6 +1001,7 @@
 
   onuGponGenTbl_p->onuGponStateAndEventTbl[ONU_GPON_EVENT_MSG_SN_MASK][state] = (GPONFUNCPTR)onuGponPonMngSerialNumberMaskMsg;
   onuGponGenTbl_p->onuGponStateAndEventTbl[ONU_GPON_EVENT_MSG_EXT_BURST_LEN][state] = (GPONFUNCPTR)onuGponPonMngExtBurstMsg;
+  onuGponGenTbl_p->onuGponStateAndEventTbl[ONU_GPON_EVENT_MSG_PON_ID][state] = (GPONFUNCPTR)onuGponPonMngPonIdMaintenanceMsg;
   onuGponGenTbl_p->onuGponStateAndEventTbl[ONU_GPON_EVENT_MSG_ASSIGN_ONU_ID][state] = (GPONFUNCPTR)onuGponPonMngOnuIdMsg;
   onuGponGenTbl_p->onuGponStateAndEventTbl[ONU_GPON_EVENT_MSG_DIS_SN][state]        = (GPONFUNCPTR)onuGponPonMngDisSnMsg;
   onuGponGenTbl_p->onuGponStateAndEventTbl[ONU_GPON_EVENT_MSG_PHYSICAL_EQUIP_ERR][state] = (GPONFUNCPTR)onuGponPonMngPhyEquErrMsg;
@@ -1014,6 +1015,7 @@
   onuGponGenTbl_p->onuGponStateAndEventTbl[ONU_GPON_EVENT_MSG_DACT_ONU_ID][state]   = (GPONFUNCPTR)onuGponPonMngDactOnuIdMsg;
   onuGponGenTbl_p->onuGponStateAndEventTbl[ONU_GPON_EVENT_MSG_DIS_SN][state]        = (GPONFUNCPTR)onuGponPonMngDisSnMsg;
   onuGponGenTbl_p->onuGponStateAndEventTbl[ONU_GPON_EVENT_MSG_PHYSICAL_EQUIP_ERR][state] = (GPONFUNCPTR)onuGponPonMngPhyEquErrMsg;
+  onuGponGenTbl_p->onuGponStateAndEventTbl[ONU_GPON_EVENT_MSG_PON_ID][state] = (GPONFUNCPTR)onuGponPonMngPonIdMaintenanceMsg;
 
   /* ONU GPON OPERATION STATE 05 */
   /* --------------------------- */
@@ -1032,6 +1034,7 @@
   onuGponGenTbl_p->onuGponStateAndEventTbl[ONU_GPON_EVENT_MSG_REQ_KEY][state]       = (GPONFUNCPTR)onuGponPonMngReqKeyMsg;
   onuGponGenTbl_p->onuGponStateAndEventTbl[ONU_GPON_EVENT_MSG_BER_INTERVAL][state]  = (GPONFUNCPTR)onuGponPonMngBerIntervalMsg;
   onuGponGenTbl_p->onuGponStateAndEventTbl[ONU_GPON_EVENT_MSG_KEY_SWITCH_TIME][state] = (GPONFUNCPTR)onuGponPonMngKeySwitchTimeMsg;
+  onuGponGenTbl_p->onuGponStateAndEventTbl[ONU_GPON_EVENT_MSG_PON_ID][state] = (GPONFUNCPTR)onuGponPonMngPonIdMaintenanceMsg;
 
   /* ONU GPON POPUP STATE 06 */
   /* ----------------------- */
diff --git a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuMngr.c b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuMngr.c
index 139e964..3fae138 100755
--- a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuMngr.c
+++ b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuMngr.c
@@ -108,7 +108,8 @@
   "PST MESSAGE",        
   "BER INTERVAL",
   "KEY SWITCHING TIME", 
-  "EXTENDED BURST LENGTH"
+  "EXTENDED BURST LENGTH",
+  "PON-ID MAINTENANCE"
 };
 
 extern spinlock_t onuPonIrqLock;
@@ -376,7 +377,7 @@
   if ((onuId == ONU_GPON_BROADCAST_ONU_ID) || (onuId == appOnuId))
   {
     /* Handle valid messages */
-    if ((msgId >= ONU_GPON_DS_MSG_OVERHEAD) && (msgId <= ONU_GPON_DS_MSG_EXT_BURST_LEN))
+    if ((msgId >= ONU_GPON_DS_MSG_OVERHEAD) && (msgId <= ONU_GPON_DS_MSG_LAST))
     {
       /* Call the relevant event function */
       ptrFunc = (onuGponGenTbl_p->onuGponStateAndEventTbl[(msgId)][onuState]);
diff --git a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuMngr.h b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuMngr.h
index 876cf5b..e971604 100755
--- a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuMngr.h
+++ b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuMngr.h
@@ -169,6 +169,7 @@
 void      onuGponPonMngPstMsg(MV_U8 onuId, MV_U8 msgId, MV_U8 *msgData);
 void      onuGponPonMngKeySwitchTimeMsg(MV_U8 onuId, MV_U8 msgId, MV_U8 *msgData);
 void      onuGponPonMngExtBurstMsg(MV_U8 onuId, MV_U8 msgId, MV_U8 *msgData);
+void      onuGponPonMngPonIdMaintenanceMsg(MV_U8 onuId, MV_U8 msgId, MV_U8 *msgData);
 
 void      onuGponPonMngTimerT01Hndl(unsigned long data);
 void      onuGponPonMngTimerT02Hndl(unsigned long data);
diff --git a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuMngrStateMachine.c b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuMngrStateMachine.c
index fdaa147..fece1ec 100755
--- a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuMngrStateMachine.c
+++ b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuMngrStateMachine.c
@@ -2597,6 +2597,53 @@
 
 /*******************************************************************************
 **
+**  onuGponPonMngPonIdMaintenanceMsg
+**  ____________________________________________________________________________
+**
+**  DESCRIPTION: The function is called when PON-ID maintenance message is received
+**               (message 21)
+**
+**  PARAMETERS:  MV_U8 onuId
+**               MV_U8 msgId
+**               MV_U8 *msgData
+**
+**  OUTPUTS:     None
+**
+**  RETURNS:     None
+**
+*******************************************************************************/
+void onuGponPonMngPonIdMaintenanceMsg(MV_U8 onuId, MV_U8 msgId, MV_U8 *msgData)
+{
+  MV_U16	 ponIdTxOpticalLevel;
+  MV_U8		 ponIdTypeAbit;
+  MV_U8		 ponIdClassType;
+  MV_U8		 ponIdBytes[ONU_GPON_PON_ID_BYTES_LEN];
+
+  ponIdTypeAbit = (msgData[0] & 0x80)  >> 7;
+  onuGponDbPONIdTypeABitSet(ponIdTypeAbit);
+
+  ponIdClassType = (msgData[0] & 0x70) >> 4;
+  onuGponDbPONIdClassTypeSet(ponIdClassType);
+
+  memcpy(&(ponIdBytes[0]), &(msgData[1]), ONU_GPON_PON_ID_BYTES_LEN);
+  onuGponDbPONIdBytesInfoSet(&(ponIdBytes[0]));
+
+  ponIdTxOpticalLevel = (MV_U16)(msgData[8] << 8) + (MV_U16)(msgData[9]);
+  onuGponDbPONIdOpticalLevelSet(ponIdTxOpticalLevel);
+
+#ifdef MV_GPON_DEBUG_PRINT
+  mvPonPrint(PON_PRINT_DEBUG, PON_SM_MODULE,
+             "DEBUG: (%s:%d) PON-ID message rcv with ponIdTypeAbit: %d ponIdClassType: 0x%02x ponIdTxOpticalLevel: 0x%04x ponIdBytes[0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x]\n",
+			 __FILE_DESC__, __LINE__,
+			 ponIdTypeAbit, ponIdClassType, ponIdTxOpticalLevel,
+			 ponIdBytes[0], ponIdBytes[1], ponIdBytes[2], ponIdBytes[3],
+			 ponIdBytes[4], ponIdBytes[5], ponIdBytes[6]
+			 );
+#endif /* MV_GPON_DEBUG_PRINT */
+}
+
+/*******************************************************************************
+**
 **  onuGponPonMngTimerT01Hndl
 **  ____________________________________________________________________________
 **
diff --git a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuPm.c b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuPm.c
index 4c78db0..492e1bd 100755
--- a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuPm.c
+++ b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/core/gpon/gponOnuPm.c
@@ -440,7 +440,7 @@
   rxPloamPm->rxMsgTotalPloamCounter = g_OnuGponSwPm.rxMsgTotalPloamCounter;
 
   for (numOfMsgIdIndex = ONU_GPON_DS_MSG_OVERHEAD;
-       numOfMsgIdIndex <= ONU_GPON_DS_MSG_EXT_BURST_LEN;
+       numOfMsgIdIndex <= ONU_GPON_DS_MSG_LAST;
        numOfMsgIdIndex++)
   {
     rxPloamPm->rxMsgIdPloamCounter[numOfMsgIdIndex] = g_OnuGponSwPm.rxMsgIdPloamCounter[numOfMsgIdIndex];
diff --git a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/perf/gpon/gponOnuLnxKsUI.c b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/perf/gpon/gponOnuLnxKsUI.c
index cf45075..0587885 100755
--- a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/perf/gpon/gponOnuLnxKsUI.c
+++ b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/perf/gpon/gponOnuLnxKsUI.c
@@ -143,6 +143,10 @@
   MV_U32  intDelay,eqdDb,eqdAsic,fDelay;
   MV_U32  snMsg[3], idleMsg[3];
   MV_U8   *mchText[] = {"NO MATCH","MATCH "};
+  MV_U16  ponIdTxOpticalLevel;
+  MV_U8   ponIdTypeAbit;
+  MV_U8   ponIdClassType;
+  MV_U8   ponIdBytes[ONU_GPON_PON_ID_BYTES_LEN];
   int     off = 0;
 
                     onuGponDbSerialNumGet(serialNumber);
@@ -174,6 +178,13 @@
                     onuGponDbSnMsgGet(snMsg);
                     onuGponDbIdleMsgGet(idleMsg);
 
+  // PON-ID Manufacturer info
+  ponIdTypeAbit = onuGponDbPONIdTypeABitGet();
+  ponIdClassType = onuGponDbPONIdClassTypeGet();
+  onuGponDbPONIdBytesInfoGet(&(ponIdBytes[0]));
+  ponIdTxOpticalLevel = onuGponDbPONIdOpticalLevelGet();
+
+
   off += mvOsSPrintf(buf+off, "\n");
   off += mvOsSPrintf(buf+off, "ONT Full Information:\n");
   off += mvOsSPrintf(buf+off, "---------------------\n");
@@ -210,6 +221,13 @@
   off += mvOsSPrintf(buf+off, "Debug Mode:                    %s\n", boolText[onuGponPonMngDebugModeGet()]);
   off += mvOsSPrintf(buf+off, "Overhead Manual Mode:          %s\n", boolText[onuGponPonMngOverheadManualModeGet()]);
 
+  off += mvOsSPrintf(buf+off, "ponIdTypeAbit:                 %d\n", ponIdTypeAbit);
+  off += mvOsSPrintf(buf+off, "ponIdClassType:                %s (%d)\n", onuGponDbPONIdClassTypeStrGet(), ponIdClassType);
+  off += mvOsSPrintf(buf+off, "ponIdTxOpticalLevel:           0x%02X\n", ponIdTxOpticalLevel);
+  off += mvOsSPrintf(buf+off, "ponIdBytes:                    [0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x]\n",
+                                                              ponIdBytes[0], ponIdBytes[1], ponIdBytes[2], ponIdBytes[3],
+                                                              ponIdBytes[4], ponIdBytes[5], ponIdBytes[6]);
+
   return(off);
 }
 
diff --git a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/plat/ponOnuBoard.c b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/plat/ponOnuBoard.c
index c43260a..83e37e1 100755
--- a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/plat/ponOnuBoard.c
+++ b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/plat/ponOnuBoard.c
@@ -981,13 +981,13 @@
 }
 
 /*******************************************************************************
-**  **  906
+**
 **  onuPonTxLaserOn
 **  ____________________________________________________________________________
 **
 **  DESCRIPTION: The function turns ON/OFF TX laser using MPP
 **
-**  PARAMETERS:  MV_BOOL on - MV_TRUE - turn TX laser ON, othervise OFF
+**  PARAMETERS:  MV_BOOL on - MV_TRUE - turn TX laser ON, otherwise OFF
 **
 **  OUTPUTS:     None
 **
diff --git a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/plat/ponOnuBoard.h b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/plat/ponOnuBoard.h
index ff48f05..321c32a 100755
--- a/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/plat/ponOnuBoard.h
+++ b/arch/arm/plat-feroceon/mv_drivers_lsp/mv_pon/plat/ponOnuBoard.h
@@ -178,6 +178,7 @@
 
 MV_STATUS onuP2PDbXvrBurstEnablePolaritySet(MV_U32 val);
 MV_U32    onuP2PDbXvrBurstEnablePolarityGet(void);
+void      onuPonShutDownCallbackFunc(MV_U32 state);
 
 #endif /* PON_FPGA */
 
diff --git a/arch/arm/plat-feroceon/mv_hal/pon/mvPonOnuDefines.h b/arch/arm/plat-feroceon/mv_hal/pon/mvPonOnuDefines.h
index 9620b1d..aee9016 100755
--- a/arch/arm/plat-feroceon/mv_hal/pon/mvPonOnuDefines.h
+++ b/arch/arm/plat-feroceon/mv_hal/pon/mvPonOnuDefines.h
@@ -206,7 +206,8 @@
 #define ONU_GPON_DS_MSG_BER_INTERVAL		(0x12)
 #define ONU_GPON_DS_MSG_KEY_SWITCH_TIME		(0x13)
 #define ONU_GPON_DS_MSG_EXT_BURST_LEN		(0x14)
-#define ONU_GPON_DS_MSG_LAST			(0x14)
+#define ONU_GPON_DS_MSG_PON_ID     			(0x15)
+#define ONU_GPON_DS_MSG_LAST				(ONU_GPON_DS_MSG_PON_ID)
 
 /* Upstream */
 #define ONU_GPON_US_MSG_SN_ONU                 (0x01)
@@ -265,6 +266,7 @@
 #define ONU_GPON_EVENT_MSG_BER_INTERVAL		(ONU_GPON_DS_MSG_BER_INTERVAL)
 #define ONU_GPON_EVENT_MSG_KEY_SWITCH_TIME	(ONU_GPON_DS_MSG_KEY_SWITCH_TIME)
 #define ONU_GPON_EVENT_MSG_EXT_BURST_LEN	(ONU_GPON_DS_MSG_EXT_BURST_LEN)
+#define ONU_GPON_EVENT_MSG_PON_ID	(ONU_GPON_DS_MSG_PON_ID)
 
 /* Alarms */
 #define ONU_GPON_EVENT_ALM_GEN_BASE		(ONU_GPON_ALARM_GEN_BASE)
diff --git a/arch/arm/plat-feroceon/mv_hal/pon/mvPonOnuMac.h b/arch/arm/plat-feroceon/mv_hal/pon/mvPonOnuMac.h
index 5fd3961..6827cd2 100755
--- a/arch/arm/plat-feroceon/mv_hal/pon/mvPonOnuMac.h
+++ b/arch/arm/plat-feroceon/mv_hal/pon/mvPonOnuMac.h
@@ -188,7 +188,7 @@
 #define GPON_BURST_THRESHOLD                (0x4E20)            /* 20000 bytes */
 
 #define MAC_LAST_UPSTREAM_PLOAM             (ONU_GPON_US_MSG_ACK)
-#define MAC_LAST_DOWNSTREAM_PLOAM           (ONU_GPON_DS_MSG_EXT_BURST_LEN)
+#define MAC_LAST_DOWNSTREAM_PLOAM           (ONU_GPON_DS_MSG_LAST)
 
 /* SW FIFO parameters */
 #define GPON_SW_FIFO_SIZE                   (1024)              /* Size of SW FIFO pool for PLOAM messages */
