diff --git a/apps/tetunnel/api/src/main/java/org/onosproject/tetunnel/api/TeTunnelProviderService.java b/apps/tetunnel/api/src/main/java/org/onosproject/tetunnel/api/TeTunnelProviderService.java
index 4b510b1..416d11b 100755
--- a/apps/tetunnel/api/src/main/java/org/onosproject/tetunnel/api/TeTunnelProviderService.java
+++ b/apps/tetunnel/api/src/main/java/org/onosproject/tetunnel/api/TeTunnelProviderService.java
@@ -18,6 +18,8 @@
 
 import org.onosproject.incubator.net.tunnel.Tunnel;
 import org.onosproject.incubator.net.tunnel.TunnelId;
+import org.onosproject.tetunnel.api.lsp.TeLsp;
+import org.onosproject.tetunnel.api.lsp.TeLspKey;
 import org.onosproject.tetunnel.api.tunnel.TeTunnel;
 import org.onosproject.tetunnel.api.tunnel.TeTunnelKey;
 
@@ -62,5 +64,27 @@
      */
     void updateTunnelState(TeTunnelKey key, Tunnel.State state);
 
+    /**
+     * Signifies that a TE LSP is created.
+     *
+     * @param lsp new created TE LSP attributes
+     * @return key of the TE LSP or null if failed
+     */
+    TeLspKey teLspAdded(TeLsp lsp);
+
+    /**
+     * Signifies that a TE LSP is removed.
+     *
+     * @param lsp removed TE LSP
+     */
+    void teLspRemoved(TeLsp lsp);
+
+    /**
+     * Updates TE LSP attributes.
+     *
+     * @param lsp new TE LSP attributes
+     */
+    void updateTeLsp(TeLsp lsp);
+
     //TODO: add interfaces for teGlobal and teLspState
 }
diff --git a/apps/tetunnel/api/src/main/java/org/onosproject/tetunnel/api/TeTunnelService.java b/apps/tetunnel/api/src/main/java/org/onosproject/tetunnel/api/TeTunnelService.java
index d4dd4b3..f6fef66 100755
--- a/apps/tetunnel/api/src/main/java/org/onosproject/tetunnel/api/TeTunnelService.java
+++ b/apps/tetunnel/api/src/main/java/org/onosproject/tetunnel/api/TeTunnelService.java
@@ -18,6 +18,8 @@
 
 import org.onosproject.incubator.net.tunnel.TunnelId;
 import org.onosproject.tetopology.management.api.TeTopologyKey;
+import org.onosproject.tetunnel.api.lsp.TeLsp;
+import org.onosproject.tetunnel.api.lsp.TeLspKey;
 import org.onosproject.tetunnel.api.tunnel.TeTunnel;
 import org.onosproject.tetunnel.api.tunnel.TeTunnelKey;
 
@@ -83,5 +85,20 @@
      */
     Collection<TeTunnel> getTeTunnels(TeTopologyKey teTopologyKey);
 
+    /**
+     * Returns the TE LSP with the specified key.
+     *
+     * @param key TE LSP key
+     * @return TeLsp or null if one with the given key is not known
+     */
+    TeLsp getTeLsp(TeLspKey key);
+
+    /**
+     * Returns a collection of currently known TE LSPs.
+     *
+     * @return collection of TeLsp
+     */
+    Collection<TeLsp> getTeLsps();
+
     //TODO: add interfaces for teGlobal and teLspState
 }
diff --git a/apps/tetunnel/api/src/main/java/org/onosproject/tetunnel/api/TeTunnelStore.java b/apps/tetunnel/api/src/main/java/org/onosproject/tetunnel/api/TeTunnelStore.java
index 84b795d..192dca2 100755
--- a/apps/tetunnel/api/src/main/java/org/onosproject/tetunnel/api/TeTunnelStore.java
+++ b/apps/tetunnel/api/src/main/java/org/onosproject/tetunnel/api/TeTunnelStore.java
@@ -18,6 +18,8 @@
 
 import org.onosproject.incubator.net.tunnel.TunnelId;
 import org.onosproject.tetopology.management.api.TeTopologyKey;
