diff --git a/apps/mappingmanagement/mgr/src/main/java/org/onosproject/mapping/impl/DistributedMappingStore.java b/apps/mappingmanagement/mgr/src/main/java/org/onosproject/mapping/impl/DistributedMappingStore.java
index 55208ce..d84032f 100644
--- a/apps/mappingmanagement/mgr/src/main/java/org/onosproject/mapping/impl/DistributedMappingStore.java
+++ b/apps/mappingmanagement/mgr/src/main/java/org/onosproject/mapping/impl/DistributedMappingStore.java
@@ -166,6 +166,15 @@
     }
 
     @Override
+    public Iterable<MappingEntry> getAllMappingEntries(Type type) {
+
+        Map<MappingId, Mapping> storeMap = getStoreMap(type);
+        return ImmutableList.copyOf(storeMap.values().stream()
+                                            .map(DefaultMappingEntry::new)
+                                            .collect(Collectors.toList()));
+    }
+
+    @Override
     public MappingEntry getMappingEntry(Type type, Mapping mapping) {
 
         return new DefaultMappingEntry(getStoreMap(type).get(mapping.id()));
diff --git a/apps/mappingmanagement/mgr/src/main/java/org/onosproject/mapping/impl/MappingManager.java b/apps/mappingmanagement/mgr/src/main/java/org/onosproject/mapping/impl/MappingManager.java
index 289bb2a..4f0ed79 100644
--- a/apps/mappingmanagement/mgr/src/main/java/org/onosproject/mapping/impl/MappingManager.java
+++ b/apps/mappingmanagement/mgr/src/main/java/org/onosproject/mapping/impl/MappingManager.java
@@ -27,6 +27,7 @@
 import org.onosproject.mapping.MappingAdminService;
 import org.onosproject.mapping.MappingEntry;
 import org.onosproject.mapping.MappingEvent;
+import org.onosproject.mapping.MappingKey;
 import org.onosproject.mapping.MappingListener;
 import org.onosproject.mapping.MappingProvider;
 import org.onosproject.mapping.MappingProviderRegistry;
@@ -35,6 +36,7 @@
 import org.onosproject.mapping.MappingStore;
 import org.onosproject.mapping.MappingStore.Type;
 import org.onosproject.mapping.MappingStoreDelegate;
+import org.onosproject.mapping.MappingValue;
 import org.onosproject.net.Device;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.device.DeviceService;
@@ -134,6 +136,21 @@
     }
 
     /**
+     * Obtains a mapping value associated a mapping key.
+     *
+     * @param mappingKey a given mapping key
+     * @return a mapping value
+     */
+    private MappingValue getMappingValueByMappingKey(MappingKey mappingKey) {
+        for (MappingEntry entry : store.getAllMappingEntries(Type.MAP_DATABASE)) {
+            if (entry.key().equals(mappingKey)) {
+                return entry.value();
+            }
+        }
+        return null;
+    }
+
+    /**
      * Store delegate.
      */
     private class InternalStoreDelegate implements MappingStoreDelegate {
@@ -163,5 +180,10 @@
         public void mappingAdded(MappingEntry mappingEntry, Type type) {
             storeMappingEntry(type, mappingEntry);
         }
+
+        @Override
+        public MappingValue mappingQueried(MappingKey mappingKey) {
+            return getMappingValueByMappingKey(mappingKey);
+        }
     }
 }
diff --git a/apps/mappingmanagement/mgr/src/main/java/org/onosproject/mapping/impl/SimpleMappingStore.java b/apps/mappingmanagement/mgr/src/main/java/org/onosproject/mapping/impl/SimpleMappingStore.java
index c349423..8b02868 100644
--- a/apps/mappingmanagement/mgr/src/main/java/org/onosproject/mapping/impl/SimpleMappingStore.java
+++ b/apps/mappingmanagement/mgr/src/main/java/org/onosproject/mapping/impl/SimpleMappingStore.java
@@ -16,6 +16,7 @@
 package org.onosproject.mapping.impl;
 
 import com.google.common.collect.FluentIterable;
+import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
@@ -87,22 +88,8 @@
     public int getMappingCount(Type type) {
         int sum = 0;
 
-        ConcurrentMap<DeviceId, ConcurrentMap<MappingId,
-                List<StoredMappingEntry>>> store = Maps.newConcurrentMap();
-
-        switch (type) {
-            case MAP_DATABASE:
-                store = mapDbStore;
-                break;
-            case MAP_CACHE:
-                store = mapCacheStore;
-                break;
-            default:
-                log.error(UNRECOGNIZED_STORE_MSG, type);
-                break;
-        }
-
-        for (ConcurrentMap<MappingId, List<StoredMappingEntry>> mapDb : store.values()) {
+        for (ConcurrentMap<MappingId, List<StoredMappingEntry>> mapDb :
+                getMappingStore(type).values()) {
             for (List<StoredMappingEntry> mes : mapDb.values()) {
                 sum += mes.size();
             }
@@ -111,6 +98,21 @@
         return sum;
     }
 
+    @Override
+    public Iterable<MappingEntry> getAllMappingEntries(Type type) {
+
+        List<MappingEntry> entries = Lists.newArrayList();
+
+        for (ConcurrentMap<MappingId, List<StoredMappingEntry>> mapDb :
+                getMappingStore(type).values()) {
+            for (List<StoredMappingEntry> mes : mapDb.values()) {
+                entries.addAll(mes);
+            }
+        }
+
+        return entries;
+    }
+
     /**
      * Obtains the mapping store for specified device and store type.
      *
