diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcInitiatedLspRequest.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcInitiatedLspRequest.java
index 989636b..6a2fdc8 100755
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcInitiatedLspRequest.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcInitiatedLspRequest.java
@@ -95,11 +95,6 @@
     void setPcepAttribute(PcepAttribute pcepAttribute);
 
     /**
-     * Prints the attribute of PC-INITIATED LSP INITIATION REQUEST.
-     */
-    void print();
-
-    /**
      * Builder interface with get and set functions to build PcInitiatedLspRequest.
      */
     interface Builder {
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepAttribute.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepAttribute.java
index 114c6fe..c2373f0 100755
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepAttribute.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepAttribute.java
@@ -92,12 +92,6 @@
     void setMetricObjectList(LinkedList<PcepMetricObject> llMetricList);
 
     /**
-     * Prints the attributes of AttributeList.
-     */
-
-    void print();
-
-    /**
      * Builder interface with get and set functions to build PcepAttribute.
      */
     interface Builder {
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepBandwidthObject.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepBandwidthObject.java
index 1a1d928..58d0582 100755
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepBandwidthObject.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepBandwidthObject.java
@@ -39,11 +39,6 @@
     void setBandwidth(int iBandwidth);
 
     /**
-     * Prints attributes of bandwidth object.
-     */
-    void print();
-
-    /**
      * Writes the BandwidthObject into channel buffer.
      *
      * @param bb channel buffer
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepEndPointsObject.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepEndPointsObject.java
index a8c80a9..92d4387 100755
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepEndPointsObject.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepEndPointsObject.java
@@ -54,11 +54,6 @@
     void setDestIpAddress(int destIpAddress);
 
     /**
-     * Prints attributes of EndPoints object.
-     */
-    void print();
-
-    /**
      * Writes the EndPointsObject into channel buffer.
      *
      * @param bb channel buffer
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepEroObject.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepEroObject.java
index 9c49187..3af6b75 100755
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepEroObject.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepEroObject.java
@@ -52,11 +52,6 @@
     int write(ChannelBuffer bb) throws PcepParseException;
 
     /**
-     * Prints attributes of ERO object.
-     */
-    void print();
-
-    /**
      * Builder interface with get and set functions to build ERO object.
      */
     interface Builder {
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepError.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepError.java
index 1dc8a3f..b61bfb9 100755
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepError.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepError.java
@@ -77,11 +77,6 @@
     int write(ChannelBuffer bb) throws PcepParseException;
 
     /**
-     * Prints the attributes of PCEP Error.
-     */
-    void print();
-
-    /**
      * Builder interface with get and set functions to build PcepError.
      */
     interface Builder {
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepErrorInfo.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepErrorInfo.java
index 5d8bfd9..0c625a0 100755
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepErrorInfo.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepErrorInfo.java
@@ -50,11 +50,6 @@
     void write(ChannelBuffer bb) throws PcepParseException;
 
     /**
-     * Prints the attributes of error info list.
-     */
-    void print();
-
-    /**
      * Returns Error Value in PCEP-ERROR Object.
      *
      * @return list of Error Value in PCEP-ERROR Object
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepErrorMsg.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepErrorMsg.java
old mode 100755
new mode 100644
index c785c2c..ff06885
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepErrorMsg.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepErrorMsg.java
@@ -1,6 +1,23 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 package org.onosproject.pcepio.protocol;
 
 import org.jboss.netty.buffer.ChannelBuffer;
+import org.onosproject.pcepio.exceptions.PcepParseException;
 import org.onosproject.pcepio.types.ErrorObjListWithOpen;
 
 /**
@@ -43,7 +60,7 @@
     void setPcepErrorInfo(PcepErrorInfo errInfo);
 
     @Override
-    void writeTo(ChannelBuffer channelBuffer);
+    void writeTo(ChannelBuffer channelBuffer) throws PcepParseException;
 
     /**
      * Builder interface with get and set functions to build PCEP Error message.
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepErrorObject.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepErrorObject.java
old mode 100755
new mode 100644
index 9933802..16374d5
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepErrorObject.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepErrorObject.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.onosproject.pcepio.protocol;
 
 import java.util.LinkedList;
@@ -55,11 +70,6 @@
     void setOptionalTlv(LinkedList<PcepValueType> llOptionalTlv);
 
     /**
-     * Prints attributes of Error object.
-     */
-    void print();
-
-    /**
      * Writes the Error Object into channel buffer.
      *
      * @param bb channel buffer
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepFactories.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepFactories.java
index 5cca7e3..150de92 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepFactories.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepFactories.java
@@ -33,7 +33,7 @@
     private PcepFactories() {
     }
 
-    /*
+    /**
      * Returns the instance of PCEP Version.
      *
      * @param version PCEP version
@@ -84,7 +84,7 @@
         }
     }
 
-    /*
+    /**
      * Returns GENERIC_READER.
      *
      * @return GENERIC_READER
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepFactory.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepFactory.java
index e9eb125..1a31e0a 100755
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepFactory.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepFactory.java
@@ -238,4 +238,18 @@
      * @return Builder Object for PcepError
      */
     PcepError.Builder buildPcepError();
+
+    /**
+     * To get Builder Object for PcepLabelRangeObject.
+     *
+     * @return Builder Object for PcepLabelRangeObject
+     */
+    PcepLabelRangeObject.Builder buildPcepLabelRangeObject();
+
+    /**
+     * To get Builder Object for PcepLabelRangeResvMsg.
+     *
+     * @return Builder Object for PcepLabelRangeResvMsg
+     */
+    PcepLabelRangeResvMsg.Builder buildPcepLabelRangeResvMsg();
 }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepFecObject.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepFecObject.java
index e356470..2df7cc9 100755
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepFecObject.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepFecObject.java
@@ -46,9 +46,4 @@
      * @throws PcepParseException while writing FEC Object into Channel Buffer.
      */
     int write(ChannelBuffer bb) throws PcepParseException;
-
-    /**
-     * Prints attributes of FEC object.
-     */
-    void print();
 }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepFecObjectIPv4.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepFecObjectIPv4.java
index c432f2a..5ed4e1e 100755
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepFecObjectIPv4.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepFecObjectIPv4.java
@@ -40,9 +40,6 @@
     void setNodeID(int value);
 
     @Override
-    void print();
-
-    @Override
     int write(ChannelBuffer bb) throws PcepParseException;
 
     /**
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepFecObjectIPv4Adjacency.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepFecObjectIPv4Adjacency.java
index 154bda2..5520529 100755
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepFecObjectIPv4Adjacency.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepFecObjectIPv4Adjacency.java
@@ -54,9 +54,6 @@
     void seRemoteIPv4Address(int value);
 
     @Override
-    void print();
-
-    @Override
     int write(ChannelBuffer bb) throws PcepParseException;
 
     /**
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepFecObjectIPv4UnnumberedAdjacency.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepFecObjectIPv4UnnumberedAdjacency.java
index e2d0e93..d240445 100755
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepFecObjectIPv4UnnumberedAdjacency.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepFecObjectIPv4UnnumberedAdjacency.java
@@ -82,9 +82,6 @@
     void setRemoteInterfaceID(int value);
 
     @Override
-    void print();
-
-    @Override
     int write(ChannelBuffer bb) throws PcepParseException;
 
     /**
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepFecObjectIPv6.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepFecObjectIPv6.java
index b0de9e5..1c29b76 100755
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepFecObjectIPv6.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepFecObjectIPv6.java
@@ -40,9 +40,6 @@
     void setNodeID(byte[] value);
 
     @Override
-    void print();
-
-    @Override
     int write(ChannelBuffer bb) throws PcepParseException;
 
     /**
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepFecObjectIPv6Adjacency.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepFecObjectIPv6Adjacency.java
index 6216d48..ef80278 100755
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepFecObjectIPv6Adjacency.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepFecObjectIPv6Adjacency.java
@@ -54,9 +54,6 @@
     void seRemoteIPv6Address(byte[] value);
 
     @Override
-    void print();
-
-    @Override
     int write(ChannelBuffer bb) throws PcepParseException;
 
     /**
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepInterLayerObject.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepInterLayerObject.java
index a8f3df0..675e055 100755
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepInterLayerObject.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepInterLayerObject.java
@@ -53,11 +53,6 @@
     void setbIFlag(boolean value);
 
     /**
-     * Prints attributes of INTER Layer object.
-     */
-    void print();
-
-    /**
      * Writes the INTER Layer Object into channel buffer.
      *
      * @param bb channel buffer
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepIroObject.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepIroObject.java
index 154bd98..a1c1fc5 100755
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepIroObject.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepIroObject.java
@@ -41,11 +41,6 @@
     void setSubObjects(LinkedList<PcepValueType> llSubObjects);
 
     /**
-     * Prints attributes of IRO object.
-     */
-    void print();
-
-    /**
      * Writes the IRO into channel buffer.
      *
      * @param bb channel buffer
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepLabelObject.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepLabelObject.java
index 41f19e6..b64c21e 100755
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepLabelObject.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepLabelObject.java
@@ -71,11 +71,6 @@
     void setOptionalTlv(LinkedList<PcepValueType> llOptionalTlv);
 
     /**
-     * Prints attributes of Label object.
-     */
-    void print();
-
-    /**
      * Writes the Label Object into channel buffer.
      *
      * @param bb channel buffer
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepLabelRange.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepLabelRange.java
index 8367494..72d0a38 100755
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepLabelRange.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepLabelRange.java
@@ -62,9 +62,4 @@
      * @throws PcepParseException while writing LABEL RANGE into Channel Buffer.
      */
     int write(ChannelBuffer bb) throws PcepParseException;
-
-    /**
-     * Prints Attributes of PcepLabelRange.
-     */
-    void print();
 }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepLabelRangeObject.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepLabelRangeObject.java
index 235a594..9155434 100755
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepLabelRangeObject.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepLabelRangeObject.java
@@ -82,11 +82,6 @@
     int getLabelBase();
 
     /**
-     * Prints attributes of LabelRange object.
-     */
-    void print();
-
-    /**
      * Writes the LabelRange Object into channel buffer.
      *
      * @param bb channel buffer
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepLabelUpdate.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepLabelUpdate.java
index b16157c..a3489e6 100755
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepLabelUpdate.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepLabelUpdate.java
@@ -62,11 +62,6 @@
     PcepLabelMap getLabelMap();
 
     /**
-     * Prints the attributes of PCEP Label update.
-     */
-    void print();
-
-    /**
      * Builder interface with get and set functions to build Label Update message.
      */
     interface Builder {
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepLspObject.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepLspObject.java
index bb0fac1..5d55250 100755
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepLspObject.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepLspObject.java
@@ -127,11 +127,6 @@
     void setOptionalTlv(LinkedList<PcepValueType> llOptionalTlv);
 
     /**
-     * Prints attributes of LSP object.
-     */
-    void print();
-
-    /**
      * Writes the LSP Object into channel buffer.
      *
      * @param bb channel buffer
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepLspaObject.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepLspaObject.java
index ff74eff..d541e92 100755
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepLspaObject.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepLspaObject.java
@@ -126,11 +126,6 @@
     void setOptionalTlv(LinkedList<PcepValueType> llOptionalTlv);
 
     /**
-     * Prints attributes of LSPA object.
-     */
-    void print();
-
-    /**
      * Writes the LSPA Object into channel buffer.
      *
      * @param bb channel buffer
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepMessage.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepMessage.java
index d794fcd..7de0716 100755
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepMessage.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepMessage.java
@@ -34,11 +34,6 @@
      */
     PcepType getType();
 
-    /**
-     * Prints attributes of PCEP Messages.
-     */
-    void print();
-
     @Override
     void writeTo(ChannelBuffer channelBuffer) throws PcepParseException;
 
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepMetricObject.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepMetricObject.java
index 70e5bbd..380fb42 100755
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepMetricObject.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepMetricObject.java
@@ -95,11 +95,6 @@
     void setBType(byte value);
 
     /**
-     * Prints attributes of Metric object.
-     */
-    void print();
-
-    /**
      * Writes the Metric Object into channel buffer.
      *
      * @param bb channel buffer
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepMsgPath.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepMsgPath.java
old mode 100755
new mode 100644
index 9b2becd..3beb1dd
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepMsgPath.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepMsgPath.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.onosproject.pcepio.protocol;
 
 import org.jboss.netty.buffer.ChannelBuffer;
@@ -57,11 +72,6 @@
     public int write(ChannelBuffer bb) throws PcepParseException;
 
     /**
-     * Prints the attributes of PCEP message path.
-     */
-    void print();
-
-    /**
      * Builder interface with get and set functions to build PcepMsgPath.
      */
     interface Builder {
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepOpenMsg.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepOpenMsg.java
old mode 100755
new mode 100644
index 1cffa91..904156f
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepOpenMsg.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepOpenMsg.java
@@ -45,7 +45,7 @@
     PcepOpenObject getPcepOpenObject();
 
     @Override
-    void writeTo(ChannelBuffer channelBuffer);
+    void writeTo(ChannelBuffer channelBuffer) throws PcepParseException;
 
     /**
      * Builder interface with get and set functions to build Open message.
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepOpenObject.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepOpenObject.java
index 9c3a252..13dd2fa 100755
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepOpenObject.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepOpenObject.java
@@ -106,11 +106,6 @@
     void setOptionalTlv(LinkedList<PcepValueType> llOptionalTlv);
 
     /**
-     * Prints attributes of Open object.
-     */
-    void print();
-
-    /**
      * Writes the Open into channel buffer.
      *
      * @param bb channel buffer
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepRPObject.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepRPObject.java
index 71cc1c4..c6993c3 100755
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepRPObject.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepRPObject.java
@@ -112,11 +112,6 @@
     void setOptionalTlv(LinkedList<PcepValueType> llOptionalTlv);
 
     /**
-     * Prints attributes of RP object.
-     */
-    void print();
-
-    /**
      * Writes the RP Object into channel buffer.
      *
      * @param bb channel buffer
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepRroObject.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepRroObject.java
index 7a7d299..928ce1a 100755
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepRroObject.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepRroObject.java
@@ -42,11 +42,6 @@
     void setSubObjects(LinkedList<PcepValueType> llSubObjects);
 
     /**
-     * Prints attributes of RRO object.
-     */
-    void print();
-
-    /**
      * Writes the RRO Object into channel buffer.
      *
      * @param bb channel buffer
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepSrpObject.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepSrpObject.java
index 1d6f5be..e4816ef 100755
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepSrpObject.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepSrpObject.java
@@ -71,11 +71,6 @@
     LinkedList<PcepValueType> getOptionalTlv();
 
     /**
-     * Prints attributes of SRP object.
-     */
-    void print();
-
-    /**
      * Writes the SRP Object into channel buffer.
      *
      * @param bb channel buffer
@@ -172,6 +167,5 @@
          * @return Builder by setting I flag
          */
         Builder setIFlag(boolean value);
-
     }
 }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepStateReport.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepStateReport.java
index 2815f4a..688440e 100755
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepStateReport.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepStateReport.java
@@ -102,12 +102,6 @@
          * @throws PcepParseException when mandatory object is not set
          */
         int write(ChannelBuffer bb) throws PcepParseException;
-
-        /***
-         * Prints the attribute of PCEP Message Path.
-         */
-        void print();
-
     }
 
     /**
@@ -153,11 +147,6 @@
     void setMsgPath(PcepMsgPath msgPath);
 
     /**
-     * Prints the attribute of PCEP state report.
-     */
-    public void print();
-
-    /**
      * Builder interface with get and set functions to build PcepStateReport.
      */
     public interface Builder {
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepTEObject.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepTEObject.java
index 100cd61..21f6c71 100755
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepTEObject.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepTEObject.java
@@ -112,11 +112,6 @@
     void setOptionalTlv(LinkedList<PcepValueType> llOptionalTlv);
 
     /**
-     * Prints attributes of TE object.
-     */
-    void print();
-
-    /**
      * Writes the TE Object into channel buffer.
      *
      * @param bb channel buffer
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepUpdateRequest.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepUpdateRequest.java
index 120616b..8d1c89e 100755
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepUpdateRequest.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepUpdateRequest.java
@@ -18,7 +18,6 @@
 
 import org.onosproject.pcepio.exceptions.PcepParseException;
 
-
 /**
  * Abstraction of an entity providing PCEP Update Request List.
  */
@@ -67,11 +66,6 @@
     void setMsgPath(PcepMsgPath msgPath);
 
     /**
-     * Prints the attributes of PCEP Update Request.
-     */
-    void print();
-
-    /**
      * Builder interface with get and set functions to build PcepUpdateRequest.
      */
     interface Builder {
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcInitiatedLspRequestVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcInitiatedLspRequestVer1.java
index f035914..970c197 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcInitiatedLspRequestVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcInitiatedLspRequestVer1.java
@@ -276,47 +276,21 @@
             this.bIsPcepAttributeSet = true;
             return this;
         }
-
-    }
-
-    @Override
-    public void print() {
-
-        log.debug("     PC-INITIATED LSP INITIATION REQUEST");
-        srpObject.print();
-        lspObject.print();
-        //if PC initiate then print end point and ero object [pcepattribute].
-        if (endPointsObject instanceof PcepEndPointsObject) {
-            endPointsObject.print();
-        }
-
-        if (eroObject instanceof PcepEroObject) {
-            eroObject.print();
-        }
-
-        if (pcepAttribute instanceof PcepAttribute) {
-            pcepAttribute.print();
-        }
     }
 
     @Override
     public String toString() {
         ToStringHelper toStrHelper = MoreObjects.toStringHelper(getClass());
-        toStrHelper
-        .add("SRP Object", srpObject)
-        .add("LSP object", lspObject);
+        toStrHelper.add("SrpObject", srpObject).add("LspObject", lspObject);
 
         if (endPointsObject instanceof PcepEndPointsObject) {
-            toStrHelper
-            .add("End Point Object", endPointsObject);
+            toStrHelper.add("EndPointObject", endPointsObject);
         }
         if (eroObject instanceof PcepEroObject) {
-            toStrHelper
-            .add("ERO Object", eroObject);
+            toStrHelper.add("EroObject", eroObject);
         }
         if (pcepAttribute instanceof PcepAttribute) {
-            toStrHelper
-            .add("Pcep Attribute", pcepAttribute);
+            toStrHelper.add("PcepAttribute", pcepAttribute);
         }
         return toStrHelper.toString();
     }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepAttributeVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepAttributeVer1.java
