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 d187d88..6a41ad3 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
@@ -60,7 +60,7 @@
     }
 
     @Override
-    public List<LispRecord> getLispRecords() {
+    public List<LispMapRecord> getLispRecords() {
         return null;
     }
 
@@ -97,7 +97,7 @@
         }
 
         @Override
-        public NotifyBuilder addRecord(LispRecord record) {
+        public NotifyBuilder addRecord(LispMapRecord record) {
             return null;
         }
     }
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
new file mode 100644
index 0000000..c910b43
--- /dev/null
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRecord.java
@@ -0,0 +1,98 @@
+/*
+ * Copyright 2016-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.lisp.msg.protocols;
+
+import org.onosproject.lisp.msg.types.LispAfiAddress;
+
+/**
+ * Default implementation of LispMapRecord.
+ */
+public class DefaultLispMapRecord implements LispMapRecord {
+
+    private int recordTtl;
+    private int locatorCount;
+    private byte maskLength;
+    private LispMapReplyAction action;
+    private boolean authoritative;
+    private short mapVersionNumber;
+    private LispAfiAddress eidPrefixAfi;
+
+    public int getRecordTtl() {
+        return recordTtl;
+    }
+
+    public int getLocatorCount() {
+        return locatorCount;
+    }
+
+    public byte getMaskLength() {
+        return maskLength;
+    }
+
+    public LispMapReplyAction getAction() {
+        return action;
+    }
+
+    public boolean isAuthoritative() {
+        return authoritative;
+    }
+
+    public short getMapVersionNumber() {
+        return mapVersionNumber;
+    }
+
+    public LispAfiAddress getEidPrefixAfi() {
+        return eidPrefixAfi;
+    }
+
+    public static final class DefaultMapRecordBuilder implements MapRecordBuilder {
+
+        @Override
+        public MapRecordBuilder withRecordTtl(int recordTtl) {
+            return null;
+        }
+
+        @Override
+        public MapRecordBuilder withLocatorCount(int locatorCount) {
+            return null;
+        }
+
+        @Override
+        public MapRecordBuilder withMaskLength(byte maskLength) {
+            return null;
+        }
+
+        @Override
+        public MapRecordBuilder withAction(LispMapReplyAction action) {
+            return null;
+        }
+
+        @Override
+        public MapRecordBuilder withAuthoritative(boolean authoritative) {
+            return null;
+        }
+
+        @Override
+        public MapRecordBuilder withMapVersionNumber(short mapVersionNumber) {
+            return null;
+        }
+
+        @Override
+        public MapRecordBuilder withEidPrefixAfi(LispAfiAddress prefix) {
+            return null;
+        }
+    }
+}
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 259f80a..1b2987e 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
@@ -69,7 +69,7 @@
     }
 
     @Override
-    public List<LispRecord> getLispRecords() {
+    public List<LispMapRecord> getLispRecords() {
         return null;
     }
 
@@ -116,7 +116,7 @@
         }
 
         @Override
-        public RegisterBuilder addRecord(LispRecord record) {
+        public RegisterBuilder addRecord(LispMapRecord record) {
             return null;
         }
     }
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 9f8ac0f..ab109d1 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
@@ -85,7 +85,7 @@
     }
 
     @Override
-    public List<EidRecord> getEids() {
+    public List<LispEidRecord> getEids() {
         return null;
     }
 
@@ -142,7 +142,7 @@
         }
 
         @Override