+import org.onosproject.tetunnel.api.lsp.TeLsp;
+import org.onosproject.tetunnel.api.lsp.TeLspKey;
 import org.onosproject.tetunnel.api.tunnel.TeTunnel;
 import org.onosproject.tetunnel.api.tunnel.TeTunnelKey;
 
@@ -114,4 +116,41 @@
      * @return filtered collection of TE tunnels
      */
     Collection<TeTunnel> getTeTunnels(TeTopologyKey teTopologyKey);
+
+    /**
+     * Adds a TE LSP.
+     *
+     * @param lsp TE LSP attributes
+     * @return true when success
+     */
+    boolean addTeLsp(TeLsp lsp);
+
+    /**
+     * Updates TE LSP attributes.
+     *
+     * @param lsp new TE LSP attributes
+     */
+    void updateTeLsp(TeLsp lsp);
+
+    /**
+     * Removes a TE LSP.
+     *
+     * @param key TE LSP key
+     */
+    void removeTeLsp(TeLspKey key);
+
+    /**
+     * Returns the TE LSP with the specified key.
+     *
+     * @param key TE LSP key
+     * @return TeLsp or null if one with the given key is not known
+     */
+    TeLsp getTeLsp(TeLspKey key);
+
+    /**
+     * Returns a collection of currently known TE LSP.
+     *
+     * @return collection of TeLsp
+     */
+    Collection<TeLsp> getTeLsps();
 }
