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