index e6215f9..f88e876 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepAttributeVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepAttributeVer1.java
@@ -421,48 +421,20 @@
     }
 
     @Override
-    public void print() {
-
-        log.debug("ATTRIBUTE LIST");
-        if (lspaObject instanceof PcepLspaObject) {
-            lspaObject.print();
-        }
-
-        if (bandwidthObject instanceof PcepBandwidthObject) {
-            bandwidthObject.print();
-        }
-
-        if (llMetricList != null) {
-            log.debug("METRIC LIST");
-            ListIterator<PcepMetricObject> listIterator = llMetricList.listIterator();
-            while (listIterator.hasNext()) {
-                listIterator.next().print();
-            }
-        }
-        if (iroObject instanceof PcepIroObject) {
-            iroObject.print();
-        }
-    }
-
-    @Override
     public String toString() {
         ToStringHelper toStrHelper = MoreObjects.toStringHelper(getClass());
 
         if (lspaObject instanceof PcepLspaObject) {
-            toStrHelper
-            .add("PCEP lspa Object", lspaObject);
+            toStrHelper.add("lspaObject", lspaObject);
         }
         if (bandwidthObject instanceof PcepBandwidthObject) {
-            toStrHelper
-            .add("bandwidth Object", bandwidthObject);
+            toStrHelper.add("bandwidthObject", bandwidthObject);
         }
         if (llMetricList instanceof PcepMetricObject) {
-            toStrHelper
-            .add("Pcep Metric object List", llMetricList);
+            toStrHelper.add("MetricObjectList", llMetricList);
         }
         if (iroObject instanceof PcepIroObject) {
-            toStrHelper
-            .add("iro Object", iroObject);
+            toStrHelper.add("IroObject", iroObject);
         }
         return toStrHelper.toString();
     }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepBandwidthObjectVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepBandwidthObjectVer1.java
