diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepTEObjectVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepTEObjectVer1.java
index 51122fd..1e770f3 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepTEObjectVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepTEObjectVer1.java
@@ -296,8 +296,7 @@
                 tlv = LocalTENodeDescriptorsTLV.read(cb, hLength);
                 break;
             case RemoteTENodeDescriptorsTLV.TYPE:
-                RemoteTENodeDescriptorsTLV.hLength = hLength;
-                tlv = RemoteTENodeDescriptorsTLV.read(cb);
+                tlv = RemoteTENodeDescriptorsTLV.read(cb, hLength);
                 break;
             case TELinkDescriptorsTLV.TYPE:
                 tlv = TELinkDescriptorsTLV.read(cb, hLength);
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/LocalTENodeDescriptorsTLV.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/LocalTENodeDescriptorsTLV.java
index 4d3df47..5ba6297 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/LocalTENodeDescriptorsTLV.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/LocalTENodeDescriptorsTLV.java
@@ -169,7 +169,7 @@
             }
         }
         hLength = (short) (c.writerIndex() - tlvStartIndex);
-        c.setShort(tlvLenIndex, hLength);
+        c.setShort(tlvLenIndex, (hLength - TLV_HEADER_LENGTH));
         return c.writerIndex() - tlvStartIndex;
     }
 
@@ -186,7 +186,7 @@
         // Node Descriptor Sub-TLVs (variable)
         LinkedList<PcepValueType> llNodeDescriptorSubTLVs = new LinkedList<PcepValueType>();
 
-        ChannelBuffer tempCb = c.readBytes(hLength - TLV_HEADER_LENGTH);
+        ChannelBuffer tempCb = c.readBytes(hLength);
 
         while (TLV_HEADER_LENGTH <= tempCb.readableBytes()) {
 
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepRsvpSpecObjHeader.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepRsvpSpecObjHeader.java
index 9d9cf73..70cd746 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepRsvpSpecObjHeader.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepRsvpSpecObjHeader.java
@@ -116,40 +116,38 @@
     /**
      * Writes the byte stream of PcepRsvpObjectHeader to channel buffer.
      *
-     * @param bb of type channel buffer
+     * @param cb of type channel buffer
      * @return object length index
      */
-    public int write(ChannelBuffer bb) {
-        int objLenIndex = bb.writerIndex();
-        bb.writeShort(objLen);
-        bb.writeByte(objClassNum);
-        bb.writeByte(objClassType);
-        return bb.writerIndex() - objLenIndex;
+    public int write(ChannelBuffer cb) {
+        int objLenIndex = cb.writerIndex();
+        objLen = 0;
+        cb.writeShort(objLen);
+        cb.writeByte(objClassNum);
+        cb.writeByte(objClassType);
+        return objLenIndex;
     }
 
     /**
      * Reads the PcepRsvpObjectHeader.
      *
-     * @param bb of type channel buffer
+     * @param cb of type channel buffer
      * @return PcepRsvpObjectHeader
      */
-    public static PcepRsvpSpecObjHeader read(ChannelBuffer bb) {
+    public static PcepRsvpSpecObjHeader read(ChannelBuffer cb) {
         byte objClassNum;
         byte objClassType;
         short objLen;
-        objLen = bb.readShort();
-        objClassNum = bb.readByte();
-        objClassType = bb.readByte();
+        objLen = cb.readShort();
+        objClassNum = cb.readByte();
+        objClassType = cb.readByte();
 
         return new PcepRsvpSpecObjHeader(objLen, objClassNum, objClassType);
     }
 
     @Override
     public String toString() {
-        return MoreObjects.toStringHelper(getClass())
-                .add("ObjectClassNum: " , objClassNum)
-                .add("ObjectCType: " , objClassType)
-                .add("ObjectLength: " , objLen)
-                .toString();
+        return MoreObjects.toStringHelper(getClass()).add("ObjectClassNum: ", objClassNum)
+                .add("ObjectCType: ", objClassType).add("ObjectLength: ", objLen).toString();
     }
 }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/RemoteTENodeDescriptorsTLV.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/RemoteTENodeDescriptorsTLV.java
index 2a12e07..39ec987 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/RemoteTENodeDescriptorsTLV.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/RemoteTENodeDescriptorsTLV.java
@@ -50,7 +50,7 @@
     protected static final Logger log = LoggerFactory.getLogger(RemoteTENodeDescriptorsTLV.class);
 
     public static final short TYPE = 1003; //TODD:change this TBD9
-    public static short hLength;
+    public short hLength;
 
     public static final int TLV_HEADER_LENGTH = 4;
     // Node Descriptor Sub-TLVs (variable)
@@ -172,7 +172,7 @@
         }
 
         hLength = (short) (c.writerIndex() - tlvStartIndex);
-        c.setShort(tlvLenIndex, hLength);
+        c.setShort(tlvLenIndex, (hLength - TLV_HEADER_LENGTH));
 
         return c.writerIndex() - tlvStartIndex;
     }
@@ -184,12 +184,12 @@
      * @return object of RemoteTENodeDescriptorsTLV
      * @throws PcepParseException if mandatory fields are missing
      */
