diff --git a/core/store/serializers/src/main/java/org/onosproject/store/serializers/AnnotationsSerializer.java b/core/store/serializers/src/main/java/org/onosproject/store/serializers/AnnotationsSerializer.java
index bcb81a4..3082a28 100644
--- a/core/store/serializers/src/main/java/org/onosproject/store/serializers/AnnotationsSerializer.java
+++ b/core/store/serializers/src/main/java/org/onosproject/store/serializers/AnnotationsSerializer.java
@@ -21,24 +21,48 @@
 import com.esotericsoftware.kryo.Serializer;
 import com.esotericsoftware.kryo.io.Input;
 import com.esotericsoftware.kryo.io.Output;
+import com.esotericsoftware.kryo.serializers.DefaultSerializers;
+import com.esotericsoftware.kryo.serializers.DefaultSerializers.StringSerializer;
+import com.esotericsoftware.kryo.serializers.MapSerializer;
 
 import java.util.HashMap;
+import java.util.Map;
 
 public class AnnotationsSerializer extends Serializer<DefaultAnnotations> {
 
+    private static final StringSerializer STR_SERIALIZER
+        = new DefaultSerializers.StringSerializer();
+
+    private static final MapSerializer MAP_SERIALIZER = stringMapSerializer();
+
+    /**
+     * Returns a MapSerializer for {@code Map<String, String>} with
+     * no null key or value.
+     *
+     * @return serializer
+     */
+    private static MapSerializer stringMapSerializer() {
+        MapSerializer serializer = new MapSerializer();
+        serializer.setKeysCanBeNull(false);
+        serializer.setKeyClass(String.class, STR_SERIALIZER);
+        serializer.setValuesCanBeNull(false);
+        serializer.setValueClass(String.class, STR_SERIALIZER);
+        return serializer;
+    }
+
     public AnnotationsSerializer() {
         super(false, true);
     }
 
     @Override
     public void write(Kryo kryo, Output output, DefaultAnnotations object) {
-        kryo.writeObject(output, object.asMap());
+        kryo.writeObject(output, object.asMap(), MAP_SERIALIZER);
     }
 
     @Override
     public DefaultAnnotations read(Kryo kryo, Input input, Class<DefaultAnnotations> type) {
         DefaultAnnotations.Builder b = DefaultAnnotations.builder();
-        HashMap<String, String> map = kryo.readObject(input, HashMap.class);
+        Map<String, String> map = kryo.readObject(input, HashMap.class, MAP_SERIALIZER);
         map.forEach((k, v) -> b.set(k, v));
 
         return b.build();