-        public RequestBuilder addEidRecord(EidRecord record) {
+        public RequestBuilder addEidRecord(LispEidRecord record) {
             return null;
         }
     }
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/EidRecord.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/EidRecord.java
deleted file mode 100644
index ffcd90e..0000000
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/EidRecord.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Copyright 2016-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.lisp.msg.protocols;
-
-/**
- * LISP EID record section which is part of LISP map request message.
- */
-public class EidRecord {
-}
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
new file mode 100644
index 0000000..f6538a6
--- /dev/null
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispEidRecord.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2016-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.lisp.msg.protocols;
+
+import org.onosproject.lisp.msg.types.LispAfiAddress;
+
+/**
+ * LISP EID record section which is part of LISP map request message.
+ */
+public class LispEidRecord {
+
+    private final byte maskLength;
+    private final LispAfiAddress prefix;
+
+    /**
+     * Initializes LispEidRecord with mask length and EID prefix.
+     *
+     * @param maskLength mask length
+     * @param prefix EID prefix
+     */
+    public LispEidRecord(byte maskLength, LispAfiAddress prefix) {
+        this.maskLength = maskLength;
+        this.prefix = prefix;
+    }
+
+    /**
+     * Obtains mask length of the EID Record.
+     *
+     * @return mask length of the EID Record
+     */
+    public byte getMaskLength() {
+        return maskLength;
+    }
+
+    /**
+     * Obtains EID prefix.
+     *
+     * @return EID prefix
+     */
+    public LispAfiAddress getPrefix() {
+        return prefix;
+    }
+}
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMapNotify.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMapNotify.java
index dd0fbf5..65c0703 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMapNotify.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMapNotify.java
@@ -89,7 +89,7 @@
      *
      * @return a collection of records
      */
-    List<LispRecord> getLispRecords();
+    List<LispMapRecord> getLispRecords();
 
     /**
      * A builder of LISP map notify message.
@@ -134,6 +134,6 @@
          * @param record record
          * @return NotifyBuilder object
          */
-        NotifyBuilder addRecord(LispRecord record);
+        NotifyBuilder addRecord(LispMapRecord record);
     }
 }
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMapRecord.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMapRecord.java
new file mode 100644
index 0000000..2896e80
--- /dev/null
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMapRecord.java
@@ -0,0 +1,135 @@
+/*
+ * Copyright 2016-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.lisp.msg.protocols;
+
+import org.onosproject.lisp.msg.types.LispAfiAddress;
+
+/**
+ * LISP record section which is part of LISP map register message.
+ */
+public interface LispMapRecord {
+
+    /**
+     * Obtains record TTL value.
+     *
+     * @return record TTL value
+     */
+    int getRecordTtl();
+
+    /**
+     * Obtains locator count value.
+     *
+     * @return locator count value
+     */
+    int getLocatorCount();
+
+    /**
+     * Obtains address mask length.
+     *
+     * @return mask length
+     */
+    byte getMaskLength();
+
+    /**
+     * Obtains LispMapReplyAction enum code.
+     *
+     * @return LispMapReplyAction enum code
+     */
+    LispMapReplyAction getAction();
+
+    /**
+     * Obtains authoritative flag.
+     *
+     * @return authoritative flag
+     */
+    boolean isAuthoritative();
+
+    /**
+     * Obtains map version number.
+     *
+     * @return map version number
+     */
+    short getMapVersionNumber();
+
+    /**
+     * Obtains EID prefix.
+     *
+     * @return EID prefix
+     */
+    LispAfiAddress getEidPrefixAfi();
+
+    /**
+     * A builder of LISP map record.
+     */
+    interface MapRecordBuilder {
+
+        /**
+         * Sets record TTL value.
+         *
+         * @param recordTtl record TTL
+         * @return MapRecordBuilder object
+         */
+        MapRecordBuilder withRecordTtl(int recordTtl);
+
+        /**
+         * Sets locator count.
+         *
+         * @param locatorCount locator count
+         * @return MapRecordBuilder object
+         */
+        MapRecordBuilder withLocatorCount(int locatorCount);
+
+        /**
+         * Sets mask length.
+         *
+         * @param maskLength mask length
+         * @return MapRecordBuilder object
+         */
+        MapRecordBuilder withMaskLength(byte maskLength);
+
+        /**
+         * Sets LISP map reply action enum.
+         *
+         * @param action map reply action
+         * @return MapRecordBuilder object
+         */
+        MapRecordBuilder withAction(LispMapReplyAction action);
+
+        /**
+         * Sets authoritative flag.
+         *
+         * @param authoritative authoritative flag
+         * @return MapRecordBuilder object
+         */
+        MapRecordBuilder withAuthoritative(boolean authoritative);
+
+        /**
+         * Sets LISP map version number.
+         *
+         * @param mapVersionNumber map version number
+         * @return MapRecordBuilder object
+         */
+        MapRecordBuilder withMapVersionNumber(short mapVersionNumber);
+
+        /**
+         * Sets EID prefix.
+         *
+         * @param prefix EID prefix
+         * @return MapRecordBuilder object
+         */
+        MapRecordBuilder withEidPrefixAfi(LispAfiAddress prefix);
+    }
+}
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMapRegister.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMapRegister.java
index 52bd7af..4703cba 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMapRegister.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMapRegister.java
@@ -103,7 +103,7 @@
      *
      * @return a collection of records
      */
