diff --git a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/impl/LispMappingDatabase.java b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/impl/LispMappingDatabase.java
index 4545542..9aec8e9 100644
--- a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/impl/LispMappingDatabase.java
+++ b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/impl/LispMappingDatabase.java
@@ -89,6 +89,20 @@
     }
 
     /**
+     * Obtains all of the EID-RLOC mapping records.
+     *
+     * @return all of the EID-RLOC mapping records
+     */
+    public List<LispMapRecord> getAllMapRecords() {
+
+        List<LispMapRecord> mapRecords = Lists.newArrayList();
+
+        map.values().forEach(value -> mapRecords.add(value.getMapRecord()));
+
+        return mapRecords;
+    }
+
+    /**
      * Obtains an EID-RLOC mapping record in accordance with the proxy map reply
      * flag bit and EID record.
      *
diff --git a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/impl/map/ExpireHashMap.java b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/impl/map/ExpireHashMap.java
index 08f7c88..bb9fd04 100644
--- a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/impl/map/ExpireHashMap.java
+++ b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/impl/map/ExpireHashMap.java
@@ -18,6 +18,8 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.util.Collection;
+import java.util.Collections;
 import java.util.Set;
 import java.util.Timer;
 import java.util.TimerTask;
@@ -157,6 +159,13 @@
     }
 
     @Override
+    public Collection<V> values() {
+        Collection<V> values = Collections.emptyList();
+        map.values().forEach(v -> values.add(v.getValue()));
+        return values;
+    }
+
+    @Override
     public boolean isEmpty() {
         return map.isEmpty();
     }
diff --git a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/impl/map/ExpireMap.java b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/impl/map/ExpireMap.java
index 7bb8fcd..b59d0ef 100644
--- a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/impl/map/ExpireMap.java
+++ b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/impl/map/ExpireMap.java
@@ -15,6 +15,7 @@
  */
 package org.onosproject.lisp.ctl.impl.map;
 
+import java.util.Collection;
 import java.util.Set;
 
 /**
@@ -125,6 +126,23 @@
     Set<K> keySet();
 
     /**
+     * Returns a {@link Collection} view of the values contained in this map.
+     * The collection is backed by the map, so changes to the map are
+     * reflected in the collection, and vice-versa.  If the map is
+     * modified while an iteration over the collection is in progress
+     * (except through the iterator's own <tt>remove</tt> operation),
+     * the results of the iteration are undefined.  The collection
+     * supports element removal, which removes the corresponding
+     * mapping from the map, via the <tt>Iterator.remove</tt>,
+     * <tt>Collection.remove</tt>, <tt>removeAll</tt>,
+     * <tt>retainAll</tt> and <tt>clear</tt> operations.  It does not
+     * support the <tt>add</tt> or <tt>addAll</tt> operations.
+     *
+     * @return a collection view of the values contained in this map
+     */
+    Collection<V> values();
+
+    /**
      * Returns <tt>true</tt> if this map contains no key-value mappings.
      *
      * @return <tt>true</tt> if this map contains no key-value mappings
