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;
