diff --git a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiPipeconfDeviceMappingEvent.java b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiPipeconfDeviceMappingEvent.java
new file mode 100644
index 0000000..540967c
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiPipeconfDeviceMappingEvent.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2017-present Open Networking Foundation
+ *
+ * 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.pi.runtime;
+
+import com.google.common.annotations.Beta;
+import org.onosproject.event.AbstractEvent;
+import org.onosproject.net.DeviceId;
+
+/**
+ * Entity that represents pipeconf to device binding events.
+ */
+@Beta
+public class PiPipeconfDeviceMappingEvent extends AbstractEvent<PiPipeconfDeviceMappingEvent.Type, DeviceId> {
+
+    /**
+     * Type of pipeconf to device mapping event.
+     */
+    public enum Type {
+
+        /**
+         * Individual mapping pipeconf to device added.
+         */
+        CREATED,
+
+        /**
+         * Individual mapping pipeconf to device removed.
+         */
+        REMOVED,
+    }
+
+    /**
+     * Creates an event due to one Pipeconf being mapped to a device.
+     *
+     * @param type     event type
+     * @param deviceId the deviceId for which the pipeconf was bound or updated.
+     */
+    public PiPipeconfDeviceMappingEvent(PiPipeconfDeviceMappingEvent.Type type, DeviceId deviceId) {
+        super(type, deviceId);
+    }
+
+}
diff --git a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiPipeconfMappingStore.java b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiPipeconfMappingStore.java
new file mode 100644
index 0000000..76438b2
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiPipeconfMappingStore.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2017-present Open Networking Foundation
+ *
+ * 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.pi.runtime;
+
+import com.google.common.annotations.Beta;
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.pi.model.PiPipeconfId;
+import org.onosproject.store.Store;
+
+import java.util.Set;
+
+/**
+ * Manages the mapping of Pipeconfs that are deployed to devices; not intended for direct use.
+ */
+@Beta
+public interface PiPipeconfMappingStore extends Store<PiPipeconfDeviceMappingEvent, PiPipeconfMappingStoreDelegate> {
+
+    /**
+     * Retrieves the id of the pipeconf deployed on a given device.
+     *
+     * @param deviceId device identifier
+     * @return PiPipeconfId
+     */
+    PiPipeconfId getPipeconfId(DeviceId deviceId);
+
+    /**
+     * Retrieves the set of devices on which the given pipeconf is applied.
+     *
+     * @param pipeconfId pipeconf identifier
+     * @return the set of devices that have that pipeconf applied.
+     */
+    Set<DeviceId> getDevices(PiPipeconfId pipeconfId);
+
+    /**
+     * Stores or updates a binding between a device and the pipeconf deployed on it.
+     *
+     * @param deviceId   deviceId
+     * @param pipeconfId pipeconfId
+     */
+
+    void createOrUpdateBinding(DeviceId deviceId, PiPipeconfId pipeconfId);
+
+    /**
+     * Removes device to pipeconf binding.
+     *
+     * @param deviceId deviceId
+     */
+
+    void removeBinding(DeviceId deviceId);
+
+}
diff --git a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiPipeconfMappingStoreDelegate.java b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiPipeconfMappingStoreDelegate.java
new file mode 100644
index 0000000..c2fbf17
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiPipeconfMappingStoreDelegate.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2017-present Open Networking Foundation
+ *
+ * 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.pi.runtime;
+
+import com.google.common.annotations.Beta;
+import org.onosproject.store.StoreDelegate;
+
+/**
+ * Pipeconf store delegate abstraction.
+ */
+@Beta
+public interface PiPipeconfMappingStoreDelegate extends StoreDelegate<PiPipeconfDeviceMappingEvent> {
+}
diff --git a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiPipeconfService.java b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiPipeconfService.java
index c43be6d..79bc624 100644
--- a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiPipeconfService.java
+++ b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiPipeconfService.java
@@ -89,4 +89,5 @@
      * @return an optional pipeconf identifier
      */
     Optional<PiPipeconfId> ofDevice(DeviceId deviceId);
+
 }
diff --git a/core/api/src/test/java/org/onosproject/store/service/TestEventuallyConsistentMap.java b/core/api/src/test/java/org/onosproject/store/service/TestEventuallyConsistentMap.java
index b28356d..4a8dc47 100644
--- a/core/api/src/test/java/org/onosproject/store/service/TestEventuallyConsistentMap.java
+++ b/core/api/src/test/java/org/onosproject/store/service/TestEventuallyConsistentMap.java
@@ -103,7 +103,7 @@
         if (result != null) {
             EventuallyConsistentMapEvent<K, V> removeEvent =
                     new EventuallyConsistentMapEvent<>(mapName, REMOVE,
-                            key, map.get(key));
+                            key, result);
             notifyListeners(removeEvent);
         }
         return result;