diff --git a/apps/tetunnel/api/src/main/java/org/onosproject/tetunnel/api/lsp/DefaultTeLsp.java b/apps/tetunnel/api/src/main/java/org/onosproject/tetunnel/api/lsp/DefaultTeLsp.java
new file mode 100755
index 0000000..56d56a1
--- /dev/null
+++ b/apps/tetunnel/api/src/main/java/org/onosproject/tetunnel/api/lsp/DefaultTeLsp.java
@@ -0,0 +1,297 @@
+/*
+ * Copyright 2016-present 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.tetunnel.api.lsp;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Lists;
+import org.onosproject.tetopology.management.api.node.TeNodeKey;
+import org.onosproject.tetopology.management.api.node.TtpKey;
+import org.onosproject.tetunnel.api.tunnel.TeTunnel;
+import org.onosproject.tetunnel.api.tunnel.TeTunnelKey;
+import org.onosproject.tetunnel.api.tunnel.path.TeRouteSubobject;
+
+import java.util.List;
+
+/**
+ * Default implementation of TE LSP.
+ */
+public class DefaultTeLsp implements TeLsp {
+
+    private final TeLspKey teLspKey;
+    private final TeNodeKey srcNode;
+    private final TeNodeKey dstNode;
+    private final TtpKey srcTp;
+    private final TtpKey dstTp;
+    private final TeTunnelKey teTunnelKey;
+    private final TeTunnel.Type tunnelType;
+    private final TeTunnel.State operStatus;
+    private final LspProtectionRole lspProtectionRole;
+    private final OriginType originType;
+    private final List<TeRouteSubobject> lspRecordRoutes;
+
+    /**
+     * Creates an instance of default TE LSP with supplied information.
+     *
+     * @param teLspKey TE LSP key
+     * @param srcNode source TE node key
+     * @param dstNode destination TE node key
+     * @param srcTp source TE termination point key
+     * @param dstTp destination TE termination point key
+     * @param teTunnelKey TE tunnel key
+     * @param tunnelType TE tunnel type
+     * @param operStatus operational status
+     * @param lspProtectionRole protection type
+     * @param originType origin type
+     * @param lspRecordRoutes route of the LSP
+     */
+    protected DefaultTeLsp(TeLspKey teLspKey, TeNodeKey srcNode, TeNodeKey dstNode,
+                        TtpKey srcTp, TtpKey dstTp, TeTunnelKey teTunnelKey,
+                        TeTunnel.Type tunnelType, TeTunnel.State operStatus,
+                        LspProtectionRole lspProtectionRole,
+                        OriginType originType,
+                        List<TeRouteSubobject> lspRecordRoutes) {
+        this.srcNode = srcNode;
+        this.dstNode = dstNode;
+        this.srcTp = srcTp;
+        this.dstTp = dstTp;
+        this.teTunnelKey = teTunnelKey;
+        this.tunnelType = tunnelType;
+        this.operStatus = operStatus;
+        this.lspProtectionRole = lspProtectionRole;
+        this.originType = originType;
+        this.lspRecordRoutes = Lists.newArrayList(lspRecordRoutes);
+        this.teLspKey = teLspKey;
+    }
+
+    @Override
+    public TeLspKey teLspKey() {
+        return teLspKey;
+    }
+
+    @Override
+    public TeNodeKey srcNode() {
+        return srcNode;
+    }
+
+    @Override
+    public TeNodeKey dstNode() {
+        return dstNode;
+    }
+
+    @Override
+    public TtpKey srcTp() {
+        return srcTp;
+    }
+
+    @Override
+    public TtpKey dstTp() {
+        return dstTp;
+    }
+
+    @Override
+    public TeTunnelKey teTunnelKey() {
+        return teTunnelKey;
+    }
+
+    @Override
+    public TeTunnel.Type tunnelType() {
+        return tunnelType;
+    }
+
+    @Override
+    public TeTunnel.State operStatus() {
+        return operStatus;
+    }
+
+    @Override
+    public LspProtectionRole lspProtectionRole() {
+        return lspProtectionRole;
+    }
+
+    @Override
+    public OriginType originType() {
+        return originType;
+    }
+
+    @Override
+    public List<TeRouteSubobject> lspRecordRoutes() {
+        return ImmutableList.copyOf(lspRecordRoutes);
+    }
+
+
+    /**
+     * Creates a new default TE LSP builder.
+     *
+     * @return default builder
+     */
+    public static Builder builder() {
+        return new Builder();
+    }
+
+    /**
+     * Builder for default TE LSP objects.
+     */
+    public static class Builder {
+
+        private TeLspKey teLspKey = null;
+        private TeNodeKey srcNode = null;
+        private TeNodeKey dstNode = null;
+        private TtpKey srcTp = null;
+        private TtpKey dstTp = null;
+        private TeTunnelKey teTunnelKey = null;
+        private TeTunnel.Type tunnelType = null;
+        private TeTunnel.State operStatus = null;
+        private LspProtectionRole lspProtectionRole = null;
+        private OriginType originType = null;
+        private List<TeRouteSubobject> lspRecordRoutes = Lists.newArrayList();
+
+        /**
+         * Builds a default TE LSP object from the accumulated parameters.
+         *
+         * @return default TE LSP object
+         */
+        public DefaultTeLsp build() {
+            return new DefaultTeLsp(teLspKey, srcNode, dstNode, srcTp, dstTp,
+                                    teTunnelKey, tunnelType, operStatus,
+                                    lspProtectionRole, originType,
+                                    lspRecordRoutes);
+        }
+
+        /**
+         * Sets TE LSP key to be used by this builder.
+         *
+         * @param teLspKey TE LSP key
+         * @return self
+         */
+        public Builder teLspKey(TeLspKey teLspKey) {
+            this.teLspKey = teLspKey;
+            return this;
+        }
+
+        /**
+         * Sets source node key to be used by this builder.
+         *
+         * @param srcNode source node key
+         * @return self
+         */
+        public Builder srcNode(TeNodeKey srcNode) {
+            this.srcNode = srcNode;
+            return this;
+        }
+
+        /**
+         * Sets destination node key to be used by this builder.
+         *
+         * @param dstNode destination node key
+         * @return self
+         */
+        public Builder dstNode(TeNodeKey dstNode) {
+            this.dstNode = dstNode;
+            return this;
+        }
+
+        /**
+         * Sets source termination point key to be used by this builder.
+         *
+         * @param srcTp source termination point key
+         * @return self
+         */
+        public Builder srcTp(TtpKey srcTp) {
+            this.srcTp = srcTp;
+            return this;
+        }
+
+        /**
+         * Sets destination termination point key to be used by this builder.
+         *
+         * @param dstTp destination termination point key
+         * @return self
+         */
+        public Builder dstTp(TtpKey dstTp) {
+            this.dstTp = dstTp;
+            return this;
+        }
+
+        /**
+         * Sets TE tunnel key to be used by this builder.
+         *
+         * @param teTunnelKey TE tunnel key
+         * @return self
+         */
+        public Builder teTunnelKey(TeTunnelKey teTunnelKey) {
+            this.teTunnelKey = teTunnelKey;
+            return this;
+        }
+
+        /**
+         * Sets TE tunnel type to be used by this builder.
+         *
+         * @param tunnelType TE tunnel type
+         * @return self
+         */
+        public Builder tunnelType(TeTunnel.Type tunnelType) {
+            this.tunnelType = tunnelType;
+            return this;
+        }
+
+        /**
+         * Sets LSP operational status to be used by this builder.
+         *
+         * @param operStatus LSP operational status
+         * @return self
+         */
+        public Builder operStatus(TeTunnel.State operStatus) {
+            this.operStatus = operStatus;
+            return this;
+        }
+
+        /**
+         * Sets LSP protection role to be used by this builder.
+         *
+         * @param lspProtectionRole LSP protection role
+         * @return self
+         */
+        public Builder lspProtectionRole(LspProtectionRole lspProtectionRole) {
+            this.lspProtectionRole = lspProtectionRole;
+            return this;
+        }
+
+        /**
+         * Sets LSP origin type to be used by this builder.
+         *
+         * @param originType LSP origin type
+         * @return self
+         */
+        public Builder originType(OriginType originType) {
+            this.originType = originType;
+            return this;
+        }
+
+        /**
+         * Sets LSP record routes to be used by this builder.
+         *
+         * @param lspRecordRoutes LSP record routes
+         * @return self
+         */
+        public Builder lspRecordRoutes(List<TeRouteSubobject> lspRecordRoutes) {
+            if (lspRecordRoutes != null) {
+                this.lspRecordRoutes = lspRecordRoutes;
+            }
+            return this;
+        }
+    }
+}
diff --git a/apps/tetunnel/api/src/main/java/org/onosproject/tetunnel/api/lsp/TeLsp.java b/apps/tetunnel/api/src/main/java/org/onosproject/tetunnel/api/lsp/TeLsp.java
new file mode 100755
index 0000000..95b55cc
--- /dev/null
+++ b/apps/tetunnel/api/src/main/java/org/onosproject/tetunnel/api/lsp/TeLsp.java
@@ -0,0 +1,135 @@
+/*
+ * Copyright 2016-present 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.tetunnel.api.lsp;
+
+import org.onosproject.tetopology.management.api.node.TeNodeKey;
+import org.onosproject.tetopology.management.api.node.TtpKey;
+import org.onosproject.tetunnel.api.tunnel.TeTunnel;
+import org.onosproject.tetunnel.api.tunnel.TeTunnelKey;
+import org.onosproject.tetunnel.api.tunnel.path.TeRouteSubobject;
+
+import java.util.List;
+
+/**
+ * Representation of a TE LSP.
+ */
+public interface TeLsp {
+
+    /**
+     * Protection roles of TE LSP.
+     */
+    enum LspProtectionRole {
+        /**
+         * Designates a working LSP.
+         */
+        WORKING,
+        /**
+         * Designates a protection LSP.
+         */
+        PROTECTION
+    }
+
+    /**
+     * Origin type of LSP relative to the location of the local switch in the
+     * path.
+     */
+    enum OriginType {
+        INGRESS,
+        EGRESS,
+        TRANSIT
+    }
+
+    /**
+     * Returns key of this TE LSP.
+     *
+     * @return key of this TE LSP
+     */
+    TeLspKey teLspKey();
+
+    /**
+     * Returns source TE node of this tunnel.
+     *
+     * @return source TE node key
+     */
+    TeNodeKey srcNode();
+
+    /**
+     * Returns source TE termination point of this tunnel.
+     *
+     * @return source TE termination point key
+     */
+    TtpKey srcTp();
+
+    /**
+     * Returns destination TE node of this tunnel.
+     *
+     * @return destination TE node key
+     */
+    TeNodeKey dstNode();
+
+    /**
+     * Returns destination TE termination point of this tunnel.
+     *
+     * @return destination TE termination point key
+     */
+    TtpKey dstTp();
+
+    /**
+     * Returns the TE tunnel used in the SESSION that remains constant over
+     * the life of the tunnel.
+     *
+     * @return TE tunnel key
+     */
+    TeTunnelKey teTunnelKey();
+
+    /**
+     * Returns corresponding tunnel type.
+     *
+     * @return TE tunnel type
+     */
+    TeTunnel.Type tunnelType();
+
+    /**
+     * Returns operational status of the LSP.
+     *
+     * @return operational status
+     */
+    TeTunnel.State operStatus();
+
+    /**
+     * Returns protection role of the LSP.
+     *
+     * @return protection role
+     */
+    LspProtectionRole lspProtectionRole();
+
+    /**
+     * Return origin type of the LSP.
+     *
+     * @return origin type
+     */
+    OriginType originType();
+
+    /**
+     * Returns route of this LSP.
+     *
+     * @return list of TeRouteSubobject
+     */
+    List<TeRouteSubobject> lspRecordRoutes();
+
+    //TODO add more attributes here.
+}
diff --git a/apps/tetunnel/app/src/main/java/org/onosproject/tetunnel/impl/DistributedTeTunnelStore.java b/apps/tetunnel/app/src/main/java/org/onosproject/tetunnel/impl/DistributedTeTunnelStore.java
index 2824007..ddca1e1 100755
--- a/apps/tetunnel/app/src/main/java/org/onosproject/tetunnel/impl/DistributedTeTunnelStore.java
+++ b/apps/tetunnel/app/src/main/java/org/onosproject/tetunnel/impl/DistributedTeTunnelStore.java
@@ -30,6 +30,8 @@
 import org.onosproject.store.service.LogicalClockService;
 import org.onosproject.store.service.StorageService;
 import org.onosproject.tetopology.management.api.TeTopologyKey;