-    public static PcepValueType read(ChannelBuffer c) throws PcepParseException {
+    public static PcepValueType read(ChannelBuffer c , short length) throws PcepParseException {
 
         // Node Descriptor Sub-TLVs (variable)
         LinkedList<PcepValueType> llRemoteTENodeDescriptorSubTLVs = new LinkedList<PcepValueType>();
 
-        ChannelBuffer tempCb = c.readBytes(hLength - TLV_HEADER_LENGTH);
+        ChannelBuffer tempCb = c.readBytes(length);
 
         while (TLV_HEADER_LENGTH <= tempCb.readableBytes()) {
 
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/StatefulRsvpErrorSpecTlv.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/StatefulRsvpErrorSpecTlv.java
index 853991a..d89904e 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/StatefulRsvpErrorSpecTlv.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/StatefulRsvpErrorSpecTlv.java
@@ -104,7 +104,7 @@
 
     public static final short TYPE = 21;
     public static final int OBJECT_HEADER_LENGTH = 4;
-    private final short hLength;
+    private short hLength;
 
     private final PcepRsvpErrorSpec rsvpErrSpecObj;
     private final boolean isErrSpceObjSet;
@@ -113,12 +113,10 @@
      * Constructor to initialize errSpecObj.
      *
      * @param rsvpErrSpecObj Rsvp error spec object
-     * @param hLength length of rsvp error spec object
      */
-    public StatefulRsvpErrorSpecTlv(PcepRsvpErrorSpec rsvpErrSpecObj, short hLength) {
+    public StatefulRsvpErrorSpecTlv(PcepRsvpErrorSpec rsvpErrSpecObj) {
         this.rsvpErrSpecObj = rsvpErrSpecObj;
         this.isErrSpceObjSet = true;
-        this.hLength = hLength;
     }
 
     /**
@@ -171,7 +169,7 @@
                 && PcepRsvpUserErrorSpec.CLASS_TYPE == rsvpErrSpecObjHeader.getObjClassType()) {
             rsvpErrSpecObj = PcepRsvpUserErrorSpec.read(cb);
         }
-        return rsvpErrSpecObj;
+        return new StatefulRsvpErrorSpecTlv(rsvpErrSpecObj);
     }
 
     @Override
@@ -196,14 +194,15 @@
         int iStartIndex = c.writerIndex();
         c.writeShort(TYPE);
         int tlvLenIndex = c.writerIndex();
+        hLength = 0;
         c.writeShort(hLength);
         if (isErrSpceObjSet) {
             rsvpErrSpecObj.write(c);
         }
-        short tlvLen = (short) (c.writerIndex() - iStartIndex + 4);
-        c.setShort(tlvLenIndex, tlvLen);
+        hLength = (short) (c.writerIndex() - iStartIndex);
+        c.setShort(tlvLenIndex, (hLength - OBJECT_HEADER_LENGTH));
 
-        return tlvLen;
+        return c.writerIndex() - iStartIndex;
     }
 
     @Override
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/TELinkAttributesTlv.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/TELinkAttributesTlv.java
index 98113d1..6ff9abf 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/TELinkAttributesTlv.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/TELinkAttributesTlv.java
@@ -63,7 +63,6 @@
      */
     public TELinkAttributesTlv(LinkedList<PcepValueType> llLinkAttributesSubTLVs) {
         this.llLinkAttributesSubTLVs = llLinkAttributesSubTLVs;
-
     }
 
     /**
@@ -171,7 +170,7 @@
         }
 
         hLength = (short) (c.writerIndex() - tlvStartIndex);
-        c.setShort(tlvLenIndex, hLength);
+        c.setShort(tlvLenIndex, (hLength - TLV_HEADER_LENGTH));
 
         return c.writerIndex() - tlvStartIndex;
     }
@@ -189,7 +188,7 @@
         // Node Descriptor Sub-TLVs (variable)
         LinkedList<PcepValueType> llLinkAttributesSubTLVs = new LinkedList<PcepValueType>();
 
-        ChannelBuffer tempCb = c.readBytes(hLength - TLV_HEADER_LENGTH);
+        ChannelBuffer tempCb = c.readBytes(hLength);
 
         while (TLV_HEADER_LENGTH <= tempCb.readableBytes()) {
 
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/TELinkDescriptorsTLV.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/TELinkDescriptorsTLV.java
index 89601be..b4e164c 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/TELinkDescriptorsTLV.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/TELinkDescriptorsTLV.java
@@ -167,7 +167,7 @@
         }
 
         hLength = (short) (c.writerIndex() - tlvStartIndex);
-        c.setShort(tlvLenIndex, hLength);
+        c.setShort(tlvLenIndex, (hLength - TLV_HEADER_LENGTH));
 
         return c.writerIndex() - tlvStartIndex;
     }
@@ -185,7 +185,7 @@
         // Node Descriptor Sub-TLVs (variable)
         LinkedList<PcepValueType> llLinkDescriptorsSubTLVs = new LinkedList<PcepValueType>();
 
-        ChannelBuffer tempCb = c.readBytes(length - TLV_HEADER_LENGTH);
+        ChannelBuffer tempCb = c.readBytes(length);
 
         while (TLV_HEADER_LENGTH <= tempCb.readableBytes()) {
 
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/TENodeAttributesTlv.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/TENodeAttributesTlv.java
index ec17dd6..0ca288c 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/TENodeAttributesTlv.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/TENodeAttributesTlv.java
@@ -167,7 +167,7 @@
         }
 
         hLength = (short) (c.writerIndex() - tlvStartIndex);
-        c.setShort(tlvLenIndex, hLength);
+        c.setShort(tlvLenIndex, (hLength - TLV_HEADER_LENGTH));
 
         return c.writerIndex() - tlvStartIndex;
     }
@@ -185,7 +185,7 @@
         // Node Descriptor Sub-TLVs (variable)
         LinkedList<PcepValueType> llNodeAttributesSubTLVs = new LinkedList<PcepValueType>();
 
-        ChannelBuffer tempCb = c.readBytes(hLength - TLV_HEADER_LENGTH);
+        ChannelBuffer tempCb = c.readBytes(hLength);
 
         while (TLV_HEADER_LENGTH <= tempCb.readableBytes()) {
             PcepValueType tlv;
diff --git a/pcep/pcepio/src/test/java/org/onosproject/pcepio/PcepInitiateMsgTest2.java b/pcep/pcepio/src/test/java/org/onosproject/pcepio/PcepInitiateMsgExtTest.java
similarity index 90%
rename from pcep/pcepio/src/test/java/org/onosproject/pcepio/PcepInitiateMsgTest2.java
rename to pcep/pcepio/src/test/java/org/onosproject/pcepio/PcepInitiateMsgExtTest.java
index 088a73c..dca124a 100644
--- a/pcep/pcepio/src/test/java/org/onosproject/pcepio/PcepInitiateMsgTest2.java
+++ b/pcep/pcepio/src/test/java/org/onosproject/pcepio/PcepInitiateMsgExtTest.java
@@ -17,19 +17,17 @@
 
 import org.jboss.netty.buffer.ChannelBuffer;
 import org.jboss.netty.buffer.ChannelBuffers;
-import org.junit.Assert;
 import org.junit.Test;
 import org.onosproject.pcepio.exceptions.PcepParseException;
 import org.onosproject.pcepio.protocol.PcepFactories;
 import org.onosproject.pcepio.protocol.PcepInitiateMsg;
 import org.onosproject.pcepio.protocol.PcepMessage;
 import org.onosproject.pcepio.protocol.PcepMessageReader;
-
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.core.Is.is;
-import static org.hamcrest.core.IsSame.sameInstance;
+import static org.hamcrest.Matchers.instanceOf;
 
-public class PcepInitiateMsgTest2 {
+public class PcepInitiateMsgExtTest {
 
     /**
      * This test case checks for SRP, LSP (SymbolicPathNameTlv, StatefulIPv4LspIdentidiersTlv,
@@ -54,11 +52,12 @@
                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
                 0x00, 0x14, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, //StatefulLspErrorCodeTlv
                 0x04, 0x12, 0x00, 0x0C, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, //Endpoints Object
-                0x07, 0x10, 0x00, 0x14, (byte) 0x01, 0x08, 0x0C, 0x01, //ERO object
-                0x01, 0x01, 0x00, 0x00, (byte) 0x01, 0x08, 0x0C, 0x01, 0x01, 0x02, 0x00, 0x00,
+                0x07, 0x10, 0x00, 0x14, //ERO object
+                0x01, 0x08, 0x0C, 0x01, 0x01, 0x01, 0x00, 0x00,
+                0x01, 0x08, 0x0C, 0x01, 0x01, 0x02, 0x00, 0x00,
                 0x09, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, //LSPA object
                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00,
-                0x05, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, //Bandwidth object
+                0x05, 0x20, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, //Bandwidth object
                 0x06, 0x10, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, //Metric object
                 0x06, 0x10, 0x00, 0x0c, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x20}; //Metric object
 
@@ -69,10 +68,9 @@
         PcepMessageReader<PcepMessage> reader = PcepFactories.getGenericReader();
         PcepMessage message = null;
 
-
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepInitiateMsg) message));
+        assertThat(message, instanceOf(PcepInitiateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
 
         message.writeTo(buf);
@@ -98,10 +96,10 @@
         /* SRP, LSP (SymbolicPathNameTlv, StatefulIPv4LspIdentidiersTlv, SymbolicPathNameTlv, StatefulLspDbVerTlv,
          * StatefulLspErrorCodeTlv, StatefulRsvpErrorSpecTlv), END-POINTS, ERO, LSPA, BANDWIDTH, METRIC OBJECT.
          */
-        byte[] initiateCreationMsg = new byte[]{0x20, 0x0C, 0x00, (byte) 0x98,
+        byte[] initiateCreationMsg = new byte[]{0x20, 0x0C, 0x00, (byte) 0xA8,
                 0x21, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, //SRP object
                 0x00, 0x11, 0x00, 0x02, 0x54, 0x31, 0x00, 0x00, //SymbolicPathNameTlv
-                0x20, 0x10, 0x00, 0x38, 0x00, 0x00, 0x10, 0x03, //LSP object
+                0x20, 0x10, 0x00, 0x48, 0x00, 0x00, 0x10, 0x03, //LSP object
                 0x00, 0x12, 0x00, 0x10, //StatefulIPv4LspIdentidiersTlv
                 (byte) 0xb6, 0x02, 0x4e, 0x1f, 0x00, 0x01, (byte) 0x80, 0x01,
                 (byte) 0xb6, 0x02, 0x4e, 0x1f, (byte) 0xb6, 0x02, 0x4e, 0x20,
@@ -109,14 +107,14 @@
                 0x00, 0x17, 0x00, 0x08, //StatefulLspDbVerTlv
                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
                 0x00, 0x14, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, //StatefulLspErrorCodeTlv
-                // 0x00, 0x15, 0x00, 0x0c, //StatefulRsvpErrorSpecTlv
-                // 0x00, 0x0c, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x05,
+                0x00, 0x15, 0x00, 0x0c, //StatefulRsvpErrorSpecTlv
+                0x00, 0x0c, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x05,
                 0x04, 0x12, 0x00, 0x0C, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, //Endpoints Object
-                0x07, 0x10, 0x00, 0x14, (byte) 0x01, 0x08, 0x0C, 0x01, //ERO object
-                0x01, 0x01, 0x00, 0x00, (byte) 0x01, 0x08, 0x0C, 0x01, 0x01, 0x02, 0x00, 0x00,
+                0x07, 0x10, 0x00, 0x14, 0x01, 0x08, 0x0C, 0x01, //ERO object
+                0x01, 0x01, 0x00, 0x00, 0x01, 0x08, 0x0C, 0x01, 0x01, 0x02, 0x00, 0x00,
                 0x09, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, //LSPA object
                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00,
-                0x05, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
+                0x05, 0x20, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
                 0x06, 0x10, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01};
 
         byte[] testInitiateCreationMsg = {0};
@@ -126,10 +124,9 @@
         PcepMessageReader<PcepMessage> reader = PcepFactories.getGenericReader();
         PcepMessage message = null;
 
-
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepInitiateMsg) message));
+        assertThat(message, instanceOf(PcepInitiateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
 
         message.writeTo(buf);
@@ -168,11 +165,11 @@
                 // 0x00, 0x15, 0x00, 0x0c, //StatefulRsvpErrorSpecTlv
                 //0x00, 0x0c, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x05,
                 0x04, 0x12, 0x00, 0x0C, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, //Endpoints Object
-                0x07, 0x10, 0x00, 0x14, (byte) 0x01, 0x08, 0x0C, 0x01, //ERO object
-                0x01, 0x01, 0x00, 0x00, (byte) 0x01, 0x08, 0x0C, 0x01, 0x01, 0x02, 0x00, 0x00,
+                0x07, 0x10, 0x00, 0x14, 0x01, 0x08, 0x0C, 0x01, //ERO object
+                0x01, 0x01, 0x00, 0x00, 0x01, 0x08, 0x0C, 0x01, 0x01, 0x02, 0x00, 0x00,
                 0x09, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, //LSPA object
                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00,
-                0x05, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00};
+                0x05, 0x20, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00};
 
         byte[] testInitiateCreationMsg = {0};
         ChannelBuffer buffer = ChannelBuffers.dynamicBuffer();
@@ -181,10 +178,9 @@
         PcepMessageReader<PcepMessage> reader = PcepFactories.getGenericReader();
         PcepMessage message = null;
 
-
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepInitiateMsg) message));
+        assertThat(message, instanceOf(PcepInitiateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
 
         message.writeTo(buf);
@@ -223,8 +219,8 @@
                 // 0x00, 0x15, 0x00, 0x0c, //StatefulRsvpErrorSpecTlv
                 // 0x00, 0x0c, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x05,
                 0x04, 0x12, 0x00, 0x0C, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, //Endpoints Object
-                0x07, 0x10, 0x00, 0x14, (byte) 0x01, 0x08, 0x0C, 0x01, //ERO object
-                0x01, 0x01, 0x00, 0x00, (byte) 0x01, 0x08, 0x0C, 0x01, 0x01, 0x02, 0x00, 0x00,
+                0x07, 0x10, 0x00, 0x14, 0x01, 0x08, 0x0C, 0x01, //ERO object
+                0x01, 0x01, 0x00, 0x00, 0x01, 0x08, 0x0C, 0x01, 0x01, 0x02, 0x00, 0x00,
                 0x09, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, //LSPA object
                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00};
 
@@ -235,10 +231,9 @@
         PcepMessageReader<PcepMessage> reader = PcepFactories.getGenericReader();
         PcepMessage message = null;
 
-
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepInitiateMsg) message));
+        assertThat(message, instanceOf(PcepInitiateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
 
         message.writeTo(buf);
@@ -275,8 +270,8 @@
                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
                 0x00, 0x14, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, //StatefulLspErrorCodeTlv
                 0x04, 0x12, 0x00, 0x0C, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, //Endpoints Object
-                0x07, 0x10, 0x00, 0x14, (byte) 0x01, 0x08, 0x0C, 0x01, //ERO object
-                0x01, 0x01, 0x00, 0x00, (byte) 0x01, 0x08, 0x0C, 0x01, 0x01, 0x02, 0x00, 0x00,
+                0x07, 0x10, 0x00, 0x14, 0x01, 0x08, 0x0C, 0x01, //ERO object
+                0x01, 0x01, 0x00, 0x00, 0x01, 0x08, 0x0C, 0x01, 0x01, 0x02, 0x00, 0x00,
                 0x09, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, //LSPA object
                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00};
 
@@ -287,11 +282,9 @@
         PcepMessageReader<PcepMessage> reader = PcepFactories.getGenericReader();
         PcepMessage message = null;
 
-
         message = reader.readFrom(buffer);
 
-        Assert.assertTrue("PcepMessage is not instance of PcInitiate",
-                          (message instanceof PcepInitiateMsg));
+        assertThat(message, instanceOf(PcepInitiateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
 
         message.writeTo(buf);
@@ -328,11 +321,11 @@
                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
                 0x00, 0x14, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, //StatefulLspErrorCodeTlv
                 0x04, 0x12, 0x00, 0x0C, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, //Endpoints Object
-                0x07, 0x10, 0x00, 0x14, (byte) 0x01, 0x08, 0x0C, 0x01, //ERO object
-                0x01, 0x01, 0x00, 0x00, (byte) 0x01, 0x08, 0x0C, 0x01, 0x01, 0x02, 0x00, 0x00,
+                0x07, 0x10, 0x00, 0x14, 0x01, 0x08, 0x0C, 0x01, //ERO object
+                0x01, 0x01, 0x00, 0x00, 0x01, 0x08, 0x0C, 0x01, 0x01, 0x02, 0x00, 0x00,
                 0x09, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, //LSPA object
                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00,
-                0x05, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00};
+                0x05, 0x20, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00};
 
         byte[] testInitiateCreationMsg = {0};
         ChannelBuffer buffer = ChannelBuffers.dynamicBuffer();
@@ -341,10 +334,9 @@
         PcepMessageReader<PcepMessage> reader = PcepFactories.getGenericReader();
         PcepMessage message = null;
 
-
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepInitiateMsg) message));
+        assertThat(message, instanceOf(PcepInitiateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
 
         message.writeTo(buf);
@@ -381,11 +373,11 @@
                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
                 0x00, 0x14, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, //StatefulLspErrorCodeTlv
                 0x04, 0x12, 0x00, 0x0C, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, //Endpoints Object
-                0x07, 0x10, 0x00, 0x14, (byte) 0x01, 0x08, 0x0C, 0x01, //ERO object
-                0x01, 0x01, 0x00, 0x00, (byte) 0x01, 0x08, 0x0C, 0x01, 0x01, 0x02, 0x00, 0x00,
+                0x07, 0x10, 0x00, 0x14, 0x01, 0x08, 0x0C, 0x01, //ERO object
+                0x01, 0x01, 0x00, 0x00, 0x01, 0x08, 0x0C, 0x01, 0x01, 0x02, 0x00, 0x00,
                 0x09, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, //LSPA object
                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00,
-                0x05, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
+                0x05, 0x20, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
                 0x06, 0x10, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01};
 
         byte[] testInitiateCreationMsg = {0};
@@ -395,10 +387,9 @@
         PcepMessageReader<PcepMessage> reader = PcepFactories.getGenericReader();
         PcepMessage message = null;
 
-
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepInitiateMsg) message));
+        assertThat(message, instanceOf(PcepInitiateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
 
         message.writeTo(buf);
@@ -434,11 +425,11 @@
                 0x00, 0x17, 0x00, 0x08, //StatefulLspDbVerTlv
                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
                 0x04, 0x12, 0x00, 0x0C, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, //Endpoints Object
-                0x07, 0x10, 0x00, 0x14, (byte) 0x01, 0x08, 0x0C, 0x01, //ERO object
-                0x01, 0x01, 0x00, 0x00, (byte) 0x01, 0x08, 0x0C, 0x01, 0x01, 0x02, 0x00, 0x00,
+                0x07, 0x10, 0x00, 0x14, 0x01, 0x08, 0x0C, 0x01, //ERO object
+                0x01, 0x01, 0x00, 0x00, 0x01, 0x08, 0x0C, 0x01, 0x01, 0x02, 0x00, 0x00,
                 0x09, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, //LSPA object
                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00,
-                0x05, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
+                0x05, 0x20, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
                 0x06, 0x10, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01};
 
         byte[] testInitiateCreationMsg = {0};
@@ -448,10 +439,9 @@
         PcepMessageReader<PcepMessage> reader = PcepFactories.getGenericReader();
         PcepMessage message = null;
 
-
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepInitiateMsg) message));
+        assertThat(message, instanceOf(PcepInitiateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
 
         message.writeTo(buf);
@@ -487,8 +477,8 @@
                 0x00, 0x17, 0x00, 0x08, //StatefulLspDbVerTlv
                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
                 0x04, 0x12, 0x00, 0x0C, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, //Endpoints Object
-                0x07, 0x10, 0x00, 0x14, (byte) 0x01, 0x08, 0x0C, 0x01, //ERO object
-                0x01, 0x01, 0x00, 0x00, (byte) 0x01, 0x08, 0x0C, 0x01, 0x01, 0x02, 0x00, 0x00,
+                0x07, 0x10, 0x00, 0x14, 0x01, 0x08, 0x0C, 0x01, //ERO object
+                0x01, 0x01, 0x00, 0x00, 0x01, 0x08, 0x0C, 0x01, 0x01, 0x02, 0x00, 0x00,
                 0x09, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, //LSPA object
                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00,
                 0x05, 0x20, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00}; //Bandwidth object
@@ -500,10 +490,9 @@
         PcepMessageReader<PcepMessage> reader = PcepFactories.getGenericReader();
         PcepMessage message = null;
 
-
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepInitiateMsg) message));
+        assertThat(message, instanceOf(PcepInitiateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
 
         message.writeTo(buf);
@@ -536,8 +525,8 @@
                 (byte) 0xb6, 0x02, 0x4e, 0x1f, (byte) 0xb6, 0x02, 0x4e, 0x20,
                 0x00, 0x11, 0x00, 0x04, 0x54, 0x31, 0x32, 0x33, //SymbolicPathNameTlv
                 0x04, 0x12, 0x00, 0x0C, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, //Endpoints Object
-                0x07, 0x10, 0x00, 0x14, (byte) 0x01, 0x08, 0x0C, 0x01, //ERO object
-                0x01, 0x01, 0x00, 0x00, (byte) 0x01, 0x08, 0x0C, 0x01, 0x01, 0x02, 0x00, 0x00,
+                0x07, 0x10, 0x00, 0x14, 0x01, 0x08, 0x0C, 0x01, //ERO object
+                0x01, 0x01, 0x00, 0x00, 0x01, 0x08, 0x0C, 0x01, 0x01, 0x02, 0x00, 0x00,
                 0x09, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, //LSPA object
                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00};
 
@@ -548,10 +537,9 @@
         PcepMessageReader<PcepMessage> reader = PcepFactories.getGenericReader();
         PcepMessage message = null;
 
-
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepInitiateMsg) message));
+        assertThat(message, instanceOf(PcepInitiateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
 
         message.writeTo(buf);
@@ -587,8 +575,8 @@
                 0x00, 0x17, 0x00, 0x08, //StatefulLspDbVerTlv
                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
                 0x04, 0x12, 0x00, 0x0C, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, //Endpoints Object
-                0x07, 0x10, 0x00, 0x14, (byte) 0x01, 0x08, 0x0C, 0x01, //ERO object
-                0x01, 0x01, 0x00, 0x00, (byte) 0x01, 0x08, 0x0C, 0x01, 0x01, 0x02, 0x00, 0x00,
+                0x07, 0x10, 0x00, 0x14, 0x01, 0x08, 0x0C, 0x01, //ERO object
+                0x01, 0x01, 0x00, 0x00, 0x01, 0x08, 0x0C, 0x01, 0x01, 0x02, 0x00, 0x00,
                 0x09, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, //LSPA object
                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00};
 
@@ -599,10 +587,9 @@
         PcepMessageReader<PcepMessage> reader = PcepFactories.getGenericReader();
         PcepMessage message = null;
 
-
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepInitiateMsg) message));
+        assertThat(message, instanceOf(PcepInitiateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
 
         message.writeTo(buf);
@@ -634,8 +621,8 @@
                 (byte) 0xb6, 0x02, 0x4e, 0x1f, (byte) 0xb6, 0x02, 0x4e, 0x20,
                 0x00, 0x11, 0x00, 0x04, 0x54, 0x31, 0x32, 0x33, //SymbolicPathNameTlv
                 0x04, 0x12, 0x00, 0x0C, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, //Endpoints Object
-                0x07, 0x10, 0x00, 0x14, (byte) 0x01, 0x08, 0x0C, 0x01, //ERO object
-                0x01, 0x01, 0x00, 0x00, (byte) 0x01, 0x08, 0x0C, 0x01, 0x01, 0x02, 0x00, 0x00,
+                0x07, 0x10, 0x00, 0x14, 0x01, 0x08, 0x0C, 0x01, //ERO object
+                0x01, 0x01, 0x00, 0x00, 0x01, 0x08, 0x0C, 0x01, 0x01, 0x02, 0x00, 0x00,
                 0x09, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, //LSPA object
                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00,
                 0x05, 0x20, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00}; //Bandwidth object
@@ -647,10 +634,9 @@
         PcepMessageReader<PcepMessage> reader = PcepFactories.getGenericReader();
         PcepMessage message = null;
 
-
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepInitiateMsg) message));
+        assertThat(message, instanceOf(PcepInitiateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
 
         message.writeTo(buf);
@@ -684,8 +670,8 @@
                 (byte) 0xb6, 0x02, 0x4e, 0x1f, (byte) 0xb6, 0x02, 0x4e, 0x20,
                 0x00, 0x11, 0x00, 0x04, 0x54, 0x31, 0x32, 0x33, //SymbolicPathNameTlv
                 0x04, 0x12, 0x00, 0x0C, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, //Endpoints Object
-                0x07, 0x10, 0x00, 0x14, (byte) 0x01, 0x08, 0x0C, 0x01, //ERO object
-                0x01, 0x01, 0x00, 0x00, (byte) 0x01, 0x08, 0x0C, 0x01, 0x01, 0x02, 0x00, 0x00,
+                0x07, 0x10, 0x00, 0x14, 0x01, 0x08, 0x0C, 0x01, //ERO object
+                0x01, 0x01, 0x00, 0x00, 0x01, 0x08, 0x0C, 0x01, 0x01, 0x02, 0x00, 0x00,
                 0x09, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, //LSPA object
                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00,
                 0x05, 0x20, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, //Bandwidth object
@@ -698,10 +684,9 @@
         PcepMessageReader<PcepMessage> reader = PcepFactories.getGenericReader();
         PcepMessage message = null;
 
-
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepInitiateMsg) message));
+        assertThat(message, instanceOf(PcepInitiateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
 
         message.writeTo(buf);
@@ -733,8 +718,8 @@
                 (byte) 0xb6, 0x02, 0x4e, 0x1f, 0x00, 0x01, (byte) 0x80, 0x01,
                 (byte) 0xb6, 0x02, 0x4e, 0x1f, (byte) 0xb6, 0x02, 0x4e, 0x20,
                 0x04, 0x12, 0x00, 0x0C, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, //Endpoints Object
-                0x07, 0x10, 0x00, 0x14, (byte) 0x01, 0x08, 0x0C, 0x01, //ERO object
-                0x01, 0x01, 0x00, 0x00, (byte) 0x01, 0x08, 0x0C, 0x01, 0x01, 0x02, 0x00, 0x00,
+                0x07, 0x10, 0x00, 0x14, 0x01, 0x08, 0x0C, 0x01, //ERO object
+                0x01, 0x01, 0x00, 0x00, 0x01, 0x08, 0x0C, 0x01, 0x01, 0x02, 0x00, 0x00,
                 0x09, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, //LSPA object
                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00,
                 0x05, 0x20, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, //Bandwidth object
@@ -747,10 +732,9 @@
         PcepMessageReader<PcepMessage> reader = PcepFactories.getGenericReader();
         PcepMessage message = null;
 
-
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepInitiateMsg) message));
+        assertThat(message, instanceOf(PcepInitiateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
 
         message.writeTo(buf);
@@ -782,8 +766,8 @@
                 (byte) 0xb6, 0x02, 0x4e, 0x1f, 0x00, 0x01, (byte) 0x80, 0x01,
                 (byte) 0xb6, 0x02, 0x4e, 0x1f, (byte) 0xb6, 0x02, 0x4e, 0x20,
                 0x04, 0x12, 0x00, 0x0C, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, //Endpoints Object
-                0x07, 0x10, 0x00, 0x14, (byte) 0x01, 0x08, 0x0C, 0x01, //ERO object
-                0x01, 0x01, 0x00, 0x00, (byte) 0x01, 0x08, 0x0C, 0x01, 0x01, 0x02, 0x00, 0x00,
+                0x07, 0x10, 0x00, 0x14, 0x01, 0x08, 0x0C, 0x01, //ERO object
+                0x01, 0x01, 0x00, 0x00, 0x01, 0x08, 0x0C, 0x01, 0x01, 0x02, 0x00, 0x00,
                 0x09, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, //LSPA object
                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00,
                 0x05, 0x20, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00}; //Bandwidth object
@@ -795,10 +779,9 @@
         PcepMessageReader<PcepMessage> reader = PcepFactories.getGenericReader();
         PcepMessage message = null;
 
-
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepInitiateMsg) message));
+        assertThat(message, instanceOf(PcepInitiateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
 
         message.writeTo(buf);
@@ -830,8 +813,8 @@
                 (byte) 0xb6, 0x02, 0x4e, 0x1f, 0x00, 0x01, (byte) 0x80, 0x01,
                 (byte) 0xb6, 0x02, 0x4e, 0x1f, (byte) 0xb6, 0x02, 0x4e, 0x20,
                 0x04, 0x12, 0x00, 0x0C, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, //Endpoints Object
-                0x07, 0x10, 0x00, 0x14, (byte) 0x01, 0x08, 0x0C, 0x01, //ERO object
-                0x01, 0x01, 0x00, 0x00, (byte) 0x01, 0x08, 0x0C, 0x01, 0x01, 0x02, 0x00, 0x00,
+                0x07, 0x10, 0x00, 0x14, 0x01, 0x08, 0x0C, 0x01, //ERO object
+                0x01, 0x01, 0x00, 0x00, 0x01, 0x08, 0x0C, 0x01, 0x01, 0x02, 0x00, 0x00,
                 0x09, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, //LSPA object
                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00};
 
@@ -842,10 +825,9 @@
         PcepMessageReader<PcepMessage> reader = PcepFactories.getGenericReader();
         PcepMessage message = null;
 
-
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepInitiateMsg) message));
+        assertThat(message, instanceOf(PcepInitiateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
 
         message.writeTo(buf);
@@ -868,15 +850,15 @@
 
         /* SRP, LSP (StatefulIPv4LspIdentidiersTlv), END-POINTS, ERO, LSPA OBJECT.
          */
-        byte[] initiateCreationMsg = new byte[]{0x20, 0x0C, 0x00, (byte) 0x5c,
+        byte[] initiateCreationMsg = new byte[]{0x20, 0x0C, 0x00, (byte) 0x60,
                 0x21, 0x10, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, //SRP object
                 0x20, 0x10, 0x00, 0x1c, 0x00, 0x00, 0x10, 0x03, //LSP object
                 0x00, 0x12, 0x00, 0x10, //StatefulIPv4LspIdentidiersTlv
                 (byte) 0xb6, 0x02, 0x4e, 0x1f, 0x00, 0x01, (byte) 0x80, 0x01,
                 (byte) 0xb6, 0x02, 0x4e, 0x1f, (byte) 0xb6, 0x02, 0x4e, 0x20,
                 0x04, 0x12, 0x00, 0x0C, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, //Endpoints Object
-                0x07, 0x10, 0x00, 0x14, (byte) 0x01, 0x08, 0x0C, 0x01, //ERO object
-                0x01, 0x01, 0x00, 0x00, (byte) 0x01, 0x08, 0x0C, 0x01, 0x01, 0x02, 0x00, 0x00,
+                0x07, 0x10, 0x00, 0x14, 0x01, 0x08, 0x0C, 0x01, //ERO object
+                0x01, 0x01, 0x00, 0x00, 0x01, 0x08, 0x0C, 0x01, 0x01, 0x02, 0x00, 0x00,
                 0x09, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, //LSPA object
                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00};
 
@@ -887,10 +869,9 @@
         PcepMessageReader<PcepMessage> reader = PcepFactories.getGenericReader();
         PcepMessage message = null;
 
-
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepInitiateMsg) message));
+        assertThat(message, instanceOf(PcepInitiateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
 
         message.writeTo(buf);
@@ -913,15 +894,15 @@
 
         /* SRP, LSP (StatefulIPv4LspIdentidiersTlv), END-POINTS, ERO, LSPA, BANDWIDTH OBJECT.
          */
-        byte[] initiateCreationMsg = new byte[]{0x20, 0x0C, 0x00, (byte) 0x64,
+        byte[] initiateCreationMsg = new byte[]{0x20, 0x0C, 0x00, (byte) 0x68,
                 0x21, 0x10, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, //SRP object
-                0x20, 0x10, 0x00, 0x1c, 0x00, 0x00, 0x10, (byte) 0x83,
+                0x20, 0x10, 0x00, 0x1c, 0x00, 0x00, 0x10, 0x03,
                 0x00, 0x12, 0x00, 0x10, //StatefulIPv4LspIdentidiersTlv
                 (byte) 0xb6, 0x02, 0x4e, 0x1f, 0x00, 0x01, (byte) 0x80, 0x01,
                 (byte) 0xb6, 0x02, 0x4e, 0x1f, (byte) 0xb6, 0x02, 0x4e, 0x20,
                 0x04, 0x12, 0x00, 0x0C, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, //Endpoints Object
-                0x07, 0x10, 0x00, 0x14, (byte) 0x01, 0x08, 0x0C, 0x01, //ERO object
-                0x01, 0x01, 0x00, 0x00, (byte) 0x01, 0x08, 0x0C, 0x01, 0x01, 0x02, 0x00, 0x00,
+                0x07, 0x10, 0x00, 0x14, 0x01, 0x08, 0x0C, 0x01, //ERO object
+                0x01, 0x01, 0x00, 0x00, 0x01, 0x08, 0x0C, 0x01, 0x01, 0x02, 0x00, 0x00,
                 0x09, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, //LSPA object
                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00,
                 0x05, 0x20, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00}; //Bandwidth object
@@ -936,7 +917,7 @@
 
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepInitiateMsg) message));
+        assertThat(message, instanceOf(PcepInitiateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
 
         message.writeTo(buf);
@@ -959,15 +940,15 @@
 
         /* SRP, LSP (StatefulIPv4LspIdentidiersTlv), END-POINTS, ERO, LSPA, BANDWIDTH, METRIC OBJECT.
          */
-        byte[] initiateCreationMsg = new byte[]{0x20, 0x0C, 0x00, (byte) 0x70,
+        byte[] initiateCreationMsg = new byte[]{0x20, 0x0C, 0x00, (byte) 0x74,
                 0x21, 0x10, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, //SRP object
                 0x20, 0x10, 0x00, 0x1c, 0x00, 0x00, 0x10, 0x03, //LSP object
                 0x00, 0x12, 0x00, 0x10, //StatefulIPv4LspIdentidiersTlv
                 (byte) 0xb6, 0x02, 0x4e, 0x1f, 0x00, 0x01, (byte) 0x80, 0x01,
                 (byte) 0xb6, 0x02, 0x4e, 0x1f, (byte) 0xb6, 0x02, 0x4e, 0x20,
                 0x04, 0x12, 0x00, 0x0C, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, //Endpoints Object
-                0x07, 0x10, 0x00, 0x14, (byte) 0x01, 0x08, 0x0C, 0x01, //ERO object
-                0x01, 0x01, 0x00, 0x00, (byte) 0x01, 0x08, 0x0C, 0x01, 0x01, 0x02, 0x00, 0x00,
+                0x07, 0x10, 0x00, 0x14, 0x01, 0x08, 0x0C, 0x01, //ERO object
+                0x01, 0x01, 0x00, 0x00, 0x01, 0x08, 0x0C, 0x01, 0x01, 0x02, 0x00, 0x00,
                 0x09, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, //LSPA object
                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00,
                 0x05, 0x20, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, //Bandwidth object
@@ -980,10 +961,9 @@
         PcepMessageReader<PcepMessage> reader = PcepFactories.getGenericReader();
         PcepMessage message = null;
 
-
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepInitiateMsg) message));
+        assertThat(message, instanceOf(PcepInitiateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
 
         message.writeTo(buf);
@@ -1006,7 +986,7 @@
 
         /* SRP, LSP (StatefulIPv4LspIdentidiersTlv), END-POINTS, ERO, LSPA, BANDWIDTH, METRIC OBJECT.
          */
-        byte[] initiateCreationMsg = new byte[]{0x20, 0x0C, 0x00, (byte) 0x60,
+        byte[] initiateCreationMsg = new byte[]{0x20, 0x0C, 0x00, (byte) 0x64,
                 0x21, 0x10, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, //SRP object
                 0x20, 0x10, 0x00, 0x1c, 0x00, 0x00, 0x10, 0x03, //LSP object
                 0x00, 0x12, 0x00, 0x10, //StatefulIPv4LspIdentidiersTlv
@@ -1026,10 +1006,9 @@
         PcepMessageReader<PcepMessage> reader = PcepFactories.getGenericReader();
         PcepMessage message = null;
 
-
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepInitiateMsg) message));
+        assertThat(message, instanceOf(PcepInitiateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
 
         message.writeTo(buf);
@@ -1052,7 +1031,7 @@
 
         /* SRP, LSP (StatefulIPv4LspIdentidiersTlv), END-POINTS, ERO, LSPA, BANDWIDTH OBJECT.
          */
-        byte[] initiateCreationMsg = new byte[]{0x20, 0x0C, 0x00, (byte) 0x54,
+        byte[] initiateCreationMsg = new byte[]{0x20, 0x0C, 0x00, (byte) 0x58,
                 0x21, 0x10, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, //SRP object
                 0x20, 0x10, 0x00, 0x1c, 0x00, 0x00, 0x10, 0x03, //LSP object
                 0x00, 0x12, 0x00, 0x10, //StatefulIPv4LspIdentidiersTlv
@@ -1071,10 +1050,9 @@
         PcepMessageReader<PcepMessage> reader = PcepFactories.getGenericReader();
         PcepMessage message = null;
 
-
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepInitiateMsg) message));
+        assertThat(message, instanceOf(PcepInitiateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
 
         message.writeTo(buf);
@@ -1097,7 +1075,7 @@
 
         /* SRP, LSP (StatefulIPv4LspIdentidiersTlv), END-POINTS, ERO, LSPA OBJECT.
          */
-        byte[] initiateCreationMsg = new byte[]{0x20, 0x0C, 0x00, (byte) 0x4c,
+        byte[] initiateCreationMsg = new byte[]{0x20, 0x0C, 0x00, (byte) 0x50,
                 0x21, 0x10, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, //SRP object
                 0x20, 0x10, 0x00, 0x1c, 0x00, 0x00, 0x10, 0x03, //LSP object
                 0x00, 0x12, 0x00, 0x10, //StatefulIPv4LspIdentidiersTlv
@@ -1115,10 +1093,9 @@
         PcepMessageReader<PcepMessage> reader = PcepFactories.getGenericReader();
         PcepMessage message = null;
 
-
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepInitiateMsg) message));
+        assertThat(message, instanceOf(PcepInitiateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
 
         message.writeTo(buf);
@@ -1141,7 +1118,7 @@
 
         /* SRP, LSP (SymbolicPathNameTlv, StatefulIPv4LspIdentidiersTlv), END-POINTS, ERO, LSPA OBJECT.
          */
-        byte[] initiateCreationMsg = new byte[]{0x20, 0x0C, 0x00, (byte) 0x54,
+        byte[] initiateCreationMsg = new byte[]{0x20, 0x0C, 0x00, (byte) 0x58,
                 0x21, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, //SRP object
                 0x00, 0x11, 0x00, 0x02, 0x54, 0x31, 0x00, 0x00, //SymbolicPathNameTlv
                 0x20, 0x10, 0x00, 0x1c, 0x00, 0x00, 0x10, 0x03, //LSP object
@@ -1160,10 +1137,9 @@
         PcepMessageReader<PcepMessage> reader = PcepFactories.getGenericReader();
         PcepMessage message = null;
 
-
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepInitiateMsg) message));
+        assertThat(message, instanceOf(PcepInitiateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
 
         message.writeTo(buf);
@@ -1186,7 +1162,7 @@
 
         /* SRP, LSP (SymbolicPathNameTlv, StatefulIPv4LspIdentidiersTlv), END-POINTS, ERO, LSPA BANDWIDTH OBJECT.
          */
-        byte[] initiateCreationMsg = new byte[]{0x20, 0x0C, 0x00, (byte) 0x5c,
+        byte[] initiateCreationMsg = new byte[]{0x20, 0x0C, 0x00, (byte) 0x60,
                 0x21, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, //SRP object
                 0x00, 0x11, 0x00, 0x02, 0x54, 0x31, 0x00, 0x00, //SymbolicPathNameTlv
                 0x20, 0x10, 0x00, 0x1c, 0x00, 0x00, 0x10, 0x03, //LSP object
@@ -1206,10 +1182,9 @@
         PcepMessageReader<PcepMessage> reader = PcepFactories.getGenericReader();
         PcepMessage message = null;
 
-
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepInitiateMsg) message));
+        assertThat(message, instanceOf(PcepInitiateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
 
         message.writeTo(buf);
@@ -1233,7 +1208,7 @@
         /* SRP, LSP (SymbolicPathNameTlv, StatefulIPv4LspIdentidiersTlv), END-POINTS,
          * ERO, LSPA, BANDWIDTH, METRIC OBJECT.
          */
-        byte[] initiateCreationMsg = new byte[]{0x20, 0x0C, 0x00, (byte) 0x68,
+        byte[] initiateCreationMsg = new byte[]{0x20, 0x0C, 0x00, (byte) 0x6C,
                 0x21, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, //SRP object
                 0x00, 0x11, 0x00, 0x02, 0x54, 0x31, 0x00, 0x00, //SymbolicPathNameTlv
                 0x20, 0x10, 0x00, 0x1c, 0x00, 0x00, 0x10, 0x03, //LSP object
@@ -1254,10 +1229,9 @@
         PcepMessageReader<PcepMessage> reader = PcepFactories.getGenericReader();
         PcepMessage message = null;
 
-
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepInitiateMsg) message));
+        assertThat(message, instanceOf(PcepInitiateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
 
         message.writeTo(buf);
@@ -1280,7 +1254,7 @@
 
         /* SRP, LSP (SymbolicPathNameTlv, SymbolicPathNameTlv), END-POINTS, ERO, LSPA, BANDWIDTH, METRIC OBJECT.
          */
-        byte[] initiateCreationMsg = new byte[]{0x20, 0x0C, 0x00, (byte) 0x54,
+        byte[] initiateCreationMsg = new byte[]{0x20, 0x0C, 0x00, (byte) 0x60,
                 0x21, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, //SRP object
                 0x00, 0x11, 0x00, 0x02, 0x54, 0x31, 0x00, 0x00, //SymbolicPathNameTlv
                 0x20, 0x10, 0x00, 0x10, 0x00, 0x00, 0x10, 0x03, //LSP object
@@ -1299,10 +1273,9 @@
         PcepMessageReader<PcepMessage> reader = PcepFactories.getGenericReader();
         PcepMessage message = null;
 
-
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepInitiateMsg) message));
+        assertThat(message, instanceOf(PcepInitiateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
 
         message.writeTo(buf);
@@ -1325,7 +1298,7 @@
 
         /* SRP, LSP (SymbolicPathNameTlv, SymbolicPathNameTlv), END-POINTS, ERO, LSPA, BANDWIDTH OBJECT.
          */
-        byte[] initiateCreationMsg = new byte[]{0x20, 0x0C, 0x00, (byte) 0x48,
+        byte[] initiateCreationMsg = new byte[]{0x20, 0x0C, 0x00, (byte) 0x54,
                 0x21, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, //SRP object
                 0x00, 0x11, 0x00, 0x02, 0x54, 0x31, 0x00, 0x00, //SymbolicPathNameTlv
                 0x20, 0x10, 0x00, 0x10, 0x00, 0x00, 0x10, 0x03, //LSP object
@@ -1334,7 +1307,7 @@
                 0x07, 0x10, 0x00, 0x04, //ERO object
                 0x09, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, //LSPA object
                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00,
-                0x05, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00}; //Bandwidth object
+                0x05, 0x20, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00}; //Bandwidth object
 
         byte[] testInitiateCreationMsg = {0};
         ChannelBuffer buffer = ChannelBuffers.dynamicBuffer();
@@ -1343,10 +1316,9 @@
         PcepMessageReader<PcepMessage> reader = PcepFactories.getGenericReader();
         PcepMessage message = null;
 
-
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepInitiateMsg) message));
+        assertThat(message, instanceOf(PcepInitiateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
 
         message.writeTo(buf);
@@ -1369,7 +1341,7 @@
 
         /* SRP, LSP (SymbolicPathNameTlv, SymbolicPathNameTlv), END-POINTS, ERO, LSPA OBJECT.
          */
-        byte[] initiateCreationMsg = new byte[]{0x20, 0x0C, 0x00, (byte) 0x40,
+        byte[] initiateCreationMsg = new byte[]{0x20, 0x0C, 0x00, (byte) 0x4C,
                 0x21, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, //SRP object
                 0x00, 0x11, 0x00, 0x02, 0x54, 0x31, 0x00, 0x00, //SymbolicPathNameTlv
                 0x20, 0x10, 0x00, 0x10, 0x00, 0x00, 0x10, 0x03, //LSP object
@@ -1386,10 +1358,9 @@
         PcepMessageReader<PcepMessage> reader = PcepFactories.getGenericReader();
         PcepMessage message = null;
 
-
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepInitiateMsg) message));
+        assertThat(message, instanceOf(PcepInitiateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
 
         message.writeTo(buf);
@@ -1412,14 +1383,14 @@
 
         /* SRP, LSP (SymbolicPathNameTlv, SymbolicPathNameTlv), END-POINTS, ERO, LSPA OBJECT.
          */
-        byte[] initiateCreationMsg = new byte[]{0x20, 0x0C, 0x00, (byte) 0x50,
+        byte[] initiateCreationMsg = new byte[]{0x20, 0x0C, 0x00, (byte) 0x5C,
                 0x21, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, //SRP object
                 0x00, 0x11, 0x00, 0x02, 0x54, 0x31, 0x00, 0x00, //SymbolicPathNameTlv
                 0x20, 0x10, 0x00, 0x10, 0x00, 0x00, 0x10, 0x03, //LSP object
                 0x00, 0x11, 0x00, 0x02, 0x54, 0x31, 0x00, 0x00, //SymbolicPathNameTlv
                 0x04, 0x12, 0x00, 0x0C, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, //Endpoints Object
-                0x07, 0x10, 0x00, 0x14, (byte) 0x01, 0x08, 0x0C, 0x01, //ERO object
-                0x01, 0x01, 0x00, 0x00, (byte) 0x01, 0x08, 0x0C, 0x01, 0x01, 0x02, 0x00, 0x00,
+                0x07, 0x10, 0x00, 0x14, 0x01, 0x08, 0x0C, 0x01, //ERO object
+                0x01, 0x01, 0x00, 0x00, 0x01, 0x08, 0x0C, 0x01, 0x01, 0x02, 0x00, 0x00,
                 0x09, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, //LSPA object
                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00};
 
@@ -1430,10 +1401,9 @@
         PcepMessageReader<PcepMessage> reader = PcepFactories.getGenericReader();
         PcepMessage message = null;
 
-
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepInitiateMsg) message));
+        assertThat(message, instanceOf(PcepInitiateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
 
         message.writeTo(buf);
@@ -1456,13 +1426,13 @@
 
         /* SRP, LSP (SymbolicPathNameTlv), END-POINTS, ERO, LSPA OBJECT.
          */
-        byte[] initiateCreationMsg = new byte[]{0x20, 0x0C, 0x00, (byte) 0x48,
+        byte[] initiateCreationMsg = new byte[]{0x20, 0x0C, 0x00, (byte) 0x54,
                 0x21, 0x10, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, //SRP object
                 0x20, 0x10, 0x00, 0x10, 0x00, 0x00, 0x10, 0x03, //LSP object
                 0x00, 0x11, 0x00, 0x02, 0x54, 0x31, 0x00, 0x00, //SymbolicPathNameTlv
                 0x04, 0x12, 0x00, 0x0C, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, //Endpoints Object
-                0x07, 0x10, 0x00, 0x14, (byte) 0x01, 0x08, 0x0C, 0x01, //ERO object
-                0x01, 0x01, 0x00, 0x00, (byte) 0x01, 0x08, 0x0C, 0x01, 0x01, 0x02, 0x00, 0x00,
+                0x07, 0x10, 0x00, 0x14, 0x01, 0x08, 0x0C, 0x01, //ERO object
+                0x01, 0x01, 0x00, 0x00, 0x01, 0x08, 0x0C, 0x01, 0x01, 0x02, 0x00, 0x00,
                 0x09, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, //LSPA object
                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00};
 
@@ -1473,10 +1443,9 @@
         PcepMessageReader<PcepMessage> reader = PcepFactories.getGenericReader();
         PcepMessage message = null;
 
-
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepInitiateMsg) message));
+        assertThat(message, instanceOf(PcepInitiateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
 
         message.writeTo(buf);
@@ -1520,10 +1489,9 @@
         PcepMessageReader<PcepMessage> reader = PcepFactories.getGenericReader();
         PcepMessage message = null;
 
-
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepInitiateMsg) message));
+        assertThat(message, instanceOf(PcepInitiateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
 
         message.writeTo(buf);
@@ -1566,10 +1534,9 @@
         PcepMessageReader<PcepMessage> reader = PcepFactories.getGenericReader();
         PcepMessage message = null;
 
-
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepInitiateMsg) message));
+        assertThat(message, instanceOf(PcepInitiateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
 
         message.writeTo(buf);
@@ -1611,10 +1578,9 @@
         PcepMessageReader<PcepMessage> reader = PcepFactories.getGenericReader();
         PcepMessage message = null;
 
-
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepInitiateMsg) message));
+        assertThat(message, instanceOf(PcepInitiateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
 
         message.writeTo(buf);
@@ -1645,8 +1611,8 @@
                 0x00, 0x17, 0x00, 0x08, //StatefulLspDbVerTlv
                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
                 0x04, 0x12, 0x00, 0x0C, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, //Endpoints Object
-                0x07, 0x10, 0x00, 0x14, (byte) 0x01, 0x08, 0x0C, 0x01, //ERO object
-                0x01, 0x01, 0x00, 0x00, (byte) 0x01, 0x08, 0x0C, 0x01, 0x01, 0x02, 0x00, 0x00,
+                0x07, 0x10, 0x00, 0x14, 0x01, 0x08, 0x0C, 0x01, //ERO object
+                0x01, 0x01, 0x00, 0x00, 0x01, 0x08, 0x0C, 0x01, 0x01, 0x02, 0x00, 0x00,
                 0x09, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, //LSPA object
                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00};
 
@@ -1657,10 +1623,9 @@
         PcepMessageReader<PcepMessage> reader = PcepFactories.getGenericReader();
         PcepMessage message = null;
 
-
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepInitiateMsg) message));
+        assertThat(message, instanceOf(PcepInitiateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
 
         message.writeTo(buf);
@@ -1690,8 +1655,8 @@
                 0x00, 0x17, 0x00, 0x08, //StatefulLspDbVerTlv
                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
                 0x04, 0x12, 0x00, 0x0C, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, //Endpoints Object
-                0x07, 0x10, 0x00, 0x14, (byte) 0x01, 0x08, 0x0C, 0x01, //ERO object
-                0x01, 0x01, 0x00, 0x00, (byte) 0x01, 0x08, 0x0C, 0x01, 0x01, 0x02, 0x00, 0x00,
+                0x07, 0x10, 0x00, 0x14, 0x01, 0x08, 0x0C, 0x01, //ERO object
+                0x01, 0x01, 0x00, 0x00, 0x01, 0x08, 0x0C, 0x01, 0x01, 0x02, 0x00, 0x00,
                 0x09, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, //LSPA object
                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00};
 
@@ -1702,10 +1667,9 @@
         PcepMessageReader<PcepMessage> reader = PcepFactories.getGenericReader();
         PcepMessage message = null;
 
-
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepInitiateMsg) message));
+        assertThat(message, instanceOf(PcepInitiateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
 
         message.writeTo(buf);
diff --git a/pcep/pcepio/src/test/java/org/onosproject/pcepio/PcepReportMsgTest2.java b/pcep/pcepio/src/test/java/org/onosproject/pcepio/PcepReportMsgExtTest.java
similarity index 82%
rename from pcep/pcepio/src/test/java/org/onosproject/pcepio/PcepReportMsgTest2.java
rename to pcep/pcepio/src/test/java/org/onosproject/pcepio/PcepReportMsgExtTest.java
index cf1bfd2..346caf8 100644
--- a/pcep/pcepio/src/test/java/org/onosproject/pcepio/PcepReportMsgTest2.java
+++ b/pcep/pcepio/src/test/java/org/onosproject/pcepio/PcepReportMsgExtTest.java
@@ -27,7 +27,7 @@
 import org.onosproject.pcepio.protocol.PcepMessageReader;
 import org.onosproject.pcepio.protocol.PcepReportMsg;
 
-public class PcepReportMsgTest2 {
+public class PcepReportMsgExtTest {
 
     /**
      * This test case checks forSRP Object,LSP Object(symbolic path tlv),ERO Object
@@ -39,17 +39,17 @@
 
         byte[] reportMsg = new byte[] {0x20, 0x0a, 0x00, (byte) 0x98,
                 0x21, 0x10, 0x00, 0x0C,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x01, //SRP object
-                0x20, 0x10, 0x00, 0x10, 0x00, 0x00, 0x10, (byte) 0x83, //LSP object
+                0x20, 0x10, 0x00, 0x10, 0x00, 0x00, 0x10, 0x03, //LSP object
                 0x00, 0x11, 0x00, 0x02, 0x54, 0x31, 0x00, 0x00, //symbolic path tlv
                 0x07, 0x10, 0x00, 0x14, //ERO Object
-                (byte) 0x81, 0x08, (byte) 0xb6, 0x02, 0x4e, 0x1f, 0x04, 0x00,
-                (byte) 0x81, 0x08, (byte) 0xb6, 0x02, 0x4e, 0x20, 0x04, 0x00,
+                0x01, 0x08, (byte) 0xb6, 0x02, 0x4e, 0x1f, 0x04, 0x00,
+                0x01, 0x08, (byte) 0xb6, 0x02, 0x4e, 0x20, 0x04, 0x00,
                 0x21, 0x10, 0x00, 0x0C,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x01, //SRP object
-                0x20, 0x10, 0x00, 0x10, 0x00, 0x00, 0x10, (byte) 0x83, //LSP object
+                0x20, 0x10, 0x00, 0x10, 0x00, 0x00, 0x10, 0x03, //LSP object
                 0x00, 0x11, 0x00, 0x02, 0x54, 0x31, 0x00, 0x00, //symbolic path tlv
                 0x07, 0x10, 0x00, 0x14, //ERO object
-                (byte) 0x81, 0x08, (byte) 0xb6, 0x02, 0x4e, 0x1f, 0x04, 0x00,
-                (byte) 0x81, 0x08, (byte) 0xb6, 0x02, 0x4e, 0x20, 0x04, 0x00,
+                0x01, 0x08, (byte) 0xb6, 0x02, 0x4e, 0x1f, 0x04, 0x00,
+                0x01, 0x08, (byte) 0xb6, 0x02, 0x4e, 0x20, 0x04, 0x00,
                 0x08, 0x10, 0x00, 0x34, 0x01, 0x08, 0x11, 0x01, //RRO object
                 0x01, 0x01, 0x04, 0x00, 0x01, 0x08, 0x11, 0x01,
                 0x01, 0x02, 0x04, 0x00, 0x01, 0x08, 0x06, 0x06,
@@ -86,17 +86,17 @@
 
         byte[] reportMsg = new byte[] {0x20, 0x0a, 0x00, (byte) 0x64,
                 0x21, 0x10, 0x00, 0x0C,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x01, //SRP object
-                0x20, 0x10, 0x00, 0x10, 0x00, 0x00, 0x10, (byte) 0x83, //LSP object
+                0x20, 0x10, 0x00, 0x10, 0x00, 0x00, 0x10, 0x03, //LSP object
                 0x00, 0x11, 0x00, 0x02, 0x54, 0x31, 0x00, 0x00, //symbolic path tlv
                 0x07, 0x10, 0x00, 0x14, //ERO object
-                (byte) 0x81, 0x08, (byte) 0xb6, 0x02, 0x4e, 0x1f, 0x04, 0x00,
-                (byte) 0x81, 0x08, (byte) 0xb6, 0x02, 0x4e, 0x20, 0x04, 0x00,
+                0x01, 0x08, (byte) 0xb6, 0x02, 0x4e, 0x1f, 0x04, 0x00,
+                0x01, 0x08, (byte) 0xb6, 0x02, 0x4e, 0x20, 0x04, 0x00,
                 0x21, 0x10, 0x00, 0x0C,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x01, //SRP object
-                0x20, 0x10, 0x00, 0x10, 0x00, 0x00, 0x10, (byte) 0x83, //LSP object
+                0x20, 0x10, 0x00, 0x10, 0x00, 0x00, 0x10, 0x03, //LSP object
                 0x00, 0x11, 0x00, 0x02, 0x54, 0x31, 0x00, 0x00, //symbolic path tlv
                 0x07, 0x10, 0x00, 0x14, //ERO object
-                (byte) 0x81, 0x08, (byte) 0xb6, 0x02, 0x4e, 0x1f, 0x04, 0x00,
-                (byte) 0x81, 0x08, (byte) 0xb6, 0x02, 0x4e, 0x20, 0x04, 0x00};
+                0x01, 0x08, (byte) 0xb6, 0x02, 0x4e, 0x1f, 0x04, 0x00,
+                0x01, 0x08, (byte) 0xb6, 0x02, 0x4e, 0x20, 0x04, 0x00};
 
         byte[] testReportMsg = {0};
         ChannelBuffer buffer = ChannelBuffers.dynamicBuffer();
@@ -127,19 +127,19 @@
 
         byte[] reportMsg = new byte[] {0x20, 0x0a, 0x00, (byte) 0x8c,
                 0x21, 0x10, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, //SRP object
-                0x20, 0x10, 0x00, 0x10, 0x00, 0x00, 0x10, (byte) 0x83, //LSP object
+                0x20, 0x10, 0x00, 0x10, 0x00, 0x00, 0x10, 0x03, //LSP object
                 0x00, 0x11, 0x00, 0x02, 0x54, 0x31, 0x00, 0x00, //symbolic path tlv
                 0x07, 0x10, 0x00, 0x14, //ERO object
-                (byte) 0x81, 0x08, (byte) 0xb6, 0x02, 0x4e, 0x1f, 0x04, 0x00,
-                (byte) 0x81, 0x08, (byte) 0xb6, 0x02, 0x4e, 0x20, 0x04, 0x00,
+                0x01, 0x08, (byte) 0xb6, 0x02, 0x4e, 0x1f, 0x04, 0x00,
+                0x01, 0x08, (byte) 0xb6, 0x02, 0x4e, 0x20, 0x04, 0x00,
                 0x09, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, //LSPA object
                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                 0x21, 0x10, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, //SRP object
-                0x20, 0x10, 0x00, 0x10, 0x00, 0x00, 0x10, (byte) 0x83, //LSP object
+                0x20, 0x10, 0x00, 0x10, 0x00, 0x00, 0x10, 0x03, //LSP object
                 0x00, 0x11, 0x00, 0x02, 0x54, 0x31, 0x00, 0x00, //symbolic path tlv
                 0x07, 0x10, 0x00, 0x14, //ERO object
-                (byte) 0x81, 0x08, (byte) 0xb6, 0x02, 0x4e, 0x1f, 0x04, 0x00,
-                (byte) 0x81, 0x08, (byte) 0xb6, 0x02, 0x4e, 0x20, 0x04, 0x00,
+                0x01, 0x08, (byte) 0xb6, 0x02, 0x4e, 0x1f, 0x04, 0x00,
+                0x01, 0x08, (byte) 0xb6, 0x02, 0x4e, 0x20, 0x04, 0x00,
                 0x09, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, //LSPA object
                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
 
@@ -173,21 +173,21 @@
 
         byte[] reportMsg = new byte[] {0x20, 0x0a, 0x00, (byte) 0xE8,
                 0x21, 0x10, 0x00, 0x0C,  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x01, //SRP object
-                0x20, 0x10, 0x00, 0x10, 0x00, 0x00, 0x10, (byte) 0x83, //LSP object
+                0x20, 0x10, 0x00, 0x10, 0x00, 0x00, 0x10, 0x03, //LSP object
                 0x00, 0x11, 0x00, 0x02, 0x54, 0x31, 0x00, 0x00, //symbolic path tlv
                 0x07, 0x10, 0x00, 0x14, //ERO object
-                (byte) 0x81, 0x08, (byte) 0xb6, 0x02, 0x4e, 0x1f, 0x04, 0x00,
-                (byte) 0x81, 0x08, (byte) 0xb6, 0x02, 0x4e, 0x20, 0x04, 0x00,
+                0x01, 0x08, (byte) 0xb6, 0x02, 0x4e, 0x1f, 0x04, 0x00,
+                0x01, 0x08, (byte) 0xb6, 0x02, 0x4e, 0x20, 0x04, 0x00,
                 0x09, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, //LSPA object
                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                 0x05, 0x20, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, //Bandwidth object
                 0x06, 0x10, 0x00, 0x0c, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x20, //Metric object
                 0x21, 0x10, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, //SRP object
-                0x20, 0x10, 0x00, 0x10, 0x00, 0x00, 0x10, (byte) 0x83, //LSP object
+                0x20, 0x10, 0x00, 0x10, 0x00, 0x00, 0x10, 0x03, //LSP object
                 0x00, 0x11, 0x00, 0x02, 0x54, 0x31, 0x00, 0x00, //symbolic path tlv
                 0x07, 0x10, 0x00, 0x14, //ERO object
-                (byte) 0x81, 0x08, (byte) 0xb6, 0x02, 0x4e, 0x1f, 0x04, 0x00,
-                (byte) 0x81, 0x08, (byte) 0xb6, 0x02, 0x4e, 0x20, 0x04, 0x00,
+                0x01, 0x08, (byte) 0xb6, 0x02, 0x4e, 0x1f, 0x04, 0x00,
+                0x01, 0x08, (byte) 0xb6, 0x02, 0x4e, 0x20, 0x04, 0x00,
                 0x09, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, //LSPA object
                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                 0x05, 0x20, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, //Bandwidth object
diff --git a/pcep/pcepio/src/test/java/org/onosproject/pcepio/PcepTEReportMsgTest.java b/pcep/pcepio/src/test/java/org/onosproject/pcepio/PcepTEReportMsgTest.java
index eb7cc8e..b800e05 100644
--- a/pcep/pcepio/src/test/java/org/onosproject/pcepio/PcepTEReportMsgTest.java
+++ b/pcep/pcepio/src/test/java/org/onosproject/pcepio/PcepTEReportMsgTest.java
@@ -43,7 +43,7 @@
                 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x10, // TE-ID
                 0x00, 0x0E, 0x00, 0x08, // Routing Universe TLV
                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
-                0x06, 0x65, 0x00, 0x0C, // Local TE Node Descriptors TLV
+                0x06, 0x65, 0x00, 0x08, // Local TE Node Descriptors TLV
                 0x00, 0x64, 0x00, 0x04, //AutonomousSystem Tlv
                 0x00, 0x00, 0x00, 0x11};
 
@@ -81,7 +81,7 @@
                 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x10, // TE-ID
                 0x00, 0x0E, 0x00, 0x08, // Routing Universe TLV
                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
-                0x06, 0x65, 0x00, 0x0C, // Local TE Node Descriptors TLV
+                0x06, 0x65, 0x00, 0x08, // Local TE Node Descriptors TLV
                 0x00, 0x64, 0x00, 0x04, //AutonomousSystemTlv
                 0x00, 0x00, 0x00, 0x11};
 
@@ -153,7 +153,7 @@
                 0x00, 0x0E, 0x00, 0x08, // Routing Universe TLV
                 0x00, 0x00, 0x00, 0x00,
                 0x00, 0x00, 0x00, 0x01,
-                0x06, 0x65, 0x00, 0x28, // Local TE Node Descriptors TLV
+                0x06, 0x65, 0x00, 0x24, // Local TE Node Descriptors TLV
                 0x00, 0x64, 0x00, 0x04, //AutonomousSystemTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x11, 0x00, 0x04, //BGPLSidentifierTlv
@@ -199,7 +199,7 @@
                 0x00, 0x0E, 0x00, 0x08, // Routing Universe TLV
                 0x00, 0x00, 0x00, 0x00,
                 0x00, 0x00, 0x00, 0x01,
-                0x06, 0x65, 0x00, 0x20, // Local TE Node Descriptors TLV
+                0x06, 0x65, 0x00, 0x1C, // Local TE Node Descriptors TLV
                 0x00, 0x11, 0x00, 0x04, //BGPLSidentifierTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x02, 0x58, 0x00, 0x04, //OSPFareaIDsubTlv
@@ -242,7 +242,7 @@
                 0x00, 0x0E, 0x00, 0x08, // Routing Universe TLV
                 0x00, 0x00, 0x00, 0x00,
                 0x00, 0x00, 0x00, 0x01,
-                0x06, 0x65, 0x00, 0x18, // Local TE Node Descriptors TLV
+                0x06, 0x65, 0x00, 0x14, // Local TE Node Descriptors TLV
                 0x02, 0x58, 0x00, 0x04, //OSPFareaIDsubTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x03, (byte) 0xE8, 0x00, 0x08, //RouterIDSubTlv
@@ -282,7 +282,7 @@
                 0x00, 0x0E, 0x00, 0x08, // Routing Universe TLV
                 0x00, 0x00, 0x00, 0x00,
                 0x00, 0x00, 0x00, 0x01,
-                0x06, 0x65, 0x00, 0x10, // Local TE Node Descriptors TLV
+                0x06, 0x65, 0x00, 0x0C, // Local TE Node Descriptors TLV
                 0x03, (byte) 0xE8, 0x00, 0x08, //RouterIDSubTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x00, 0x00, 0x11};
@@ -320,7 +320,7 @@
                 0x00, 0x0E, 0x00, 0x08, // Routing Universe TLV
                 0x00, 0x00, 0x00, 0x00,
                 0x00, 0x00, 0x00, 0x01,
-                0x06, 0x65, 0x00, 0x04 // Local TE Node Descriptors TLV
+                0x06, 0x65, 0x00, 0x00 // Local TE Node Descriptors TLV
         };
 
         ChannelBuffer buffer = ChannelBuffers.dynamicBuffer();
@@ -359,7 +359,7 @@
                 0x00, 0x0E, 0x00, 0x08, // Routing Universe TLV
                 0x00, 0x00, 0x00, 0x00,
                 0x00, 0x00, 0x00, 0x01,
-                0x06, 0x65, 0x00, 0x28, // Local TE Node Descriptors TLV
+                0x06, 0x65, 0x00, 0x24, // Local TE Node Descriptors TLV
                 0x00, 0x64, 0x00, 0x04, //AutonomousSystemTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x11, 0x00, 0x04, //BGPLSidentifierTlv
@@ -369,7 +369,7 @@
                 0x03, (byte) 0xE8, 0x00, 0x08, //RouterIDSubTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x00, 0x00, 0x11,
-                0x03, (byte) 0xEB, 0x00, 0x28, //RemoteTENodeDescriptorsTLV
+                0x03, (byte) 0xEB, 0x00, 0x24, //RemoteTENodeDescriptorsTLV
                 0x00, 0x64, 0x00, 0x04, //AutonomousSystemTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x11, 0x00, 0x04, //BGPLSidentifierTlv
@@ -417,7 +417,7 @@
                 0x00, 0x0E, 0x00, 0x08, // Routing Universe TLV
                 0x00, 0x00, 0x00, 0x00,
                 0x00, 0x00, 0x00, 0x01,
-                0x06, 0x65, 0x00, 0x28, // Local TE Node Descriptors TLV
+                0x06, 0x65, 0x00, 0x24, // Local TE Node Descriptors TLV
                 0x00, 0x64, 0x00, 0x04, //AutonomousSystemTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x11, 0x00, 0x04, //BGPLSidentifierTlv
@@ -427,7 +427,7 @@
                 0x03, (byte) 0xE8, 0x00, 0x08, //RouterIDSubTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x00, 0x00, 0x11,
-                0x03, (byte) 0xEB, 0x00, 0x20, //RemoteTENodeDescriptorsTLV
+                0x03, (byte) 0xEB, 0x00, 0x1C, //RemoteTENodeDescriptorsTLV
                 0x00, 0x11, 0x00, 0x04, //BGPLSidentifierTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x02, 0x58, 0x00, 0x04, //OSPFareaIDsubTlv
@@ -472,7 +472,7 @@
                 0x00, 0x0E, 0x00, 0x08, // Routing Universe TLV
                 0x00, 0x00, 0x00, 0x00,
                 0x00, 0x00, 0x00, 0x01,
-                0x06, 0x65, 0x00, 0x28, // Local TE Node Descriptors TLV
+                0x06, 0x65, 0x00, 0x24, // Local TE Node Descriptors TLV
                 0x00, 0x64, 0x00, 0x04, //AutonomousSystemTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x11, 0x00, 0x04, //BGPLSidentifierTlv
@@ -482,7 +482,7 @@
                 0x03, (byte) 0xE8, 0x00, 0x08, //RouterIDSubTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x00, 0x00, 0x11,
-                0x03, (byte) 0xEB, 0x00, 0x18, //RemoteTENodeDescriptorsTLV
+                0x03, (byte) 0xEB, 0x00, 0x14, //RemoteTENodeDescriptorsTLV
                 0x02, 0x58, 0x00, 0x04, //OSPFareaIDsubTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x03, (byte) 0xE8, 0x00, 0x08, //RouterIDSubTlv
@@ -525,7 +525,7 @@
                 0x00, 0x0E, 0x00, 0x08, // Routing Universe TLV
                 0x00, 0x00, 0x00, 0x00,
                 0x00, 0x00, 0x00, 0x01,
-                0x06, 0x65, 0x00, 0x28, // Local TE Node Descriptors TLV
+                0x06, 0x65, 0x00, 0x24, // Local TE Node Descriptors TLV
                 0x00, 0x64, 0x00, 0x04, //AutonomousSystemTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x11, 0x00, 0x04, //BGPLSidentifierTlv
@@ -535,7 +535,7 @@
                 0x03, (byte) 0xE8, 0x00, 0x08, //RouterIDSubTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x00, 0x00, 0x11,
-                0x03, (byte) 0xEB, 0x00, 0x10, //RemoteTENodeDescriptorsTLV
+                0x03, (byte) 0xEB, 0x00, 0x0c, //RemoteTENodeDescriptorsTLV
                 0x03, (byte) 0xE8, 0x00, 0x08, //RouterIDSubTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x00, 0x00, 0x11
@@ -576,7 +576,7 @@
                 0x00, 0x0E, 0x00, 0x08, // Routing Universe TLV
                 0x00, 0x00, 0x00, 0x00,
                 0x00, 0x00, 0x00, 0x01,
-                0x06, 0x65, 0x00, 0x28, // Local TE Node Descriptors TLV
+                0x06, 0x65, 0x00, 0x24, // Local TE Node Descriptors TLV
                 0x00, 0x64, 0x00, 0x04, //AutonomousSystemTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x11, 0x00, 0x04, //BGPLSidentifierTlv
@@ -586,7 +586,7 @@
                 0x03, (byte) 0xE8, 0x00, 0x08, //RouterIDSubTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x00, 0x00, 0x11,
-                0x03, (byte) 0xEB, 0x00, 0x04, //RemoteTENodeDescriptorsTLV
+                0x03, (byte) 0xEB, 0x00, 0x00, //RemoteTENodeDescriptorsTLV
         };
 
         ChannelBuffer buffer = ChannelBuffers.dynamicBuffer();
@@ -626,7 +626,7 @@
                 0x00, 0x0E, 0x00, 0x08, // Routing Universe TLV
                 0x00, 0x00, 0x00, 0x00,
                 0x00, 0x00, 0x00, 0x01,
-                0x06, 0x65, 0x00, 0x28, // Local TE Node Descriptors TLV
+                0x06, 0x65, 0x00, 0x24, // Local TE Node Descriptors TLV
                 0x00, 0x64, 0x00, 0x04, //AutonomousSystemTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x11, 0x00, 0x04, //BGPLSidentifierTlv
@@ -636,7 +636,7 @@
                 0x03, (byte) 0xE8, 0x00, 0x08, //RouterIDSubTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x00, 0x00, 0x11,
-                0x03, (byte) 0xEB, 0x00, 0x28, //RemoteTENodeDescriptorsTLV
+                0x03, (byte) 0xEB, 0x00, 0x24, //RemoteTENodeDescriptorsTLV
                 0x00, 0x64, 0x00, 0x04, //AutonomousSystemTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x11, 0x00, 0x04, //BGPLSidentifierTlv
@@ -646,7 +646,7 @@
                 0x03, (byte) 0xE8, 0x00, 0x08, //RouterIDSubTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x00, 0x00, 0x11,
-                0x04, 0x2E, 0x00, 0x20, //TELinkDescriptorsTLV
+                0x04, 0x2E, 0x00, 0x1C, //TELinkDescriptorsTLV
                 0x00, 0x04, 0x00, 0x08, //LinkLocalRemoteIdentifiersTlv
                 0x01, 0x11, 0x00, 0x09,
                 0x01, 0x21, 0x00, 0x09,
@@ -693,7 +693,7 @@
                 0x00, 0x0E, 0x00, 0x08, // Routing Universe TLV
                 0x00, 0x00, 0x00, 0x00,
                 0x00, 0x00, 0x00, 0x01,
-                0x06, 0x65, 0x00, 0x28, // Local TE Node Descriptors TLV
+                0x06, 0x65, 0x00, 0x24, // Local TE Node Descriptors TLV
                 0x00, 0x64, 0x00, 0x04, //AutonomousSystemTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x11, 0x00, 0x04, //BGPLSidentifierTlv
@@ -703,7 +703,7 @@
                 0x03, (byte) 0xE8, 0x00, 0x08, //RouterIDSubTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x00, 0x00, 0x11,
-                0x03, (byte) 0xEB, 0x00, 0x28, //RemoteTENodeDescriptorsTLV
+                0x03, (byte) 0xEB, 0x00, 0x24, //RemoteTENodeDescriptorsTLV
                 0x00, 0x64, 0x00, 0x04, //AutonomousSystemTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x11, 0x00, 0x04, //BGPLSidentifierTlv
@@ -713,7 +713,7 @@
                 0x03, (byte) 0xE8, 0x00, 0x08, //RouterIDSubTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x00, 0x00, 0x11,
-                0x04, 0x2E, 0x00, 0x14, //TELinkDescriptorsTLV
+                0x04, 0x2E, 0x00, 0x10, //TELinkDescriptorsTLV
                 0x00, 0x06, 0x00, 0x04, //IPv4InterfaceAddressTlv
                 0x01, 0x01, 0x01, 0x01,
                 0x00, 0x08, 0x00, 0x04, //IPv4NeighborAddressTlv
@@ -756,7 +756,7 @@
                 0x00, 0x0E, 0x00, 0x08, // Routing Universe TLV
                 0x00, 0x00, 0x00, 0x00,
                 0x00, 0x00, 0x00, 0x01,
-                0x06, 0x65, 0x00, 0x28, // Local TE Node Descriptors TLV
+                0x06, 0x65, 0x00, 0x24, // Local TE Node Descriptors TLV
                 0x00, 0x64, 0x00, 0x04, //AutonomousSystemTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x11, 0x00, 0x04, //BGPLSidentifierTlv
@@ -766,7 +766,7 @@
                 0x03, (byte) 0xE8, 0x00, 0x08, //RouterIDSubTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x00, 0x00, 0x11,
-                0x03, (byte) 0xEB, 0x00, 0x28, //RemoteTENodeDescriptorsTLV
+                0x03, (byte) 0xEB, 0x00, 0x24, //RemoteTENodeDescriptorsTLV
                 0x00, 0x64, 0x00, 0x04, //AutonomousSystemTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x11, 0x00, 0x04, //BGPLSidentifierTlv
@@ -776,7 +776,7 @@
                 0x03, (byte) 0xE8, 0x00, 0x08, //RouterIDSubTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x00, 0x00, 0x11,
-                0x04, 0x2E, 0x00, 0x0C, //TELinkDescriptorsTLV
+                0x04, 0x2E, 0x00, 0x08, //TELinkDescriptorsTLV
                 0x00, 0x08, 0x00, 0x04, //IPv4NeighborAddressTlv
                 0x01, 0x011, 0x01, 0x10
         };
@@ -817,7 +817,7 @@
                 0x00, 0x0E, 0x00, 0x08, // Routing Universe TLV
                 0x00, 0x00, 0x00, 0x00,
                 0x00, 0x00, 0x00, 0x01,
-                0x06, 0x65, 0x00, 0x28, // Local TE Node Descriptors TLV
+                0x06, 0x65, 0x00, 0x24, // Local TE Node Descriptors TLV
                 0x00, 0x64, 0x00, 0x04, //AutonomousSystemTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x11, 0x00, 0x04, //BGPLSidentifierTlv
@@ -827,7 +827,7 @@
                 0x03, (byte) 0xE8, 0x00, 0x08, //RouterIDSubTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x00, 0x00, 0x11,
-                0x03, (byte) 0xEB, 0x00, 0x28, //RemoteTENodeDescriptorsTLV
+                0x03, (byte) 0xEB, 0x00, 0x24, //RemoteTENodeDescriptorsTLV
                 0x00, 0x64, 0x00, 0x04, //AutonomousSystemTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x11, 0x00, 0x04, //BGPLSidentifierTlv
@@ -837,7 +837,7 @@
                 0x03, (byte) 0xE8, 0x00, 0x08, //RouterIDSubTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x00, 0x00, 0x11,
-                0x04, 0x2E, 0x00, 0x04, //TELinkDescriptorsTLV
+                0x04, 0x2E, 0x00, 0x00, //TELinkDescriptorsTLV
         };
 
         ChannelBuffer buffer = ChannelBuffers.dynamicBuffer();
@@ -877,7 +877,7 @@
                 0x00, 0x0E, 0x00, 0x08, // Routing Universe TLV
                 0x00, 0x00, 0x00, 0x00,
                 0x00, 0x00, 0x00, 0x01,
-                0x06, 0x65, 0x00, 0x28, // Local TE Node Descriptors TLV
+                0x06, 0x65, 0x00, 0x24, // Local TE Node Descriptors TLV
                 0x00, 0x64, 0x00, 0x04, //AutonomousSystemTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x11, 0x00, 0x04, //BGPLSidentifierTlv
@@ -887,7 +887,7 @@
                 0x03, (byte) 0xE8, 0x00, 0x08, //RouterIDSubTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x00, 0x00, 0x11,
-                0x03, (byte) 0xEB, 0x00, 0x28, //RemoteTENodeDescriptorsTLV
+                0x03, (byte) 0xEB, 0x00, 0x24, //RemoteTENodeDescriptorsTLV
                 0x00, 0x64, 0x00, 0x04, //AutonomousSystemTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x11, 0x00, 0x04, //BGPLSidentifierTlv
@@ -897,7 +897,7 @@
                 0x03, (byte) 0xE8, 0x00, 0x08, //RouterIDSubTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x00, 0x00, 0x11,
-                0x04, 0x2E, 0x00, 0x20, //TELinkDescriptorsTLV
+                0x04, 0x2E, 0x00, 0x1C, //TELinkDescriptorsTLV
                 0x00, 0x04, 0x00, 0x08, //LinkLocalRemoteIdentifiersTlv
                 0x01, 0x11, 0x00, 0x09,
                 0x01, 0x21, 0x00, 0x09,
@@ -905,7 +905,7 @@
                 0x01, 0x01, 0x01, 0x01,
                 0x00, 0x08, 0x00, 0x04, //IPv4NeighborAddressTlv
                 0x01, 0x011, 0x01, 0x10,
-                0x04, (byte) 0xF3, 0x00, 0x34, //TENodeAttributesTlv
+                0x04, (byte) 0xF3, 0x00, 0x30, //TENodeAttributesTlv
                 0x00, 0x0E, 0x00, 0x01, //NodeFlagBitsTlv
                 (byte) 0x90, 0x00, 0x00, 0x00,
                 0x03, (byte) 0xE9, 0x00, 0x04, //OpaqueNodeAttributeTlv
@@ -958,7 +958,7 @@
                 0x00, 0x0E, 0x00, 0x08, // Routing Universe TLV
                 0x00, 0x00, 0x00, 0x00,
                 0x00, 0x00, 0x00, 0x01,
-                0x06, 0x65, 0x00, 0x28, // Local TE Node Descriptors TLV
+                0x06, 0x65, 0x00, 0x24, // Local TE Node Descriptors TLV
                 0x00, 0x64, 0x00, 0x04, //AutonomousSystemTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x11, 0x00, 0x04, //BGPLSidentifierTlv
@@ -968,7 +968,7 @@
                 0x03, (byte) 0xE8, 0x00, 0x08, //RouterIDSubTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x00, 0x00, 0x11,
-                0x03, (byte) 0xEB, 0x00, 0x28, //RemoteTENodeDescriptorsTLV
+                0x03, (byte) 0xEB, 0x00, 0x24, //RemoteTENodeDescriptorsTLV
                 0x00, 0x64, 0x00, 0x04, //AutonomousSystemTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x11, 0x00, 0x04, //BGPLSidentifierTlv
@@ -978,7 +978,7 @@
                 0x03, (byte) 0xE8, 0x00, 0x08, //RouterIDSubTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x00, 0x00, 0x11,
-                0x04, 0x2E, 0x00, 0x20, //TELinkDescriptorsTLV
+                0x04, 0x2E, 0x00, 0x1C, //TELinkDescriptorsTLV
                 0x00, 0x04, 0x00, 0x08, //LinkLocalRemoteIdentifiersTlv
                 0x01, 0x11, 0x00, 0x09,
                 0x01, 0x21, 0x00, 0x09,
@@ -986,7 +986,7 @@
                 0x01, 0x01, 0x01, 0x01,
                 0x00, 0x08, 0x00, 0x04, //IPv4NeighborAddressTlv
                 0x01, 0x011, 0x01, 0x10,
-                0x04, (byte) 0xF3, 0x00, 0x34, //TENodeAttributesTlv
+                0x04, (byte) 0xF3, 0x00, 0x30, //TENodeAttributesTlv
                 0x00, 0x0E, 0x00, 0x01, //NodeFlagBitsTlv
                 (byte) 0x90, 0x00, 0x00, 0x00,
                 0x03, (byte) 0xE9, 0x00, 0x04, //OpaqueNodeAttributeTlv
@@ -1039,7 +1039,7 @@
                 0x00, 0x0E, 0x00, 0x08, // Routing Universe TLV
                 0x00, 0x00, 0x00, 0x00,
                 0x00, 0x00, 0x00, 0x01,
-                0x06, 0x65, 0x00, 0x28, // Local TE Node Descriptors TLV
+                0x06, 0x65, 0x00, 0x24, // Local TE Node Descriptors TLV
                 0x00, 0x64, 0x00, 0x04, //AutonomousSystemTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x11, 0x00, 0x04, //BGPLSidentifierTlv
@@ -1049,7 +1049,7 @@
                 0x03, (byte) 0xE8, 0x00, 0x08, //RouterIDSubTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x00, 0x00, 0x11,
-                0x03, (byte) 0xEB, 0x00, 0x28, //RemoteTENodeDescriptorsTLV
+                0x03, (byte) 0xEB, 0x00, 0x24, //RemoteTENodeDescriptorsTLV
                 0x00, 0x64, 0x00, 0x04, //AutonomousSystemTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x11, 0x00, 0x04, //BGPLSidentifierTlv
@@ -1059,7 +1059,7 @@
                 0x03, (byte) 0xE8, 0x00, 0x08, //RouterIDSubTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x00, 0x00, 0x11,
-                0x04, 0x2E, 0x00, 0x20, //TELinkDescriptorsTLV
+                0x04, 0x2E, 0x00, 0x1C, //TELinkDescriptorsTLV
                 0x00, 0x04, 0x00, 0x08, //LinkLocalRemoteIdentifiersTlv
                 0x01, 0x11, 0x00, 0x09,
                 0x01, 0x21, 0x00, 0x09,
@@ -1067,7 +1067,7 @@
                 0x01, 0x01, 0x01, 0x01,
                 0x00, 0x08, 0x00, 0x04, //IPv4NeighborAddressTlv
                 0x01, 0x011, 0x01, 0x10,
-                0x04, (byte) 0xF3, 0x00, 0x2C, //TENodeAttributesTlv
+                0x04, (byte) 0xF3, 0x00, 0x28, //TENodeAttributesTlv
                 0x03, (byte) 0xE9, 0x00, 0x04, //OpaqueNodeAttributeTlv
                 0x01, 0x011, 0x01, 0x10,
                 0x03, (byte) 0xEF, 0x00, 0x08, //NodeNameTlv
@@ -1118,7 +1118,7 @@
                 0x00, 0x0E, 0x00, 0x08, // Routing Universe TLV
                 0x00, 0x00, 0x00, 0x00,
                 0x00, 0x00, 0x00, 0x01,
-                0x06, 0x65, 0x00, 0x28, // Local TE Node Descriptors TLV
+                0x06, 0x65, 0x00, 0x24, // Local TE Node Descriptors TLV
                 0x00, 0x64, 0x00, 0x04, //AutonomousSystemTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x11, 0x00, 0x04, //BGPLSidentifierTlv
@@ -1128,7 +1128,7 @@
                 0x03, (byte) 0xE8, 0x00, 0x08, //RouterIDSubTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x00, 0x00, 0x11,
-                0x03, (byte) 0xEB, 0x00, 0x28, //RemoteTENodeDescriptorsTLV
+                0x03, (byte) 0xEB, 0x00, 0x24, //RemoteTENodeDescriptorsTLV
                 0x00, 0x64, 0x00, 0x04, //AutonomousSystemTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x11, 0x00, 0x04, //BGPLSidentifierTlv
@@ -1138,7 +1138,7 @@
                 0x03, (byte) 0xE8, 0x00, 0x08, //RouterIDSubTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x00, 0x00, 0x11,
-                0x04, 0x2E, 0x00, 0x20, //TELinkDescriptorsTLV
+                0x04, 0x2E, 0x00, 0x1C, //TELinkDescriptorsTLV
                 0x00, 0x04, 0x00, 0x08, //LinkLocalRemoteIdentifiersTlv
                 0x01, 0x11, 0x00, 0x09,
                 0x01, 0x21, 0x00, 0x09,
@@ -1146,7 +1146,7 @@
                 0x01, 0x01, 0x01, 0x01,
                 0x00, 0x08, 0x00, 0x04, //IPv4NeighborAddressTlv
                 0x01, 0x011, 0x01, 0x10,
-                0x04, (byte) 0xF3, 0x00, 0x20, //TENodeAttributesTlv
+                0x04, (byte) 0xF3, 0x00, 0x1C, //TENodeAttributesTlv
                 0x03, (byte) 0xE9, 0x00, 0x04, //OpaqueNodeAttributeTlv
                 0x01, 0x011, 0x01, 0x10,
                 0x00, 0x6B, 0x00, 0x08, //ISISAreaIdentifierTlv
@@ -1192,13 +1192,13 @@
     @Test
     public void teReportMessageTest22() throws PcepParseException {
 
-        byte[] teReportMsg = new byte[]{0x20, 0x0E, 0x01, (byte) 0x20, // common header
+        byte[] teReportMsg = new byte[]{0x20, 0x0E, 0x01, (byte) 0x120, // common header
                 0x0E, 0x10, 0x01, (byte) 0x1C, // TE Object Header
                 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x10, // TE-ID
                 0x00, 0x0E, 0x00, 0x08, // Routing Universe TLV
                 0x00, 0x00, 0x00, 0x00,
                 0x00, 0x00, 0x00, 0x01,
-                0x06, 0x65, 0x00, 0x28, // Local TE Node Descriptors TLV
+                0x06, 0x65, 0x00, 0x24, // Local TE Node Descriptors TLV
                 0x00, 0x64, 0x00, 0x04, //AutonomousSystemTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x11, 0x00, 0x04, //BGPLSidentifierTlv
@@ -1208,7 +1208,7 @@
                 0x03, (byte) 0xE8, 0x00, 0x08, //RouterIDSubTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x00, 0x00, 0x11,
-                0x03, (byte) 0xEB, 0x00, 0x28, //RemoteTENodeDescriptorsTLV
+                0x03, (byte) 0xEB, 0x00, 0x24, //RemoteTENodeDescriptorsTLV
                 0x00, 0x64, 0x00, 0x04, //AutonomousSystemTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x11, 0x00, 0x04, //BGPLSidentifierTlv
@@ -1218,7 +1218,7 @@
                 0x03, (byte) 0xE8, 0x00, 0x08, //RouterIDSubTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x00, 0x00, 0x11,
-                0x04, 0x2E, 0x00, 0x20, //TELinkDescriptorsTLV
+                0x04, 0x2E, 0x00, 0x1C, //TELinkDescriptorsTLV
                 0x00, 0x04, 0x00, 0x08, //LinkLocalRemoteIdentifiersTlv
                 0x01, 0x11, 0x00, 0x09,
                 0x01, 0x21, 0x00, 0x09,
@@ -1226,7 +1226,7 @@
                 0x01, 0x01, 0x01, 0x01,
                 0x00, 0x08, 0x00, 0x04, //IPv4NeighborAddressTlv
                 0x01, 0x011, 0x01, 0x10,
-                0x04, (byte) 0xF3, 0x00, 0x2C, //TENodeAttributesTlv
+                0x04, (byte) 0xF3, 0x00, 0x28, //TENodeAttributesTlv
                 0x03, (byte) 0xE9, 0x00, 0x04, //OpaqueNodeAttributeTlv
                 0x01, 0x011, 0x01, 0x10,
                 0x03, (byte) 0xEF, 0x00, 0x08, //NodeNameTlv
@@ -1237,7 +1237,7 @@
                 0x20, 0x01, 0x22, 0x01,
                 0x00, (byte) 0x86, 0x00, 0x04, //IPv4TERouterIdOfLocalNodeTlv
                 0x00, 0x01, 0x01, 0x02,
-                0x07, 0x69, 0x00, 0x68, //TELinkAttributesTlv
+                0x07, 0x69, 0x00, 0x64, //TELinkAttributesTlv
                 0x05, 0x3C, 0x00, 0x04, //IPv4TERouterIdOfRemoteNodeTlv
                 0x00, 0x07, 0x08, 0x00,
                 0x00, 0x03, 0x00, 0x04, //AdministrativeGroupTlv
@@ -1301,13 +1301,13 @@
     @Test
     public void teReportMessageTest23() throws PcepParseException {
 
-        byte[] teReportMsg = new byte[]{0x20, 0x0E, 0x01, (byte) 0x18, // common header
+        byte[] teReportMsg = new byte[]{0x20, 0x0E, 0x01, (byte) 0x118, // common header
                 0x0E, 0x10, 0x01, (byte) 0x14, // TE Object Header
                 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x10, // TE-ID
                 0x00, 0x0E, 0x00, 0x08, // Routing Universe TLV
                 0x00, 0x00, 0x00, 0x00,
                 0x00, 0x00, 0x00, 0x01,
-                0x06, 0x65, 0x00, 0x28, // Local TE Node Descriptors TLV
+                0x06, 0x65, 0x00, 0x24, // Local TE Node Descriptors TLV
                 0x00, 0x64, 0x00, 0x04, //AutonomousSystemTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x11, 0x00, 0x04, //BGPLSidentifierTlv
@@ -1317,7 +1317,7 @@
                 0x03, (byte) 0xE8, 0x00, 0x08, //RouterIDSubTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x00, 0x00, 0x11,
-                0x03, (byte) 0xEB, 0x00, 0x28, //RemoteTENodeDescriptorsTLV
+                0x03, (byte) 0xEB, 0x00, 0x24, //RemoteTENodeDescriptorsTLV
                 0x00, 0x64, 0x00, 0x04, //AutonomousSystemTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x11, 0x00, 0x04, //BGPLSidentifierTlv
@@ -1327,7 +1327,7 @@
                 0x03, (byte) 0xE8, 0x00, 0x08, //RouterIDSubTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x00, 0x00, 0x11,
-                0x04, 0x2E, 0x00, 0x20, //TELinkDescriptorsTLV
+                0x04, 0x2E, 0x00, 0x1C, //TELinkDescriptorsTLV
                 0x00, 0x04, 0x00, 0x08, //LinkLocalRemoteIdentifiersTlv
                 0x01, 0x11, 0x00, 0x09,
                 0x01, 0x21, 0x00, 0x09,
@@ -1335,7 +1335,7 @@
                 0x01, 0x01, 0x01, 0x01,
                 0x00, 0x08, 0x00, 0x04, //IPv4NeighborAddressTlv
                 0x01, 0x011, 0x01, 0x10,
-                0x04, (byte) 0xF3, 0x00, 0x2C, //TENodeAttributesTlv
+                0x04, (byte) 0xF3, 0x00, 0x28, //TENodeAttributesTlv
                 0x03, (byte) 0xE9, 0x00, 0x04, //OpaqueNodeAttributeTlv
                 0x01, 0x011, 0x01, 0x10,
                 0x03, (byte) 0xEF, 0x00, 0x08, //NodeNameTlv
@@ -1346,7 +1346,7 @@
                 0x20, 0x01, 0x22, 0x01,
                 0x00, (byte) 0x86, 0x00, 0x04, //IPv4TERouterIdOfLocalNodeTlv
                 0x00, 0x01, 0x01, 0x02,
-                0x07, 0x69, 0x00, 0x60, //TELinkAttributesTlv
+                0x07, 0x69, 0x00, 0x5C, //TELinkAttributesTlv
                 0x05, 0x3C, 0x00, 0x04, //IPv4TERouterIdOfRemoteNodeTlv
                 0x00, 0x07, 0x08, 0x00,
                 0x00, 0x03, 0x00, 0x04, //AdministrativeGroupTlv
@@ -1407,13 +1407,13 @@
     @Test
     public void teReportMessageTest24() throws PcepParseException {
 
-        byte[] teReportMsg = new byte[]{0x20, 0x0E, 0x01, (byte) 0x10, // common header
+        byte[] teReportMsg = new byte[]{0x20, 0x0E, 0x01, (byte) 0x110, // common header
                 0x0E, 0x10, 0x01, (byte) 0x0C, // TE Object Header
                 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x10, // TE-ID
                 0x00, 0x0E, 0x00, 0x08, // Routing Universe TLV
                 0x00, 0x00, 0x00, 0x00,
                 0x00, 0x00, 0x00, 0x01,
-                0x06, 0x65, 0x00, 0x28, // Local TE Node Descriptors TLV
+                0x06, 0x65, 0x00, 0x24, // Local TE Node Descriptors TLV
                 0x00, 0x64, 0x00, 0x04, //AutonomousSystemTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x11, 0x00, 0x04, //BGPLSidentifierTlv
@@ -1423,7 +1423,7 @@
                 0x03, (byte) 0xE8, 0x00, 0x08, //RouterIDSubTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x00, 0x00, 0x11,
-                0x03, (byte) 0xEB, 0x00, 0x28, //RemoteTENodeDescriptorsTLV
+                0x03, (byte) 0xEB, 0x00, 0x24, //RemoteTENodeDescriptorsTLV
                 0x00, 0x64, 0x00, 0x04, //AutonomousSystemTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x11, 0x00, 0x04, //BGPLSidentifierTlv
@@ -1433,7 +1433,7 @@
                 0x03, (byte) 0xE8, 0x00, 0x08, //RouterIDSubTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x00, 0x00, 0x11,
-                0x04, 0x2E, 0x00, 0x20, //TELinkDescriptorsTLV
+                0x04, 0x2E, 0x00, 0x1C, //TELinkDescriptorsTLV
                 0x00, 0x04, 0x00, 0x08, //LinkLocalRemoteIdentifiersTlv
                 0x01, 0x11, 0x00, 0x09,
                 0x01, 0x21, 0x00, 0x09,
@@ -1441,7 +1441,7 @@
                 0x01, 0x01, 0x01, 0x01,
                 0x00, 0x08, 0x00, 0x04, //IPv4NeighborAddressTlv
                 0x01, 0x011, 0x01, 0x10,
-                0x04, (byte) 0xF3, 0x00, 0x2C, //TENodeAttributesTlv
+                0x04, (byte) 0xF3, 0x00, 0x28, //TENodeAttributesTlv
                 0x03, (byte) 0xE9, 0x00, 0x04, //OpaqueNodeAttributeTlv
                 0x01, 0x011, 0x01, 0x10,
                 0x03, (byte) 0xEF, 0x00, 0x08, //NodeNameTlv
@@ -1452,7 +1452,7 @@
                 0x20, 0x01, 0x22, 0x01,
                 0x00, (byte) 0x86, 0x00, 0x04, //IPv4TERouterIdOfLocalNodeTlv
                 0x00, 0x01, 0x01, 0x02,
-                0x07, 0x69, 0x00, 0x58, //TELinkAttributesTlv
+                0x07, 0x69, 0x00, 0x54, //TELinkAttributesTlv
                 0x05, 0x3C, 0x00, 0x04, //IPv4TERouterIdOfRemoteNodeTlv
                 0x00, 0x07, 0x08, 0x00,
                 0x00, 0x03, 0x00, 0x04, //AdministrativeGroupTlv
@@ -1511,13 +1511,13 @@
     @Test
     public void teReportMessageTest25() throws PcepParseException {
 
-        byte[] teReportMsg = new byte[]{0x20, 0x0E, 0x01, 0x04, // common header
+        byte[] teReportMsg = new byte[]{0x20, 0x0E, 0x01, (byte) 0x104, // common header
                 0x0E, 0x10, 0x01, 0x00, // TE Object Header
                 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x10, // TE-ID
                 0x00, 0x0E, 0x00, 0x08, // Routing Universe TLV
                 0x00, 0x00, 0x00, 0x00,
                 0x00, 0x00, 0x00, 0x01,
-                0x06, 0x65, 0x00, 0x28, // Local TE Node Descriptors TLV
+                0x06, 0x65, 0x00, 0x24, // Local TE Node Descriptors TLV
                 0x00, 0x64, 0x00, 0x04, //AutonomousSystemTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x11, 0x00, 0x04, //BGPLSidentifierTlv
@@ -1527,7 +1527,7 @@
                 0x03, (byte) 0xE8, 0x00, 0x08, //RouterIDSubTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x00, 0x00, 0x11,
-                0x03, (byte) 0xEB, 0x00, 0x28, //RemoteTENodeDescriptorsTLV
+                0x03, (byte) 0xEB, 0x00, 0x24, //RemoteTENodeDescriptorsTLV
                 0x00, 0x64, 0x00, 0x04, //AutonomousSystemTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x11, 0x00, 0x04, //BGPLSidentifierTlv
@@ -1537,7 +1537,7 @@
                 0x03, (byte) 0xE8, 0x00, 0x08, //RouterIDSubTlv
                 0x00, 0x00, 0x00, 0x11,
                 0x00, 0x00, 0x00, 0x11,
-                0x04, 0x2E, 0x00, 0x20, //TELinkDescriptorsTLV
+                0x04, 0x2E, 0x00, 0x1C, //TELinkDescriptorsTLV
                 0x00, 0x04, 0x00, 0x08, //LinkLocalRemoteIdentifiersTlv
                 0x01, 0x11, 0x00, 0x09,
                 0x01, 0x21, 0x00, 0x09,
@@ -1545,7 +1545,7 @@
                 0x01, 0x01, 0x01, 0x01,
                 0x00, 0x08, 0x00, 0x04, //IPv4NeighborAddressTlv
                 0x01, 0x011, 0x01, 0x10,
-                0x04, (byte) 0xF3, 0x00, 0x2C, //TENodeAttributesTlv
+                0x04, (byte) 0xF3, 0x00, 0x28, //TENodeAttributesTlv
                 0x03, (byte) 0xE9, 0x00, 0x04, //OpaqueNodeAttributeTlv
                 0x01, 0x011, 0x01, 0x10,
                 0x03, (byte) 0xEF, 0x00, 0x08, //NodeNameTlv
@@ -1556,7 +1556,7 @@
                 0x20, 0x01, 0x22, 0x01,
                 0x00, (byte) 0x86, 0x00, 0x04, //IPv4TERouterIdOfLocalNodeTlv
                 0x00, 0x01, 0x01, 0x02,
-                0x07, 0x69, 0x00, 0x4C, //TELinkAttributesTlv
+                0x07, 0x69, 0x00, 0x48, //TELinkAttributesTlv
                 0x05, 0x3C, 0x00, 0x04, //IPv4TERouterIdOfRemoteNodeTlv
                 0x00, 0x07, 0x08, 0x00,
                 0x00, 0x03, 0x00, 0x04, //AdministrativeGroupTlv
diff --git a/pcep/pcepio/src/test/java/org/onosproject/pcepio/PcepUpdateMsgTest2.java b/pcep/pcepio/src/test/java/org/onosproject/pcepio/PcepUpdateMsgExtTest.java
similarity index 95%
rename from pcep/pcepio/src/test/java/org/onosproject/pcepio/PcepUpdateMsgTest2.java
rename to pcep/pcepio/src/test/java/org/onosproject/pcepio/PcepUpdateMsgExtTest.java
index d42ca3c..4b0174c 100644
--- a/pcep/pcepio/src/test/java/org/onosproject/pcepio/PcepUpdateMsgTest2.java
+++ b/pcep/pcepio/src/test/java/org/onosproject/pcepio/PcepUpdateMsgExtTest.java
@@ -16,11 +16,13 @@
 package org.onosproject.pcepio;
 
 import static org.hamcrest.core.Is.is;
-import static org.hamcrest.core.IsSame.sameInstance;
+import static org.hamcrest.Matchers.instanceOf;
 
 import org.jboss.netty.buffer.ChannelBuffer;
 import org.jboss.netty.buffer.ChannelBuffers;
+
 import static org.hamcrest.MatcherAssert.assertThat;
+
 import org.junit.Test;
 import org.onosproject.pcepio.exceptions.PcepParseException;
 import org.onosproject.pcepio.protocol.PcepFactories;
@@ -31,7 +33,7 @@
 /**
  *  Test cases for PCEP update message.
  */
-public class PcepUpdateMsgTest2 {
+public class PcepUpdateMsgExtTest {
 
     /**
      * This test case is for SRP object(symbolic path tlv), LSP object(StatefulLspDbVerTlv), ERO object,
@@ -66,8 +68,8 @@
         PcepMessage message = null;
 
         message = reader.readFrom(buffer);
-        assertThat(message, sameInstance((PcepUpdateMsg) message));
 
+        assertThat(message, instanceOf(PcepUpdateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
         message.writeTo(buf);
         testupdateMsg = buf.array();
@@ -108,7 +110,7 @@
 
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepUpdateMsg) message));
+        assertThat(message, instanceOf(PcepUpdateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
         message.writeTo(buf);
         testupdateMsg = buf.array();
@@ -146,7 +148,7 @@
 
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepUpdateMsg) message));
+        assertThat(message, instanceOf(PcepUpdateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
         message.writeTo(buf);
         testupdateMsg = buf.array();
@@ -185,7 +187,7 @@
 
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepUpdateMsg) message));
+        assertThat(message, instanceOf(PcepUpdateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
         message.writeTo(buf);
         testupdateMsg = buf.array();
@@ -225,7 +227,7 @@
 
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepUpdateMsg) message));
+        assertThat(message, instanceOf(PcepUpdateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
         message.writeTo(buf);
         testupdateMsg = buf.array();
@@ -264,7 +266,7 @@
 
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepUpdateMsg) message));
+        assertThat(message, instanceOf(PcepUpdateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
         message.writeTo(buf);
         testupdateMsg = buf.array();
@@ -304,7 +306,7 @@
 
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepUpdateMsg) message));
+        assertThat(message, instanceOf(PcepUpdateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
         message.writeTo(buf);
         testupdateMsg = buf.array();
@@ -344,7 +346,7 @@
 
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepUpdateMsg) message));
+        assertThat(message, instanceOf(PcepUpdateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
         message.writeTo(buf);
         testupdateMsg = buf.array();
@@ -383,7 +385,7 @@
 
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepUpdateMsg) message));
+        assertThat(message, instanceOf(PcepUpdateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
         message.writeTo(buf);
         testupdateMsg = buf.array();
@@ -421,7 +423,7 @@
 
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepUpdateMsg) message));
+        assertThat(message, instanceOf(PcepUpdateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
         message.writeTo(buf);
         testupdateMsg = buf.array();
@@ -449,16 +451,18 @@
                 0x01, 0x01, 0x04, 0x00,
                 0x09, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, //LSPA object
                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x00,
-                0x05, 0x20, 0x00, 0x04}; //Bandwidth object
+                0x05, 0x20, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00}; //Bandwidth object
 
         byte[] testupdateMsg = {0};
         ChannelBuffer buffer = ChannelBuffers.dynamicBuffer();
         buffer.writeBytes(updateMsg);
 
-        PcepFactories.getGenericReader();
+        PcepMessageReader<PcepMessage> reader = PcepFactories.getGenericReader();
         PcepMessage message = null;
 
-        assertThat(message, sameInstance((PcepUpdateMsg) message));
+        message = reader.readFrom(buffer);
+
+        assertThat(message, instanceOf(PcepUpdateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
         message.writeTo(buf);
         testupdateMsg = buf.array();
@@ -496,7 +500,7 @@
 
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepUpdateMsg) message));
+        assertThat(message, instanceOf(PcepUpdateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
         message.writeTo(buf);
         testupdateMsg = buf.array();
@@ -535,7 +539,7 @@
 
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepUpdateMsg) message));
+        assertThat(message, instanceOf(PcepUpdateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
         message.writeTo(buf);
         testupdateMsg = buf.array();
@@ -575,7 +579,7 @@
 
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepUpdateMsg) message));
+        assertThat(message, instanceOf(PcepUpdateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
         message.writeTo(buf);
         testupdateMsg = buf.array();
@@ -612,7 +616,7 @@
 
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepUpdateMsg) message));
+        assertThat(message, instanceOf(PcepUpdateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
         message.writeTo(buf);
         testupdateMsg = buf.array();
@@ -650,7 +654,7 @@
 
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepUpdateMsg) message));
+        assertThat(message, instanceOf(PcepUpdateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
         message.writeTo(buf);
         testupdateMsg = buf.array();
@@ -689,7 +693,7 @@
 
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepUpdateMsg) message));
+        assertThat(message, instanceOf(PcepUpdateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
         message.writeTo(buf);
         testupdateMsg = buf.array();
@@ -727,7 +731,7 @@
 
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepUpdateMsg) message));
+        assertThat(message, instanceOf(PcepUpdateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
         message.writeTo(buf);
         testupdateMsg = buf.array();
@@ -766,7 +770,7 @@
 
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepUpdateMsg) message));
+        assertThat(message, instanceOf(PcepUpdateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
         message.writeTo(buf);
         testupdateMsg = buf.array();
@@ -805,7 +809,7 @@
 
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepUpdateMsg) message));
+        assertThat(message, instanceOf(PcepUpdateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
         message.writeTo(buf);
         testupdateMsg = buf.array();
@@ -841,7 +845,7 @@
 
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepUpdateMsg) message));
+        assertThat(message, instanceOf(PcepUpdateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
         message.writeTo(buf);
         testupdateMsg = buf.array();
@@ -878,7 +882,7 @@
 
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepUpdateMsg) message));
+        assertThat(message, instanceOf(PcepUpdateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
         message.writeTo(buf);
         testupdateMsg = buf.array();
@@ -916,7 +920,7 @@
 
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepUpdateMsg) message));
+        assertThat(message, instanceOf(PcepUpdateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
         message.writeTo(buf);
         testupdateMsg = buf.array();
@@ -953,7 +957,7 @@
 
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepUpdateMsg) message));
+        assertThat(message, instanceOf(PcepUpdateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
         message.writeTo(buf);
         testupdateMsg = buf.array();
@@ -991,7 +995,7 @@
 
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepUpdateMsg) message));
+        assertThat(message, instanceOf(PcepUpdateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
         message.writeTo(buf);
         testupdateMsg = buf.array();
@@ -1030,7 +1034,7 @@
 
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepUpdateMsg) message));
+        assertThat(message, instanceOf(PcepUpdateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
         message.writeTo(buf);
         testupdateMsg = buf.array();
@@ -1065,7 +1069,7 @@
 
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepUpdateMsg) message));
+        assertThat(message, instanceOf(PcepUpdateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
         message.writeTo(buf);
         testupdateMsg = buf.array();
@@ -1101,7 +1105,7 @@
 
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepUpdateMsg) message));
+        assertThat(message, instanceOf(PcepUpdateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
         message.writeTo(buf);
         testupdateMsg = buf.array();
@@ -1140,7 +1144,7 @@
 
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepUpdateMsg) message));
+        assertThat(message, instanceOf(PcepUpdateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
         message.writeTo(buf);
         testupdateMsg = buf.array();
@@ -1178,7 +1182,7 @@
 
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepUpdateMsg) message));
+        assertThat(message, instanceOf(PcepUpdateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
         message.writeTo(buf);
         testupdateMsg = buf.array();
@@ -1216,7 +1220,7 @@
 
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepUpdateMsg) message));
+        assertThat(message, instanceOf(PcepUpdateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
         message.writeTo(buf);
         testupdateMsg = buf.array();
@@ -1256,7 +1260,7 @@
 
         message = reader.readFrom(buffer);
 
-        assertThat(message, sameInstance((PcepUpdateMsg) message));
+        assertThat(message, instanceOf(PcepUpdateMsg.class));
         ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
         message.writeTo(buf);
         testupdateMsg = buf.array();
