diff --git a/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/impl/OspfMessageEncoder.java b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/impl/OspfMessageEncoder.java
new file mode 100755
index 0000000..0a2ea99
--- /dev/null
+++ b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/impl/OspfMessageEncoder.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2016 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.ospf.controller.impl;
+
+import org.jboss.netty.buffer.ChannelBuffer;
+import org.jboss.netty.channel.Channel;
+import org.jboss.netty.channel.ChannelHandlerContext;
+import org.jboss.netty.handler.codec.oneone.OneToOneEncoder;
+import org.onosproject.ospf.controller.OspfInterface;
+import org.onosproject.ospf.controller.area.OspfInterfaceImpl;
+import org.onosproject.ospf.protocol.ospfpacket.OspfMessage;
+import org.onosproject.ospf.protocol.ospfpacket.OspfMessageWriter;
+import org.onosproject.ospf.protocol.util.OspfInterfaceState;
+import org.onosproject.ospf.protocol.util.OspfUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Encodes an OSPF message for output into a ChannelBuffer, for use in a netty pipeline.
+ */
+public class OspfMessageEncoder extends OneToOneEncoder {
+
+    private static final Logger log = LoggerFactory.getLogger(OspfMessageEncoder.class);
+    private OspfInterface ospfInterface;
+
+
+    /**
+     * Constructor.
+     */
+    OspfMessageEncoder() {
+    }
+
+    /**
+     * Constructor to initialize instance.
+     */
+    OspfMessageEncoder(OspfInterface ospfInterface) {
+        this.ospfInterface = ospfInterface;
+    }
+
+    @Override
+    protected Object encode(ChannelHandlerContext ctx, Channel channel, Object msg) throws Exception {
+
+        log.debug("Encoding ospfMessage...!!!");
+        if (!(msg instanceof OspfMessage)) {
+            log.debug("Invalid msg.");
+            return msg;
+        }
+
+        OspfMessage ospfMessage = (OspfMessage) msg;
+        OspfMessageWriter messageWriter = new OspfMessageWriter();
+        if (((OspfInterfaceImpl) ospfInterface).state().equals(OspfInterfaceState.POINT2POINT)) {
+            ospfMessage.setDestinationIp(OspfUtil.ALL_SPF_ROUTERS);
+        }
+        ChannelBuffer buf = messageWriter.writeToBuffer(ospfMessage,
+                                                        ((OspfInterfaceImpl) ospfInterface).state().value(),
+                                                        ospfInterface.interfaceType());
+        log.info("OspfMessageEncoder sending packet of lenght {}", buf.readableBytes());
+        log.debug("OspfMessageEncoder sending packet of lenght {}", buf.readableBytes());
+        log.debug("Sending {} Message to {}, Length :: {}, <=> {}", ospfMessage.ospfMessageType(),
+                  ospfMessage.destinationIp(), buf.readableBytes(), buf.array());
+
+        return buf;
+    }
+}
\ No newline at end of file