index f46ff72..ac34444 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepBandwidthObjectVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepBandwidthObjectVer1.java
@@ -225,18 +225,8 @@
     }
 
     @Override
-    public void print() {
-
-        log.debug("BANDWIDTH OBJECT");
-        bandwidthObjHeader.print();
-        log.debug("Bandwidth: " + iBandwidth);
-    }
-
-    @Override
     public String toString() {
-        return MoreObjects.toStringHelper(getClass())
-                .add("bandwidth Object Header", bandwidthObjHeader)
-                .add("Bandwidth", iBandwidth)
-                .toString();
+        return MoreObjects.toStringHelper(getClass()).add("BandwidthObjectHeader", bandwidthObjHeader)
+                .add("Bandwidth", iBandwidth).toString();
     }
 }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepCloseMsgVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepCloseMsgVer1.java
index 54ed78f..040a014 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepCloseMsgVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepCloseMsgVer1.java
@@ -157,7 +157,7 @@
         private PcepObjectHeader closeObjHeader;
         private boolean bIsReasonSet = false;
         private byte yReason;
-        LinkedList<PcepValueType> llOptionalTlv = new LinkedList<PcepValueType>();
+        private LinkedList<PcepValueType> llOptionalTlv = new LinkedList<PcepValueType>();
 
         private boolean bIsPFlagSet = false;
         private boolean bPFlag;
@@ -333,24 +333,8 @@
     }
 
     @Override
-    public void print() {
-        log.debug("CLOSE MESSAGE");
-        closeObjHeader.print();
-        int x = yReason & 0xFF;
-        log.debug("Reason: " + x);
-        log.debug("OPTINAL TLV:");
-        ListIterator<PcepValueType> listIterator = llOptionalTlv.listIterator();
-        while (listIterator.hasNext()) {
-            listIterator.next().print();
-        }
-    }
-
-    @Override
     public String toString() {
-        return MoreObjects.toStringHelper(getClass())
-                .add("close Object Header", closeObjHeader)
-                .add("Reason", yReason)
-                .add("Optional Tlv list", llOptionalTlv)
-                .toString();
+        return MoreObjects.toStringHelper(getClass()).add("closeObjectHeader", closeObjHeader).add("Reason", yReason)
+                .add("OptionalTlvlist", llOptionalTlv).toString();
     }
 }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepEndPointsObjectVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepEndPointsObjectVer1.java
index d57d35b..cce278e 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepEndPointsObjectVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepEndPointsObjectVer1.java
@@ -241,28 +241,12 @@
             this.bIsIFlagSet = true;
             return this;
         }
-
-    }
-
-    @Override
-    public void print() {
-
-        log.debug("ENDPOINT OBJECT");
-        long lTemp;
-        lTemp = sourceIpAddress & 0xFFFFFFFF;
-        String str = "Source IP Address: " + lTemp;
-        log.debug(str);
-        lTemp = destIpAddress & 0xFFFFFFFF;
-        str = "destination IP Address: " + lTemp;
-        log.debug(str);
     }
 
     @Override
     public String toString() {
-        return MoreObjects.toStringHelper(getClass())
-                .add("sourceIpAddress", sourceIpAddress)
-                .add("destIpAddress", destIpAddress)
-                .toString();
+        return MoreObjects.toStringHelper(getClass()).add("sourceIpAddress", sourceIpAddress)
+                .add("destIpAddress", destIpAddress).toString();
     }
 
 }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepEroObjectVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepEroObjectVer1.java
index 586547e..b45a0c2 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepEroObjectVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepEroObjectVer1.java
@@ -393,26 +393,11 @@
             this.bIsIFlagSet = true;
             return this;
         }
-
-    }
-
-    @Override
-    public void print() {
-
-        log.debug("ERO OBJECT");
-        eroObjHeader.print();
-        log.debug("SUBOBJECTS:");
-        ListIterator<PcepValueType> listIterator = llSubObjects.listIterator();
-        while (listIterator.hasNext()) {
-            listIterator.next().print();
-        }
     }
 
     @Override
     public String toString() {
-        return MoreObjects.toStringHelper(getClass())
-                .add("ero obj Header", eroObjHeader)
-                .add("Sub-Objects", llSubObjects)
+        return MoreObjects.toStringHelper(getClass()).add("EroObjHeader", eroObjHeader).add("SubObjects", llSubObjects)
                 .toString();
     }
 }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepFactoryVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepFactoryVer1.java
index 6f4b2b2..4d50c70 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepFactoryVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepFactoryVer1.java
@@ -31,7 +31,6 @@
 import org.onosproject.pcepio.protocol.PcepMessageReader;
 import org.onosproject.pcepio.protocol.PcepMetricObject;
 import org.onosproject.pcepio.protocol.PcepMsgPath;
-
 import org.onosproject.pcepio.protocol.PcepSrpObject;
 import org.onosproject.pcepio.protocol.PcepUpdateMsg;
 import org.onosproject.pcepio.protocol.PcepUpdateRequest;
@@ -210,4 +209,16 @@
         return null;
     }
 