+import org.onosproject.tetunnel.api.lsp.TeLsp;
+import org.onosproject.tetunnel.api.lsp.TeLspKey;
 import org.onosproject.tetunnel.api.tunnel.TeTunnel;
 import org.onosproject.tetunnel.api.TeTunnelStore;
 import org.onosproject.tetunnel.api.tunnel.TeTunnelKey;
@@ -57,6 +59,7 @@
 
     private EventuallyConsistentMap<TeTunnelKey, TeTunnel> teTunnels;
     private EventuallyConsistentMap<TeTunnelKey, TunnelId> tunnelIds;
+    private EventuallyConsistentMap<TeLspKey, TeLsp> lsps;
 
     @Activate
     public void activate() {
@@ -77,6 +80,12 @@
                 .withTimestampProvider((k, v) -> clockService.getTimestamp())
                 .build();
 
+        lsps = storageService.<TeLspKey, TeLsp>eventuallyConsistentMapBuilder()
+                .withName("TeLspStore")
+                .withSerializer(serializer)
+                .withTimestampProvider((k, v) -> clockService.getTimestamp())
+                .build();
+
         log.info("Started");
     }
 
@@ -84,6 +93,7 @@
     public void deactivate() {
         teTunnels.destroy();
         tunnelIds.destroy();
+        lsps.destroy();
 
         log.info("Stopped");
     }
