diff --git a/core/api/src/main/java/org/onosproject/store/service/EventuallyConsistentMapEvent.java b/core/api/src/main/java/org/onosproject/store/service/EventuallyConsistentMapEvent.java
index f4ba859..fd27415 100644
--- a/core/api/src/main/java/org/onosproject/store/service/EventuallyConsistentMapEvent.java
+++ b/core/api/src/main/java/org/onosproject/store/service/EventuallyConsistentMapEvent.java
@@ -22,7 +22,7 @@
 /**
  * Representation of a EventuallyConsistentMap update notification.
  */
-public class EventuallyConsistentMapEvent<K, V> {
+public final class EventuallyConsistentMapEvent<K, V> {
 
     public enum Type {
         /**
diff --git a/core/api/src/test/java/org/onosproject/store/service/EventuallyConsistentMapEventTest.java b/core/api/src/test/java/org/onosproject/store/service/EventuallyConsistentMapEventTest.java
new file mode 100644
index 0000000..ac8e7b5
--- /dev/null
+++ b/core/api/src/test/java/org/onosproject/store/service/EventuallyConsistentMapEventTest.java
@@ -0,0 +1,78 @@
+/*
+ * 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.store.service;
+
+import org.junit.Test;
+
+import com.google.common.testing.EqualsTester;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
+import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
+import static org.onosproject.store.service.EventuallyConsistentMapEvent.Type.PUT;
+import static org.onosproject.store.service.EventuallyConsistentMapEvent.Type.REMOVE;
+
+/**
+ * Unit tests for the EventuallyConsistentMapEvent class.
+ */
+public class EventuallyConsistentMapEventTest {
+
+    EventuallyConsistentMapEvent<String, String> event1 =
+            new EventuallyConsistentMapEvent<>("map1", PUT, "k1", "v1");
+    EventuallyConsistentMapEvent<String, String> event2 =
+            new EventuallyConsistentMapEvent<>("map1", REMOVE, "k1", "v1");
+    EventuallyConsistentMapEvent<String, String> sameAsEvent2 =
+            new EventuallyConsistentMapEvent<>("map1", REMOVE, "k1", "v1");
+    EventuallyConsistentMapEvent<String, String> event3 =
+            new EventuallyConsistentMapEvent<>("map1", PUT, "k2", "v1");
+    EventuallyConsistentMapEvent<String, String> event4 =
+            new EventuallyConsistentMapEvent<>("map1", PUT, "k1", "v2");
+    EventuallyConsistentMapEvent<String, String> event5 =
+            new EventuallyConsistentMapEvent<>("map2", REMOVE, "k1", "v2");
+
+    /**
+     * Checks the equals(), hashCode() and toString() operations.
+     */
+    @Test
+    public void testEquals() {
+        new EqualsTester()
+                .addEqualityGroup(event1)
+                .addEqualityGroup(event2, sameAsEvent2)
+                .addEqualityGroup(event3)
+                .addEqualityGroup(event4)
+                .addEqualityGroup(event5)
+                .testEquals();
+    }
+
+    /**
+     * Checks that the EventuallyConsistentMapEvent class is immutable.
+     */
+    @Test
+    public void testImmutability() {
+        assertThatClassIsImmutable(EventuallyConsistentMapEvent.class);
+    }
+
+    /**
+     * Checks that construction of the object is correct.
+     */
+    @Test
+    public void testConstruction() {
+        assertThat(event1.type(), is(PUT));
+        assertThat(event1.key(), is("k1"));
+        assertThat(event1.value(), is("v1"));
+        assertThat(event1.name(), is("map1"));
+    }
+}
diff --git a/core/store/dist/src/test/java/org/onosproject/store/impl/WallClockTimestampTest.java b/core/api/src/test/java/org/onosproject/store/service/WallClockTimestampTest.java
similarity index 78%
rename from core/store/dist/src/test/java/org/onosproject/store/impl/WallClockTimestampTest.java
rename to core/api/src/test/java/org/onosproject/store/service/WallClockTimestampTest.java
index ead4612..97f5a39 100644
--- a/core/store/dist/src/test/java/org/onosproject/store/impl/WallClockTimestampTest.java
+++ b/core/api/src/test/java/org/onosproject/store/service/WallClockTimestampTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2014 Open Networking Laboratory
+ * 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.
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.store.impl;
+package org.onosproject.store.service;
 
 import static org.junit.Assert.assertTrue;
 
@@ -24,7 +24,6 @@
 import org.onlab.util.KryoNamespace;
 
 import com.google.common.testing.EqualsTester;
-import org.onosproject.store.service.WallClockTimestamp;
 
 /**
  * Tests for {@link WallClockTimestamp}.
@@ -36,15 +35,20 @@
         WallClockTimestamp ts1 = new WallClockTimestamp();
         Thread.sleep(50);
         WallClockTimestamp ts2 = new WallClockTimestamp();
+        long stamp = System.currentTimeMillis() + 10000;
+        WallClockTimestamp ts3 = new WallClockTimestamp(stamp);
+
 
         assertTrue(ts1.compareTo(ts1) == 0);
         assertTrue(ts2.compareTo(ts1) > 0);
         assertTrue(ts1.compareTo(ts2) < 0);
+        assertTrue(ts3.unixTimestamp() == stamp);
     }
 
     @Test
     public final void testKryoSerializable() {
         WallClockTimestamp ts1 = new WallClockTimestamp();
+        WallClockTimestamp ts2 = new WallClockTimestamp(System.currentTimeMillis() + 10000);
         final ByteBuffer buffer = ByteBuffer.allocate(1 * 1024 * 1024);
         final KryoNamespace kryos = KryoNamespace.newBuilder()
                 .register(WallClockTimestamp.class)
@@ -55,7 +59,8 @@
         Timestamp copy = kryos.deserialize(buffer);
 
         new EqualsTester()
-            .addEqualityGroup(ts1, copy)
-            .testEquals();
+                .addEqualityGroup(ts1, copy)
+                .addEqualityGroup(ts2)
+                .testEquals();
     }
 }
