diff --git a/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/DefaultMapping.java b/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/DefaultMapping.java
index a6836f8..42415ff 100644
--- a/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/DefaultMapping.java
+++ b/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/DefaultMapping.java
@@ -122,6 +122,18 @@
                 .toString();
     }
 
+    /**
+     * Returns a default mapping builder.
+     *
+     * @return builder
+     */
+    public static Builder builder() {
+        return new Builder();
+    }
+
+    /**
+     * Default mapping builder.
+     */
     public static final class Builder implements Mapping.Builder {
 
         private MappingId id;
diff --git a/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/DefaultMappingEntry.java b/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/DefaultMappingEntry.java
index cbdce56..626cee2 100644
--- a/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/DefaultMappingEntry.java
+++ b/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/DefaultMappingEntry.java
@@ -40,6 +40,15 @@
         this.state = state;
     }
 
+    /**
+     * Creates a mapping entry specified with the mapping.
+     *
+     * @param mapping mapping
+     */
+    public DefaultMappingEntry(Mapping mapping) {
+        this(mapping, MappingEntryState.PENDING_ADD);
+    }
+
     @Override
     public MappingEntryState state() {
         return state;
diff --git a/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/MappingEvent.java b/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/MappingEvent.java
index 4b03d13..8d23085 100644
--- a/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/MappingEvent.java
+++ b/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/MappingEvent.java
@@ -22,6 +22,9 @@
  */
 public class MappingEvent extends AbstractEvent<MappingEvent.Type, Mapping> {
 
+    /**
+     * Type of mapping events.
+     */
     public enum Type {
 
         /**
@@ -54,10 +57,28 @@
         /**
          * Signifies that a request to remove flow rule has been added to the store.
          */
-        MAPPING_REMOVE_REQUESTED,
+        MAPPING_REMOVE_REQUESTED
     }
 
+    /**
+     * Creates an event of a given type and for the specified mapping and the
+     * current time.
+     *
+     * @param type    mapping event type
+     * @param mapping event mapping subject
+     */
     public MappingEvent(Type type, Mapping mapping) {
         super(type, mapping);
     }
+
+    /**
+     * Creates an event of a given type and for the specified mapping and time.
+     *
+     * @param type    mapping event type
+     * @param mapping event mapping subject
+     * @param time    occurrence time
+     */
+    public MappingEvent(Type type, Mapping mapping, long time) {
+        super(type, mapping, time);
+    }
 }
diff --git a/apps/mappingmanagement/api/src/test/java/org/onosproject/mapping/DefaultMappingEntryTest.java b/apps/mappingmanagement/api/src/test/java/org/onosproject/mapping/DefaultMappingEntryTest.java
index 47aadbe..f3cbde4 100644
--- a/apps/mappingmanagement/api/src/test/java/org/onosproject/mapping/DefaultMappingEntryTest.java
+++ b/apps/mappingmanagement/api/src/test/java/org/onosproject/mapping/DefaultMappingEntryTest.java
@@ -32,6 +32,10 @@
     private static final MappingValue MAPPING_VALUE =
                          new MappingTestMocks.MockMappingValue();
 
+    private final MappingEntry entry1 = makeMappingEntry(1);
+    private final MappingEntry sameAsEntry1 = makeMappingEntry(1);
+    private final MappingEntry entry2 = makeMappingEntry(2);
+
     /**
      * Creates a new mapping entry from an unique value.
      *
@@ -50,10 +54,6 @@
         return new DefaultMappingEntry(mapping, MappingEntry.MappingEntryState.ADDED);
     }
 
-    final MappingEntry entry1 = makeMappingEntry(1);
-    final MappingEntry sameAsEntry1 = makeMappingEntry(1);
-    final MappingEntry entry2 = makeMappingEntry(2);
-
     /**
      * Tests the equals, hashCode and toString methods using Guava EqualsTester.
      */
diff --git a/apps/mappingmanagement/api/src/test/java/org/onosproject/mapping/MappingEventTest.java b/apps/mappingmanagement/api/src/test/java/org/onosproject/mapping/MappingEventTest.java
index 2da8863..7e21085 100644
--- a/apps/mappingmanagement/api/src/test/java/org/onosproject/mapping/MappingEventTest.java
+++ b/apps/mappingmanagement/api/src/test/java/org/onosproject/mapping/MappingEventTest.java
@@ -77,6 +77,18 @@
     }
 
     /**
+     * Tests the constructor where a time is passed in.
+     */
+    @Test
+    public void testTimeConstructor() {
+        final long time = 123L;
+        final Mapping mapping = mockMapping(1, DEVICE_ID_1);
+        final MappingEvent event =
+                new MappingEvent(MappingEvent.Type.MAPPING_REMOVE_REQUESTED, mapping, time);
+        validateEvent(event, MappingEvent.Type.MAPPING_REMOVE_REQUESTED, mapping, time);
+    }
+
+    /**
      * Tests creation of a MappingEvent.
      */
     @Test
diff --git a/apps/mappingmanagement/api/src/test/java/org/onosproject/mapping/MappingTestMocks.java b/apps/mappingmanagement/api/src/test/java/org/onosproject/mapping/MappingTestMocks.java
index 364a9b0..f45b197 100644
--- a/apps/mappingmanagement/api/src/test/java/org/onosproject/mapping/MappingTestMocks.java
+++ b/apps/mappingmanagement/api/src/test/java/org/onosproject/mapping/MappingTestMocks.java
@@ -20,9 +20,11 @@
 import org.onosproject.mapping.actions.MappingActions;
 import org.onosproject.mapping.addresses.MappingAddress;
 import org.onosproject.mapping.addresses.MappingAddresses;
+import org.onosproject.net.DeviceId;
 
 import java.util.Collections;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * Commons mocks used by the mapping management tasks.
@@ -58,4 +60,66 @@
             return Collections.emptyList();
         }
     }
+
+    private static final MockMappingKey MAPPING_KEY = new MockMappingKey();
+    private static final MockMappingValue MAPPING_VALUE = new MockMappingValue();
+
+    /**
+     * Mock mapping class used for satisfying API requirements.
+     */
+    public static class MockMapping implements Mapping {
+
+        static int nextId = 0;
+
+        int id;
+        long timestamp;
+
+        public MockMapping() {
+            this.id = nextId++;
+            this.timestamp = System.currentTimeMillis();
+        }
+
+        @Override
+        public MappingId id() {
+            return MappingId.valueOf(id);
+        }
+
+        @Override
+        public short appId() {
+            return 0;
+        }
+
+        @Override
+        public DeviceId deviceId() {
+            return DeviceId.deviceId("lisp:" + id);
+        }
+
+        @Override
+        public MappingKey key() {
+            return MAPPING_KEY;
+        }
+
+        @Override
+        public MappingValue value() {
+            return MAPPING_VALUE;
+        }
+
+        @Override
+        public int hashCode() {
+            return id;
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj) {
+                return true;
+            }
+            if (obj == null || getClass() != obj.getClass()) {
+                return false;
+            }
+            final MockMapping other = (MockMapping) obj;
+            return Objects.equals(this.timestamp, other.timestamp) &&
+                    this.id == other.id;
+        }
+    }
 }