+    @Override
+    public org.onosproject.pcepio.protocol.PcepLabelRangeObject.Builder buildPcepLabelRangeObject() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public org.onosproject.pcepio.protocol.PcepLabelRangeResvMsg.Builder buildPcepLabelRangeResvMsg() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
 }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepInitiateMsgVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepInitiateMsgVer1.java
index 7392370..c571d25 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepInitiateMsgVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepInitiateMsgVer1.java
@@ -316,19 +316,8 @@
     }
 
     @Override
-    public void print() {
-
-        log.debug("PCEP INITIATE MESSAGE");
-        ListIterator<PcInitiatedLspRequest> listIterator = llPcInitiatedLspRequestList.listIterator();
-        while (listIterator.hasNext()) {
-            listIterator.next().print();
-        }
-    }
-
-    @Override
     public String toString() {
-        return MoreObjects.toStringHelper(getClass())
-                .add("PC initiaited lsp request list", llPcInitiatedLspRequestList)
+        return MoreObjects.toStringHelper(getClass()).add("PcInitiaitedLspRequestList", llPcInitiatedLspRequestList)
                 .toString();
     }
 }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepIroObjectVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepIroObjectVer1.java
index cd9f906..d8c7b19 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepIroObjectVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepIroObjectVer1.java
@@ -282,25 +282,11 @@
             this.bIsIFlagSet = true;
             return this;
         }
-
-    }
-
-    @Override
-    public void print() {
-        log.debug("IRO OBJECT");
-        iroObjHeader.print();
-        log.debug("SUBOBJECTS:");
-        ListIterator<PcepValueType> listIterator = llSubObjects.listIterator();
-        while (listIterator.hasNext()) {
-            listIterator.next().print();
-        }
     }
 
     @Override
     public String toString() {
-        return MoreObjects.toStringHelper(getClass())
-                .add("IRO object header", iroObjHeader)
-                .add("List of sub object", llSubObjects)
-                .toString();
+        return MoreObjects.toStringHelper(getClass()).add("IroObjectHeader", iroObjHeader)
+                .add("SubObjects", llSubObjects).toString();
     }
 }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepKeepaliveMsgVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepKeepaliveMsgVer1.java
