diff --git a/core/api/src/test/java/org/onosproject/store/service/TestAtomicCounter.java b/core/api/src/test/java/org/onosproject/store/service/TestAtomicCounter.java
new file mode 100644
index 0000000..49db644
--- /dev/null
+++ b/core/api/src/test/java/org/onosproject/store/service/TestAtomicCounter.java
@@ -0,0 +1,96 @@
+/*
+ * 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 java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.atomic.AtomicLong;
+
+/**
+ * Test implementation of atomic counter.
+ */
+public final class TestAtomicCounter implements AtomicCounter {
+    final AtomicLong value;
+
+    private TestAtomicCounter() {
+        value = new AtomicLong();
+    }
+
+    @Override
+    public long incrementAndGet() {
+        return value.incrementAndGet();
+    }
+
+    @Override
+    public long getAndIncrement() {
+        return value.getAndIncrement();
+    }
+
+    @Override
+    public long getAndAdd(long delta) {
+        return value.getAndAdd(delta);
+    }
+
+    @Override
+    public long addAndGet(long delta) {
+        return value.addAndGet(delta);
+    }
+
+    @Override
+    public long get() {
+        return value.get();
+    }
+
+    public static AtomicCounterBuilder builder() {
+        return new Builder();
+    }
+
+    public static class Builder implements AtomicCounterBuilder {
+        @Override
+        public AtomicCounterBuilder withName(String name) {
+            return this;
+        }
+
+        @Override
+        public AtomicCounterBuilder withPartitionsDisabled() {
+            return this;
+        }
+
+        @Override
+        public AtomicCounterBuilder withRetryOnFailure() {
+            return this;
+        }
+
+        @Override
+        public AtomicCounterBuilder withMeteringDisabled() {
+            return this;
+        }
+
+        @Override
+        public AtomicCounterBuilder withRetryExecutor(ScheduledExecutorService executor) {
+            return this;
+        }
+
+        @Override
+        public AsyncAtomicCounter buildAsyncCounter() {
+            throw new UnsupportedOperationException("Async Counter is not supported");
+        }
+
+        @Override
+        public AtomicCounter build() {
+            return new TestAtomicCounter();
+        }
+    }
+}
diff --git a/core/api/src/test/java/org/onosproject/store/service/TestConsistentMap.java b/core/api/src/test/java/org/onosproject/store/service/TestConsistentMap.java
index 3573230..c45f696 100644
--- a/core/api/src/test/java/org/onosproject/store/service/TestConsistentMap.java
+++ b/core/api/src/test/java/org/onosproject/store/service/TestConsistentMap.java
@@ -82,7 +82,12 @@
 
     @Override
     public Versioned<V> get(K key) {
-        return version(map.get(key));
+        V value = map.get(key);
+        if (value != null) {
+            return version(value);
+        } else {
+            return null;
+        }
     }
 
     @Override
diff --git a/core/api/src/test/java/org/onosproject/store/service/TestStorageService.java b/core/api/src/test/java/org/onosproject/store/service/TestStorageService.java
index 4901cfa..9b52a30 100644
--- a/core/api/src/test/java/org/onosproject/store/service/TestStorageService.java
+++ b/core/api/src/test/java/org/onosproject/store/service/TestStorageService.java
@@ -40,7 +40,7 @@
 
     @Override
     public AtomicCounterBuilder atomicCounterBuilder() {
-        throw new UnsupportedOperationException("atomicCounterBuilder");
+        return TestAtomicCounter.builder();
     }
 
     @Override
diff --git a/core/store/dist/src/test/java/org/onosproject/store/flowobjective/impl/DistributedFlowObjectiveStoreTest.java b/core/store/dist/src/test/java/org/onosproject/store/flowobjective/impl/DistributedFlowObjectiveStoreTest.java
new file mode 100644
index 0000000..efa226c
--- /dev/null
+++ b/core/store/dist/src/test/java/org/onosproject/store/flowobjective/impl/DistributedFlowObjectiveStoreTest.java
@@ -0,0 +1,63 @@
+/*
+ * 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.flowobjective.impl;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.onosproject.net.behaviour.DefaultNextGroup;
+import org.onosproject.net.behaviour.NextGroup;
+import org.onosproject.net.flowobjective.FlowObjectiveStore;
+import org.onosproject.store.service.TestStorageService;
+
+import com.google.common.base.Charsets;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.*;
+
+/**
+ * Unit tests for distributed flow objective store.
+ */
+public class DistributedFlowObjectiveStoreTest {
+    DistributedFlowObjectiveStore storeImpl;
+    FlowObjectiveStore store;
+
+    @Before
+    public void setUp() {
+        storeImpl = new DistributedFlowObjectiveStore();
+        storeImpl.storageService = new TestStorageService();
+        storeImpl.activate();
+        store = storeImpl;
+    }
+
+    @After
+    public void tearDown() {
+        storeImpl.deactivate();
+    }
+
+    @Test
+    public void testFlowObjectiveStore() {
+        NextGroup group2 = new DefaultNextGroup("2".getBytes(Charsets.US_ASCII));
+        int group1Id = store.allocateNextId();
+        int group2Id = store.allocateNextId();
+
+        NextGroup group1add = store.getNextGroup(group1Id);
+        assertThat(group1add, nullValue());
+
+        store.putNextGroup(group2Id, group2);
+        NextGroup group2Query = store.getNextGroup(group2Id);
+        assertThat(group2Query.data(), is(group2.data()));
+    }
+}
