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
new file mode 100755
index 0000000..d730002
--- /dev/null
+++ b/pcep/pcepio/src/main/java/org/onosproject/pcepio/protocol/PcepLspaObject.java
@@ -0,0 +1,291 @@
+/*
+ * 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;
+
+import org.jboss.netty.buffer.ChannelBuffer;
+import org.onosproject.pcepio.exceptions.PcepParseException;
+import org.onosproject.pcepio.types.PcepObjectHeader;
+import org.onosproject.pcepio.types.PcepValueType;
+
+/**
+ * Abstraction of an entity providing PCEP LSPA Object.
+ */
+public interface PcepLspaObject {
+
+    /**
+     * Returns L flag in LSPA Object.
+     *
+     * @return L flag in LSPA Object
+     */
+    boolean getLFlag();
+
+    /**
+     * Sets L flag in LSPA Object.
+     *
+     * @param value L flag
+     */
+    void setLFlag(boolean value);
+
+    /**
+     * Returns Exclude Any field in LSPA Object.
+     *
+     * @return Exclude Any field in LSPA Object
+     */
+    int getExcludeAny();
+
+    /**
+     * Sets Exclude Any field in LSPA Object.
+     *
+     * @param value Exclude Any field
+     */
+    void setExcludeAny(int value);
+
+    /**
+     * Returns Include Any field in LSPA Object.
+     *
+     * @return Include Any field in LSPA Object
+     */
+    int getIncludeAny();
+
+    /**
+     * Sets Include Any field in LSPA Object.
+     *
+     * @param value Include Any field
+     */
+    void setIncludeAny(int value);
+
+    /**
+     * Returns Include All field in LSPA Object.
+     *
+     * @return Include All field in LSPA Object
+     */
+    int getIncludeAll();
+
+    /**
+     * Sets Include All field in LSPA Object.
+     *
+     * @param value Include All field
+     */
+    void setIncludeAll(int value);
+
+    /**
+     * Returns Setup Priority field in LSPA Object.
+     *
+     * @return Setup Priority field in LSPA Object
+     */
+    byte getSetupPriority();
+
+    /**
+     * Sets Setup Priority field in LSPA Object.
+     *
+     * @param value Setup Priority field
+     */
+    void setSetupPriority(byte value);
+
+    /**
+     * Returns Hold Priority field in LSPA Object.
+     *
+     * @return Hold Priority field in LSPA Object
+     */
+    byte getHoldPriority();
+
+    /**
+     * Sets Hold Priority field in LSPA Object.
+     *
+     * @param value Hold Priority field
+     */
+    void setHoldPriority(byte value);
+
+    /**
+     * Returns list of Optional Tlvs in LSPA Object.
+     *
+     * @return list of Optional Tlvs in LSPA Object
+     */
+    LinkedList<PcepValueType> getOptionalTlv();
+
+    /**
+     * Sets Optional Tlvs in LSPA Object.
+     *
+     * @param llOptionalTlv Optional Tlvs in LSPA Object
+     */
+    void setOptionalTlv(LinkedList<PcepValueType> llOptionalTlv);
+
+    /**
+     * Prints attributes of LSPA object.
+     */
+    void print();
+
+    /**
+     * Writes the LSPA Object into channel buffer.
+     *
+     * @param bb channel buffer
+     * @return Returns the writerIndex of this buffer
+     * @throws PcepParseException while writing LSPA object into Channel Buffer.
+     */
+    int write(ChannelBuffer bb) throws PcepParseException;
+
+    /**
+     * Builder interface with get and set functions to build bandwidth object.
+     */
+    public interface Builder {
+
+        /**
+         * Builds LSPA Object.
+         *
+         * @return LSPA Object
+         * @throws PcepParseException while building LSPA object.
+         */
+        PcepLspaObject build() throws PcepParseException;
+
+        /**
+         * Returns LSPA object header.
+         *
+         * @return LSPA object header
+         */
+        PcepObjectHeader getLspaObjHeader();
+
+        /**
+         * Sets LSPA object header and returns its builder.
+         *
+         * @param obj LSPA object header
+         * @return Builder by setting LSPA object header
+         */
+        Builder setLspaObjHeader(PcepObjectHeader obj);
+
+        /**
+         * Returns L flag in LSPA Object.
+         *
+         * @return L flag in LSPA Object
+         */
+        boolean getLFlag();
+
+        /**
+         * Sets L flag in LSPA Object and return its builder.
+         *
+         * @param value L flag in LSPA Object
+         * @return Builder by setting L flag
+         */
+        Builder setLFlag(boolean value);
+
+        /**
+         * Returns Exclude Any field in LSPA Object.
+         *
+         * @return Exclude Any field in LSPA Object
+         */
+        int getExcludeAny();
+
+        /**
+         * Sets Exclude Any field in LSPA Object and return its builder.
+         *
+         * @param value Exclude Any field in LSPA Object
+         * @return Builder by setting Exclude Any field
+         */
+        Builder setExcludeAny(int value);
+
+        /**
+         * Returns Include Any field in LSPA Object.
+         *
+         * @return Include Any field in LSPA Object
+         */
+        int getIncludeAny();
+
+        /**
+         * Sets Include Any field in LSPA Object and return its builder.
+         *
+         * @param value Include Any field in LSPA Object
+         * @return Builder by setting Include Any field
+         */
+        Builder setIncludeAny(int value);
+
+        /**
+         * Returns Include All field in LSPA Object.
+         *
+         * @return Include All field in LSPA Object
+         */
+        int getIncludeAll();
+
+        /**
+         * Sets Include All field in LSPA Object and return its builder.
+         *
+         * @param value Include All field in LSPA Object
+         * @return Builder by setting Include All field
+         */
+        Builder setIncludeAll(int value);
+
+        /**
+         * Returns Setup Priority field in LSPA Object.
+         *
+         * @return Setup Priority field in LSPA Object
+         */
+        byte getSetupPriority();
+
+        /**
+         * Sets Setup Priority field in LSPA Object and return its builder.
+         *
+         * @param value Setup Priority field in LSPA Object
+         * @return Builder by setting Setup Priority field
+         */
+        Builder setSetupPriority(byte value);
+
+        /**
+         * Returns Hold Priority field in LSPA Object.
+         *
+         * @return Hold Priority field in LSPA Object
+         */
+        byte getHoldPriority();
+
+        /**
+         * Sets Hold Priority field in LSPA Object and return its builder.
+         *
+         * @param value Hold Priority field in LSPA Object
+         * @return Builder by setting Hold Priority field
+         */
+        Builder setHoldPriority(byte value);
+
+        /**
+         * Returns list of Optional Tlvs in LSPA Object.
+         *
+         * @return list of Optional Tlvs in LSPA Object
+         */
+        LinkedList<PcepValueType> getOptionalTlv();
+
+        /**
+         * Sets list of Optional Tlvs in LSPA Object.
+         *
+         * @param llOptionalTlv list of Optional Tlvs
+         * @return builder by setting list of Optional Tlvs
+         */
+        Builder setOptionalTlv(LinkedList<PcepValueType> llOptionalTlv);
+
+        /**
+         * Sets P flag in LSPA object header and returns its builder.
+         *
+         * @param value boolean value to set P flag
+         * @return Builder by setting P flag
+         */
+        Builder setPFlag(boolean value);
+
+        /**
+         * Sets I flag in LSPA object header and returns its builder.
+         *
+         * @param value boolean value to set I flag
+         * @return Builder by setting I flag
+         */
+        Builder setIFlag(boolean value);
+    }
+}
\ No newline at end of file
