diff --git a/core/store/dist/pom.xml b/core/store/dist/pom.xml
index 83629da..6eb1a5f 100644
--- a/core/store/dist/pom.xml
+++ b/core/store/dist/pom.xml
@@ -107,6 +107,12 @@
           <groupId>com.hazelcast</groupId>
           <artifactId>hazelcast</artifactId>
         </dependency>
+        <dependency>
+          <groupId>com.hazelcast</groupId>
+          <artifactId>hazelcast</artifactId>
+          <classifier>tests</classifier>
+          <scope>test</scope>
+        </dependency>
 
         <!-- for shaded copycat -->
         <dependency>
diff --git a/core/store/dist/src/test/java/org/onosproject/store/hz/TestStoreManager.java b/core/store/dist/src/test/java/org/onosproject/store/hz/TestStoreManager.java
index b12aa66..2983687 100644
--- a/core/store/dist/src/test/java/org/onosproject/store/hz/TestStoreManager.java
+++ b/core/store/dist/src/test/java/org/onosproject/store/hz/TestStoreManager.java
@@ -15,22 +15,28 @@
  */
 package org.onosproject.store.hz;
 
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkState;
+
 import java.io.FileNotFoundException;
 import java.util.UUID;
 
 import com.hazelcast.config.Config;
 import com.hazelcast.config.FileSystemXmlConfig;
 import com.hazelcast.core.HazelcastInstance;
+import com.hazelcast.test.TestHazelcastInstanceFactory;
 
 /**
  * Dummy StoreManager to use specified Hazelcast instance.
  */
 public class TestStoreManager extends StoreManager {
 
+    private TestHazelcastInstanceFactory factory;
+
     /**
      * Gets the Hazelcast Config for testing.
      *
-     * @return
+     * @return Hazelcast Configuration for testing
      */
     public static Config getTestConfig() {
         Config config;
@@ -53,16 +59,44 @@
     }
 
     /**
-     * Constructor.
+     * Creates an instance of dummy Hazelcast instance for testing.
+     *
+     * @return HazelcastInstance
+     */
+    public HazelcastInstance initSingleInstance() {
+        return initInstances(1)[0];
+    }
+
+    /**
+     * Creates some instances of dummy Hazelcast instances for testing.
+     *
+     * @param count number of instances to create
+     * @return array of HazelcastInstances
+     */
+    public HazelcastInstance[] initInstances(int count) {
+        checkArgument(count > 0, "Cluster size must be > 0");
+        factory = new TestHazelcastInstanceFactory(count);
+        return factory.newInstances(getTestConfig());
+    }
+
+    /**
+     * Sets the Hazelast instance to return on #getHazelcastInstance().
      *
      * @param instance Hazelast instance to return on #getHazelcastInstance()
      */
-    public TestStoreManager(HazelcastInstance instance) {
+    public void setHazelcastInstance(HazelcastInstance instance) {
         this.instance = instance;
     }
 
     @Override
     public void activate() {
         // Hazelcast setup removed from original code.
+        checkState(this.instance != null, "HazelcastInstance needs to be set");
+    }
+
+    @Override
+    public void deactivate() {
+        // Hazelcast instance shutdown removed from original code.
+        factory.shutdownAll();
     }
 }
diff --git a/core/store/dist/src/test/java/org/onosproject/store/mastership/impl/DistributedMastershipStoreTest.java b/core/store/dist/src/test/java/org/onosproject/store/mastership/impl/DistributedMastershipStoreTest.java
index 3d993cd..1a96161 100644
--- a/core/store/dist/src/test/java/org/onosproject/store/mastership/impl/DistributedMastershipStoreTest.java
+++ b/core/store/dist/src/test/java/org/onosproject/store/mastership/impl/DistributedMastershipStoreTest.java
@@ -19,8 +19,6 @@
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.onosproject.net.MastershipRole.*;
-import static org.onosproject.net.intent.TestTools.delay;
-
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.CountDownLatch;
@@ -51,8 +49,6 @@
 import org.onlab.packet.IpAddress;
 
 import com.google.common.collect.Sets;
-import com.hazelcast.config.Config;
-import com.hazelcast.core.Hazelcast;
 
 /**
  * Test of the Hazelcast-based distributed MastershipStore implementation.
@@ -87,9 +83,9 @@
     @Before
     public void setUp() throws Exception {
         // TODO should find a way to clean Hazelcast instance without shutdown.
-        Config config = TestStoreManager.getTestConfig();
-
-        storeMgr = new TestStoreManager(Hazelcast.newHazelcastInstance(config));
+        TestStoreManager testStoreMgr = new TestStoreManager();
+        testStoreMgr.setHazelcastInstance(testStoreMgr.initSingleInstance());
+        storeMgr = testStoreMgr;
         storeMgr.activate();
 
         serializationMgr = new KryoSerializer();
@@ -122,7 +118,6 @@
         assertTrue("wrong store state:", dms.roleMap.isEmpty());
 
         testStore.put(DID1, N1, true, false, false);
-        delay(10); //TODO there seems to be a race here.
         assertEquals("wrong master:", N1, dms.getMaster(DID1));
         assertNull("wrong master:", dms.getMaster(DID2));
     }
diff --git a/core/store/dist/src/test/java/org/onosproject/store/resource/impl/HazelcastLinkResourceStoreTest.java b/core/store/dist/src/test/java/org/onosproject/store/resource/impl/HazelcastLinkResourceStoreTest.java
index 53bef7e..cc577fe 100644
--- a/core/store/dist/src/test/java/org/onosproject/store/resource/impl/HazelcastLinkResourceStoreTest.java
+++ b/core/store/dist/src/test/java/org/onosproject/store/resource/impl/HazelcastLinkResourceStoreTest.java
@@ -46,9 +46,6 @@
 
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
-import com.hazelcast.config.Config;
-import com.hazelcast.core.Hazelcast;
-
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
@@ -92,9 +89,9 @@
     @Before
     public void setUp() throws Exception {
 
-        Config config = TestStoreManager.getTestConfig();
-
-        storeMgr = new TestStoreManager(Hazelcast.newHazelcastInstance(config));
+        TestStoreManager testStoreMgr = new TestStoreManager();
+        testStoreMgr.setHazelcastInstance(testStoreMgr.initSingleInstance());
+        storeMgr = testStoreMgr;
         storeMgr.activate();
 
 
