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 9055e409..7af4fa0 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
@@ -50,6 +50,7 @@
     private final boolean smr;
     private final boolean pitr;
     private final boolean smrInvoked;
+    private final int replyRecord;
 
     static final RequestWriter WRITER;
     static {
@@ -69,11 +70,14 @@
      * @param smr            smr flag
      * @param pitr           pitr flag
      * @param smrInvoked     smrInvoked flag
+     * @param replyReocrd    size of map-reply record
      */
     private DefaultLispMapRequest(long nonce, LispAfiAddress sourceEid,
-                                  List<LispAfiAddress> itrRlocs, List<LispEidRecord> eidRecords,
-                                  boolean authoritative, boolean mapDataPresent, boolean probe,
-                                  boolean smr, boolean pitr, boolean smrInvoked) {
+                                  List<LispAfiAddress> itrRlocs,
+                                  List<LispEidRecord> eidRecords,
+                                  boolean authoritative, boolean mapDataPresent,
+                                  boolean probe, boolean smr, boolean pitr,
+                                  boolean smrInvoked, int replyReocrd) {
         this.nonce = nonce;
         this.sourceEid = sourceEid;
         this.itrRlocs = itrRlocs;
@@ -84,6 +88,7 @@
         this.smr = smr;
         this.pitr = pitr;
         this.smrInvoked = smrInvoked;
+        this.replyRecord = replyReocrd;
     }
 
     @Override
@@ -157,6 +162,11 @@
     }
 
     @Override
+    public int getReplyRecord() {
+        return replyRecord;
+    }
+
+    @Override
     public String toString() {
         return toStringHelper(this)
                 .add("type", getType())
@@ -169,7 +179,8 @@
                 .add("probe", probe)
                 .add("SMR", smr)
                 .add("Proxy ITR", pitr)
-                .add("SMR Invoked", smrInvoked).toString();
+                .add("SMR Invoked", smrInvoked)
+                .add("Size of reply record", replyRecord).toString();
     }
 
     @Override
@@ -188,13 +199,14 @@
                 Objects.equal(probe, that.probe) &&
                 Objects.equal(smr, that.smr) &&
                 Objects.equal(pitr, that.pitr) &&
-                Objects.equal(smrInvoked, that.smrInvoked);
+                Objects.equal(smrInvoked, that.smrInvoked) &&
+                Objects.equal(replyRecord, that.replyRecord);
     }
 
     @Override
     public int hashCode() {
         return Objects.hashCode(nonce, sourceEid, authoritative,
-                mapDataPresent, probe, smr, pitr, smrInvoked);
+                mapDataPresent, probe, smr, pitr, smrInvoked, replyRecord);
     }
 
     public static final class DefaultRequestBuilder implements RequestBuilder {
@@ -209,6 +221,7 @@
         private boolean smr;
         private boolean pitr;
         private boolean smrInvoked;
+        private int replyRecord;
 
         @Override
         public LispType getType() {
@@ -280,12 +293,18 @@
         }
 
         @Override
+        public RequestBuilder withReplyRecord(int replyRecord) {
+            this.replyRecord = replyRecord;
+            return this;
+        }
+
+        @Override
         public LispMapRequest build() {
 
             checkArgument((itrRlocs != null) && (itrRlocs.size() > 0), "Must have an ITR RLOC entry");
 
             return new DefaultLispMapRequest(nonce, sourceEid, itrRlocs, eidRecords,
-                    authoritative, mapDataPresent, probe, smr, pitr, smrInvoked);
+                    authoritative, mapDataPresent, probe, smr, pitr, smrInvoked, replyRecord);
         }
     }
 
@@ -355,6 +374,9 @@
                 eidRecords.add(new EidRecordReader().readFrom(byteBuf));
             }
 
+            // reply record -> 32 bits
+            int replyRecord = byteBuf.readInt();
+
             return new DefaultRequestBuilder()
                         .withIsAuthoritative(authoritative)
                         .withIsMapDataPresent(mapDataPresent)
@@ -366,6 +388,7 @@
                         .withSourceEid(sourceEid)
                         .withEidRecords(eidRecords)
                         .withItrRlocs(itrRlocs)
+                        .withReplyRecord(replyRecord)
                         .build();
         }
     }
@@ -460,7 +483,8 @@
                 recordWriter.writeTo(byteBuf, records.get(i));
             }
 
-            // TODO: handle Map-Reply record
+            // reply record
+            byteBuf.writeInt(message.getReplyRecord());
         }
     }
 }
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 aeaa21c..58113c6 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
@@ -133,6 +133,13 @@
     List<LispEidRecord> getEids();
 
     /**
+     * Obtains the size of map-reply record.
+     *
+     * @return the size of map-reply record
+     */
+    int getReplyRecord();
+
+    /**
      * A builder of LISP map request message.
      */
     interface RequestBuilder extends Builder {
@@ -218,6 +225,14 @@
         RequestBuilder withEidRecords(List<LispEidRecord> records);
 
         /**
+         * Sets the size of map-reply record.
+         *
+         * @param replyRecord the size of map-reply record
+         * @return RequestBuilder object
+         */
+        RequestBuilder withReplyRecord(int replyRecord);
+
+        /**
          * Builds LISP map request message.
          *
          * @return LISP map request message
diff --git a/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRequestTest.java b/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRequestTest.java
index 79e4a5c..1b88aa6 100644
--- a/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRequestTest.java
+++ b/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRequestTest.java
@@ -70,6 +70,7 @@
                         .withItrRlocs(rlocs1)
                         .withEidRecords(records1)
                         .withNonce(1L)
+                        .withReplyRecord(1)
                         .build();
 
         RequestBuilder builder2 = new DefaultRequestBuilder();
@@ -86,6 +87,7 @@
                         .withItrRlocs(rlocs1)
                         .withEidRecords(records2)
                         .withNonce(1L)
+                        .withReplyRecord(1)
                         .build();
 
         RequestBuilder builder3 = new DefaultRequestBuilder();
@@ -107,6 +109,7 @@
                         .withSourceEid(ipv4Eid2)
                         .withItrRlocs(rlocs2)
                         .withNonce(2L)
+                        .withReplyRecord(2)
                         .build();
     }
 
@@ -134,6 +137,7 @@
         assertThat(request.isSmrInvoked(), is(false));
         assertThat(request.getNonce(), is(1L));
         assertThat(request.getRecordCount(), is(2));
+        assertThat(request.getReplyRecord(), is(1));
     }
 
     @Test