index f0ff5cf..404f5b8 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepKeepaliveMsgVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepKeepaliveMsgVer1.java
@@ -26,6 +26,8 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.google.common.base.MoreObjects;
+
 class PcepKeepaliveMsgVer1 implements PcepKeepaliveMsg {
 
     /*
@@ -134,7 +136,7 @@
     }
 
     @Override
-    public void print() {
-        log.debug("KEEPALIVE MESSAGE");
+    public String toString() {
+        return MoreObjects.toStringHelper(getClass()).toString();
     }
 }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLspObjectVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLspObjectVer1.java
index 137e81a..3a16318 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLspObjectVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLspObjectVer1.java
@@ -555,39 +555,9 @@
     }
 
     @Override
-    public void print() {
-
-        log.debug("LSP OBJECT");
-        long lTemp = iPlspId & 0xFFFFFFFF;
-        log.debug("PLSP Id: " + lTemp);
-        lTemp = yOFlag & 0xFFFF;
-        log.debug("O Flag: " + lTemp);
-        lTemp = (bAFlag) ? 1 : 0;
-        log.debug("A Flag: " + lTemp);
-        lTemp = (bRFlag) ? 1 : 0;
-        log.debug("R Flag: " + lTemp);
-        lTemp = (bSFlag) ? 1 : 0;
-        log.debug("S Flag: " + lTemp);
-        lTemp = (bDFlag) ? 1 : 0;
-        log.debug("D Flag: " + lTemp);
-
-        log.debug("OPTIONAL TLV:");
-        ListIterator<PcepValueType> listIterator = llOptionalTlv.listIterator();
-        while (listIterator.hasNext()) {
-            listIterator.next().print();
-        }
-    }
-
-    @Override
     public String toString() {
-        return MoreObjects.toStringHelper(getClass())
-                .add("Plsp ID value", iPlspId)
-                .add("o flag", yOFlag)
-                .add("A flag", bAFlag)
-                .add("R flag", bRFlag)
-                .add("S flag", bSFlag)
-                .add("D flag", bDFlag)
-                .add("List of optional tlv", llOptionalTlv)
-                .toString();
+        return MoreObjects.toStringHelper(getClass()).add("PlspIDValue", iPlspId).add("OFlag", yOFlag)
+                .add("AFlag", bAFlag).add("RFlag", bRFlag).add("SFlag", bSFlag).add("DFlag", bDFlag)
+                .add("OptionalTlvList", llOptionalTlv).toString();
     }
 }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLspaObjectVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLspaObjectVer1.java
index 4db1f9e..0bec884 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLspaObjectVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLspaObjectVer1.java
@@ -514,39 +514,9 @@
     }
 
     @Override
-    public void print() {
-        log.debug("LSPA OBJECT");
-        long lTemp = flags & 0xFF;
-        lTemp = (bLFlag) ? 1 : 0;
-        log.debug("l Flag: " + lTemp);
-        lTemp = cSetupPriority & 0xFF;
-        log.debug("SetupPriority: " + lTemp);
-        lTemp = cHoldPriority & 0xFF;
-        log.debug("HoldPriority: " + lTemp);
-        lTemp = iIncludeAll & 0xFFFFFFFF;
-        log.debug("IncludeAll: " + lTemp);
-        lTemp = iIncludeAny & 0xFFFFFFFF;
-        log.debug("IncludeAny: " + lTemp);
-        lTemp = iExcludeAny & 0xFFFFFFFF;
-        log.debug("iExcludeAny: " + lTemp);
-
-        log.debug("OPTIONAL TLV:");
-        ListIterator<PcepValueType> listIterator = llOptionalTlv.listIterator();
-        while (listIterator.hasNext()) {
-            listIterator.next().print();
-        }
-    }
-
-    @Override
     public String toString() {
-        return MoreObjects.toStringHelper(getClass())
-                .add("L flag", bLFlag)
-                .add("Setup priority", cSetupPriority)
-                .add("hold priority", cHoldPriority)
-                .add("Include all", iIncludeAll)
-                .add("Include any", iIncludeAny)
-                .add("Exclude any", iExcludeAny)
-                .add("List of optional tlv", llOptionalTlv)
-                .toString();
+        return MoreObjects.toStringHelper(getClass()).add("LFlag", bLFlag).add("SetupPriority", cSetupPriority)
+                .add("HoldPriority", cHoldPriority).add("IncludeAll", iIncludeAll).add("IncludeAny", iIncludeAny)
+                .add("ExcludeAny", iExcludeAny).add("OptionalTlvList", llOptionalTlv).toString();
     }
 }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepMetricObjectVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepMetricObjectVer1.java
index c6c081a..7f946c7 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepMetricObjectVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepMetricObjectVer1.java
@@ -362,26 +362,8 @@
     }
 
     @Override
-    public void print() {
-
-        log.debug("METRIC OBJECT");
-        long lTemp = iMetricVal & 0xFFFFFFFF;
-        log.debug("iMetricVal: " + lTemp);
-        lTemp = (bBFlag) ? 1 : 0;
-        log.debug("B Flag: " + lTemp);
-        lTemp = (bCFlag) ? 1 : 0;
-        log.debug("C Flag: " + lTemp);
-        lTemp = bType & 0xFF;
-        log.debug("Type: " + lTemp);
-    }
-
-    @Override
     public String toString() {
-        return MoreObjects.toStringHelper(getClass())
-                .add("Metric value", iMetricVal)
-                .add("B flag", bBFlag)
-                .add("C flag", bCFlag)
-                .add("B-type", bType)
-                .toString();
+        return MoreObjects.toStringHelper(getClass()).add("MetricValue", iMetricVal).add("BFlag", bBFlag)
+                .add("CFlag", bCFlag).add("BType", bType).toString();
     }
 }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepMsgPathVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepMsgPathVer1.java
index 5334b5f..c04cc81 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepMsgPathVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepMsgPathVer1.java
@@ -163,18 +163,8 @@
     }
 
     @Override
-    public void print() {
-
-        log.debug("PcepMsgPath");
-        eroObj.print();
-        attrList.print();
-    }
-
-    @Override
     public String toString() {
-        return MoreObjects.toStringHelper(getClass())
-                .add("ERO object", eroObj)
-                .add("Attribute list", attrList)
+        return MoreObjects.toStringHelper(getClass()).add("EroObject", eroObj).add("AttributeList", attrList)
                 .toString();
     }
 }
\ No newline at end of file
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepSrpObjectVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepSrpObjectVer1.java
index 58aac18..5095e71 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepSrpObjectVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepSrpObjectVer1.java
@@ -379,25 +379,8 @@
     }
 
     @Override
-    public void print() {
-
-        log.debug("SRP OBJECT");
-        long lTemp = (bRFlag) ? 1 : 0;
-        log.debug("r Flag: " + lTemp);
-        log.debug("SrpID: " + srpId);
-
-        log.debug("OPTIONAL TLV");
-        ListIterator<PcepValueType> listIterator = llOptionalTlv.listIterator();
-        while (listIterator.hasNext()) {
-            listIterator.next().print();
-        }
-    }
-    @Override
     public String toString() {
-        return MoreObjects.toStringHelper(getClass())
-                .add("R flag", bRFlag)
-                .add("SRP ID", srpId)
-                .add("Optional tlv list", llOptionalTlv)
-                .toString();
+        return MoreObjects.toStringHelper(getClass()).add("RFlag", bRFlag).add("SRPID", srpId)
+                .add("OptionalTlvList", llOptionalTlv).toString();
     }
 }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepUpdateMsgVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepUpdateMsgVer1.java
index 3a4e2bd..b2ace4f 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepUpdateMsgVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepUpdateMsgVer1.java
@@ -290,19 +290,7 @@
     }
 
     @Override
-    public void print() {
-
-        log.debug("PCEP UPDATE MESSAGE");
-        ListIterator<PcepUpdateRequest> listIterator = llUpdateRequestList.listIterator();
-        while (listIterator.hasNext()) {
-            listIterator.next().print();
-        }
-    }
-
-    @Override
     public String toString() {
-        return MoreObjects.toStringHelper(getClass())
-                .add("Update Request list", llUpdateRequestList)
-                .toString();
+        return MoreObjects.toStringHelper(getClass()).add("UpdateRequestList", llUpdateRequestList).toString();
     }
 }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepUpdateRequestVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepUpdateRequestVer1.java
index 71b98dd..7993694 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepUpdateRequestVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepUpdateRequestVer1.java
@@ -189,19 +189,8 @@
     }
 
     @Override
-    public void print() {
-
-        log.debug("UPDATE REQUEST");
-        srpObject.print();
-        lspObject.print();
-    }
-
-    @Override
     public String toString() {
-        return MoreObjects.toStringHelper(getClass())
-                .add("SRP Object", srpObject)
-                .add("LSP object", lspObject)
-                .add("message path object", msgPath)
-                .toString();
+        return MoreObjects.toStringHelper(getClass()).add("SrpObject", srpObject).add("LspObject", lspObject)
+                .add("MsgPath", msgPath).toString();
     }
 }
\ No newline at end of file
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/AutonomousSystemTlv.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/AutonomousSystemTlv.java
index f0b8120..bfe6f44 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/AutonomousSystemTlv.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/AutonomousSystemTlv.java
@@ -25,7 +25,7 @@
 import com.google.common.base.MoreObjects;
 
 /**
- * Provides Autonomous System Tlv which contains opaque value (32 Bit AS Number).
+ * Provides Autonomous-System-Tlv which contains opaque value (32 Bit AS Number).
  */
 public class AutonomousSystemTlv implements PcepValueType {
 
@@ -47,28 +47,28 @@
     private final int rawValue;
 
     /**
-     * constructor to initialize Autonomous system tlv value.
+     * Constructor to initialize rawValue.
      *
-     * @param rawValue value of Autonomous system tlv
+     * @param rawValue Autonomous-System-Tlv
      */
     public AutonomousSystemTlv(int rawValue) {
         this.rawValue = rawValue;
     }
 
     /**
-     * To create instance of AutonomousSystemTlv.
+     * Returns newly created AutonomousSystemTlv object.
      *
-     * @param raw opaque value ofc 32 Bit AS Number
-     * @return object of AutonomousSystemTlv
+     * @param raw value of opaque.
+     * @return object of Autonomous-System-Tlv
      */
     public static AutonomousSystemTlv of(final int raw) {
         return new AutonomousSystemTlv(raw);
     }
 
     /**
-     * Returns opaque value of 32 Bit AS Number.
+     * Returns opaque value.
      *
-     * @return int value of rawValue
+     * @return rawValue opaque value.
      */
     public int getInt() {
         return rawValue;
@@ -118,22 +118,14 @@
     /**
      * Reads the channel buffer and returns object of AutonomousSystemTlv.
      *
-     * @param c type of channel buffer
-     * @return object of AutonomousSystemTlv
+     * @param c input channel buffer
+     * @return object of Autonomous-System-Tlv
      */
     public static AutonomousSystemTlv read(ChannelBuffer c) {
         return AutonomousSystemTlv.of(c.readInt());
     }
 
     @Override
-    public void print() {
-        log.debug("AutonomousSystemTlv");
-        log.debug("Type: " + TYPE);
-        log.debug("Length: " + LENGTH);
-        log.debug("Value: " + rawValue);
-    }
-
-    @Override
     public String toString() {
         return MoreObjects.toStringHelper(getClass())
                 .add("TYPE", TYPE)
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/ErrorObjListWithOpen.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/ErrorObjListWithOpen.java
old mode 100755
new mode 100644
index df4ebbc..a183b55
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/ErrorObjListWithOpen.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/ErrorObjListWithOpen.java
@@ -13,7 +13,7 @@
 import com.google.common.base.MoreObjects;
 import com.google.common.base.MoreObjects.ToStringHelper;
 
-/*
+/**
  * Provide the error object list with open object.
  */
 public class ErrorObjListWithOpen {
@@ -22,14 +22,14 @@
     // openObject is optional
     private PcepOpenObject openObject;
     // flag to check if open object is set or not
-    public boolean isOpenObjectSet;
+    private boolean isOpenObjectSet;
     protected static final Logger log = LoggerFactory.getLogger(ErrorObjListWithOpen.class);
 
-    /*
-     * constructor to initialize errObj,openObj.
+    /**
+     * Constructor to initialize Error and OPEN object.
      *
-     * @param errObj error object list
-     * @param openObj open object
+     * @param errObj ERROR object list
+     * @param openObj OPEN object
      */
     public ErrorObjListWithOpen(LinkedList<PcepErrorObject> errObj, PcepOpenObject openObj) {
         this.llerrorObjList = errObj;
@@ -41,10 +41,10 @@
         }
     }
 
-    /*
-     * constructor to initialize errObj.
+    /**
+     * Constructor to initialize ERROR Object.
      *
-     * @param errObj error object list
+     * @param errObj ERROR Object list
      */
     public ErrorObjListWithOpen(LinkedList<PcepErrorObject> errObj) {
         this.llerrorObjList = errObj;
@@ -53,9 +53,9 @@
     }
 
     /**
-     * Returns error type.
+     * Return list of Error Types.
      *
-     * @return error type
+     * @return error types list
      */
     public LinkedList<Integer> getErrorType() {
         LinkedList<Integer> errorType = new LinkedList<Integer>();
@@ -73,9 +73,9 @@
     }
 
     /**
-     * Returns error value.
+     * Return list of Error Values.
      *
-     * @return error value
+     * @return error values list
      */
     public LinkedList<Integer> getErrorValue() {
         LinkedList<Integer> errorValue = new LinkedList<Integer>();
@@ -87,16 +87,15 @@
                 errorObj = errObjListIterator.next();
                 error = errorObj.getErrorValue();
                 errorValue.add(error);
-
             }
         }
         return errorValue;
     }
 
     /**
-     * Checks whether error object list is empty or not.
+     * Checks whether ERROR Object list is empty or not.
      *
-     * @return whether error object list is empty or not
+     * @return true if ERROR Object list is empty otherwise false
      */
     public boolean isErrorObjListWithOpenPresent() {
         // ( <error-obj-list> [<Open>]
@@ -107,62 +106,44 @@
     /**
      * Write Error Object List and Open Object to channel buffer.
      *
-     * @param bb of type channel buffer
+     * @param cb output channel buffer
+     * @return length of written Error object list with open
      * @throws PcepParseException when mandatory fields are not set
      */
-    public int write(ChannelBuffer bb) throws PcepParseException {
-        int iLenStartIndex = bb.writerIndex();
+    public int write(ChannelBuffer cb) throws PcepParseException {
+        int iLenStartIndex = cb.writerIndex();
         boolean bIsErrObjListFound = false;
 
         //<error-obj-list> is mandatory , if not present throw exception.
         if (llerrorObjList != null) {
             ListIterator<PcepErrorObject> errObjListIterator = llerrorObjList.listIterator();
             while (errObjListIterator.hasNext()) {
-                errObjListIterator.next().write(bb);
+                errObjListIterator.next().write(cb);
                 bIsErrObjListFound = true;
             }
         }
 
         if (!bIsErrObjListFound) {
-            throw new PcepParseException("Error: [ErrorObjListWithOpen::write] <error-obj-list> is mandatory.");
+            throw new PcepParseException("<error-obj-list> is mandatory.");
         }
 
         //Open Object is optional , if present write.
         if (openObject != null) {
-            openObject.write(bb);
+            openObject.write(cb);
         }
 
-        return bb.writerIndex() - iLenStartIndex;
-    }
-
-    /**
-     * Prints the attributes of ErrorObject List with open Object.
-     */
-    public void print() {
-        log.debug("ErrorObjListWithOpen:");
-        ListIterator<PcepErrorObject> pcepErrorObjIterator = llerrorObjList.listIterator();
-        log.debug("<error-obj-list> :");
-        while (pcepErrorObjIterator.hasNext()) {
-            pcepErrorObjIterator.next().print();
-        }
-
-        log.debug("OpenObject:");
-        if (openObject != null) {
-            openObject.print();
-        }
+        return cb.writerIndex() - iLenStartIndex;
     }
 
     @Override
     public String toString() {
         ToStringHelper toStrHelper = MoreObjects.toStringHelper(getClass());
 
-        if (openObject == null) {
-            toStrHelper
-            .add("error Obj List", llerrorObjList);
-        } else {
-            toStrHelper
-            .add("error Obj List", llerrorObjList)
-            .add("open Object", openObject);
+        toStrHelper.add("ErrorObjList", llerrorObjList);
+
+        // OPEN Object is optional
+        if (openObject != null) {
+            toStrHelper.add("Open", openObject);
         }
         return toStrHelper.toString();
     }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/IPv4SubObject.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/IPv4SubObject.java
index 6ee82d4..b0576fe 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/IPv4SubObject.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/IPv4SubObject.java
@@ -169,21 +169,12 @@
     }
 
     @Override
-    public void print() {
-        log.debug("IPv4SubObject");
-        log.debug("Type: " + TYPE);
-        log.debug("Length: " + LENGTH);
-        log.debug("IPv4 address: " + String.format("%08X", ipAddress));
-        log.debug("Prefix Length: " + prefixLen);
-    }
-
-    @Override
     public String toString() {
         return MoreObjects.toStringHelper(getClass())
                 .add("Type", TYPE)
                 .add("Length", LENGTH)
-                .add("IPv4  Address", ipAddress)
-                .add("Prefix Length", prefixLen)
+                .add("IPv4Address", ipAddress)
+                .add("PrefixLength", prefixLen)
                 .toString();
     }
 }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/IPv6SubObject.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/IPv6SubObject.java
index 3be5e9e..ecd6132 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/IPv6SubObject.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/IPv6SubObject.java
@@ -24,6 +24,7 @@
 import org.slf4j.LoggerFactory;
 
 import com.google.common.base.MoreObjects;
+import com.google.common.base.MoreObjects.ToStringHelper;
 
 /**
  * Provides IPv6 Sub Object.
@@ -204,25 +205,18 @@
     }
 
     @Override
-    public void print() {
-        log.debug("IPv6SubObject");
-        log.debug("Type: ", TYPE);
-        log.debug("Length: ", LENGTH);
-        if (null != rawValue) {
-            StringBuffer result = new StringBuffer();
-            for (byte b : rawValue) {
-                result.append(String.format("%02X ", b));
-            }
-            log.debug(result.toString());
-        }
-    }
-
-    @Override
     public String toString() {
-        return MoreObjects.toStringHelper(getClass())
-                .add("Type", TYPE)
-                .add("Length", LENGTH)
-                .add("IPv6  Address", rawValue)
-                .toString();
+        ToStringHelper toStrHelper = MoreObjects.toStringHelper(getClass());
+
+        toStrHelper.add("Type", TYPE);
+        toStrHelper.add("Length", LENGTH);
+
+        StringBuffer result = new StringBuffer();
+        for (byte b : rawValue) {
+            result.append(String.format("%02X ", b));
+        }
+        toStrHelper.add("Value", result);
+
+        return toStrHelper.toString();
     }
 }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PathKeySubObject.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PathKeySubObject.java
index 1a127c1..36f5c26 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PathKeySubObject.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PathKeySubObject.java
@@ -148,20 +148,12 @@
     }
 
     @Override
-    public void print() {
-        log.debug("PathKeySubObject");
-        log.debug("Type: " + TYPE);
-        log.debug("Length: " + LENGTH);
-        log.debug("Path Key: " + pathKey);
-        log.debug("PCEID: " + pceID);
-    }
-
-    @Override
     public String toString() {
         return MoreObjects.toStringHelper(getClass())
-                .add("Type", TYPE).add("Length", LENGTH)
-                .add("Path Key", pathKey)
-                .add("PCE ID", pceID)
+                .add("Type", TYPE)
+                .add("Length", LENGTH)
+                .add("PathKey", pathKey)
+                .add("PceID", pceID)
                 .toString();
     }
 }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepLabelDownload.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepLabelDownload.java
old mode 100755
new mode 100644
index ebecf19..45aadd9
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepLabelDownload.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepLabelDownload.java
@@ -1,7 +1,6 @@
 package org.onosproject.pcepio.types;
 
 import java.util.LinkedList;
-import java.util.ListIterator;
 
 import org.onosproject.pcepio.protocol.PcepLabelObject;
 import org.onosproject.pcepio.protocol.PcepLspObject;
@@ -36,7 +35,7 @@
     }
 
     /**
-     * Sets the Pcep Srp Object.
+     * Sets the Pcep SRP Object.
      *
      * @param srpobj PCEP SRP Object
      */
@@ -80,27 +79,9 @@
         this.llLabelList = llLabelList;
     }
 
-    /**
-     * Prints the attribute of PcepLableObject.
-     */
-    public void print() {
-        log.debug("LABEL DOWNLOAD:");
-        srpObject.print();
-        lspObject.print();
-
-        log.debug("label-list:");
-        ListIterator<PcepLabelObject> listIterator = llLabelList.listIterator();
-        while (listIterator.hasNext()) {
-            listIterator.next().print();
-        }
-    }
-
     @Override
     public String toString() {
-        return MoreObjects.toStringHelper(getClass())
-                .add("SRP object", srpObject)
-                .add("LSP object", lspObject)
-                .add("label object list", llLabelList)
-                .toString();
+        return MoreObjects.toStringHelper(getClass()).add("SrpObject", srpObject).add("LspObject", lspObject)
+                .add("LabelObjectList", llLabelList).toString();
     }
 }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepLabelMap.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepLabelMap.java
old mode 100755
new mode 100644
index 82be041..2d3a953
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepLabelMap.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepLabelMap.java
@@ -92,22 +92,12 @@
         this.labelObject = labelObject;
     }
 
