diff --git a/core/api/src/main/java/org/onosproject/net/tunnel/TunnelStore.java b/core/api/src/main/java/org/onosproject/net/tunnel/TunnelStore.java
new file mode 100644
index 0000000..c09e7f1
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/net/tunnel/TunnelStore.java
@@ -0,0 +1,114 @@
+/*
+ * 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.net.tunnel;
+
+import org.onosproject.net.ConnectPoint;
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.provider.ProviderId;
+import org.onosproject.store.Store;
+
+/**
+ * Manages inventory of tunnels.
+ */
+public interface TunnelStore extends Store<TunnelEvent, TunnelStoreDelegate> {
+
+    /**
+     * Returns the number of tunnels in the store.
+     *
+     * @return number of tunnels
+     */
+    int getTunnelCount();
+
+    /**
+     * Returns an iterable collection of all tunnel in the inventory.
+     *
+     * @return collection of all tunnels
+     */
+    Iterable<Tunnel> getTunnels();
+
+    /**
+     * Returns all tunnels egressing from the specified device.
+     *
+     * @param deviceId device identifier
+     * @return set of device tunnels
+     */
+    Iterable<Tunnel> getDeviceEgressTunnels(DeviceId deviceId);
+
+    /**
+     * Returns all tunnels ingressing from the specified device.
+     *
+     * @param deviceId device identifier
+     * @return set of device tunnels
+     */
+    Iterable<Tunnel> getDeviceIngressTunnels(DeviceId deviceId);
+
+    /**
+     * Returns the tunnel between the two end-points and the tunnel type.
+     *
+     * @param src source connection point
+     * @param dst destination connection point
+     * @param type tunnel type
+     * @return tunnels or null if one not found between the end-points
+     */
+    Iterable<Tunnel> getTunnel(ConnectPoint src, ConnectPoint dst, Tunnel.Type type);
+
+    /**
+     * Returns all tunnels egressing from the specified connection point.
+     *
+     * @param src source connection point
+     * @return set of connection point tunnels
+     */
+    Iterable<Tunnel> getEgressTunnels(ConnectPoint src);
+
+    /**
+     * Returns all tunnels ingressing to the specified connection point.
+     *
+     * @param dst destination connection point
+     * @return set of connection point tunnels
+     */
+    Iterable<Tunnel> getIngressTunnels(ConnectPoint dst);
+
+    /**
+     * Creates a new tunnel based on the given information.
+     *
+     * @param providerId    provider identity (e.g., PCEP provider)
+     * @param tunnel tunnel information
+     * @return create tunnel event
+     */
+    public TunnelEvent addTunnel(ProviderId providerId,
+                                        Tunnel tunnel);
+
+    /**
+     * Updates a new tunnel based on the given information.
+     *
+     * @param providerId      provider identity (e.g., PCEP provider)
+     * @param tunnel tunnel
+     * @return update tunnel event
+     */
+    public TunnelEvent updateTunnel(ProviderId providerId,
+                                        Tunnel tunnel);
+
+    /**
+     * Removes a new tunnel based on the given information.
+     *
+     * @param providerId      provider identity (e.g., PCEP provider)
+     * @param tunnel tunnel
+     * @return remove tunnel event
+     */
+    TunnelEvent removeTunnel(ProviderId providerId,
+                             Tunnel tunnel);
+
+}
