diff --git a/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLspObjectVer1.java b/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLspObjectVer1.java
index 13469e9..8de5125 100644
--- a/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLspObjectVer1.java
+++ b/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLspObjectVer1.java
@@ -340,7 +340,7 @@
 
         while (MINIMUM_COMMON_HEADER_LENGTH <= cb.readableBytes()) {
 
-            PcepValueType tlv;
+            PcepValueType tlv = null;
             short hType = cb.readShort();
             short hLength = cb.readShort();
             int iValue = 0;
@@ -364,7 +364,10 @@
                 tlv = StatefulLspDbVerTlv.read(cb);
                 break;
             default:
-                throw new PcepParseException("Received unsupported TLV type :" + hType);
+                // Skip the unknown TLV.
+                cb.skipBytes(hLength);
+                tlv = null;
+                log.info("Received unsupported TLV type :" + hType + " in LSP object.");
             }
             // Check for the padding
             int pad = hLength % 4;
@@ -375,7 +378,9 @@
                 }
             }
 
-            llOutOptionalTlv.add(tlv);
+            if (tlv != null) {
+                llOutOptionalTlv.add(tlv);
+            }
         }
 
         if (0 < cb.readableBytes()) {
diff --git a/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepOpenObjectVer1.java b/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepOpenObjectVer1.java
index fbe02a8..48382ec 100644
--- a/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepOpenObjectVer1.java
+++ b/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepOpenObjectVer1.java
@@ -287,10 +287,21 @@
             default:
                 log.debug("Unsupported TLV: " + hType);
                 cb.skipBytes(hLength);
-                continue;
+                tlv = null;
             }
 
-            llOptionalTlv.add(tlv);
+            // Check for the padding
+            int pad = hLength % 4;
+            if (0 < pad) {
+                pad = 4 - pad;
+                if (pad <= cb.readableBytes()) {
+                    cb.skipBytes(pad);
+                }
+            }
+
+            if (tlv != null) {
+                llOptionalTlv.add(tlv);
+            }
         }
 
         if (0 < cb.readableBytes()) {
diff --git a/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepReportMsgVer1.java b/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepReportMsgVer1.java
index 757dd1c..1867b5a 100644
--- a/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepReportMsgVer1.java
+++ b/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepReportMsgVer1.java
@@ -65,8 +65,8 @@
     protected static final Logger log = LoggerFactory.getLogger(PcepReportMsgVer1.class);
 
     public static final byte PACKET_VERSION = 1;
-    //PACKET_MINIMUM_LENGTH = CommonHeaderLen(4)+LspObjMinLen(8)+EroObjMinLen(4)
-    public static final int PACKET_MINIMUM_LENGTH = 16;
+    //PACKET_MINIMUM_LENGTH = CommonHeaderLen(4)+LspObjMinLen(8)
+    public static final int PACKET_MINIMUM_LENGTH = 12;
     public static final PcepType MSG_TYPE = PcepType.REPORT;
     public static final byte REPORT_OBJ_TYPE = 1;
     //Optional TLV
@@ -164,9 +164,25 @@
                 lspObj = PcepLspObjectVer1.read(cb);
                 pcestateReq.setLspObject(lspObj);
 
-                //store path
-                PcepStateReport.PcepMsgPath msgPath = new PcepStateReportVer1().new PcepMsgPath().read(cb);
-                pcestateReq.setMsgPath(msgPath);
+                if (cb.readableBytes() > 0) {
+
+                    //mark the reader index to reset
+                    cb.markReaderIndex();
+                    tempObjHeader = PcepObjectHeader.read(cb);
+
+                    yObjectClass = tempObjHeader.getObjClass();
+                    yObjectType = tempObjHeader.getObjType();
+
+                    //reset reader index
+                    cb.resetReaderIndex();
+
+                    if ((PcepEroObjectVer1.ERO_OBJ_CLASS == yObjectClass)
+                            && (PcepEroObjectVer1.ERO_OBJ_TYPE == yObjectType)) {
+                        // store path
+                        PcepStateReport.PcepMsgPath msgPath = new PcepStateReportVer1().new PcepMsgPath().read(cb);
+                        pcestateReq.setMsgPath(msgPath);
+                    }
+                }
 
                 llStateReportList.add(pcestateReq);
             }
diff --git a/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepSrpObjectVer1.java b/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepSrpObjectVer1.java
index b88a1a4..fab25e1 100644
--- a/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepSrpObjectVer1.java
+++ b/protocols/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepSrpObjectVer1.java
@@ -251,7 +251,10 @@
                 tlv = PathSetupTypeTlv.of(cb.readInt());
                 break;
             default:
-                throw new PcepParseException("Unsupported TLV received in SRP Object.");
+                // Skip the unknown TLV.
+                cb.skipBytes(hLength);
+                tlv = null;
+                log.info("Received unsupported TLV type :" + hType + " in SRP object.");
             }
 
             // Check for the padding
@@ -262,7 +265,10 @@
                     cb.skipBytes(pad);
                 }
             }
-            llOutOptionalTlv.add(tlv);
+
+            if (tlv != null) {
+                llOutOptionalTlv.add(tlv);
+            }
         }
 
         return llOutOptionalTlv;
