diff --git a/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/addresses/ExtensionMappingAddress.java b/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/addresses/ExtensionMappingAddress.java
index 79e76b4..ead2785 100644
--- a/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/addresses/ExtensionMappingAddress.java
+++ b/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/addresses/ExtensionMappingAddress.java
@@ -15,13 +15,25 @@
  */
 package org.onosproject.mapping.addresses;
 
+import org.onlab.util.KryoNamespace;
 import org.onosproject.net.flow.Extension;
+import org.onosproject.store.serializers.KryoNamespaces;
 
 /**
  * An extension for the mapping address API.
  */
 public interface ExtensionMappingAddress extends Extension {
 
+    KryoNamespace APP_KRYO = new KryoNamespace.Builder()
+                                            .register(KryoNamespaces.API)
+                                            .register(MappingAddress.class)
+                                            .register(MappingAddress.Type.class)
+                                            .register(IPMappingAddress.class)
+                                            .register(ASMappingAddress.class)
+                                            .register(DNMappingAddress.class)
+                                            .register(EthMappingAddress.class)
+                                            .build();
+
     /**
      * Obtains the type of the extension mapping address.
      *
diff --git a/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispAppDataAddress.java b/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispAppDataAddress.java
index 8766aa5..0185b45 100644
--- a/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispAppDataAddress.java
+++ b/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispAppDataAddress.java
@@ -16,16 +16,10 @@
 package org.onosproject.drivers.lisp.extensions;
 
 import com.google.common.collect.Maps;
-import org.onlab.util.KryoNamespace;
-import org.onosproject.mapping.addresses.ASMappingAddress;
-import org.onosproject.mapping.addresses.DNMappingAddress;
-import org.onosproject.mapping.addresses.EthMappingAddress;
 import org.onosproject.mapping.addresses.ExtensionMappingAddress;
 import org.onosproject.mapping.addresses.ExtensionMappingAddressType;
-import org.onosproject.mapping.addresses.IPMappingAddress;
 import org.onosproject.mapping.addresses.MappingAddress;
 import org.onosproject.net.flow.AbstractExtension;
-import org.onosproject.store.serializers.KryoNamespaces;
 
 import java.util.Map;
 import java.util.Objects;
@@ -58,16 +52,6 @@
     private short remotePortHigh;
     private MappingAddress address;
 
-    private final KryoNamespace appKryo = new KryoNamespace.Builder()
-                                                .register(KryoNamespaces.API)
-                                                .register(MappingAddress.class)
-                                                .register(MappingAddress.Type.class)
-                                                .register(IPMappingAddress.class)
-                                                .register(ASMappingAddress.class)
-                                                .register(DNMappingAddress.class)
-                                                .register(EthMappingAddress.class)
-                                                .build();
-
     /**
      * Default constructor.
      */
@@ -175,12 +159,12 @@
         parameterMap.put(REMOTE_PORT_HIGH, remotePortHigh);
         parameterMap.put(ADDRESS, address);
 
-        return appKryo.serialize(parameterMap);
+        return APP_KRYO.serialize(parameterMap);
     }
 
     @Override
     public void deserialize(byte[] data) {
-        Map<String, Object> parameterMap = appKryo.deserialize(data);
+        Map<String, Object> parameterMap = APP_KRYO.deserialize(data);
 
         this.protocol = (byte) parameterMap.get(PROTOCOL);
         this.ipTos = (int) parameterMap.get(IP_TOS);
diff --git a/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispAsAddress.java b/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispAsAddress.java
index a0480aa..bda95b0 100644
--- a/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispAsAddress.java
+++ b/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispAsAddress.java
@@ -17,16 +17,10 @@
 package org.onosproject.drivers.lisp.extensions;
 
 import com.google.common.collect.Maps;
-import org.onlab.util.KryoNamespace;
-import org.onosproject.mapping.addresses.ASMappingAddress;
-import org.onosproject.mapping.addresses.DNMappingAddress;
-import org.onosproject.mapping.addresses.EthMappingAddress;
 import org.onosproject.mapping.addresses.ExtensionMappingAddress;
 import org.onosproject.mapping.addresses.ExtensionMappingAddressType;
-import org.onosproject.mapping.addresses.IPMappingAddress;
 import org.onosproject.mapping.addresses.MappingAddress;
 import org.onosproject.net.flow.AbstractExtension;
-import org.onosproject.store.serializers.KryoNamespaces;
 
 import java.util.Map;
 import java.util.Objects;
@@ -49,16 +43,6 @@
     private int asNumber;
     private MappingAddress address;
 
-    private final KryoNamespace appKryo = new KryoNamespace.Builder()
-                                                .register(KryoNamespaces.API)
-                                                .register(MappingAddress.class)
-                                                .register(MappingAddress.Type.class)
-                                                .register(IPMappingAddress.class)
-                                                .register(ASMappingAddress.class)
-                                                .register(DNMappingAddress.class)
-                                                .register(EthMappingAddress.class)
-                                                .build();
-
     /**
      * Default constructor.
      */
@@ -104,12 +88,12 @@
 
         parameterMap.put(AS_NUMBER, asNumber);
         parameterMap.put(ADDRESS, address);
-        return appKryo.serialize(parameterMap);
+        return APP_KRYO.serialize(parameterMap);
     }
 
     @Override
     public void deserialize(byte[] data) {
-        Map<String, Object> parameterMap = appKryo.deserialize(data);
+        Map<String, Object> parameterMap = APP_KRYO.deserialize(data);
 
         this.asNumber = (int) parameterMap.get(AS_NUMBER);
         this.address = (MappingAddress) parameterMap.get(ADDRESS);
diff --git a/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispGcAddress.java b/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispGcAddress.java
index 9920108..2dd275c 100644
--- a/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispGcAddress.java
+++ b/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispGcAddress.java
@@ -17,16 +17,10 @@
 package org.onosproject.drivers.lisp.extensions;
 
 import com.google.common.collect.Maps;
-import org.onlab.util.KryoNamespace;
-import org.onosproject.mapping.addresses.ASMappingAddress;
-import org.onosproject.mapping.addresses.DNMappingAddress;
-import org.onosproject.mapping.addresses.EthMappingAddress;
 import org.onosproject.mapping.addresses.ExtensionMappingAddress;
 import org.onosproject.mapping.addresses.ExtensionMappingAddressType;
-import org.onosproject.mapping.addresses.IPMappingAddress;
 import org.onosproject.mapping.addresses.MappingAddress;
 import org.onosproject.net.flow.AbstractExtension;
-import org.onosproject.store.serializers.KryoNamespaces;
 
 import java.util.Map;
 import java.util.Objects;
@@ -66,16 +60,6 @@
     private int altitude;
     private MappingAddress address;
 
-    private final KryoNamespace appKryo = new KryoNamespace.Builder()
-                                                .register(KryoNamespaces.API)
-                                                .register(MappingAddress.class)
-                                                .register(MappingAddress.Type.class)
-                                                .register(IPMappingAddress.class)
-                                                .register(ASMappingAddress.class)
-                                                .register(DNMappingAddress.class)
-                                                .register(EthMappingAddress.class)
-                                                .build();
-
     /**
      * Default constructor.
      */
@@ -222,12 +206,12 @@
         parameterMap.put(ALTITUDE, altitude);
         parameterMap.put(ADDRESS, address);
 
-        return appKryo.serialize(parameterMap);
+        return APP_KRYO.serialize(parameterMap);
     }
 
     @Override
     public void deserialize(byte[] data) {
-        Map<String, Object> parameterMap = appKryo.deserialize(data);
+        Map<String, Object> parameterMap = APP_KRYO.deserialize(data);
 
         this.north = (boolean) parameterMap.get(NORTH);
         this.latitudeDegree = (short) parameterMap.get(LATITUDE_DEGREE);
diff --git a/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispListAddress.java b/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispListAddress.java
index bba2c17..4ea8878 100644
--- a/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispListAddress.java
+++ b/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispListAddress.java
@@ -17,23 +17,17 @@
 package org.onosproject.drivers.lisp.extensions;
 
 import com.google.common.collect.Maps;
-import org.onlab.util.KryoNamespace;
-import org.onosproject.mapping.addresses.ASMappingAddress;
-import org.onosproject.mapping.addresses.DNMappingAddress;
-import org.onosproject.mapping.addresses.EthMappingAddress;
 import org.onosproject.mapping.addresses.ExtensionMappingAddress;
 import org.onosproject.mapping.addresses.ExtensionMappingAddressType;
-import org.onosproject.mapping.addresses.IPMappingAddress;
 import org.onosproject.mapping.addresses.MappingAddress;
 import org.onosproject.net.flow.AbstractExtension;
-import org.onosproject.store.serializers.KryoNamespaces;
 
 import java.util.Map;
 import java.util.Objects;
 
 import static com.google.common.base.MoreObjects.toStringHelper;
 import static org.onosproject.mapping.addresses.ExtensionMappingAddressType
-                                .ExtensionMappingAddressTypes.LIST_ADDRESS;
+                                    .ExtensionMappingAddressTypes.LIST_ADDRESS;
 
 /**
  * Implementation of LISP list address.
@@ -50,16 +44,6 @@
     private MappingAddress ipv4;
     private MappingAddress ipv6;
 
-    private final KryoNamespace appKryo = new KryoNamespace.Builder()
-                                                .register(KryoNamespaces.API)
-                                                .register(MappingAddress.class)
-                                                .register(MappingAddress.Type.class)
-                                                .register(IPMappingAddress.class)
-                                                .register(ASMappingAddress.class)
-                                                .register(DNMappingAddress.class)
-                                                .register(EthMappingAddress.class)
-                                                .build();
-
     /**
      * Default constructor.
      */
@@ -108,13 +92,13 @@
         parameterMap.put(IPV4, ipv4);
         parameterMap.put(IPV6, ipv6);
 
-        return appKryo.serialize(parameterMap);
+        return APP_KRYO.serialize(parameterMap);
     }
 
     @Override
     public void deserialize(byte[] data) {
 
-        Map<String, Object> parameterMap = appKryo.deserialize(data);
+        Map<String, Object> parameterMap = APP_KRYO.deserialize(data);
 
         this.ipv4 = (MappingAddress) parameterMap.get(IPV4);
         this.ipv6 = (MappingAddress) parameterMap.get(IPV6);
