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 e34d110..673a531 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
@@ -42,11 +42,13 @@
     private final Map<K, Versioned<V>> map;
     private final String mapName;
     private final AtomicLong counter = new AtomicLong(0);
+    private final Serializer serializer;
 
-    private TestConsistentMap(String mapName) {
+    private TestConsistentMap(String mapName, Serializer serializer) {
         map = new HashMap<>();
         listeners = new LinkedList<>();
         this.mapName = mapName;
+        this.serializer = serializer;
     }
 
     private Versioned<V> version(V v) {
@@ -111,7 +113,7 @@
             AtomicReference<Versioned<V>> previousValue = new AtomicReference<>();
             Versioned<V> result = map.compute(key, (k, v) -> {
                     updated.set(true);
-                    previousValue.set(v);
+                    previousValue.set(serializer.decode(serializer.encode(v)));
                     return version(remappingFunction.apply(k, Versioned.valueOrNull(v)));
                 });
             if (updated.get()) {
@@ -127,7 +129,7 @@
         Versioned<V> result = map.compute(key, (k, v) -> {
             if (v != null) {
                 updated.set(true);
-                previousValue.set(v);
+                previousValue.set(serializer.decode(serializer.encode(v)));
                 return version(remappingFunction.apply(k, v.value()));
             }
             return v;
@@ -145,7 +147,7 @@
         AtomicReference<Versioned<V>> previousValue = new AtomicReference<>();
         Versioned<V> result = map.compute(key, (k, v) -> {
             if (condition.test(Versioned.valueOrNull(v))) {
-                previousValue.set(v);
+                previousValue.set(serializer.decode(serializer.encode(v)));
                 updated.set(true);
                 return version(remappingFunction.apply(k, Versioned.valueOrNull(v)));
             }
@@ -296,7 +298,7 @@
 
         @Override
         public ConsistentMap<K, V> build() {
-            return new TestConsistentMap<>(name());
+            return new TestConsistentMap<>(name(), serializer());
         }
 
         @Override
diff --git a/core/net/src/test/java/org/onosproject/net/meter/impl/MeterManagerTest.java b/core/net/src/test/java/org/onosproject/net/meter/impl/MeterManagerTest.java
index 0ac5d85..8de0b5a 100644
--- a/core/net/src/test/java/org/onosproject/net/meter/impl/MeterManagerTest.java
+++ b/core/net/src/test/java/org/onosproject/net/meter/impl/MeterManagerTest.java
@@ -17,6 +17,7 @@
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
 import org.junit.After;
 import org.junit.Before;
@@ -24,6 +25,8 @@
 import org.onlab.junit.TestTools;
 import org.onlab.junit.TestUtils;
 import org.onlab.packet.IpAddress;
+import org.onlab.util.KryoNamespace;
+import org.onosproject.TestApplicationId;
 import org.onosproject.cfg.ComponentConfigAdapter;
 import org.onosproject.cluster.ClusterServiceAdapter;
 import org.onosproject.cluster.ControllerNode;
@@ -65,6 +68,7 @@
 import org.onosproject.net.meter.MeterState;
 import org.onosproject.net.provider.AbstractProvider;
 import org.onosproject.net.provider.ProviderId;
+import org.onosproject.store.service.Serializer;
 import org.onosproject.store.service.TestStorageService;
 
 import java.util.Collections;
@@ -224,6 +228,13 @@
         TestUtils.setField(meterStore, "clusterService", new TestClusterService());
         TestUtils.setField(meterStore, "mastershipService", new TestMastershipService());
         TestUtils.setField(meterStore, "driverService", driverService);
+
+        // Inject TestApplicationId into the DistributedMeterStore serializer
+        KryoNamespace.Builder testKryoBuilder = TestUtils.getField(meterStore, "APP_KRYO_BUILDER");
+        testKryoBuilder.register(TestApplicationId.class);
+        Serializer testSerializer = Serializer.using(Lists.newArrayList(testKryoBuilder.build()));
+        TestUtils.setField(meterStore, "serializer", testSerializer);
+
         // Activate the store
         meterStore.activate();
         // Init step for the manager
diff --git a/incubator/store/src/main/java/org/onosproject/incubator/store/meter/impl/DistributedMeterStore.java b/incubator/store/src/main/java/org/onosproject/incubator/store/meter/impl/DistributedMeterStore.java
index b654652..cf4bfcb 100644
--- a/incubator/store/src/main/java/org/onosproject/incubator/store/meter/impl/DistributedMeterStore.java
+++ b/incubator/store/src/main/java/org/onosproject/incubator/store/meter/impl/DistributedMeterStore.java
@@ -16,6 +16,7 @@
 package org.onosproject.incubator.store.meter.impl;
 
 import com.google.common.collect.Collections2;
+import com.google.common.collect.Lists;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Maps;
 import org.apache.commons.lang.math.RandomUtils;
@@ -25,6 +26,7 @@
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.apache.felix.scr.annotations.Service;
+import org.onlab.util.KryoNamespace;
 import org.onosproject.cluster.ClusterService;
 import org.onosproject.cluster.NodeId;
 import org.onosproject.mastership.MastershipService;
@@ -90,6 +92,18 @@
     private static final String AVAILABLEMETERIDSTORE = "onos-meters-available-store";
     private static final String METERIDSTORE = "onos-meters-id-store";
 
+    private static final KryoNamespace.Builder APP_KRYO_BUILDER = KryoNamespace.newBuilder()
+            .register(KryoNamespaces.API)
+            .register(MeterKey.class)
+            .register(MeterData.class)
+            .register(DefaultMeter.class)
+            .register(DefaultBand.class)
+            .register(Band.Type.class)
+            .register(MeterState.class)
+            .register(Meter.Unit.class);
+
+    private Serializer serializer = Serializer.using(Lists.newArrayList(APP_KRYO_BUILDER.build()));
+
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     private StorageService storageService;
 
@@ -140,15 +154,7 @@
 
         meters = storageService.<MeterKey, MeterData>consistentMapBuilder()
                     .withName(METERSTORE)
-                    .withSerializer(Serializer.using(KryoNamespaces.API,
-                                                     MeterKey.class,
-                                                     MeterData.class,
-                                                     DefaultMeter.class,
-                                                     DefaultBand.class,
-                                                     Band.Type.class,
-                                                     MeterState.class,
-                                                     Meter.Unit.class,
-                                                     MeterFailReason.class)).build();
+                    .withSerializer(serializer).build();
 
         meters.addListener(mapListener);
 
diff --git a/incubator/store/src/test/java/org/onosproject/incubator/store/meter/impl/DistributedMeterStoreTest.java b/incubator/store/src/test/java/org/onosproject/incubator/store/meter/impl/DistributedMeterStoreTest.java
index 94940c4..f66d3ef 100644
--- a/incubator/store/src/test/java/org/onosproject/incubator/store/meter/impl/DistributedMeterStoreTest.java
+++ b/incubator/store/src/test/java/org/onosproject/incubator/store/meter/impl/DistributedMeterStoreTest.java
@@ -16,12 +16,15 @@
 
 package org.onosproject.incubator.store.meter.impl;
 
+import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.onlab.junit.TestUtils;
 import org.onlab.packet.IpAddress;
+import org.onlab.util.KryoNamespace;
+import org.onosproject.TestApplicationId;
 import org.onosproject.cluster.ClusterServiceAdapter;
 import org.onosproject.cluster.ControllerNode;
 import org.onosproject.cluster.DefaultControllerNode;
@@ -44,6 +47,7 @@
 import org.onosproject.net.meter.MeterId;
 import org.onosproject.net.meter.MeterKey;
 import org.onosproject.net.meter.MeterState;
+import org.onosproject.store.service.Serializer;
 import org.onosproject.store.service.TestStorageService;
 
 import java.util.Collections;
@@ -125,6 +129,13 @@
         TestUtils.setField(meterStore, "clusterService", new TestClusterService());
         TestUtils.setField(meterStore, "mastershipService", new TestMastershipService());
         TestUtils.setField(meterStore, "driverService", new TestDriverService());
+
+        // Inject TestApplicationId into the DistributedMeterStore serializer
+        KryoNamespace.Builder testKryoBuilder = TestUtils.getField(meterStore, "APP_KRYO_BUILDER");
+        testKryoBuilder.register(TestApplicationId.class);
+        Serializer testSerializer = Serializer.using(Lists.newArrayList(testKryoBuilder.build()));
+        TestUtils.setField(meterStore, "serializer", testSerializer);
+
         // Activate the store
         meterStore.activate();
     }