@@ -166,4 +176,42 @@
                         .equals(teTopologyKey))
                 .collect(Collectors.toList()));
     }
+
+    @Override
+    public boolean addTeLsp(TeLsp lsp) {
+        if (lsp == null) {
+            log.warn("TeLsp is null");
+            return false;
+        }
+        if (lsps.containsKey(lsp.teLspKey())) {
+            log.error("TeLsp exist {}", lsp.teLspKey());
+            return false;
+        }
+        lsps.put(lsp.teLspKey(), lsp);
+        return true;
+    }
+
+    @Override
+    public void updateTeLsp(TeLsp lsp) {
+        if (lsp == null) {
+            log.warn("TeLsp is null");
+            return;
+        }
+        lsps.put(lsp.teLspKey(), lsp);
+    }
+
+    @Override
+    public void removeTeLsp(TeLspKey key) {
+        lsps.remove(key);
+    }
+
+    @Override
+    public TeLsp getTeLsp(TeLspKey key) {
+        return lsps.get(key);
+    }
+
+    @Override
+    public Collection<TeLsp> getTeLsps() {
+        return ImmutableList.copyOf(lsps.values());
+    }
 }
diff --git a/apps/tetunnel/app/src/main/java/org/onosproject/tetunnel/impl/TeTunnelManager.java b/apps/tetunnel/app/src/main/java/org/onosproject/tetunnel/impl/TeTunnelManager.java
index 82ce04f..3fc28fb 100755
--- a/apps/tetunnel/app/src/main/java/org/onosproject/tetunnel/impl/TeTunnelManager.java
+++ b/apps/tetunnel/app/src/main/java/org/onosproject/tetunnel/impl/TeTunnelManager.java
@@ -37,6 +37,8 @@
 import org.onosproject.tetopology.management.api.TeTopology;
 import org.onosproject.tetopology.management.api.TeTopologyKey;
 import org.onosproject.tetopology.management.api.TeTopologyService;