-    /**
-     * Prints the attribute of PcepLabelMap.
-     */
-    public void print() {
-        log.debug("LABEL MAP:");
-        srpObject.print();
-        labelObject.print();
-        fecObject.print();
-    }
-
     @Override
     public String toString() {
         return MoreObjects.toStringHelper(getClass())
-                .add("SRP object", srpObject)
-                .add("Label object", labelObject)
-                .add("Fec object", fecObject)
+                .add("SrpObject", srpObject)
+                .add("LabelObject", labelObject)
+                .add("FecObject", fecObject)
                 .toString();
     }
 }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepNaiIpv4Adjacency.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepNaiIpv4Adjacency.java
index 06e99c9..df8858e 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepNaiIpv4Adjacency.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepNaiIpv4Adjacency.java
@@ -86,8 +86,8 @@
     @Override
     public String toString() {
         return MoreObjects.toStringHelper(getClass())
-                .add("local IPv4 Address", localIpv4Addr)
-                .add("remote IPv4 Address", remoteIpv4Addr)
+                .add("localIPv4Address", localIpv4Addr)
+                .add("remoteIPv4Address", remoteIpv4Addr)
                 .toString();
     }
 }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepNaiIpv4NodeId.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepNaiIpv4NodeId.java
index b8d9860..dc7a7d9 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepNaiIpv4NodeId.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepNaiIpv4NodeId.java
@@ -89,8 +89,6 @@
 
     @Override
     public String toString() {
-        return MoreObjects.toStringHelper(getClass())
-                .add("IPv4 Node Id", ipv4NodeId)
-                .toString();
+        return MoreObjects.toStringHelper(getClass()).add("IPv4NodeId", ipv4NodeId).toString();
     }
 }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepNaiIpv6Adjacency.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepNaiIpv6Adjacency.java
