diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/authentication/LispMacAuthentication.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/authentication/LispMacAuthentication.java
index 166a88e..ced2d2d 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/authentication/LispMacAuthentication.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/authentication/LispMacAuthentication.java
@@ -23,9 +23,6 @@
 import java.security.InvalidKeyException;
 import java.security.NoSuchAlgorithmException;
 
-import static org.onosproject.lisp.msg.authentication.LispAuthenticationKeyEnum.SHA1;
-import static org.onosproject.lisp.msg.authentication.LispAuthenticationKeyEnum.SHA256;
-
 /**
  * LISP MAC authentication utility class.
  */
@@ -46,7 +43,7 @@
      */
     LispMacAuthentication(LispAuthenticationKeyEnum authType) {
 
-        if (authType == SHA1 || authType == SHA256) {
+        if (authType == LispAuthenticationKeyEnum.SHA1 || authType == LispAuthenticationKeyEnum.SHA256) {
             algorithm = authType.getName();
         } else {
             log.warn(NOT_SUPPORT_ALGORITHM_MSG, authType.getName());
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispInfoReply.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispInfoReply.java
index 650d765..25827a0 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispInfoReply.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispInfoReply.java
@@ -18,12 +18,12 @@
 import com.google.common.base.Objects;
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
+import org.onosproject.lisp.msg.types.LispAfiAddress;
 import org.onosproject.lisp.msg.authentication.LispAuthenticationFactory;
 import org.onosproject.lisp.msg.authentication.LispAuthenticationKeyEnum;
 import org.onosproject.lisp.msg.exceptions.LispParseError;
 import org.onosproject.lisp.msg.exceptions.LispReaderException;
 import org.onosproject.lisp.msg.exceptions.LispWriterException;
-import org.onosproject.lisp.msg.types.LispAfiAddress;
 import org.onosproject.lisp.msg.types.LispLcafAddress.LcafAddressReader;
 import org.onosproject.lisp.msg.types.LispLcafAddress.LcafAddressWriter;
 import org.onosproject.lisp.msg.types.LispNatLcafAddress;
@@ -244,7 +244,7 @@
 
         @Override
         public LispInfoReply readFrom(ByteBuf byteBuf) throws LispParseError, LispReaderException {
-            LispInfo lispInfo = DefaultLispInfo.deserialize(byteBuf);
+            LispInfo lispInfo = deserialize(byteBuf);
 
             LispNatLcafAddress natLcafAddress = (LispNatLcafAddress)
                     new LcafAddressReader().readFrom(byteBuf);
@@ -266,7 +266,7 @@
 
         @Override
         public void writeTo(ByteBuf byteBuf, LispInfoReply message) throws LispWriterException {
-            DefaultLispInfo.serialize(byteBuf, message);
+            serialize(byteBuf, message);
 
             new LcafAddressWriter().writeTo(byteBuf, message.getNatLcafAddress());
         }
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispInfoRequest.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispInfoRequest.java
index f0dbba4..13e36a0 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispInfoRequest.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispInfoRequest.java
@@ -19,12 +19,12 @@
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
 import org.onosproject.lisp.msg.authentication.LispAuthenticationFactory;
-import org.onosproject.lisp.msg.authentication.LispAuthenticationKeyEnum;
 import org.onosproject.lisp.msg.exceptions.LispParseError;
 import org.onosproject.lisp.msg.exceptions.LispReaderException;
 import org.onosproject.lisp.msg.exceptions.LispWriterException;
 import org.onosproject.lisp.msg.types.LispAfiAddress;
 import org.onosproject.lisp.msg.types.LispNoAddress;
+import org.onosproject.lisp.msg.authentication.LispAuthenticationKeyEnum;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -237,7 +237,7 @@
         public LispInfoRequest readFrom(ByteBuf byteBuf)
                 throws LispParseError, LispReaderException {
 
-            LispInfo lispInfo = DefaultLispInfo.deserialize(byteBuf);
+            LispInfo lispInfo = deserialize(byteBuf);
 
             return new DefaultInfoRequestBuilder()
                     .withIsInfoReply(lispInfo.isInfoReply())
@@ -261,7 +261,7 @@
         public void writeTo(ByteBuf byteBuf, LispInfoRequest message)
                 throws LispWriterException {
 
-            DefaultLispInfo.serialize(byteBuf, message);
+            serialize(byteBuf, message);
 
             //Fill AFI=0, no address
             new LispAfiAddress.AfiAddressWriter()
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispLocatorRecord.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispLocatorRecord.java
index e242a5d..e7e63fb 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispLocatorRecord.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispLocatorRecord.java
@@ -22,10 +22,11 @@
 import org.onosproject.lisp.msg.exceptions.LispReaderException;
 import org.onosproject.lisp.msg.exceptions.LispWriterException;
 import org.onosproject.lisp.msg.types.LispAfiAddress;
+import org.onosproject.lisp.msg.types.LispAfiAddress.AfiAddressReader;
+import org.onosproject.lisp.msg.types.LispAfiAddress.AfiAddressWriter;
 
 import static com.google.common.base.MoreObjects.toStringHelper;
 import static com.google.common.base.Preconditions.checkNotNull;
-import static org.onosproject.lisp.msg.types.LispAfiAddress.AfiAddressWriter;
 
 /**
  * Default implementation of LispLocatorRecord.
@@ -262,7 +263,7 @@
             // routed flag -> 1 bit
             boolean routed = ByteOperator.getBit(flags, ROUTED_INDEX);
 
-            LispAfiAddress address = new LispAfiAddress.AfiAddressReader().readFrom(byteBuf);
+            LispAfiAddress address = new AfiAddressReader().readFrom(byteBuf);
 
             return new DefaultLocatorRecordBuilder()
                         .withPriority(priority)
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapNotify.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapNotify.java
index d6a27fb..5cb5877 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapNotify.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapNotify.java
@@ -21,11 +21,13 @@
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
 import org.onlab.util.ImmutableByteSequence;
-import org.onosproject.lisp.msg.authentication.LispAuthenticationFactory;
-import org.onosproject.lisp.msg.authentication.LispAuthenticationKeyEnum;
 import org.onosproject.lisp.msg.exceptions.LispParseError;
 import org.onosproject.lisp.msg.exceptions.LispReaderException;
+import org.onosproject.lisp.msg.authentication.LispAuthenticationFactory;
+import org.onosproject.lisp.msg.authentication.LispAuthenticationKeyEnum;
 import org.onosproject.lisp.msg.exceptions.LispWriterException;
+import org.onosproject.lisp.msg.protocols.DefaultLispMapRecord.MapRecordReader;
+import org.onosproject.lisp.msg.protocols.DefaultLispMapRecord.MapRecordWriter;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -34,7 +36,6 @@
 
 import static com.google.common.base.MoreObjects.toStringHelper;
 import static org.onosproject.lisp.msg.authentication.LispAuthenticationKeyEnum.valueOf;
-import static org.onosproject.lisp.msg.protocols.DefaultLispMapRecord.MapRecordWriter;
 
 /**
  * Default LISP map notify message class.
@@ -279,7 +280,7 @@
 
             List<LispMapRecord> mapRecords = Lists.newArrayList();
             for (int i = 0; i < recordCount; i++) {
-                mapRecords.add(new DefaultLispMapRecord.MapRecordReader().readFrom(byteBuf));
+                mapRecords.add(new MapRecordReader().readFrom(byteBuf));
             }
 
             return new DefaultNotifyBuilder()
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRecord.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRecord.java
index d18e238..ced7306 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRecord.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRecord.java
@@ -21,15 +21,16 @@
 import io.netty.buffer.ByteBuf;
 import org.onlab.util.ByteOperator;
 import org.onosproject.lisp.msg.exceptions.LispParseError;
+import org.onosproject.lisp.msg.protocols.DefaultLispLocatorRecord.LocatorRecordReader;
+import org.onosproject.lisp.msg.types.LispAfiAddress;
 import org.onosproject.lisp.msg.exceptions.LispReaderException;
 import org.onosproject.lisp.msg.exceptions.LispWriterException;
-import org.onosproject.lisp.msg.types.LispAfiAddress;
+import org.onosproject.lisp.msg.types.LispAfiAddress.AfiAddressWriter;
 
 import java.util.List;
 
 import static com.google.common.base.MoreObjects.toStringHelper;
 import static com.google.common.base.Preconditions.checkNotNull;
-import static org.onosproject.lisp.msg.types.LispAfiAddress.AfiAddressWriter;
 import static org.onosproject.lisp.msg.protocols.DefaultLispLocatorRecord.LocatorRecordWriter;
 
 /**
@@ -263,7 +264,7 @@
 
             List<LispLocatorRecord> locators = Lists.newArrayList();
             for (int i = 0; i < locatorCount; i++) {
-                locators.add(new DefaultLispLocatorRecord.LocatorRecordReader().readFrom(byteBuf));
+                locators.add(new LocatorRecordReader().readFrom(byteBuf));
             }
 
             return new DefaultMapRecordBuilder()
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRegister.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRegister.java
index 3171d2e..a75d72d 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRegister.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRegister.java
@@ -23,10 +23,11 @@
 import org.onlab.util.ByteOperator;
 import org.onlab.util.ImmutableByteSequence;
 import org.onosproject.lisp.msg.authentication.LispAuthenticationFactory;
-import org.onosproject.lisp.msg.authentication.LispAuthenticationKeyEnum;
 import org.onosproject.lisp.msg.exceptions.LispParseError;
 import org.onosproject.lisp.msg.exceptions.LispReaderException;
 import org.onosproject.lisp.msg.exceptions.LispWriterException;
+import org.onosproject.lisp.msg.protocols.DefaultLispMapRecord.MapRecordReader;
+import org.onosproject.lisp.msg.protocols.DefaultLispMapRecord.MapRecordWriter;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -35,9 +36,6 @@
 
 import static com.google.common.base.MoreObjects.toStringHelper;
 import static org.onosproject.lisp.msg.authentication.LispAuthenticationKeyEnum.valueOf;
-import static org.onosproject.lisp.msg.protocols.DefaultLispMapRecord.MapRecordReader;
-import static org.onosproject.lisp.msg.protocols.DefaultLispMapRecord.MapRecordWriter;
-
 
 /**
  * Default LISP map register message class.
@@ -255,7 +253,7 @@
             if (authData == null) {
                 LispAuthenticationFactory factory = LispAuthenticationFactory.getInstance();
 
-                authDataLength = LispAuthenticationKeyEnum.valueOf(keyId).getHashLength();
+                authDataLength = valueOf(keyId).getHashLength();
                 byte[] tmpAuthData = new byte[authDataLength];
                 Arrays.fill(tmpAuthData, (byte) 0);
                 authData = tmpAuthData;
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapReply.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapReply.java
index fea7f52..d82c4be 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapReply.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapReply.java
@@ -23,11 +23,12 @@
 import org.onosproject.lisp.msg.exceptions.LispParseError;
 import org.onosproject.lisp.msg.exceptions.LispReaderException;
 import org.onosproject.lisp.msg.exceptions.LispWriterException;
+import org.onosproject.lisp.msg.protocols.DefaultLispMapRecord.MapRecordReader;
+import org.onosproject.lisp.msg.protocols.DefaultLispMapRecord.MapRecordWriter;
 
 import java.util.List;
 
 import static com.google.common.base.MoreObjects.toStringHelper;
-import static org.onosproject.lisp.msg.protocols.DefaultLispMapRecord.MapRecordWriter;
 
 /**
  * Default LISP map reply message class.
@@ -230,7 +231,7 @@
 
             List<LispMapRecord> mapRecords = Lists.newArrayList();
             for (int i = 0; i < recordCount; i++) {
-                mapRecords.add(new DefaultLispMapRecord.MapRecordReader().readFrom(byteBuf));
+                mapRecords.add(new MapRecordReader().readFrom(byteBuf));
             }
 
             return new DefaultReplyBuilder()
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRequest.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRequest.java
index 21b0c38..9055e409 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRequest.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRequest.java
@@ -20,17 +20,19 @@
 import com.google.common.collect.Lists;
 import io.netty.buffer.ByteBuf;
 import org.onlab.util.ByteOperator;
+import org.onosproject.lisp.msg.protocols.LispEidRecord.EidRecordReader;
+import org.onosproject.lisp.msg.types.LispAfiAddress;
 import org.onosproject.lisp.msg.exceptions.LispParseError;
 import org.onosproject.lisp.msg.exceptions.LispReaderException;
 import org.onosproject.lisp.msg.exceptions.LispWriterException;
-import org.onosproject.lisp.msg.types.LispAfiAddress;
+import org.onosproject.lisp.msg.types.LispAfiAddress.AfiAddressReader;
+import org.onosproject.lisp.msg.types.LispAfiAddress.AfiAddressWriter;
 
 import java.util.List;
 
 import static com.google.common.base.MoreObjects.toStringHelper;
 import static com.google.common.base.Preconditions.checkArgument;
 import static org.onosproject.lisp.msg.protocols.LispEidRecord.EidRecordWriter;
-import static org.onosproject.lisp.msg.types.LispAfiAddress.AfiAddressWriter;
 
 /**
  * Default LISP map request message class.
@@ -339,18 +341,18 @@
             // nonce -> 64 bits
             long nonce = byteBuf.readLong();
 
-            LispAfiAddress sourceEid = new LispAfiAddress.AfiAddressReader().readFrom(byteBuf);
+            LispAfiAddress sourceEid = new AfiAddressReader().readFrom(byteBuf);
 
             // deserialize a collection of RLOC addresses
             List<LispAfiAddress> itrRlocs = Lists.newArrayList();
             for (int i = 0; i < irc + 1; i++) {
-                itrRlocs.add(new LispAfiAddress.AfiAddressReader().readFrom(byteBuf));
+                itrRlocs.add(new AfiAddressReader().readFrom(byteBuf));
             }
 
             // deserialize a collection of EID records
             List<LispEidRecord> eidRecords = Lists.newArrayList();
             for (int i = 0; i < recordCount; i++) {
-                eidRecords.add(new LispEidRecord.EidRecordReader().readFrom(byteBuf));
+                eidRecords.add(new EidRecordReader().readFrom(byteBuf));
             }
 
             return new DefaultRequestBuilder()
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispEidRecord.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispEidRecord.java
index d933783..41d7583 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispEidRecord.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispEidRecord.java
@@ -21,10 +21,11 @@
 import org.onosproject.lisp.msg.exceptions.LispReaderException;
 import org.onosproject.lisp.msg.exceptions.LispWriterException;
 import org.onosproject.lisp.msg.types.LispAfiAddress;
+import org.onosproject.lisp.msg.types.LispAfiAddress.AfiAddressReader;
+import org.onosproject.lisp.msg.types.LispAfiAddress.AfiAddressWriter;
 
 import static com.google.common.base.MoreObjects.toStringHelper;
 import static com.google.common.base.Preconditions.checkNotNull;
-import static org.onosproject.lisp.msg.types.LispAfiAddress.AfiAddressWriter;
 
 /**
  * LISP EID record section which is part of LISP map request message.
@@ -108,7 +109,7 @@
             // mask length -> 8 bits
             short maskLength = byteBuf.readUnsignedByte();
 
-            LispAfiAddress prefix = new LispAfiAddress.AfiAddressReader().readFrom(byteBuf);
+            LispAfiAddress prefix = new AfiAddressReader().readFrom(byteBuf);
 
             return new LispEidRecord((byte) maskLength, prefix);
         }
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispLocatorRecord.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispLocatorRecord.java
index e96a2af..a38527b 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispLocatorRecord.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispLocatorRecord.java
@@ -16,8 +16,8 @@
 package org.onosproject.lisp.msg.protocols;
 
 import io.netty.buffer.ByteBuf;
-import org.onosproject.lisp.msg.exceptions.LispWriterException;
 import org.onosproject.lisp.msg.types.LispAfiAddress;
+import org.onosproject.lisp.msg.exceptions.LispWriterException;
 
 /**
  * LISP locator record section which is part of LISP map record.
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMessageReaderFactory.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMessageReaderFactory.java
index 6a33720..814760b 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMessageReaderFactory.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMessageReaderFactory.java
@@ -17,14 +17,13 @@
 
 import io.netty.buffer.ByteBuf;
 import org.onlab.util.ByteOperator;
-
-import static org.onosproject.lisp.msg.protocols.DefaultLispMapReply.ReplyReader;
-import static org.onosproject.lisp.msg.protocols.DefaultLispMapNotify.NotifyReader;
-import static org.onosproject.lisp.msg.protocols.DefaultLispMapRegister.RegisterReader;
-import static org.onosproject.lisp.msg.protocols.DefaultLispMapRequest.RequestReader;
-import static org.onosproject.lisp.msg.protocols.DefaultLispEncapsulatedControl.EcmReader;
-import static org.onosproject.lisp.msg.protocols.DefaultLispInfoRequest.InfoRequestReader;
-import static org.onosproject.lisp.msg.protocols.DefaultLispInfoReply.InfoReplyReader;
+import org.onosproject.lisp.msg.protocols.DefaultLispEncapsulatedControl.EcmReader;
+import org.onosproject.lisp.msg.protocols.DefaultLispInfoReply.InfoReplyReader;
+import org.onosproject.lisp.msg.protocols.DefaultLispInfoRequest.InfoRequestReader;
+import org.onosproject.lisp.msg.protocols.DefaultLispMapNotify.NotifyReader;
+import org.onosproject.lisp.msg.protocols.DefaultLispMapRegister.RegisterReader;
+import org.onosproject.lisp.msg.protocols.DefaultLispMapReply.ReplyReader;
+import org.onosproject.lisp.msg.protocols.DefaultLispMapRequest.RequestReader;
 
 /**
  * A factory class which helps to instantiate LISP reader class.
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispAfiAddress.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispAfiAddress.java
index 0942431..c333236 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispAfiAddress.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispAfiAddress.java
@@ -22,7 +22,13 @@
 
 import java.util.Objects;
 
-import static org.onosproject.lisp.msg.types.AddressFamilyIdentifierEnum.*;
+import static org.onosproject.lisp.msg.types.AddressFamilyIdentifierEnum.IP4;
+import static org.onosproject.lisp.msg.types.AddressFamilyIdentifierEnum.IP6;
+import static org.onosproject.lisp.msg.types.AddressFamilyIdentifierEnum.NO_ADDRESS;
+import static org.onosproject.lisp.msg.types.AddressFamilyIdentifierEnum.DISTINGUISHED_NAME;
+import static org.onosproject.lisp.msg.types.AddressFamilyIdentifierEnum.MAC;
+import static org.onosproject.lisp.msg.types.AddressFamilyIdentifierEnum.LCAF;
+import static org.onosproject.lisp.msg.types.AddressFamilyIdentifierEnum.AS;
 
 /**
  * LISP Locator address typed by Address Family Identifier (AFI).
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispListLcafAddress.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispListLcafAddress.java
index eb86b65..08326a5 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispListLcafAddress.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispListLcafAddress.java
@@ -20,6 +20,8 @@
 import org.onosproject.lisp.msg.exceptions.LispParseError;
 import org.onosproject.lisp.msg.exceptions.LispReaderException;
 import org.onosproject.lisp.msg.exceptions.LispWriterException;
+import org.onosproject.lisp.msg.types.LispIpv4Address.Ipv4AddressWriter;
+import org.onosproject.lisp.msg.types.LispIpv6Address.Ipv6AddressWriter;
 
 import java.util.List;
 import java.util.Objects;
@@ -189,8 +191,8 @@
             int lcafIndex = byteBuf.writerIndex();
             LispLcafAddress.serializeCommon(byteBuf, address);
 
-            LispIpv4Address.Ipv4AddressWriter v4Writer = new LispIpv4Address.Ipv4AddressWriter();
-            LispIpv6Address.Ipv6AddressWriter v6Writer = new LispIpv6Address.Ipv6AddressWriter();
+            Ipv4AddressWriter v4Writer = new Ipv4AddressWriter();
+            Ipv6AddressWriter v6Writer = new Ipv6AddressWriter();
 
             LispAfiAddress ipv4 = address.getAddresses().get(IPV4_ADDRESS_INDEX);
             LispAfiAddress ipv6 = address.getAddresses().get(IPV6_ADDRESS_INDEX);
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispNatLcafAddress.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispNatLcafAddress.java
index 7ce4e7a..bc2a6b4 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispNatLcafAddress.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispNatLcafAddress.java
@@ -277,7 +277,7 @@
         public LispNatLcafAddress readFrom(ByteBuf byteBuf)
                 throws LispParseError, LispReaderException {
 
-            LispLcafAddress lcafAddress = LispLcafAddress.deserializeCommon(byteBuf);
+            LispLcafAddress lcafAddress = deserializeCommon(byteBuf);
 
             short msUdpPortNumber = (short) byteBuf.readUnsignedShort();
             short etrUdpPortNumber = (short) byteBuf.readUnsignedShort();
@@ -288,7 +288,7 @@
 
             List<LispAfiAddress> rtrRlocAddresses = Lists.newArrayList();
 
-            while (byteBuf.readerIndex() - LispLcafAddress.COMMON_HEADER_SIZE < lcafAddress.getLength()) {
+            while (byteBuf.readerIndex() - COMMON_HEADER_SIZE < lcafAddress.getLength()) {
                 rtrRlocAddresses.add(new AfiAddressReader().readFrom(byteBuf));
             }
 
@@ -317,7 +317,7 @@
                 throws LispWriterException {
 
             int lcafIndex = byteBuf.writerIndex();
-            LispLcafAddress.serializeCommon(byteBuf, address);
+            serializeCommon(byteBuf, address);
 
             byteBuf.writeShort(address.getMsUdpPortNumber());
             byteBuf.writeShort(address.getEtrUdpPortNumber());
@@ -333,7 +333,7 @@
                 writer.writeTo(byteBuf, rtrRlocAddresses.get(i));
             }
 
-            LispLcafAddress.updateLength(lcafIndex, byteBuf);
+            updateLength(lcafIndex, byteBuf);
         }
     }
 }
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispSegmentLcafAddress.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispSegmentLcafAddress.java
index f6a715a..b38319f 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispSegmentLcafAddress.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispSegmentLcafAddress.java
@@ -19,6 +19,7 @@
 import org.onosproject.lisp.msg.exceptions.LispParseError;
 import org.onosproject.lisp.msg.exceptions.LispReaderException;
 import org.onosproject.lisp.msg.exceptions.LispWriterException;
+import org.onosproject.lisp.msg.types.LispAfiAddress.AfiAddressReader;
 
 import java.util.Objects;
 
@@ -205,7 +206,7 @@
             byte idMaskLength = lcafAddress.getReserved2();
 
             int instanceId = (int) byteBuf.readUnsignedInt();
-            LispAfiAddress address = new LispAfiAddress.AfiAddressReader().readFrom(byteBuf);
+            LispAfiAddress address = new AfiAddressReader().readFrom(byteBuf);
 
             return new SegmentAddressBuilder()
                     .withReserved1(lcafAddress.getReserved1())
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispSourceDestLcafAddress.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispSourceDestLcafAddress.java
index dd21127..d36b591 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispSourceDestLcafAddress.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispSourceDestLcafAddress.java
@@ -19,6 +19,8 @@
 import org.onosproject.lisp.msg.exceptions.LispParseError;
 import org.onosproject.lisp.msg.exceptions.LispReaderException;
 import org.onosproject.lisp.msg.exceptions.LispWriterException;
+import org.onosproject.lisp.msg.types.LispAfiAddress.AfiAddressReader;
+import org.onosproject.lisp.msg.types.LispAfiAddress.AfiAddressWriter;
 
 import java.util.Objects;
 
@@ -267,14 +269,14 @@
         @Override
         public LispSourceDestLcafAddress readFrom(ByteBuf byteBuf) throws LispParseError, LispReaderException {
 
-            LispLcafAddress lcafAddress = LispLcafAddress.deserializeCommon(byteBuf);
+            LispLcafAddress lcafAddress = deserializeCommon(byteBuf);
 
             short reserved = byteBuf.readShort();
             byte srcMaskLength = (byte) byteBuf.readUnsignedByte();
             byte dstMaskLength = (byte) byteBuf.readUnsignedByte();
 
-            LispAfiAddress srcPrefix = new LispAfiAddress.AfiAddressReader().readFrom(byteBuf);
-            LispAfiAddress dstPrefix = new LispAfiAddress.AfiAddressReader().readFrom(byteBuf);
+            LispAfiAddress srcPrefix = new AfiAddressReader().readFrom(byteBuf);
+            LispAfiAddress dstPrefix = new AfiAddressReader().readFrom(byteBuf);
 
             return new SourceDestAddressBuilder()
                     .withReserved1(lcafAddress.getReserved1())
@@ -301,16 +303,16 @@
                 throws LispWriterException {
 
             int lcafIndex = byteBuf.writerIndex();
-            LispLcafAddress.serializeCommon(byteBuf, address);
+            serializeCommon(byteBuf, address);
 
             byteBuf.writeShort(address.getReserved());
             byteBuf.writeByte(address.getSrcMaskLength());
             byteBuf.writeByte(address.getDstMaskLength());
-            AfiAddressWriter writer = new LispAfiAddress.AfiAddressWriter();
+            AfiAddressWriter writer = new AfiAddressWriter();
             writer.writeTo(byteBuf, address.getSrcPrefix());
             writer.writeTo(byteBuf, address.getDstPrefix());
 
-            LispLcafAddress.updateLength(lcafIndex, byteBuf);
+            updateLength(lcafIndex, byteBuf);
         }
     }
 }
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispTeLcafAddress.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispTeLcafAddress.java
index 6a64c64..b944652 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispTeLcafAddress.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispTeLcafAddress.java
@@ -27,6 +27,7 @@
 import java.util.Objects;
 
 import static com.google.common.base.MoreObjects.toStringHelper;
+import static org.onosproject.lisp.msg.types.LispLcafAddress.COMMON_HEADER_SIZE;
 
 /**
  * Traffic Engineering (TE) type LCAF address class.
@@ -134,7 +135,7 @@
             LispLcafAddress lcafAddress = LispLcafAddress.deserializeCommon(byteBuf);
 
             List<LispTeRecord> teRecords = Lists.newArrayList();
-            while (byteBuf.readerIndex() - LispLcafAddress.COMMON_HEADER_SIZE < lcafAddress.getLength()) {
+            while (byteBuf.readerIndex() - COMMON_HEADER_SIZE < lcafAddress.getLength()) {
                 teRecords.add(new LispTeRecord.TeRecordReader().readFrom(byteBuf));
             }
 
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispTeRecord.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispTeRecord.java
index 63eb838..3a496d6 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispTeRecord.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/LispTeRecord.java
@@ -21,6 +21,7 @@
 import org.onosproject.lisp.msg.exceptions.LispReaderException;
 import org.onosproject.lisp.msg.exceptions.LispWriterException;
 import org.onosproject.lisp.msg.types.LispAfiAddress.AfiAddressReader;
+import org.onosproject.lisp.msg.types.LispAfiAddress.AfiAddressWriter;
 
 import java.util.Objects;
 
@@ -256,7 +257,7 @@
             byteBuf.writeByte((byte) (lookup + rlocProbe + strict));
 
             // RTR RLOC address
-            LispAfiAddress.AfiAddressWriter writer = new LispAfiAddress.AfiAddressWriter();
+            AfiAddressWriter writer = new AfiAddressWriter();
             writer.writeTo(byteBuf, record.rtrRlocAddress);
         }
     }