-    List<LispRecord> getLispRecords();
+    List<LispMapRecord> getLispRecords();
 
     /**
      * A builder of LISP map register message.
@@ -164,6 +164,6 @@
          * @param record record
          * @return RegisterBuilder object
          */
-        RegisterBuilder addRecord(LispRecord record);
+        RegisterBuilder addRecord(LispMapRecord record);
     }
 }
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMapReplyAction.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMapReplyAction.java
new file mode 100644
index 0000000..60ad5c3
--- /dev/null
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMapReplyAction.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2016-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.lisp.msg.protocols;
+
+/**
+ * An enumeration class that represents Map-Reply action.
+ *
+ * The current assigned values are:
+ *
+ * (0) No-Action:  The map-cache is kept alive, and no packet
+ * encapsulation occurs.
+ *
+ * (1) Natively-Forward:  The packet is not encapsulated or dropped
+ *     but natively forwarded.
+ *
+ * (2) Send-Map-Request:  The packet invokes sending a Map-Request.
+ *
+ * (3) Drop:  A packet that matches this map-cache entry is dropped.
+ *     An ICMP Destination Unreachable message SHOULD be sent.
+ */
+public enum LispMapReplyAction {
+
+    NoAction(0),            // No-Action
+    NativelyForward(1),     // Natively-Forward
+    SendMapRequest(2),      // Send-Map-Request
+    Drop(3);                // Drop
+
+    private int action;
+
+    LispMapReplyAction(int action) {
+        this.action = action;
+    }
+
+    /**
+     * Obtains MapReplyAction code.
+     *
+     * @return map reply action code
+     */
+    public int getAction() {
+        return action;
+    }
+
+    /**
+     * Obtains the LispMapReplyAction enum with given action code.
+     *
+     * @param action action code
+     * @return an enumeration of LispMapReplyAction
+     */
+    public static LispMapReplyAction valueOf(int action) {
+        for (LispMapReplyAction act : values()) {
+            if (act.getAction() == action) {
+                return act;
+            }
+        }
+        return null;
+    }
+}
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMapRequest.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMapRequest.java
index 968f89e..f0a49e8 100644
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMapRequest.java
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispMapRequest.java
@@ -122,7 +122,7 @@
      *
      * @return a collection of EID records
      */
-    List<EidRecord> getEids();
+    List<LispEidRecord> getEids();
 
     /**
      * A builder of LISP map request message.
@@ -199,6 +199,6 @@
          * @param record EID record
          * @return RequestBuilder object
          */
-        RequestBuilder addEidRecord(EidRecord record);
+        RequestBuilder addEidRecord(LispEidRecord record);
     }
 }
diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispRecord.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispRecord.java
deleted file mode 100644
index efbe17b..0000000
--- a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/LispRecord.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright 2016-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.lisp.msg.protocols;
-
-/**
- * LISP record section which is part of LISP map register message.
- */
-public class LispRecord {
-
-}