index 913520a..2b1a775 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepNaiIpv6Adjacency.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepNaiIpv6Adjacency.java
@@ -102,8 +102,8 @@
     @Override
     public String toString() {
         return MoreObjects.toStringHelper(getClass())
-                .add("local IPV6 address", localIpv6Addr)
-                .add("remote IPV6 address", remoteIpv6Addr)
+                .add("localIPV6Address", localIpv6Addr)
+                .add("remoteIPV6Address", remoteIpv6Addr)
                 .toString();
     }
 
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepNaiIpv6NodeId.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepNaiIpv6NodeId.java
index d5a5aa7..a181a34 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepNaiIpv6NodeId.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepNaiIpv6NodeId.java
@@ -82,8 +82,6 @@
 
     @Override
     public String toString() {
-        return MoreObjects.toStringHelper(getClass())
-                .add("IPV6 node ID", ipv6NodeId)
-                .toString();
+        return MoreObjects.toStringHelper(getClass()).add("IPV6NodeID", ipv6NodeId).toString();
     }
 }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepNaiUnnumberedAdjacencyIpv4.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepNaiUnnumberedAdjacencyIpv4.java
index 30da0c8..79099b5 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepNaiUnnumberedAdjacencyIpv4.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepNaiUnnumberedAdjacencyIpv4.java
@@ -104,10 +104,10 @@
     @Override
     public String toString() {
         return MoreObjects.toStringHelper(getClass())
-                .add("local Node Id", localNodeId)
-                .add("local Interface Id", localInterfaceId)
-                .add("remote Node Id", remoteNodeId)
-                .add("remote Interface Id:", remoteInterfaceId)
+                .add("localNodeId", localNodeId)
+                .add("localInterfaceId", localInterfaceId)
+                .add("remoteNodeId", remoteNodeId)
+                .add("remoteInterfaceId:", remoteInterfaceId)
                 .toString();
     }
 }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepObjectHeader.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepObjectHeader.java
old mode 100755
new mode 100644
index af43a77..ab3d396
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepObjectHeader.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepObjectHeader.java
@@ -68,6 +68,7 @@
      * @param bIFlag I flag
      * @param objLen PCEP object length
      */
+
     public PcepObjectHeader(byte objClass, byte objType, boolean bPFlag, boolean bIFlag, short objLen) {
         this.objClass = objClass;
         this.objType = objType;
@@ -169,12 +170,12 @@
     /**
      *  Writes Byte stream of PCEP object header to channel buffer.
      *
-     * @param bb of type channel buffer
+     * @param cb output channel buffer
      * @return objLenIndex object length index in channel buffer
      */
-    public int write(ChannelBuffer bb) {
+    public int write(ChannelBuffer cb) {
 
-        bb.writeByte(this.objClass);
+        cb.writeByte(this.objClass);
         byte temp = (byte) (this.objType << OBJECT_TYPE_SHIFT_VALUE);
         if (this.bPFlag) {
             temp = (byte) (temp | PFLAG_SET);
@@ -182,55 +183,38 @@
         if (this.bIFlag) {
             temp = (byte) (temp | IFLAG_SET);
         }
-        bb.writeByte(temp);
-        int objLenIndex = bb.writerIndex();
-        bb.writeShort((short) 0);
+        cb.writeByte(temp);
+        int objLenIndex = cb.writerIndex();
+        cb.writeShort((short) 0);
         return objLenIndex;
     }
 
     /**
      * Read from channel buffer and Returns PCEP Objects header.
      *
-     * @param bb of type channel buffer
+     * @param cb of type channel buffer
      * @return PCEP Object header
      */
-    public static PcepObjectHeader read(ChannelBuffer bb) {
+    public static PcepObjectHeader read(ChannelBuffer cb) {
 
         byte objClass;
         byte objType;
         boolean bPFlag;
         boolean bIFlag;
         short objLen;
-        objClass = bb.readByte();
-        byte temp = bb.readByte();
+        objClass = cb.readByte();
+        byte temp = cb.readByte();
         bIFlag = ((temp & IFLAG_SET) == IFLAG_SET) ? true : false;
         bPFlag = ((temp & PFLAG_SET) == PFLAG_SET) ? true : false;
         objType = (byte) (temp >> OBJECT_TYPE_SHIFT_VALUE);
-        objLen = bb.readShort();
+        objLen = cb.readShort();
         return new PcepObjectHeader(objClass, objType, bPFlag, bIFlag, objLen);
     }
 
-    /**
-     * Prints the Attributes of PCEP Object header.
-     */
-    public void print() {
-
-        log.debug("PcepObjectHeader");
-        log.debug("Object Class: " + objClass);
-        log.debug("Object Type: " + objType);
-        log.debug("Object Length: " + objLen);
-        log.debug("P flag: " + bPFlag);
-        log.debug("I flag: " + bIFlag);
-    }
-
     @Override
     public String toString() {
-        return MoreObjects.toStringHelper(getClass())
-                .add("Object class:", objClass)
-                .add("Object type:", objType)
-                .add("Object length:", objLen)
-                .add("P flag:", bPFlag)
-                .add("I flag:", bIFlag)
+        return MoreObjects.toStringHelper(getClass()).add("ObjectClass", objClass).add("ObjectType", objType)
+                .add("ObjectLength", objLen).add("PFlag", (bPFlag) ? 1 : 0).add("IFlag", (bIFlag) ? 1 : 0)
                 .toString();
     }
 }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepRsvpErrorSpec.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepRsvpErrorSpec.java
index fea1554..34e9e53 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepRsvpErrorSpec.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepRsvpErrorSpec.java
@@ -40,8 +40,4 @@
      * @return class type
      */
     byte getClassType();
-
-    @Override
-    String toString();
-
 }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepRsvpIpv4ErrorSpec.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepRsvpIpv4ErrorSpec.java
index 057ef6a..420392e 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepRsvpIpv4ErrorSpec.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepRsvpIpv4ErrorSpec.java
@@ -146,17 +146,12 @@
     }
 
     @Override
-    public void print() {
-        // TODO Auto-generated method stub
-    }
-
-    @Override
     public String toString() {
         return MoreObjects.toStringHelper(getClass())
-                .add("IPv4 Address:", ipv4Addr)
+                .add("IPv4Address:", ipv4Addr)
                 .add("flags:", flags)
-                .add("error Code:", errCode)
-                .add("error Value:", errValue)
+                .add("errorCode:", errCode)
+                .add("errorValue:", errValue)
                 .toString();
     }
 }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepRsvpIpv6ErrorSpec.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepRsvpIpv6ErrorSpec.java
index 34d6049..7eade7a 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepRsvpIpv6ErrorSpec.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepRsvpIpv6ErrorSpec.java
@@ -136,17 +136,12 @@
     }
 
     @Override
-    public void print() {
-        // TODO Auto-generated method stub
-    }
-
-    @Override
     public String toString() {
         return MoreObjects.toStringHelper(getClass())
-                .add("IPv6 Address:", ipv6Addr)
+                .add("IPv6Address:", ipv6Addr)
                 .add("flags:", flags)
-                .add("error Code:", errCode)
-                .add("error Value:", errValue)
+                .add("errorCode:", errCode)
+                .add("errorValue:", errValue)
                 .toString();
     }
 }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepRsvpObjectHeader.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepRsvpObjectHeader.java
old mode 100755
new mode 100644
index 6de06e1..0455941
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepRsvpObjectHeader.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepRsvpObjectHeader.java
@@ -52,7 +52,7 @@
     private short objLen;
 
     /**
-     * Constructor to initialize class num , length and type.
+     * Constructor to initialize class num, length and type.
      *
      * @param objClassNum object class number
      * @param objClassType object class type
@@ -65,7 +65,7 @@
     }
 
     /**
-     * Sets the Class num.
+     * Sets the Class-Num.
      *
      * @param value object class number
      */
@@ -121,52 +121,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 in channel buffer
      */