+import org.onosproject.tetunnel.api.lsp.TeLsp;
+import org.onosproject.tetunnel.api.lsp.TeLspKey;
 import org.onosproject.tetunnel.api.tunnel.TeTunnel;
 import org.onosproject.tetunnel.api.TeTunnelAdminService;
 import org.onosproject.tetunnel.api.TeTunnelProviderService;
@@ -151,6 +153,25 @@
     }
 
     @Override
+    public TeLspKey teLspAdded(TeLsp lsp) {
+        if (store.addTeLsp(lsp)) {
+            return lsp.teLspKey();
+        }
+
+        return null;
+    }
+
+    @Override
+    public void teLspRemoved(TeLsp lsp) {
+        store.removeTeLsp(lsp.teLspKey());
+    }
+
+    @Override
+    public void updateTeLsp(TeLsp lsp) {
+        store.updateTeLsp(lsp);
+    }
+
+    @Override
     public void removeTeTunnel(TeTunnelKey teTunnelKey) {
         tunnelAdminService.updateTunnelState(
                 tunnelService.queryTunnel(getTunnelId(teTunnelKey)),
@@ -214,6 +235,16 @@
     }
 
     @Override
+    public TeLsp getTeLsp(TeLspKey key) {
+        return store.getTeLsp(key);
+    }
+
+    @Override
+    public Collection<TeLsp> getTeLsps() {
+        return store.getTeLsps();
+    }
+
+    @Override
     public TunnelId teTunnelAdded(TeTunnel teTunnel) {
         //TODO teTunnelAdded
         return null;
