diff --git a/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/AbstractLispRecord.java b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/AbstractLispRecord.java
new file mode 100644
index 0000000..3126cc8
--- /dev/null
+++ b/protocols/lisp/msg/src/main/java/org/onosproject/lisp/msg/protocols/AbstractLispRecord.java
@@ -0,0 +1,118 @@
+/*
+ * 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.lisp.msg.protocols;
+
+import org.onosproject.lisp.msg.types.LispAfiAddress;
+
+/**
+ * Abstract LISP record class that provide default implementations.
+ */
+public abstract class AbstractLispRecord implements LispRecord {
+
+    protected final int recordTtl;
+    protected final byte maskLength;
+    protected final LispMapReplyAction action;
+    protected final boolean authoritative;
+    protected final short mapVersionNumber;
+    protected final LispAfiAddress eidPrefixAfi;
+
+    protected AbstractLispRecord(int recordTtl, byte maskLength,
+                                 LispMapReplyAction action, boolean authoritative,
+                                 short mapVersionNumber, LispAfiAddress eidPrefixAfi) {
+        this.recordTtl = recordTtl;
+        this.maskLength = maskLength;
+        this.action = action;
+        this.authoritative = authoritative;
+        this.mapVersionNumber = mapVersionNumber;
+        this.eidPrefixAfi = eidPrefixAfi;
+    }
+
+    @Override
+    public int getRecordTtl() {
+        return recordTtl;
+    }
+
+    @Override
+    public byte getMaskLength() {
+        return maskLength;
+    }
+
+    @Override
+    public LispMapReplyAction getAction() {
+        return action;
+    }
+
+    @Override
+    public boolean isAuthoritative() {
+        return authoritative;
+    }
+
+    @Override
+    public short getMapVersionNumber() {
+        return mapVersionNumber;
+    }
+
+    @Override
+    public LispAfiAddress getEidPrefixAfi() {
+        return eidPrefixAfi;
+    }
+
+    public static class AbstractRecordBuilder<T> implements RecordBuilder<T> {
+
+        protected int recordTtl;
+        protected byte maskLength;
+        protected LispMapReplyAction action;
+        protected boolean authoritative;
+        protected short mapVersionNumber;
+        protected LispAfiAddress eidPrefixAfi;
+
+        @Override
+        public T withRecordTtl(int recordTtl) {
+            this.recordTtl = recordTtl;
+            return (T) this;
+        }
+
+        @Override
+        public T withMaskLength(byte maskLength) {
+            this.maskLength = maskLength;
+            return (T) this;
+        }
+
+        @Override
+        public T withAction(LispMapReplyAction action) {
+            this.action = action;
+            return (T) this;
+        }
+
+        @Override
+        public T withIsAuthoritative(boolean authoritative) {
+            this.authoritative = authoritative;
+            return (T) this;
+        }
+
+        @Override
+        public T withMapVersionNumber(short mapVersionNumber) {
+            this.mapVersionNumber = mapVersionNumber;
+            return (T) this;
+        }
+
+        @Override
+        public T withEidPrefixAfi(LispAfiAddress prefix) {
+            this.eidPrefixAfi = prefix;
+            return (T) this;
+        }
+    }
+}
