diff --git a/pcep/api/pom.xml b/pcep/api/pom.xml
old mode 100755
new mode 100644
index a315079..a467c53
--- a/pcep/api/pom.xml
+++ b/pcep/api/pom.xml
@@ -29,7 +29,7 @@
     <artifactId>onos-pcep-controller-api</artifactId>
     <packaging>bundle</packaging>
 
-    <description>ONOS Pcep controller subsystem API</description>
+    <description>ONOS Pcep client controller subsystem API</description>
 
     <dependencies>
         <dependency>
diff --git a/pcep/api/src/main/java/org/onosproject/pcep/controller/PcepClientController.java b/pcep/api/src/main/java/org/onosproject/pcep/controller/PcepClientController.java
index 603c35b..37453ea 100644
--- a/pcep/api/src/main/java/org/onosproject/pcep/controller/PcepClientController.java
+++ b/pcep/api/src/main/java/org/onosproject/pcep/controller/PcepClientController.java
@@ -20,7 +20,7 @@
 import org.onosproject.pcepio.protocol.PcepMessage;
 
 /**
- * Abstraction of an Pcep controller. Serves as a one stop
+ * Abstraction of an Pcep client controller. Serves as a one stop
  * shop for obtaining Pcep devices and (un)register listeners
  * on pcep events
  */
