diff --git a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispChannelHandler.java b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispChannelHandler.java
index d628838..6c723a6 100644
--- a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispChannelHandler.java
+++ b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispChannelHandler.java
@@ -19,6 +19,7 @@
 import io.netty.channel.ChannelInboundHandlerAdapter;
 import io.netty.handler.timeout.IdleState;
 import io.netty.handler.timeout.IdleStateEvent;
+import io.netty.util.ReferenceCountUtil;
 import org.onosproject.lisp.msg.protocols.LispEncapsulatedControl;
 import org.onosproject.lisp.msg.protocols.LispMapNotify;
 import org.onosproject.lisp.msg.protocols.LispMapRegister;
@@ -46,10 +47,12 @@
 
         if (msg instanceof LispMapRegister) {
             LispMapServer mapServer = new LispMapServer();
-            LispMapNotify mapNotify =
-                    (LispMapNotify) mapServer.processMapRegister((LispMapRegister) msg);
+            LispMapNotify mapNotify = mapServer.processMapRegister((LispMapRegister) msg);
 
-            // TODO: deserialize mapNotify message and write to channel
+            // try to remove the received map-register message from buffer
+            ReferenceCountUtil.release(msg);
+
+            ctx.writeAndFlush(mapNotify);
         }
 
         if (msg instanceof LispMapRequest) {
@@ -57,7 +60,7 @@
             LispMapReply mapReply =
                     (LispMapReply) mapResolver.processMapRequest((LispMapRequest) msg);
 
-            // TODO: deserialize mapReply message and write to channel
+            // TODO: serialize mapReply message and write to channel
         }
     }
 
diff --git a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMapResolver.java b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMapResolver.java
index d021a8f..9f6ab35 100644
--- a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMapResolver.java
+++ b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMapResolver.java
@@ -15,6 +15,7 @@
  */
 package org.onosproject.lisp.ctl;
 
+import org.onosproject.lisp.msg.protocols.LispMapReply;
 import org.onosproject.lisp.msg.protocols.LispMessage;
 
 /**
@@ -23,8 +24,8 @@
  */
 public class LispMapResolver {
 
-    public LispMessage processMapRequest(LispMessage message) {
-        // TODO: need to implement map-register message processing logic
+    public LispMapReply processMapRequest(LispMessage message) {
+        // TODO: need to implement map-request message processing logic
         return null;
     }
 }
diff --git a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMapServer.java b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMapServer.java
index 409d360..7c82672 100644
--- a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMapServer.java
+++ b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMapServer.java
@@ -15,6 +15,7 @@
  */
 package org.onosproject.lisp.ctl;
 
+import org.onosproject.lisp.msg.protocols.LispMapNotify;
 import org.onosproject.lisp.msg.protocols.LispMessage;
 
 /**
@@ -23,8 +24,8 @@
  */
 public class LispMapServer {
 
-    public LispMessage processMapRegister(LispMessage message) {
-        // TODO: need to implement map-request message processing logic
+    public LispMapNotify processMapRegister(LispMessage message) {
+        // TODO: need to implement map-register message processing logic
         return null;
     }
 }
diff --git a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMessageDecoder.java b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMessageDecoder.java
index 94668d3..75a6ab8 100644
--- a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMessageDecoder.java
+++ b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMessageDecoder.java
@@ -36,6 +36,7 @@
         ByteBuf byteBuf = msg.content();
         LispMessageReader reader = LispMessageReaderFactory.getReader(byteBuf);
         LispMessage message = (LispMessage) reader.readFrom(byteBuf);
+        message.configSender(msg.sender());
         list.add(message);
     }
 }
diff --git a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMessageEncoder.java b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMessageEncoder.java
index 3ddbf64..562ccf9 100644
--- a/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMessageEncoder.java
+++ b/protocols/lisp/ctl/src/main/java/org/onosproject/lisp/ctl/LispMessageEncoder.java
@@ -17,8 +17,10 @@
 
 
 import io.netty.buffer.ByteBuf;
+import io.netty.buffer.Unpooled;
 import io.netty.channel.ChannelHandlerContext;
-import io.netty.handler.codec.MessageToByteEncoder;
+import io.netty.channel.socket.DatagramPacket;
+import io.netty.handler.codec.MessageToMessageEncoder;
 import org.onosproject.lisp.msg.protocols.LispMessage;
 
 import java.util.List;
@@ -27,13 +29,14 @@
  * Encode a LISP message for output into a ByteBuffer,
  * for use in a netty pipeline.
  */
-public class LispMessageEncoder extends MessageToByteEncoder {
+public class LispMessageEncoder extends MessageToMessageEncoder {
 
     @Override
-    protected void encode(ChannelHandlerContext ctx, Object msg,
-                          ByteBuf out) throws Exception {
+    protected void encode(ChannelHandlerContext ctx, Object msg, List out) throws Exception {
         if (!(msg instanceof List)) {
-            ((LispMessage) msg).writeTo(out);
+            ByteBuf byteBuf = Unpooled.buffer();
+            ((LispMessage) msg).writeTo(byteBuf);
+            out.add(new DatagramPacket(byteBuf, ((LispMessage) msg).getSender()));
             return;
         }
 
@@ -41,7 +44,9 @@
 
         for (LispMessage message : msgList) {
             if (message != null) {
-                message.writeTo(out);
+                ByteBuf byteBuf = Unpooled.buffer();
+                message.writeTo(byteBuf);
+                out.add(new DatagramPacket(byteBuf, ((LispMessage) msg).getSender()));
             }
         }
     }