-    public int write(ChannelBuffer bb) {
-        int iLenStartIndex = bb.writerIndex();
-        bb.writeShort((short) 0);
-        bb.writeByte(this.objClassNum);
-        bb.writeByte(this.objClassType);
-        return bb.writerIndex() - iLenStartIndex;
+    public int write(ChannelBuffer cb) {
+        int iLenStartIndex = cb.writerIndex();
+        cb.writeShort((short) 0);
+        cb.writeByte(this.objClassNum);
+        cb.writeByte(this.objClassType);
+        return cb.writerIndex() - iLenStartIndex;
     }
 
     /**
      * Reads the PcepRsvpObjectHeader.
      *
-     * @param bb of type channel buffer
+     * @param cb input channel buffer
      * @return PcepRsvpObjectHeader
      */
-    public static PcepRsvpObjectHeader read(ChannelBuffer bb) {
-        log.debug("PcepRsvpObjectHeader ::read ");
+    public static PcepRsvpObjectHeader read(ChannelBuffer cb) {
+        log.debug("read ");
         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 PcepRsvpObjectHeader(objClassNum, objClassType, objLen);
     }
 
-    /**
-     * Prints the attribute of PcepRsvpObjectHeader.
-     */
-    public void print() {
-
-        log.debug("PcepObjectHeader");
-        log.debug("Object Class-Num: " + objClassNum);
-        log.debug("Object C-Type: " + objClassType);
-        log.debug("Object Length: " + objLen);
-    }
-
     @Override
     public String toString() {
-        return MoreObjects.toStringHelper(getClass())
-                .add("Object Class-Num: " , objClassNum)
-                .add("Object C-Type: " , objClassType)
-                .add("Object Length: " , 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/PcepRsvpSpecObjHeader.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepRsvpSpecObjHeader.java
index b39bfde..9d9cf73 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
@@ -144,22 +144,12 @@
         return new PcepRsvpSpecObjHeader(objLen, objClassNum, objClassType);
     }
 
-    /**
-     * Prints the attribute of PcepRsvpObjectHeader.
-     */
-    public void print() {
-
-        log.debug("PcepObjectHeader");
-        log.debug("Object Class-Num: " + objClassNum);
-        log.debug("Object C-Type: " + objClassType);
-        log.debug("Object Length: " + objLen);
-    }
     @Override
     public String toString() {
         return MoreObjects.toStringHelper(getClass())
-                .add("Object Class-Num: " , objClassNum)
-                .add("Object C-Type: " , objClassType)
-                .add("Object Length: " , objLen)
+                .add("ObjectClassNum: " , objClassNum)
+                .add("ObjectCType: " , objClassType)
+                .add("ObjectLength: " , objLen)
                 .toString();
     }
 }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepRsvpUserErrorSpec.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepRsvpUserErrorSpec.java
index 3dd036d..1a0419c 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepRsvpUserErrorSpec.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepRsvpUserErrorSpec.java
@@ -204,19 +204,14 @@
     }
 
     @Override
-    public void print() {
-        // TODO Auto-generated method stub
-    }
-
-    @Override
     public String toString() {
         return MoreObjects.toStringHelper(getClass())
-                .add("enterprise Number:", enterpriseNum)
-                .add("sub Organization:", subOrg)
-                .add("err Desc Length:", errDescLen)
-                .add("user Error Value:", userErrorValue)
-                .add("err Desc:", errDesc)
-                .add("Rsvp User Spec Sub Object:", llRsvpUserSpecSubObj)
+                .add("enterpriseNumber:", enterpriseNum)
+                .add("subOrganization:", subOrg)
+                .add("errDescLength:", errDescLen)
+                .add("userErrorValue:", userErrorValue)
+                .add("errDesc:", errDesc)
+                .add("RsvpUserSpecSubObject:", llRsvpUserSpecSubObj)
                 .toString();
     }
 }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepValueType.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepValueType.java
index 9d3599b..cc23a37 100755
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepValueType.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepValueType.java
@@ -52,9 +52,4 @@
      * @return length of bytes written to channel buffer
      */
     public int write(ChannelBuffer bb);
-
-    /**
-     * Prints the Attributes of PCEP Message.
-     */
-    public void print();
 }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/SrEroSubObject.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/SrEroSubObject.java
index 52fff7e..5fd56c4 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/SrEroSubObject.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/SrEroSubObject.java
@@ -308,17 +308,6 @@
     }
 
     @Override
-    public void print() {
-        log.debug("SrEroSubObject");
-        log.debug("Type: " + TYPE);
-        log.debug("Length: " + LENGTH);
-
-        log.debug("st:" + st + " bFFlag:" + bFFlag + " bSFlag:" + bSFlag + " bCFlag:" + bCFlag + " bMFlag:" + bMFlag
-                + " sID:" + sID + " nAI:" + nai);
-
-    }
-
-    @Override
     public String toString() {
         return MoreObjects.toStringHelper(getClass())
                 .add("Type", TYPE)
@@ -332,5 +321,4 @@
                 .add("nAI", nai)
                 .toString();
     }
-
 }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/StatefulIPv4LspIdentidiersTlv.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/StatefulIPv4LspIdentidiersTlv.java
index 593221c..863698f 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/StatefulIPv4LspIdentidiersTlv.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/StatefulIPv4LspIdentidiersTlv.java
@@ -198,28 +198,13 @@
     }
 
     @Override
-    public void print() {
-
-        log.debug("StatefulIPv4LspIdentidiersTlv");
-        log.debug("Type: " + TYPE);
-        log.debug("Length: " + LENGTH);
-        log.debug("Ipv4IngressAddress: " + ipv4IngressAddress);
-        log.debug("LspId: " + lspId);
-        log.debug("TunnelId: " + tunnelId);
-        log.debug("ExtendedTunnelId: " + extendedTunnelId);
-        log.debug("Ipv4EgressAddress: " + ipv4EgressAddress);
-    }
-
-    @Override
     public String toString() {
         return MoreObjects.toStringHelper(getClass())
                 .add("Type:", TYPE)
                 .add("Length:", LENGTH)
                 .add("Ipv4IngressAddress:", ipv4IngressAddress)
-                .add("LspId:", lspId)
-                .add("TunnelId:", tunnelId)
+                .add("LspId:", lspId).add("TunnelId:", tunnelId)
                 .add("ExtendedTunnelId:", extendedTunnelId)
-                .add("Ipv4EgressAddress:", ipv4EgressAddress)
-                .toString();
+                .add("Ipv4EgressAddress:", ipv4EgressAddress).toString();
     }
 }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/StatefulLspErrorCodeTlv.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/StatefulLspErrorCodeTlv.java
index 39aa523..3239294 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/StatefulLspErrorCodeTlv.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/StatefulLspErrorCodeTlv.java
@@ -131,15 +131,6 @@
     }
 
     @Override
-    public void print() {
-
-        log.debug("StatefulLspErrorCodeTlv");
-        log.debug("Type: " + TYPE);
-        log.debug("Length: " + LENGTH);
-        log.debug("Value: " + rawValue);
-    }
-
-    @Override
     public String toString() {
         return MoreObjects.toStringHelper(getClass()).add("Type", TYPE).add("Length", LENGTH).add("Value", rawValue)
                 .toString();
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 bb36465..7590033 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
@@ -206,29 +206,13 @@
     }
 
     @Override
-    public void print() {
-
-        log.debug("StatefulRsvpErrorSpecTlv");
-        log.debug("Type: " + TYPE);
-        log.debug("Length: " + hLength);
-        if (isErrSpceObjSet) {
-            rsvpErrSpecObj.print();
-        }
-    }
-
-    @Override
     public String toString() {
         ToStringHelper toStrHelper = MoreObjects.toStringHelper(getClass());
 
         if (!isErrSpceObjSet) {
-            toStrHelper
-            .add("Type", TYPE)
-            .add("Length", hLength);
+            toStrHelper.add("Type", TYPE).add("Length", hLength);
         } else {
-            toStrHelper
-            .add("Type", TYPE)
-            .add("Length", hLength)
-            .add("RSVP Error Spec Object", rsvpErrSpecObj);
+            toStrHelper.add("Type", TYPE).add("Length", hLength).add("RSVPErrorSpecObject", rsvpErrSpecObj);
         }
         return toStrHelper.toString();
     }
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/SymbolicPathNameTlv.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/SymbolicPathNameTlv.java
index e2d36b5..12cf435 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/SymbolicPathNameTlv.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/SymbolicPathNameTlv.java
@@ -151,15 +151,7 @@
     }
 
     @Override
-    public void print() {
-        log.debug("SymbolicPathNameTlv");
-        log.debug("Type: " + TYPE);
-        log.debug("Length: " + hLength);
-        log.debug("Symbolic Path Name : " + rawValue);
-    }
-
-    @Override
     public String toString() {
-        return MoreObjects.toStringHelper(getClass()).add("Symbolic Path Name ", rawValue).toString();
+        return MoreObjects.toStringHelper(getClass()).add("SymbolicPathName ", rawValue).toString();
     }
 }
