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);
