diff --git a/drivers/lisp/BUCK b/drivers/lisp/BUCK
index e5f7d2a..02cc884 100644
--- a/drivers/lisp/BUCK
+++ b/drivers/lisp/BUCK
@@ -2,6 +2,7 @@
     '//lib:CORE_DEPS',
     '//protocols/lisp/api:onos-protocols-lisp-api',
     '//apps/mappingmanagement/api:onos-apps-mappingmanagement-api',
+    '//core/store/serializers:onos-core-serializers'
 ]
 
 TEST_DEPS = [
diff --git a/drivers/lisp/pom.xml b/drivers/lisp/pom.xml
index 579b5bc..329854b 100644
--- a/drivers/lisp/pom.xml
+++ b/drivers/lisp/pom.xml
@@ -52,6 +52,11 @@
             <artifactId>onos-mapping-api</artifactId>
             <version>${project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-core-serializers</artifactId>
+            <version>${project.version}</version>
+        </dependency>
     </dependencies>
 
 </project>
\ No newline at end of file
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 7819a3b..8766aa5 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
@@ -15,27 +15,317 @@
  */
 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.APPLICATION_DATA_ADDRESS;
 
 /**
  * Implementation of LISP application data address.
+ * When a locator-set needs to be conveyed based on the type of application or
+ * the Per-Hop Behavior (PHB) of a packet, the Application Data Type can be used.
  */
-public class LispAppDataAddress extends AbstractExtension
+public final class LispAppDataAddress extends AbstractExtension
                                             implements ExtensionMappingAddress {
+
+    private static final String PROTOCOL = "protocol";
+    private static final String IP_TOS = "ipTos";
+    private static final String LOCAL_PORT_LOW = "localPortLow";
+    private static final String LOCAL_PORT_HIGH = "localPortHigh";
+    private static final String REMOTE_PORT_LOW = "remotePortLow";
+    private static final String REMOTE_PORT_HIGH = "remotePortHigh";
+    private static final String ADDRESS = "address";
+
+    private byte protocol;
+    private int ipTos;
+    private short localPortLow;
+    private short localPortHigh;
+    private short remotePortLow;
+    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.
+     */
+    public LispAppDataAddress() {
+    }
+
+    /**
+     * Creates an instance with initialized parameters.
+     *
+     * @param protocol       protocol number
+     * @param ipTos          IP type of service
+     * @param localPortLow   low-ranged local port number
+     * @param localPortHigh  high-ranged local port number
+     * @param remotePortLow  low-ranged remote port number
+     * @param remotePortHigh high-ranged remote port number
+     */
+    private LispAppDataAddress(byte protocol, int ipTos, short localPortLow,
+                              short localPortHigh, short remotePortLow,
+                              short remotePortHigh, MappingAddress address) {
+        this.protocol = protocol;
+        this.ipTos = ipTos;
+        this.localPortLow = localPortLow;
+        this.localPortHigh = localPortHigh;
+        this.remotePortLow = remotePortLow;
+        this.remotePortHigh = remotePortHigh;
+        this.address = address;
+    }
+
+    /**
+     * Obtains protocol type.
+     *
+     * @return protocol type
+     */
+    public byte getProtocol() {
+        return protocol;
+    }
+
+    /**
+     * Obtains IP type of service.
+     *
+     * @return IP type of service
+     */
+    public int getIpTos() {
+        return ipTos;
+    }
+
+    /**
+     * Obtains local port low.
+     *
+     * @return local port low
+     */
+    public short getLocalPortLow() {
+        return localPortLow;
+    }
+
+    /**
+     * Obtains local port high.
+     *
+     * @return local port high
+     */
+    public short getLocalPortHigh() {
+        return localPortHigh;
+    }
+
+    /**
+     * Obtains remote port low.
+     *
+     * @return remote port low
+     */
+    public short getRemotePortLow() {
+        return remotePortLow;
+    }
+
+    /**
+     * Obtains remote port high.
+     *
+     * @return remote port high
+     */
+    public short getRemotePortHigh() {
+        return remotePortHigh;
+    }
+
+    /**
+     * Obtains mapping address.
+     *
+     * @return mapping address
+     */
+    public MappingAddress getAddress() {
+        return address;
+    }
+
     @Override
     public ExtensionMappingAddressType type() {
-        return null;
+        return APPLICATION_DATA_ADDRESS.type();
     }
 
     @Override
     public byte[] serialize() {
-        return new byte[0];
+        Map<String, Object> parameterMap = Maps.newHashMap();
+        parameterMap.put(PROTOCOL, protocol);
+        parameterMap.put(IP_TOS, ipTos);
+        parameterMap.put(LOCAL_PORT_LOW, localPortLow);
+        parameterMap.put(LOCAL_PORT_HIGH, localPortHigh);
+        parameterMap.put(REMOTE_PORT_LOW, remotePortLow);
+        parameterMap.put(REMOTE_PORT_HIGH, remotePortHigh);
+        parameterMap.put(ADDRESS, address);
+
+        return appKryo.serialize(parameterMap);
     }
 
     @Override
     public void deserialize(byte[] data) {
+        Map<String, Object> parameterMap = appKryo.deserialize(data);
 
+        this.protocol = (byte) parameterMap.get(PROTOCOL);
+        this.ipTos = (int) parameterMap.get(IP_TOS);
+        this.localPortLow = (short) parameterMap.get(LOCAL_PORT_LOW);
+        this.localPortHigh = (short) parameterMap.get(LOCAL_PORT_HIGH);
+        this.remotePortLow = (short) parameterMap.get(REMOTE_PORT_LOW);
+        this.remotePortHigh = (short) parameterMap.get(REMOTE_PORT_HIGH);
+        this.address = (MappingAddress) parameterMap.get(ADDRESS);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(protocol, ipTos, localPortLow, localPortHigh,
+                remotePortLow, remotePortHigh, address);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj instanceof LispAppDataAddress) {
+            LispAppDataAddress that = (LispAppDataAddress) obj;
+            return Objects.equals(protocol, that.protocol) &&
+                    Objects.equals(ipTos, that.ipTos) &&
+                    Objects.equals(localPortLow, that.localPortLow) &&
+                    Objects.equals(localPortHigh, that.localPortHigh) &&
+                    Objects.equals(remotePortLow, that.remotePortLow) &&
+                    Objects.equals(remotePortHigh, that.remotePortHigh) &&
+                    Objects.equals(address, that.address);
+        }
+        return false;
+    }
+
+    @Override
+    public String toString() {
+        return toStringHelper(type().toString())
+                .add("protocol", protocol)
+                .add("IP type of service", ipTos)
+                .add("low-ranged local port number", localPortLow)
+                .add("high-ranged local port number", localPortHigh)
+                .add("low-ranged remote port number", remotePortLow)
+                .add("high-ranged remote port number", remotePortHigh)
+                .add("address", address)
+                .toString();
+    }
+
+    /**
+     * A builder for building LispAppDataAddress.
+     */
+    public static final class Builder {
+        private byte protocol;
+        private int ipTos;
+        private short localPortLow;
+        private short localPortHigh;
+        private short remotePortLow;
+        private short remotePortHigh;
+        private MappingAddress address;
+
+        /**
+         * Sets protocol number.
+         *
+         * @param protocol protocol number
+         * @return Builder object
+         */
+        public Builder withProtocol(byte protocol) {
+            this.protocol = protocol;
+            return this;
+        }
+
+        /**
+         * Sets IP type of service.
+         *
+         * @param ipTos IP type of service
+         * @return Builder object
+         */
+        public Builder withIpTos(int ipTos) {
+            this.ipTos = ipTos;
+            return this;
+        }
+
+        /**
+         * Sets low-ranged local port number.
+         *
+         * @param localPortLow low-ranged local port number
+         * @return Builder object
+         */
+        public Builder withLocalPortLow(short localPortLow) {
+            this.localPortLow = localPortLow;
+            return this;
+        }
+
+        /**
+         * Sets high-ranged local port number.
+         *
+         * @param localPortHigh high-ranged local port number
+         * @return Builder object
+         */
+        public Builder withLocalPortHigh(short localPortHigh) {
+            this.localPortHigh = localPortHigh;
+            return this;
+        }
+
+        /**
+         * Sets low-ranged remote port number.
+         *
+         * @param remotePortLow low-ranged remote port number
+         * @return Builder object
+         */
+        public Builder withRemotePortLow(short remotePortLow) {
+            this.remotePortLow = remotePortLow;
+            return this;
+        }
+
+        /**
+         * Sets high-ranged remote port number.
+         *
+         * @param remotePortHigh high-ranged remote port number
+         * @return Builder object
+         */
+        public Builder withRemotePortHigh(short remotePortHigh) {
+            this.remotePortHigh = remotePortHigh;
+            return this;
+        }
+
+        /**
+         * Sets mapping address.
+         *
+         * @param address mapping address
+         * @return Builder object
+         */
+        public Builder withAddress(MappingAddress address) {
+            this.address = address;
+            return this;
+        }
+
+        /**
+         * Builds LispAppDataLcafAddress instance.
+         *
+         * @return LispAddDataLcafAddress instance
+         */
+        public LispAppDataAddress build() {
+
+            return new LispAppDataAddress(protocol, ipTos, localPortLow,
+                    localPortHigh, remotePortLow, remotePortHigh, address);
+        }
     }
 }
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 4b1dfe9..a0480aa 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
@@ -16,27 +16,170 @@
 
 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.AS_ADDRESS;
 
 /**
  * Implementation of LISP Autonomous System (AS) address.
+ * When an AS number is stored in the LISP Mapping Database System for either
+ * policy or documentation reasons, it can be encoded in a LISP Canonical Address.
  */
-public class LispAsAddress extends AbstractExtension
+public final class LispAsAddress extends AbstractExtension
                                             implements ExtensionMappingAddress {
+
+    private static final String AS_NUMBER = "asNumber";
+    private static final String ADDRESS = "address";
+
+    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.
+     */
+    public LispAsAddress() {
+    }
+
+    /**
+     * Creates an instance with initialized parameters.
+     *
+     * @param asNumber AS number
+     */
+    private LispAsAddress(int asNumber, MappingAddress address) {
+        this.asNumber = asNumber;
+        this.address = address;
+    }
+
+    /**
+     * Obtains AS number.
+     *
+     * @return AS number
+     */
+    public int getAsNumber() {
+        return asNumber;
+    }
+
+    /**
+     * Obtains mapping address.
+     *
+     * @return mapping address
+     */
+    public MappingAddress getAddress() {
+        return address;
+    }
+
     @Override
     public ExtensionMappingAddressType type() {
-        return null;
+        return AS_ADDRESS.type();
     }
 
     @Override
     public byte[] serialize() {
-        return new byte[0];
+        Map<String, Object> parameterMap = Maps.newHashMap();
+
+        parameterMap.put(AS_NUMBER, asNumber);
+        parameterMap.put(ADDRESS, address);
+        return appKryo.serialize(parameterMap);
     }
 
     @Override
     public void deserialize(byte[] data) {
+        Map<String, Object> parameterMap = appKryo.deserialize(data);
 
+        this.asNumber = (int) parameterMap.get(AS_NUMBER);
+        this.address = (MappingAddress) parameterMap.get(ADDRESS);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(asNumber, address);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+
+        if (obj instanceof LispAsAddress) {
+            final LispAsAddress other = (LispAsAddress) obj;
+            return Objects.equals(asNumber, other.asNumber) &&
+                    Objects.equals(address, other.address);
+        }
+
+        return false;
+    }
+
+    @Override
+    public String toString() {
+        return toStringHelper(this)
+                .add("AS number", asNumber)
+                .add("address", address)
+                .toString();
+    }
+
+    /**
+     * A builder for building LispAsAddress.
+     */
+    public static final class Builder {
+        private int asNumber;
+        private MappingAddress address;
+
+        /**
+         * Sets AS number.
+         *
+         * @param asNumber AS number
+         * @return Builder object
+         */
+        public Builder withAsNumber(int asNumber) {
+            this.asNumber = asNumber;
+            return this;
+        }
+
+        /**
+         * Sets mapping address.
+         *
+         * @param address mapping address
+         * @return Builder object
+         */
+        public Builder withAddress(MappingAddress address) {
+            this.address = address;
+            return this;
+        }
+
+        /**
+         * Builds LispAsAddress instance.
+         *
+         * @return LispAsAddress instance
+         */
+        public LispAsAddress build() {
+
+            return new LispAsAddress(asNumber, 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 48f4f4f..8e796be 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
@@ -20,14 +20,20 @@
 import org.onosproject.mapping.addresses.ExtensionMappingAddressType;
 import org.onosproject.net.flow.AbstractExtension;
 
+import static org.onosproject.mapping.addresses.ExtensionMappingAddressType
+                        .ExtensionMappingAddressTypes.GEO_COORDINATE_ADDRESS;
+
 /**
  * Implementation of LISP Geo Coordinate (GC) address.
+ * If an ETR desires to send a Map-Reply describing the Geo Coordinates for each
+ * locator in its locator-set, it can use the Geo Coordinate Type to convey
+ * physical location information.
  */
 public class LispGcAddress extends AbstractExtension
                                             implements ExtensionMappingAddress {
     @Override
     public ExtensionMappingAddressType type() {
-        return null;
+        return GEO_COORDINATE_ADDRESS.type();
     }
 
     @Override
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 3bc7e46..77beeee 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
@@ -20,14 +20,20 @@
 import org.onosproject.mapping.addresses.ExtensionMappingAddressType;
 import org.onosproject.net.flow.AbstractExtension;
 
+import static org.onosproject.mapping.addresses.ExtensionMappingAddressType
+                                .ExtensionMappingAddressTypes.LIST_ADDRESS;
+
 /**
  * Implementation of LISP list address.
+ * When header translation between IPv4 and IPv6 is desirable a LISP Canonical
+ * Address can use the AFI List Type to carry a variable number of AFIs in one
+ * LCAF AFI.
  */
 public class LispListAddress extends AbstractExtension
                                             implements ExtensionMappingAddress {
     @Override
     public ExtensionMappingAddressType type() {
-        return null;
+        return LIST_ADDRESS.type();
     }
 
     @Override
diff --git a/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispMulticastAddress.java b/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispMulticastAddress.java
index fc3e03b..5bbda74 100644
--- a/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispMulticastAddress.java
+++ b/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispMulticastAddress.java
@@ -20,14 +20,19 @@
 import org.onosproject.mapping.addresses.ExtensionMappingAddressType;
 import org.onosproject.net.flow.AbstractExtension;
 
+import static org.onosproject.mapping.addresses.ExtensionMappingAddressType
+                            .ExtensionMappingAddressTypes.MULTICAST_ADDRESS;
+
 /**
  * Implementation of LISP multicast address.
+ * The intent of this type of unicast replication is to deliver packets to
+ * multiple ETRs at receiver LISP multicast sites.
  */
 public class LispMulticastAddress extends AbstractExtension
                                             implements ExtensionMappingAddress {
     @Override
     public ExtensionMappingAddressType type() {
-        return null;
+        return MULTICAST_ADDRESS.type();
     }
 
     @Override
diff --git a/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispNatAddress.java b/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispNatAddress.java
index a21c83e..a71b684 100644
--- a/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispNatAddress.java
+++ b/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispNatAddress.java
@@ -20,14 +20,19 @@
 import org.onosproject.mapping.addresses.ExtensionMappingAddressType;
 import org.onosproject.net.flow.AbstractExtension;
 
+import static org.onosproject.mapping.addresses.ExtensionMappingAddressType
+                                .ExtensionMappingAddressTypes.NAT_ADDRESS;
+
 /**
  * Implementation of LISP Network Address Translation (NAT) address.
+ * When a LISP system is conveying global address and mapped port information
+ * when traversing through a NAT device, the NAT-Traversal Type is used.
  */
 public class LispNatAddress extends AbstractExtension
                                             implements ExtensionMappingAddress {
     @Override
     public ExtensionMappingAddressType type() {
-        return null;
+        return NAT_ADDRESS.type();
     }
 
     @Override
diff --git a/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispNonceAddress.java b/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispNonceAddress.java
index b516913..747c5f6 100644
--- a/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispNonceAddress.java
+++ b/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispNonceAddress.java
@@ -20,14 +20,19 @@
 import org.onosproject.mapping.addresses.ExtensionMappingAddressType;
 import org.onosproject.net.flow.AbstractExtension;
 
+import static org.onosproject.mapping.addresses.ExtensionMappingAddressType
+                                .ExtensionMappingAddressTypes.NONCE_ADDRESS;
+
 /**
  * Implementation of LISP nonce address.
+ * When a public PETR device wants to verify who is encapsulating to it, it can
+ * check for a specific nonce value in the LISP encapsulated packet.
  */
 public class LispNonceAddress extends AbstractExtension
                                             implements ExtensionMappingAddress {
     @Override
     public ExtensionMappingAddressType type() {
-        return null;
+        return NONCE_ADDRESS.type();
     }
 
     @Override
diff --git a/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispSecurityAddress.java b/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispSecurityAddress.java
index 1f10205..c3d13f6 100644
--- a/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispSecurityAddress.java
+++ b/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispSecurityAddress.java
@@ -20,6 +20,9 @@
 import org.onosproject.mapping.addresses.ExtensionMappingAddressType;
 import org.onosproject.net.flow.AbstractExtension;
 
+import static org.onosproject.mapping.addresses.ExtensionMappingAddressType
+                            .ExtensionMappingAddressTypes.SECURITY_ADDRESS;
+
 /**
  * Implementation LISP security address.
  */
@@ -27,7 +30,7 @@
                                             implements ExtensionMappingAddress {
     @Override
     public ExtensionMappingAddressType type() {
-        return null;
+        return SECURITY_ADDRESS.type();
     }
 
     @Override
diff --git a/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispSegmentAddress.java b/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispSegmentAddress.java
index c48a80c..b251724 100644
--- a/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispSegmentAddress.java
+++ b/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispSegmentAddress.java
@@ -20,14 +20,20 @@
 import org.onosproject.mapping.addresses.ExtensionMappingAddressType;
 import org.onosproject.net.flow.AbstractExtension;
 
+import static org.onosproject.mapping.addresses.ExtensionMappingAddressType
+                            .ExtensionMappingAddressTypes.SECURITY_ADDRESS;
+
 /**
  * Implementation of LISP segment address.
+ * When multiple organizations inside of a LISP site are using private addresses
+ * [RFC1918] as EID-prefixes, their address spaces must remain segregated due
+ * to possible address duplication.
  */
 public class LispSegmentAddress extends AbstractExtension
                                             implements ExtensionMappingAddress {
     @Override
     public ExtensionMappingAddressType type() {
-        return null;
+        return SECURITY_ADDRESS.type();
     }
 
     @Override
diff --git a/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispSrcDstAddress.java b/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispSrcDstAddress.java
index 5dc892a..1c1dee7 100644
--- a/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispSrcDstAddress.java
+++ b/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispSrcDstAddress.java
@@ -20,14 +20,20 @@
 import org.onosproject.mapping.addresses.ExtensionMappingAddressType;
 import org.onosproject.net.flow.AbstractExtension;
 
+import static org.onosproject.mapping.addresses.ExtensionMappingAddressType
+                            .ExtensionMappingAddressTypes.SOURCE_DEST_ADDRESS;
+
 /**
- * Implementation of LISP source and detination address.
+ * Implementation of LISP source and destination address.
+ * When both a source and destination address of a flow need consideration for
+ * different locator-sets, this 2-tuple key is used in EID fields in LISP
+ * control messages.
  */
 public class LispSrcDstAddress extends AbstractExtension
                                             implements ExtensionMappingAddress {
     @Override
     public ExtensionMappingAddressType type() {
-        return null;
+        return SOURCE_DEST_ADDRESS.type();
     }
 
     @Override
diff --git a/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispTeAddress.java b/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispTeAddress.java
index f5d892b..4415d30 100644
--- a/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispTeAddress.java
+++ b/drivers/lisp/src/main/java/org/onosproject/drivers/lisp/extensions/LispTeAddress.java
@@ -20,14 +20,19 @@
 import org.onosproject.mapping.addresses.ExtensionMappingAddressType;
 import org.onosproject.net.flow.AbstractExtension;
 
+import static org.onosproject.mapping.addresses.ExtensionMappingAddressType
+                    .ExtensionMappingAddressTypes.TRAFFIC_ENGINEERING_ADDRESS;
+
 /**
  * Implementation of LISP traffic engineering address.
+ * For a given EID lookup into the mapping database, this LCAF can be returned
+ * to provide a list of locators in an explicit re-encapsulation path.
  */
 public final class LispTeAddress extends AbstractExtension
                                             implements ExtensionMappingAddress {
     @Override
     public ExtensionMappingAddressType type() {
-        return null;
+        return TRAFFIC_ENGINEERING_ADDRESS.type();
     }
 
     @Override
diff --git a/drivers/lisp/src/test/java/org/onosproject/drivers/lisp/extensions/LispAppDataAddressTest.java b/drivers/lisp/src/test/java/org/onosproject/drivers/lisp/extensions/LispAppDataAddressTest.java
new file mode 100644
index 0000000..bbb3da5
--- /dev/null
+++ b/drivers/lisp/src/test/java/org/onosproject/drivers/lisp/extensions/LispAppDataAddressTest.java
@@ -0,0 +1,119 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.drivers.lisp.extensions;
+
+import com.google.common.testing.EqualsTester;
+import org.junit.Before;
+import org.junit.Test;
+import org.onlab.packet.IpPrefix;
+import org.onosproject.mapping.addresses.MappingAddress;
+import org.onosproject.mapping.addresses.MappingAddresses;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
+
+/**
+ * Unit tests for LispAppDataAddress extension class.
+ */
+public class LispAppDataAddressTest {
+
+    private static final IpPrefix IP_ADDRESS_1 = IpPrefix.valueOf("1.2.3.4/24");
+    private static final IpPrefix IP_ADDRESS_2 = IpPrefix.valueOf("5.6.7.8/24");
+
+    private static final byte PROTOCOL_VALUE_1 = 0x01;
+    private static final int IP_TOS_VALUE_1 = 10;
+    private static final short LOCAL_PORT_LOW_VALUE = 1;
+    private static final short LOCAL_PORT_HIGH_VALUE = 255;
+    private static final short REMOTE_PORT_LOW_VALUE = 2;
+    private static final short REMOTE_PORT_HIGH_VALUE = 254;
+
+    private static final byte PROTOCOL_VALUE_2 = 0x02;
+    private static final int IP_TOS_VALUE_2 = 20;
+
+    private LispAppDataAddress address1;
+    private LispAppDataAddress sameAsAddress1;
+    private LispAppDataAddress address2;
+
+    @Before
+    public void setUp() {
+
+        MappingAddress ma1 = MappingAddresses.ipv4MappingAddress(IP_ADDRESS_1);
+
+        address1 = new LispAppDataAddress.Builder()
+                                            .withProtocol(PROTOCOL_VALUE_1)
+                                            .withIpTos(IP_TOS_VALUE_1)
+                                            .withLocalPortLow(LOCAL_PORT_LOW_VALUE)
+                                            .withLocalPortHigh(LOCAL_PORT_HIGH_VALUE)
+                                            .withRemotePortLow(REMOTE_PORT_LOW_VALUE)
+                                            .withRemotePortHigh(REMOTE_PORT_HIGH_VALUE)
+                                            .withAddress(ma1)
+                                            .build();
+
+        sameAsAddress1 = new LispAppDataAddress.Builder()
+                                            .withProtocol(PROTOCOL_VALUE_1)
+                                            .withIpTos(IP_TOS_VALUE_1)
+                                            .withLocalPortLow(LOCAL_PORT_LOW_VALUE)
+                                            .withLocalPortHigh(LOCAL_PORT_HIGH_VALUE)
+                                            .withRemotePortLow(REMOTE_PORT_LOW_VALUE)
+                                            .withRemotePortHigh(REMOTE_PORT_HIGH_VALUE)
+                                            .withAddress(ma1)
+                                            .build();
+
+        MappingAddress ma2 = MappingAddresses.ipv4MappingAddress(IP_ADDRESS_2);
+
+        address2 = new LispAppDataAddress.Builder()
+                                            .withProtocol(PROTOCOL_VALUE_2)
+                                            .withIpTos(IP_TOS_VALUE_2)
+                                            .withLocalPortLow(LOCAL_PORT_LOW_VALUE)
+                                            .withLocalPortHigh(LOCAL_PORT_HIGH_VALUE)
+                                            .withRemotePortLow(REMOTE_PORT_LOW_VALUE)
+                                            .withRemotePortHigh(REMOTE_PORT_HIGH_VALUE)
+                                            .withAddress(ma2)
+                                            .build();
+    }
+
+    @Test
+    public void testEquality() {
+        new EqualsTester()
+                .addEqualityGroup(address1, sameAsAddress1)
+                .addEqualityGroup(address2).testEquals();
+    }
+
+    @Test
+    public void testConstruction() {
+        LispAppDataAddress address = address1;
+
+        MappingAddress ma = MappingAddresses.ipv4MappingAddress(IP_ADDRESS_1);
+
+        assertThat(address.getProtocol(), is(PROTOCOL_VALUE_1));
+        assertThat(address.getIpTos(), is(IP_TOS_VALUE_1));
+        assertThat(address.getLocalPortLow(), is(LOCAL_PORT_LOW_VALUE));
+        assertThat(address.getLocalPortHigh(), is(LOCAL_PORT_HIGH_VALUE));
+        assertThat(address.getRemotePortLow(), is(REMOTE_PORT_LOW_VALUE));
+        assertThat(address.getRemotePortHigh(), is(REMOTE_PORT_HIGH_VALUE));
+        assertThat(address.getAddress(), is(ma));
+    }
+
+    @Test
+    public void testSerialization() {
+        LispAppDataAddress other = new LispAppDataAddress();
+        other.deserialize(address1.serialize());
+
+        new EqualsTester()
+                .addEqualityGroup(address1, other)
+                .testEquals();
+    }
+}
diff --git a/drivers/lisp/src/test/java/org/onosproject/drivers/lisp/extensions/LispAsAddressTest.java b/drivers/lisp/src/test/java/org/onosproject/drivers/lisp/extensions/LispAsAddressTest.java
new file mode 100644
index 0000000..0ba9070
--- /dev/null
+++ b/drivers/lisp/src/test/java/org/onosproject/drivers/lisp/extensions/LispAsAddressTest.java
@@ -0,0 +1,93 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.drivers.lisp.extensions;
+
+import com.google.common.testing.EqualsTester;
+import org.junit.Before;
+import org.junit.Test;
+import org.onlab.packet.IpPrefix;
+import org.onosproject.mapping.addresses.MappingAddress;
+import org.onosproject.mapping.addresses.MappingAddresses;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
+
+/**
+ * Unit tests for LispAsAddress extension class.
+ */
+public class LispAsAddressTest {
+
+    private static final IpPrefix IP_ADDRESS_1 = IpPrefix.valueOf("1.2.3.4/24");
+    private static final IpPrefix IP_ADDRESS_2 = IpPrefix.valueOf("5.6.7.8/24");
+
+    private static final int AS_NUMBER_1 = 1;
+    private static final int AS_NUMBER_2 = 2;
+
+    private LispAsAddress address1;
+    private LispAsAddress sameAsAddress1;
+    private LispAsAddress address2;
+
+    @Before
+    public void setUp() {
+
+        MappingAddress ma1 = MappingAddresses.ipv4MappingAddress(IP_ADDRESS_1);
+
+        address1 = new LispAsAddress.Builder()
+                                .withAsNumber(AS_NUMBER_1)
+                                .withAddress(ma1)
+                                .build();
+
+        sameAsAddress1 = new LispAsAddress.Builder()
+                                .withAsNumber(AS_NUMBER_1)
+                                .withAddress(ma1)
+                                .build();
+
+        MappingAddress ma2 = MappingAddresses.ipv4MappingAddress(IP_ADDRESS_2);
+
+        address2 = new LispAsAddress.Builder()
+                                .withAsNumber(AS_NUMBER_2)
+                                .withAddress(ma2)
+                                .build();
+
+    }
+
+    @Test
+    public void testEquality() {
+        new EqualsTester()
+                .addEqualityGroup(address1, sameAsAddress1)
+                .addEqualityGroup(address2).testEquals();
+    }
+
+    @Test
+    public void testConstruction() {
+        LispAsAddress address = address1;
+
+        MappingAddress ma = MappingAddresses.ipv4MappingAddress(IP_ADDRESS_1);
+
+        assertThat(address.getAsNumber(), is(AS_NUMBER_1));
+        assertThat(address.getAddress(), is(ma));
+    }
+
+    @Test
+    public void testSerialization() {
+        LispAsAddress other = new LispAsAddress();
+        other.deserialize(address1.serialize());
+
+        new EqualsTester()
+                .addEqualityGroup(address1, other)
+                .testEquals();
+    }
+}
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/lcaf/LispAppDataLcafAddress.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/lcaf/LispAppDataLcafAddress.java
index 911e0ad..684a6b6 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/lcaf/LispAppDataLcafAddress.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/lcaf/LispAppDataLcafAddress.java
@@ -34,7 +34,7 @@
  * Application data type LCAF address class.
  * <p>
  * Application data type is defined in draft-ietf-lisp-lcaf-22
- * https://tools.ietf.org/html/draft-ietf-lisp-lcaf-22#page-27
+ * https://tools.ietf.org/html/draft-ietf-lisp-lcaf-22#page-29
  *
  * <pre>
  * {@literal
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/lcaf/LispListLcafAddress.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/lcaf/LispListLcafAddress.java
index 1b5983e..3360942 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/lcaf/LispListLcafAddress.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/lcaf/LispListLcafAddress.java
@@ -39,7 +39,7 @@
  * List type LCAF address class.
  * <p>
  * List type is defined in draft-ietf-lisp-lcaf-22
- * https://tools.ietf.org/html/draft-ietf-lisp-lcaf-22#page-22
+ * https://tools.ietf.org/html/draft-ietf-lisp-lcaf-22#page-23
  *
  * <pre>
  * {@literal
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/lcaf/LispNatLcafAddress.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/lcaf/LispNatLcafAddress.java
index 6da6b42..2016f82 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/lcaf/LispNatLcafAddress.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/lcaf/LispNatLcafAddress.java
@@ -34,7 +34,7 @@
  * Network Address Translation (NAT) address class.
  * <p>
  * Instance ID type is defined in draft-ietf-lisp-lcaf-22
- * https://tools.ietf.org/html/draft-ietf-lisp-lcaf-22#page-12
+ * https://tools.ietf.org/html/draft-ietf-lisp-lcaf-22#page-13
  *
  * <pre>
  * {@literal
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/lcaf/LispNonceLcafAddress.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/lcaf/LispNonceLcafAddress.java
index 0930539..db3fd29 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/lcaf/LispNonceLcafAddress.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/lcaf/LispNonceLcafAddress.java
@@ -32,7 +32,7 @@
  * Nonce locator data type LCAF address class.
  * <p>
  * Nonce locator data type is defined in draft-ietf-lisp-lcaf-22
- * https://tools.ietf.org/html/draft-ietf-lisp-lcaf-22#page-30
+ * https://tools.ietf.org/html/draft-ietf-lisp-lcaf-22#page-32
  * <p>
  * <pre>
  * {@literal
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/lcaf/LispSegmentLcafAddress.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/lcaf/LispSegmentLcafAddress.java
index 914664e..f6579ed 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/lcaf/LispSegmentLcafAddress.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/lcaf/LispSegmentLcafAddress.java
@@ -32,7 +32,7 @@
  * Instance ID type LCAF address class.
  * <p>
  * Instance ID type is defined in draft-ietf-lisp-lcaf-22
- * https://tools.ietf.org/html/draft-ietf-lisp-lcaf-22#page-7
+ * https://tools.ietf.org/html/draft-ietf-lisp-lcaf-22#page-8
  *
  * <pre>
  * {@literal
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/lcaf/LispSourceDestLcafAddress.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/lcaf/LispSourceDestLcafAddress.java
index 00accd9..a7c0ae7 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/lcaf/LispSourceDestLcafAddress.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/lcaf/LispSourceDestLcafAddress.java
@@ -32,7 +32,7 @@
  * Source/Dest key type LCAF address class.
  * <p>
  * Source destination key type is defined in draft-ietf-lisp-lcaf-22
- * https://tools.ietf.org/html/draft-ietf-lisp-lcaf-22#page-19
+ * https://tools.ietf.org/html/draft-ietf-lisp-lcaf-22#page-20
  *
  * <pre>
  * {@literal
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/lcaf/LispTeLcafAddress.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/lcaf/LispTeLcafAddress.java
index 6b61305..4906ed3 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/lcaf/LispTeLcafAddress.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/types/lcaf/LispTeLcafAddress.java
@@ -33,7 +33,7 @@
  * Traffic Engineering (TE) type LCAF address class.
  * <p>
  * Traffic Engineering type is defined in draft-ietf-lisp-lcaf-22
- * https://tools.ietf.org/html/draft-ietf-lisp-lcaf-22#page-16
+ * https://tools.ietf.org/html/draft-ietf-lisp-lcaf-22#page-17
  *
  * <pre>
  * {@literal