diff --git a/pcep/api/src/main/java/org/onosproject/pcep/controller/PcepEventListener.java b/pcep/api/src/main/java/org/onosproject/pcep/controller/PcepEventListener.java
old mode 100755
new mode 100644
index 905749b..5abe7df
--- a/pcep/api/src/main/java/org/onosproject/pcep/controller/PcepEventListener.java
+++ b/pcep/api/src/main/java/org/onosproject/pcep/controller/PcepEventListener.java
@@ -17,7 +17,7 @@
 
 import org.onosproject.pcepio.protocol.PcepMessage;
 /**
- * Notifies providers about pcep msg events.
+ * Notifies providers about PCEP message events.
  */
 public interface PcepEventListener {
 
diff --git a/pcep/api/src/main/java/org/onosproject/pcep/controller/driver/package-info.java b/pcep/api/src/main/java/org/onosproject/pcep/controller/driver/package-info.java
old mode 100755
new mode 100644
index 2748ecc..9d105ff
--- a/pcep/api/src/main/java/org/onosproject/pcep/controller/driver/package-info.java
+++ b/pcep/api/src/main/java/org/onosproject/pcep/controller/driver/package-info.java
@@ -15,6 +15,6 @@
  */
 
 /**
- * PCEP controller driver API.
+ * PCEP client controller driver API.
  */
 package org.onosproject.pcep.controller.driver;
diff --git a/pcep/api/src/main/java/org/onosproject/pcep/controller/package-info.java b/pcep/api/src/main/java/org/onosproject/pcep/controller/package-info.java
old mode 100755
new mode 100644
index 547b68d..a0cb248
--- a/pcep/api/src/main/java/org/onosproject/pcep/controller/package-info.java
+++ b/pcep/api/src/main/java/org/onosproject/pcep/controller/package-info.java
@@ -15,6 +15,6 @@
  */
 
 /**
- * PCEP controller API.
+ * PCEP client controller API.
  */
 package org.onosproject.pcep.controller;
diff --git a/pcep/ctl/pom.xml b/pcep/ctl/pom.xml
index 35ec429..687ee06 100644
--- a/pcep/ctl/pom.xml
+++ b/pcep/ctl/pom.xml
@@ -28,7 +28,7 @@
     <artifactId>onos-pcep-controller-impl</artifactId>
     <packaging>bundle</packaging>
 
-    <description>ONOS PCEP controller subsystem API</description>
+    <description>ONOS PCEP client controller subsystem API implementation</description>
 
     <dependencies>
         <dependency>
diff --git a/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/PcepClientControllerImpl.java b/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/PcepClientControllerImpl.java
index c22f548..a4ec0ff 100644
--- a/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/PcepClientControllerImpl.java
+++ b/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/PcepClientControllerImpl.java
@@ -15,23 +15,16 @@
  */
 package org.onosproject.pcep.controller.impl;
 
-import static org.onlab.util.Tools.groupedThreads;
-
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantLock;
 
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Deactivate;
 import org.apache.felix.scr.annotations.Service;
-import org.onosproject.net.driver.DriverService;
 import org.onosproject.pcep.controller.PccId;
 import org.onosproject.pcep.controller.PcepClient;
 import org.onosproject.pcep.controller.PcepClientController;
@@ -44,21 +37,15 @@
 
 import com.google.common.collect.Sets;
 
+/**
+ * Implementation of PCEP client controller.
+ */
 @Component(immediate = true)
 @Service
 public class PcepClientControllerImpl implements PcepClientController {
 
     private static final Logger log = LoggerFactory.getLogger(PcepClientControllerImpl.class);
 
-    //@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
-    protected DriverService driverService;
-
-    private final ExecutorService executorMsgs =
-            Executors.newFixedThreadPool(32, groupedThreads("onos/pcep", "event-stats-%d"));
-
-    private final ExecutorService executorBarrier =
-            Executors.newFixedThreadPool(4, groupedThreads("onos/pcep", "event-barrier-%d"));
-
     protected ConcurrentHashMap<PccId, PcepClient> connectedClients =
             new ConcurrentHashMap<PccId, PcepClient>();
 
@@ -188,7 +175,6 @@
     public class PcepClientAgent implements PcepAgent {
 
         private final Logger log = LoggerFactory.getLogger(PcepClientAgent.class);
-        private final Lock clientLock = new ReentrantLock();
 
         @Override
         public boolean addConnectedClient(PccId pccId, PcepClient pc) {
diff --git a/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/PcepPacketStatsImpl.java b/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/PcepPacketStatsImpl.java
index 61964a0..f2bc51e 100644
--- a/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/PcepPacketStatsImpl.java
+++ b/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/PcepPacketStatsImpl.java
@@ -15,13 +15,10 @@
  */
 package org.onosproject.pcep.controller.impl;
 
-
 import org.onosproject.pcep.controller.PcepPacketStats;
+
 /**
- * A representation of a packet context which allows any provider
- * to view a packet in event, but may block the response to the
- * event if blocked has been called. This packet context can be used
- * to react to the packet in event with a packet out.
+ * The implementation for PCEP packet statistics.
  */
 public class PcepPacketStatsImpl implements PcepPacketStats {
 
@@ -30,6 +27,9 @@
     private int wrongPacketCount;
     private long time;
 
+    /**
+     * Default constructor.
+     */
     public PcepPacketStatsImpl() {
         this.inPacketCount = 0;
         this.outPacketCount = 0;
@@ -82,6 +82,9 @@
         this.wrongPacketCount++;
     }
 
+    /**
+     * Resets wrong packet count.
+     */
     public void resetWrongPacket() {
         this.wrongPacketCount = 0;
     }
diff --git a/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/package-info.java b/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/package-info.java
index 589d345..d86eefc 100644
--- a/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/package-info.java
+++ b/pcep/ctl/src/main/java/org/onosproject/pcep/controller/impl/package-info.java
@@ -15,6 +15,6 @@
  */
 
 /**
- * Implementation of the PCEP controller subsystem.
+ * Implementation of the PCEP client controller subsystem.
  */
 package org.onosproject.pcep.controller.impl;
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/exceptions/package-info.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/exceptions/package-info.java
new file mode 100644
index 0000000..44d09f0
--- /dev/null
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/exceptions/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * 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.
+ */
+
+/**
+ * PCEP custom exceptions.
+ */
+package org.onosproject.pcepio.exceptions;
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
old mode 100755
new mode 100644
index c2373f0..122b943
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepAttribute.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepAttribute.java
@@ -16,14 +16,14 @@
 
 package org.onosproject.pcepio.protocol;
 
-/**
- * Abstraction of an entity which Provides List of PCEP Attributes.
- */
 import java.util.LinkedList;
 
 import org.jboss.netty.buffer.ChannelBuffer;
 import org.onosproject.pcepio.exceptions.PcepParseException;
 
+/**
+ * Abstraction of an entity which Provides List of PCEP Attributes.
+ */
 public interface PcepAttribute {
 
     /**
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 1d34aa0..85416f9 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
@@ -22,6 +22,9 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+/**
+ * Abstraction to provide the version for PCEP.
+ */
 public final class PcepFactories {
 
     protected static final Logger log = LoggerFactory.getLogger(PcepFactories.class);
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/package-info.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/package-info.java
new file mode 100644
index 0000000..53ee593
--- /dev/null
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * 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.
+ */
+
+/**
+ * Abstraction of an entity providing PCEP messages.
+ */
+package org.onosproject.pcepio.protocol;
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 f88e876..a63fd27 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
@@ -16,9 +16,6 @@
 
 package org.onosproject.pcepio.protocol.ver1;
 
-/*
- * Provides PCEP Attribute List.
- */
 import java.util.LinkedList;
 import java.util.ListIterator;
 
@@ -36,18 +33,20 @@
 import com.google.common.base.MoreObjects;
 import com.google.common.base.MoreObjects.ToStringHelper;
 
-/* Reference : RFC5440
- *  where:
- *      <attribute-list>                  ::=[<LSPA>]
- *                                           [<BANDWIDTH>]
- *                                           [<metric-list>]
- *                                           [<IRO>]
- *
- *      <metric-list>                     ::=<METRIC>[<metric-list>]
+/**
+ * Provides PCEP Attribute List.
  */
-
 public class PcepAttributeVer1 implements PcepAttribute {
 
+    /* Reference : RFC5440
+     *  where:
+     *      <attribute-list>                  ::=[<LSPA>]
+     *                                           [<BANDWIDTH>]
+     *                                           [<metric-list>]
+     *                                           [<IRO>]
+     *
+     *      <metric-list>                     ::=<METRIC>[<metric-list>]
+     */
     protected static final Logger log = LoggerFactory.getLogger(PcepAttributeVer1.class);
 
     public static final int OBJECT_HEADER_LENGTH = 4;
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 040a014..762c35c 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
@@ -33,26 +33,30 @@
 
 import com.google.common.base.MoreObjects;
 
-/*
- * RFC : 5440 , section : 6.8
- * <Close Message>           ::= <Common Header> <CLOSE>
- *
-     0                   1                   2                   3
-     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-    | Ver |  Flags  |  Message-Type |       Message-Length          |
-    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-    | Object-Class  |   OT  |Res|P|I|   Object Length (bytes)       |
-    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-    |          Reserved             |      Flags    |    Reason     |
-    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-    |                                                               |
-    //                         Optional TLVs                       //
-    |                                                               |
-    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+/**
+ * Provides PCEP Close Message.
  */
 class PcepCloseMsgVer1 implements PcepCloseMsg {
 
+    /*
+     * RFC : 5440 , section : 6.8
+     * <Close Message>           ::= <Common Header> <CLOSE>
+     *
+         0                   1                   2                   3
+         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+        | Ver |  Flags  |  Message-Type |       Message-Length          |
+        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+        | Object-Class  |   OT  |Res|P|I|   Object Length (bytes)       |
+        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+        |          Reserved             |      Flags    |    Reason     |
+        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+        |                                                               |
+        //                         Optional TLVs                       //
+        |                                                               |
+        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+     */
+
     protected static final Logger log = LoggerFactory.getLogger(PcepCloseMsgVer1.class);
 
     // Pcep version: 1
@@ -74,6 +78,9 @@
 
     public static final PcepCloseMsgVer1.Reader READER = new Reader();
 
+    /**
+     * Reader class for reading close message for channel buffer.
+     */
     static class Reader implements PcepMessageReader<PcepCloseMsg> {
         PcepObjectHeader closeObjHeader;
         byte yReason;
@@ -248,6 +255,9 @@
 
     static final Writer WRITER = new Writer();
 
+    /**
+     * Writer class for writing close message to channel buffer.
+     */
     static class Writer implements PcepMessageWriter<PcepCloseMsgVer1> {
 
         @Override
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 cce278e..79668d0 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
@@ -25,6 +25,9 @@
 
 import com.google.common.base.MoreObjects;
 
+/**
+ * Provides PCEP Endpoints Object.
+ */
 public class PcepEndPointsObjectVer1 implements PcepEndPointsObject {
 
     /*
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 b45a0c2..86f13bb 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
@@ -35,8 +35,12 @@
 
 import com.google.common.base.MoreObjects;
 
-/*
- * rfc3209
+/**
+ * Provides PCEP Ero Object.
+ */
+public class PcepEroObjectVer1 implements PcepEroObject {
+    /*
+     * rfc3209
       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
@@ -130,8 +134,7 @@
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      //                        NAI (variable)                       //
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- */
-public class PcepEroObjectVer1 implements PcepEroObject {
+     */
 
     protected static final Logger log = LoggerFactory.getLogger(PcepEroObjectVer1.class);
 
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepErrorMsgVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepErrorMsgVer1.java
index 91f63ec..af5dc81 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepErrorMsgVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepErrorMsgVer1.java
@@ -20,6 +20,9 @@
 import com.google.common.base.MoreObjects;
 import com.google.common.base.MoreObjects.ToStringHelper;
 
+/**
+ * Provides PCEP Error Message.
+ */
 public class PcepErrorMsgVer1 implements PcepErrorMsg {
 
     /*
@@ -71,6 +74,9 @@
         this.errInfo = errInfo;
     }
 
+    /**
+     * Reader class for reading PCEP error Message from channel buffer.
+     */
     public static class Reader implements PcepMessageReader<PcepErrorMsg> {
 
         ErrorObjListWithOpen errObjListWithOpen;
@@ -187,7 +193,6 @@
                     break;
                 }
             }
-
             return tempObjHeader;
         }
     }
@@ -246,6 +251,9 @@
 
     public static final Writer WRITER = new Writer();
 
+    /**
+     * Writer class for writing PCEP error Message to channel buffer.
+     */
     static class Writer implements PcepMessageWriter<PcepErrorMsgVer1> {
         @Override
         public void write(ChannelBuffer cb, PcepErrorMsgVer1 message) throws PcepParseException {
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepErrorObjectVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepErrorObjectVer1.java
index 598bfe0..9e173c5 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepErrorObjectVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepErrorObjectVer1.java
@@ -13,22 +13,24 @@
 
 import com.google.common.base.MoreObjects;
 
-/*
-0                   1                   2                   3
-0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| Object-Class  |   OT  |Res|P|I|   Object Length (bytes)       |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-|   Reserved    |      Flags    |   Error-Type  |  Error-value  |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-|                                                               |
-//                     Optional TLVs                           //
-|                                                               |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+/**
+ * Provides PCEP Error Object.
  */
-
 public class PcepErrorObjectVer1 implements PcepErrorObject {
 
+    /*
+    0                   1                   2                   3
+    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+    | Object-Class  |   OT  |Res|P|I|   Object Length (bytes)       |
+    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+    |   Reserved    |      Flags    |   Error-Type  |  Error-value  |
+    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+    |                                                               |
+    //                         Optional TLVs                       //
+    |                                                               |
+    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+     */
     protected static final Logger log = LoggerFactory.getLogger(PcepErrorObjectVer1.class);
 
     public static final byte ERROR_OBJ_TYPE = 1;
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 bc52f3e..6b5d450 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
@@ -52,6 +52,9 @@
 import org.onosproject.pcepio.protocol.PcepUpdateRequest;
 import org.onosproject.pcepio.protocol.PcepVersion;
 
+/**
+ * Provides PCEP Factory and returns builder classes for all objects and messages.
+ */
 public class PcepFactoryVer1 implements PcepFactory {
 
     public static final PcepFactoryVer1 INSTANCE = new PcepFactoryVer1();
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepFecObjectIPv4AdjacencyVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepFecObjectIPv4AdjacencyVer1.java
index b9d055f..0da0646 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepFecObjectIPv4AdjacencyVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepFecObjectIPv4AdjacencyVer1.java
@@ -26,6 +26,9 @@
 
 import com.google.common.base.MoreObjects;
 
+/**
+ * Provides PCEP fec Object IPv4 Adjacency object.
+ */
 public class PcepFecObjectIPv4AdjacencyVer1 implements PcepFecObjectIPv4Adjacency {
 
     /*
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepFecObjectIPv4UnnumberedAdjacencyVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepFecObjectIPv4UnnumberedAdjacencyVer1.java
index f61fe67..8fb5c9d 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepFecObjectIPv4UnnumberedAdjacencyVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepFecObjectIPv4UnnumberedAdjacencyVer1.java
@@ -26,6 +26,9 @@
 
 import com.google.common.base.MoreObjects;
 
+/**
+ * Provides Pcep Fec Object IPv4 Unnumbered Adjacency object.
+ */
 public class PcepFecObjectIPv4UnnumberedAdjacencyVer1 implements PcepFecObjectIPv4UnnumberedAdjacency {
 
     /*
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepFecObjectIPv4Ver1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepFecObjectIPv4Ver1.java
index 20ece97..6c25157 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepFecObjectIPv4Ver1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepFecObjectIPv4Ver1.java
@@ -26,6 +26,9 @@
 
 import com.google.common.base.MoreObjects;
 
+/**
+ * Provides Pcep Fec Object IPv4 object.
+ */
 public class PcepFecObjectIPv4Ver1 implements PcepFecObjectIPv4 {
 
     /*
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepFecObjectIPv6AdjacencyVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepFecObjectIPv6AdjacencyVer1.java
index 856f667..b50dbed 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepFecObjectIPv6AdjacencyVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepFecObjectIPv6AdjacencyVer1.java
@@ -26,6 +26,9 @@
 
 import com.google.common.base.MoreObjects;
 
+/**
+ * Provides Pcep Fec Object IPv6 Adjacency object.
+ */
 public class PcepFecObjectIPv6AdjacencyVer1 implements PcepFecObjectIPv6Adjacency {
 
     /*
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepFecObjectIPv6Ver1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepFecObjectIPv6Ver1.java
index 3895ae9..4d9422e 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepFecObjectIPv6Ver1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepFecObjectIPv6Ver1.java
@@ -26,6 +26,9 @@
 
 import com.google.common.base.MoreObjects;
 
+/**
+ * Provides Pcep Fec Object IPv6 object.
+ */
 public class PcepFecObjectIPv6Ver1 implements PcepFecObjectIPv6 {
 
     /*
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 c571d25..97bd831 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
@@ -37,6 +37,9 @@
 
 import com.google.common.base.MoreObjects;
 
+/**
+ * Provides PCEP initiate message.
+ */
 class PcepInitiateMsgVer1 implements PcepInitiateMsg {
 
     protected static final Logger log = LoggerFactory.getLogger(PcepInitiateMsgVer1.class);
@@ -70,6 +73,9 @@
     private LinkedList<PcInitiatedLspRequest> llPcInitiatedLspRequestList;
     public static final PcepInitiateMsgVer1.Reader READER = new Reader();
 
+    /**
+     * Reader class for reading of Pcep initiate message from channel buffer.
+     */
     static class Reader implements PcepMessageReader<PcepInitiateMsg> {
 
         LinkedList<PcInitiatedLspRequest> llPcInitiatedLspRequestList;
@@ -159,7 +165,6 @@
                 }
                 llPcInitiatedLspRequestList.add(pceInitLspReq);
             }
-
             return true;
         }
     }
@@ -219,6 +224,9 @@
 
     static final Writer WRITER = new Writer();
 
+    /**
+     * Writer class for writing pcep initiate message to channel buffer.
+     */
     static class Writer implements PcepMessageWriter<PcepInitiateMsgVer1> {
 
         @Override
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepInterLayerObjectVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepInterLayerObjectVer1.java
index 8171e8d..d09eb28 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepInterLayerObjectVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepInterLayerObjectVer1.java
@@ -24,15 +24,18 @@
 
 import com.google.common.base.MoreObjects;
 
-/*
- *      0                   1                   2                   3
-     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-    |    Reserved                                               |N|I|
-    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+/**
+ * Provides PCEP inter layer object.
  */
 public class PcepInterLayerObjectVer1 implements PcepInterLayerObject {
 
+    /*
+     *      0                   1                   2                   3
+         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+        |    Reserved                                               |N|I|
+        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+     */
     protected static final Logger log = LoggerFactory.getLogger(PcepInterLayerObjectVer1.class);
 
     public static final byte INTER_LAYER_OBJ_TYPE = 1;
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 d8c7b19..baf2962 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
@@ -30,7 +30,12 @@
 
 import com.google.common.base.MoreObjects;
 
-/*
+/**
+ * Provides PCEP iro object.
+ */
+public class PcepIroObjectVer1 implements PcepIroObject {
+
+    /*
       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
@@ -50,9 +55,7 @@
         +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
         | IPv4 address (continued)      | Prefix Length |      Resvd    |
         +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- */
-public class PcepIroObjectVer1 implements PcepIroObject {
-
+     */
     protected static final Logger log = LoggerFactory.getLogger(PcepIroObjectVer1.class);
 
     public static final byte IRO_OBJ_TYPE = 1;
@@ -217,6 +220,9 @@
         return objLenIndex;
     }
 
+    /**
+     * Builder class for PCEP iro object.
+     */
     public static class Builder implements PcepIroObject.Builder {
 
         private boolean bIsHeaderSet = false;
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 404f5b8..8b6e938 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
@@ -28,6 +28,9 @@
 
 import com.google.common.base.MoreObjects;
 
+/**
+ * Provides PCEP keep alive message.
+ */
 class PcepKeepaliveMsgVer1 implements PcepKeepaliveMsg {
 
     /*
@@ -47,6 +50,9 @@
 
     public static final PcepKeepaliveMsgVer1.Reader READER = new Reader();
 
+    /**
+     * Reader class for reading PCEP keepalive message from channel buffer.
+     */
     static class Reader implements PcepMessageReader<PcepKeepaliveMsg> {
 
         @Override
@@ -81,6 +87,9 @@
     PcepKeepaliveMsgVer1() {
     }
 
+    /**
+     * Builder class for PCEP keepalive message.
+     */
     static class Builder implements PcepKeepaliveMsg.Builder {
         @Override
         public PcepVersion getVersion() {
@@ -105,6 +114,9 @@
 
     static final Writer WRITER = new Writer();
 
+    /**
+     * Writer class for writing the PCEP keepalive message to channel buffer.
+     */
     static class Writer implements PcepMessageWriter<PcepKeepaliveMsgVer1> {
 
         @Override
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLabelObjectVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLabelObjectVer1.java
index 834054b..27acb0a 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLabelObjectVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLabelObjectVer1.java
@@ -32,8 +32,13 @@
 
 import com.google.common.base.MoreObjects;
 
-/*
- *   ref : draft-zhao-pce-pcep-extension-for-pce-controller-01 , section : 7.4.
+/**
+ * Provides PCEP label object.
+ */
+public class PcepLabelObjectVer1 implements PcepLabelObject {
+
+    /*
+     *   ref : draft-zhao-pce-pcep-extension-for-pce-controller-01 , section : 7.4.
 
         0                   1                   2                   3
            0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
@@ -47,9 +52,7 @@
        |                                                               |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                      The LABEL Object format
- */
-public class PcepLabelObjectVer1 implements PcepLabelObject {
-
+     */
     protected static final Logger log = LoggerFactory.getLogger(PcepLspObjectVer1.class);
 
     public static final byte LABEL_OBJ_TYPE = 1;
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLabelRangeObjectVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLabelRangeObjectVer1.java
index fce29a1..a9cbee6 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLabelRangeObjectVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLabelRangeObjectVer1.java
@@ -30,6 +30,9 @@
 
 import com.google.common.base.MoreObjects;
 
+/**
+ * Provides PCEP label range object.
+ */
 public class PcepLabelRangeObjectVer1 implements PcepLabelRangeObject {
 
     /*
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLabelRangeResvMsgVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLabelRangeResvMsgVer1.java
index 2b6b9c8..54cdc00 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLabelRangeResvMsgVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLabelRangeResvMsgVer1.java
@@ -29,6 +29,9 @@
 
 import com.google.common.base.MoreObjects;
 
+/**
+ * Provides PCEP label range reserve message.
+ */
 class PcepLabelRangeResvMsgVer1 implements PcepLabelRangeResvMsg {
 
     // Pcep version: 1
@@ -57,7 +60,9 @@
 
     public static final PcepLabelRangeResvMsgVer1.Reader READER = new Reader();
 
-    //Reader reads LabelRangeResv Message from the channel.
+    /**
+     * Reader reads LabelRangeResv Message from the channel.
+     */
     static class Reader implements PcepMessageReader<PcepLabelRangeResvMsg> {
 
         @Override
@@ -138,7 +143,9 @@
 
     static final Writer WRITER = new Writer();
 
-    //Writer writes LabelRangeResv Message to the channel.
+    /**
+     * Writer writes LabelRangeResv Message to the channel.
+     */
     static class Writer implements PcepMessageWriter<PcepLabelRangeResvMsgVer1> {
 
         @Override
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLabelUpdateMsgVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLabelUpdateMsgVer1.java
index 2b23424..968f228 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLabelUpdateMsgVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepLabelUpdateMsgVer1.java
@@ -32,6 +32,9 @@
 
 import com.google.common.base.MoreObjects;
 
+/**
+ * Provides PCEP lable update message.
+ */
 class PcepLabelUpdateMsgVer1 implements PcepLabelUpdateMsg {
 
     // Pcep version: 1
@@ -72,7 +75,9 @@
 
     static final PcepLabelUpdateMsgVer1.Reader READER = new Reader();
 
-    //Reader reads LabelUpdate Message from the channel.
+    /**
+     * Reader reads LabelUpdate Message from the channel.
+     */
     static class Reader implements PcepMessageReader<PcepLabelUpdateMsg> {
 
         @Override
@@ -131,6 +136,9 @@
         this.llPcLabelUpdateList = llPcLabelUpdateList;
     }
 
+    /**
+     * Builder class for PCEP label update message.
+     */
     static class Builder implements PcepLabelUpdateMsg.Builder {
 
         LinkedList<PcepLabelUpdate> llPcLabelUpdateList;
@@ -169,7 +177,9 @@
 
     static final Writer WRITER = new Writer();
 
-    //Writer writes LabelUpdate Message to the channel.
+    /**
+     * Writer writes LabelUpdate Message to the channel.
+     */
     static class Writer implements PcepMessageWriter<PcepLabelUpdateMsgVer1> {
 
         @Override
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 3a16318..1312fa2 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
@@ -34,7 +34,12 @@
 
 import com.google.common.base.MoreObjects;
 
-/*
+/**
+ * Provides PCEP lsp object.
+ */
+public class PcepLspObjectVer1 implements PcepLspObject {
+
+    /*
      message format.
      Reference : draft-ietf-pce-stateful-pce-11, section 7.3.
       0                   1                   2                   3
@@ -49,10 +54,7 @@
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 
                      The LSP Object format
- */
-
-public class PcepLspObjectVer1 implements PcepLspObject {
-
+     */
     protected static final Logger log = LoggerFactory.getLogger(PcepLspObjectVer1.class);
 
     public static final byte LSP_OBJ_TYPE = 1;
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 0bec884..a592c45 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
@@ -29,6 +29,9 @@
 
 import com.google.common.base.MoreObjects;
 
+/**
+ * Provides PCEP label Object .
+ */
 public class PcepLspaObjectVer1 implements PcepLspaObject {
 
     /* LSPA Object Body Format
@@ -72,8 +75,6 @@
     private int iIncludeAll;
     private byte cSetupPriority;
     private byte cHoldPriority;
-    private byte flags;
-    private byte reserved;
     private boolean bLFlag;
     private LinkedList<PcepValueType> llOptionalTlv; //Optional TLV
 
@@ -343,7 +344,7 @@
     }
 
     /**
-     * builder class for PCEP lspa object.
+     * Builder class for PCEP lspa object.
      */
     public static class Builder implements PcepLspaObject.Builder {
         private boolean bIsHeaderSet = false;
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepMessageVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepMessageVer1.java
index 2dd3363..2169a67 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepMessageVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepMessageVer1.java
@@ -25,6 +25,9 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+/**
+ * Provides PCEP messages.
+ */
 public abstract class PcepMessageVer1 {
 
     protected static final Logger log = LoggerFactory.getLogger(PcepFactories.class);
@@ -48,6 +51,9 @@
 
     public static final PcepMessageVer1.Reader READER = new Reader();
 
+    /**
+     * Reader class for reading PCEP messages from channel buffer.
+     */
     static class Reader implements PcepMessageReader<PcepMessage> {
         @Override
         public PcepMessage readFrom(ChannelBuffer cb) throws PcepParseException {
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 7f946c7..0443eae 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
@@ -25,7 +25,12 @@
 
 import com.google.common.base.MoreObjects;
 
-/*
+/**
+ * Provides PCEP metric object.
+ */
+public class PcepMetricObjectVer1 implements PcepMetricObject {
+
+    /*
      METRIC Object Body Format.
 
     0                   1                   2                   3
@@ -35,9 +40,7 @@
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                          metric-value                         |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- */
-
-public class PcepMetricObjectVer1 implements PcepMetricObject {
+     */
 
     protected static final Logger log = LoggerFactory.getLogger(PcepMetricObjectVer1.class);
 
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 c04cc81..30cd3d6 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
@@ -102,7 +102,7 @@
     }
 
     /**
-     * builder class for PCEP Message path.
+     * Builder class for PCEP Message path.
      */
     public static class Builder implements PcepMsgPath.Builder {
 
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepOpenMsgVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepOpenMsgVer1.java
index 0bbc314..714f17d 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepOpenMsgVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepOpenMsgVer1.java
@@ -30,6 +30,9 @@
 
 import com.google.common.base.MoreObjects;
 
+/**
+ * Provides PCEP open message.
+ */
 public class PcepOpenMsgVer1 implements PcepOpenMsg {
 
     /*
@@ -87,6 +90,9 @@
         return MSG_TYPE;
     }
 
+    /**
+     * Reader class for reading PCEP open message from channel buffer.
+     */
     public static class Reader implements PcepMessageReader<PcepOpenMsg> {
 
         @Override
@@ -162,6 +168,9 @@
 
     public static final Writer WRITER = new Writer();
 
+    /**
+     * Writer class for writing PCEP opne message to channel buffer.
+     */
     public static class Writer implements PcepMessageWriter<PcepOpenMsgVer1> {
 
         @Override
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepOpenObjectVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepOpenObjectVer1.java
index 3e2a580..724fa68 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepOpenObjectVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepOpenObjectVer1.java
@@ -37,7 +37,12 @@
 
 import com.google.common.base.MoreObjects;
 
-/*
+/**
+ * Provides PCEP open object.
+ */
+public class PcepOpenObjectVer1 implements PcepOpenObject {
+
+    /*
      message format.
       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
@@ -52,10 +57,7 @@
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 
                      The OPEN Object format
- */
-
-public class PcepOpenObjectVer1 implements PcepOpenObject {
-
+     */
     protected static final Logger log = LoggerFactory.getLogger(PcepOpenObjectVer1.class);
 
     public static final PcepType MSG_TYPE = PcepType.OPEN;
@@ -341,10 +343,12 @@
                 }
             }
         }
-
         return cb.writerIndex() - startIndex;
     }
 
+    /**
+     * Builder class for PCPE open object.
+     */
     public static class Builder implements PcepOpenObject.Builder {
         // Pcep open message fields
         private boolean bIsHeaderSet = false;
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepRPObjectVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepRPObjectVer1.java
index 6055642..afb85bf 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepRPObjectVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepRPObjectVer1.java
@@ -28,6 +28,9 @@
 
 import com.google.common.base.MoreObjects;
 
+/**
+ * Provides PCEP RP object.
+ */
 public class PcepRPObjectVer1 implements PcepRPObject {
 
     /*
@@ -271,6 +274,9 @@
         return cb.writerIndex();
     }
 
+    /**
+     * Builder class for PCEP rp object.
+     */
     public static class Builder implements PcepRPObject.Builder {
 
         private boolean bIsHeaderSet = false;
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepReportMsgVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepReportMsgVer1.java
index 7ae69f7..1bbf6b6 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepReportMsgVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepReportMsgVer1.java
@@ -35,6 +35,9 @@
 
 import com.google.common.base.MoreObjects;
 
+/**
+ * Provides PCEP report message.
+ */
 class PcepReportMsgVer1 implements PcepReportMsg {
 
     // Pcep version: 1
@@ -71,6 +74,9 @@
 
     public static final PcepReportMsgVer1.Reader READER = new Reader();
 
+    /**
+     * Reader class for reading PCEP report message from channel buffer.
+     */
     static class Reader implements PcepMessageReader<PcepReportMsg> {
 
         LinkedList<PcepStateReport> llStateReportList;
@@ -217,6 +223,9 @@
 
     static final Writer WRITER = new Writer();
 
+    /**
+     * Writer class for writing PCEP report message to channel buffer.
+     */
     static class Writer implements PcepMessageWriter<PcepReportMsgVer1> {
 
         @Override
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepRroObjectVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepRroObjectVer1.java
index 7ce38ab..d073a02 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepRroObjectVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepRroObjectVer1.java
@@ -32,8 +32,13 @@
 
 import com.google.common.base.MoreObjects;
 
-/*
- * rfc3209
+/**
+ * Provides PCEP RRO object.
+ */
+public class PcepRroObjectVer1 implements PcepRroObject {
+
+    /*
+     * rfc3209
           0                   1                   2                   3
           0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
          +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
@@ -88,9 +93,7 @@
            |       Contents of Label Object                                |
            +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 
- */
-public class PcepRroObjectVer1 implements PcepRroObject {
-
+     */
     protected static final Logger log = LoggerFactory.getLogger(PcepRroObjectVer1.class);
 
     public static final byte RRO_OBJ_TYPE = 1;
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 5095e71..2aa19aa 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
@@ -30,6 +30,9 @@
 
 import com.google.common.base.MoreObjects;
 
+/**
+ * Provides PCEP SRP obejct.
+ */
 public class PcepSrpObjectVer1 implements PcepSrpObject {
 
     /*
@@ -276,7 +279,7 @@
     }
 
     /**
-     * builder class for PCEP srp Object.
+     * Builder class for PCEP srp Object.
      */
     public static class Builder implements PcepSrpObject.Builder {
         private boolean bIsHeaderSet = false;
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepStateReportVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepStateReportVer1.java
index 22a7f88..6c17274 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepStateReportVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepStateReportVer1.java
@@ -89,9 +89,10 @@
          * @param eroObj PCEP ERO Object
          * @param attrList PCEP Attribute
          * @param rroObj PCEP Rro Object
+         * @param bandwidth PCEP bandwidth object
          */
         public PcepMsgPath(PcepEroObject eroObj, PcepAttribute attrList, PcepRroObject rroObj,
-                PcepBandwidthObject bandwidth) {
+                           PcepBandwidthObject bandwidth) {
 
             this.eroObj = eroObj;
             this.attrList = attrList;
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepTEObjectVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepTEObjectVer1.java
index b32a9e0..51122fd 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepTEObjectVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepTEObjectVer1.java
@@ -35,6 +35,9 @@
 
 import com.google.common.base.MoreObjects;
 
+/**
+ * Provides PCEP TE Object.
+ */
 public class PcepTEObjectVer1 implements PcepTEObject {
     /*
      *
@@ -325,7 +328,6 @@
 
             throw new PcepParseException("Optional Tlv parsing error. Extra bytes received.");
         }
-
         return llOutOptionalTlv;
     }
 
@@ -358,10 +360,12 @@
                 }
             }
         }
-
         return cb.writerIndex();
     }
 
+    /**
+     * Builder class for PCEP te object.
+     */
     public static class Builder implements PcepTEObject.Builder {
         private boolean bIsHeaderSet = false;
         private boolean bIsProtocolIdSet = false;
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepTEReportMsgVer1.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepTEReportMsgVer1.java
index 4c38a4c..e051a16 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepTEReportMsgVer1.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/PcepTEReportMsgVer1.java
@@ -32,7 +32,7 @@
 
 import com.google.common.base.MoreObjects;
 
-/*
+/**
  * Provides  PCEP TE Report Message.
  */
 class PcepTEReportMsgVer1 implements PcepTEReportMsg {
@@ -55,6 +55,9 @@
 
     public static final PcepTEReportMsgVer1.Reader READER = new Reader();
 
+    /**
+     * Reader class for reading PCPE te report message form channel buffer.
+     */
     static class Reader implements PcepMessageReader<PcepTEReportMsg> {
 
         LinkedList<PcepTEObject> teReportList;
@@ -118,6 +121,9 @@
         this.teReportList = teReportList;
     }
 
+    /**
+     * Builder class for PCEP te report message.
+     */
     static class Builder implements PcepTEReportMsg.Builder {
         // PCEP TE Report message fields
         LinkedList<PcepTEObject> teReportList;
@@ -156,6 +162,9 @@
 
     static final Writer WRITER = new Writer();
 
+    /**
+     * Writer class for writing PCEP te report message to channel buffer.
+     */
     static class Writer implements PcepMessageWriter<PcepTEReportMsgVer1> {
 
         @Override
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 b2ace4f..00a6b03 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
@@ -36,9 +36,7 @@
 import com.google.common.base.MoreObjects;
 
 /**
- * PCEP Update Message: A Path Computation LSP Update Request message
- * (also referred to as PCUpd message) is a PCEP message sent by a PCE
- * to a PCC to update attributes of an LSP.
+ * Provides PCEP update message.
  */
 
 class PcepUpdateMsgVer1 implements PcepUpdateMsg {
@@ -88,7 +86,9 @@
 
     public static final PcepUpdateMsgVer1.Reader READER = new Reader();
 
-    //Reader reads UpdateMessage from the channel.
+    /**
+     * Reader reads UpdateMessage from the channel.
+     */
     static class Reader implements PcepMessageReader<PcepUpdateMsg> {
 
         LinkedList<PcepUpdateRequest> llUpdateRequestList;
@@ -184,7 +184,7 @@
     }
 
     /**
-     * builder class for PCPE update message.
+     * Builder class for PCPE update message.
      */
     static class Builder implements PcepUpdateMsg.Builder {
 
@@ -226,7 +226,9 @@
 
     static final Writer WRITER = new Writer();
 
-    //Writer writes UpdateMessage to the channel buffer.
+    /**
+     * Writer writes UpdateMessage to the channel buffer.
+     */
     static class Writer implements PcepMessageWriter<PcepUpdateMsgVer1> {
 
         @Override
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 7993694..b0afabd 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
@@ -26,8 +26,8 @@
 
 import com.google.common.base.MoreObjects;
 
-/*
- * PCEP Update Request List.
+/**
+ * Provides PCEP Update Request List.
  */
 public class PcepUpdateRequestVer1 implements PcepUpdateRequest {
 
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/package-info.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/package-info.java
new file mode 100644
index 0000000..32d49ec
--- /dev/null
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/ver1/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * 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.
+ */
+
+/**
+ * Implementation of PCEP messages.
+ */
+package org.onosproject.pcepio.protocol.ver1;
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepErrorDetailInfo.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepErrorDetailInfo.java
index 93988a2..4941b47 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepErrorDetailInfo.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/PcepErrorDetailInfo.java
@@ -16,7 +16,7 @@
 
 package org.onosproject.pcepio.types;
 
-/*
+/**
  * Provide the PCEP Error Info Details.
  */
 public final class PcepErrorDetailInfo {
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 bc12809..5108f9c 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
@@ -23,6 +23,9 @@
 
 import com.google.common.base.MoreObjects;
 
+/**
+ * Provides Pcep Nai Ipv4 Adjacency.
+ */
 public class PcepNaiIpv4Adjacency implements PcepNai {
 
     public static final byte ST_TYPE = 0x03;
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 dc7a7d9..4b989b7 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
@@ -23,6 +23,9 @@
 
 import com.google.common.base.MoreObjects;
 
+/**
+ * Provides Pcep Nai Ipv4 Node Id.
+ */
 public class PcepNaiIpv4NodeId implements PcepNai {
 
     public static final byte ST_TYPE = 0x01;
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 2b1a775..e0761be 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
@@ -23,6 +23,9 @@
 
 import com.google.common.base.MoreObjects;
 
+/**
+ * Provides Pcep Nai Ipv6 Adjacency.
+ */
 public class PcepNaiIpv6Adjacency implements PcepNai {
 
     public static final byte ST_TYPE = 0x04;
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 ae42d11..e22ef94 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
@@ -23,6 +23,9 @@
 
 import com.google.common.base.MoreObjects;
 
+/**
+ * Provides Pcep Nai Ipv6 Node Id.
+ */
 public class PcepNaiIpv6NodeId implements PcepNai {
 
     public static final byte ST_TYPE = 0x02;
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 79099b5..84106de 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
@@ -7,6 +7,9 @@
 
 import com.google.common.base.MoreObjects;
 
+/**
+ * Provides Pcep Nai Unnumbered Adjacency Ipv4.
+ */
 public class PcepNaiUnnumberedAdjacencyIpv4 implements PcepNai {
     /**
      * draft-ietf-pce-segment-routing-03 section    5.3.2.
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 34e9e53..bc416cb 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
@@ -17,6 +17,9 @@
 
 import org.jboss.netty.buffer.ChannelBuffer;
 
+/**
+ * Abstraction of an entity which provides PCPE RSVP error spec.
+ */
 public interface PcepRsvpErrorSpec extends PcepValueType {
 
     /**
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 420392e..870179d 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
@@ -20,6 +20,9 @@
 
 import com.google.common.base.MoreObjects;
 
+/**
+ * Provides Pcep Rsvp Ipv4 Error Spec.
+ */
 public class PcepRsvpIpv4ErrorSpec implements PcepRsvpErrorSpec {
 
     /*
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 7eade7a..745d4fd 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
@@ -5,6 +5,9 @@
 
 import com.google.common.base.MoreObjects;
 
+/**
+ * Provides Pcep Rsvp Ipv6 Error Spec.
+ */
 public class PcepRsvpIpv6ErrorSpec implements PcepRsvpErrorSpec {
 
     /*
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 1a0419c..ac3fe1a 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
@@ -24,6 +24,9 @@
 
 import com.google.common.base.MoreObjects;
 
+/**
+ * Provides Pcep Rsvp User Error Spec.
+ */
 public class PcepRsvpUserErrorSpec implements PcepRsvpErrorSpec {
 
     /*
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 5fd56c4..28618b2 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
@@ -26,7 +26,7 @@
 
 import com.google.common.base.MoreObjects;
 
-/*
+/**
  * Provides SrEroSubObject.
  */
 public class SrEroSubObject implements PcepValueType {
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 7590033..853991a 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
@@ -150,6 +150,7 @@
      *
      * @param cb of type channel buffer
      * @return object of StatefulRsvpErrorSpecTlv
+     * @throws PcepParseException while parsing this tlv from channel buffer
      */
     public static PcepValueType read(ChannelBuffer cb) throws PcepParseException {
 
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/TENodeAttributesTlv.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/TENodeAttributesTlv.java
index 233c260..ec17dd6 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/TENodeAttributesTlv.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/TENodeAttributesTlv.java
@@ -28,6 +28,9 @@
 
 import com.google.common.base.MoreObjects;
 
+/**
+ * Provides TE Node Attributes Tlv.
+ */
 public class TENodeAttributesTlv implements PcepValueType {
     /*
      * Reference :PCEP Extension for Transporting TE Data draft-dhodylee-pce-pcep-te-data-extn-02
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/package-info.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/package-info.java
new file mode 100644
index 0000000..12744de
--- /dev/null
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/types/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * 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.
+ */
+
+/**
+ * Implementation of Tlvs and Pcep common objects.
+ */
+package org.onosproject.pcepio.types;
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/util/HexDump.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/util/HexDump.java
index ad06793..0e0c3cb 100644
--- a/pcep/pcepio/src/main/java/org/onosproject/pcepio/util/HexDump.java
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/util/HexDump.java
@@ -4,6 +4,9 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+/**
+ * Provides Hex Dump for debugging.
+ */
 public final class HexDump {
     protected static final Logger log = LoggerFactory.getLogger(HexDump.class);
 
diff --git a/pcep/pcepio/src/main/java/org/onosproject/pcepio/util/package-info.java b/pcep/pcepio/src/main/java/org/onosproject/pcepio/util/package-info.java
new file mode 100644
index 0000000..b3756ff
--- /dev/null
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/util/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * 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.
+ */
+
+/**
+ * Provides utility functionality for PCEP messages.
+ */
+package org.onosproject.pcepio.util;
