diff --git a/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/Controller.java b/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/Controller.java
index 5eed3cf..017c39e 100755
--- a/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/Controller.java
+++ b/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/Controller.java
@@ -24,10 +24,12 @@
 import java.util.Map;
 import java.util.concurrent.Executors;
 
+import org.jboss.netty.bootstrap.ClientBootstrap;
 import org.jboss.netty.bootstrap.ServerBootstrap;
 import org.jboss.netty.channel.ChannelPipelineFactory;
 import org.jboss.netty.channel.group.ChannelGroup;
 import org.jboss.netty.channel.group.DefaultChannelGroup;
+import org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory;
 import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory;
 import org.onosproject.bgp.controller.BGPController;
 import org.onosproject.bgpio.protocol.BGPFactories;
@@ -51,11 +53,14 @@
     // Configuration options
     private static final short BGP_PORT_NUM = 179;
     private final int workerThreads = 16;
+    private final int peerWorkerThreads = 16;
 
     // Start time of the controller
     private long systemStartTime;
 
     private NioServerSocketChannelFactory serverExecFactory;
+    private NioClientSocketChannelFactory peerExecFactory;
+    private static ClientBootstrap peerBootstrap;
     private BGPController bgpController;
 
     // Perf. related configuration
@@ -79,10 +84,6 @@
         return FACTORY4;
     }
 
-    // ***************
-    // Getters/Setters
-    // ***************
-
     /**
      * To get system start time.
      *
@@ -92,16 +93,20 @@
         return (this.systemStartTime);
     }
 
-    // **************
-    // Initialization
-    // **************
-
     /**
      * Tell controller that we're ready to accept bgp peer connections.
      */
     public void run() {
 
         try {
+
+            peerBootstrap = createPeerBootStrap();
+
+            peerBootstrap.setOption("reuseAddr", true);
+            peerBootstrap.setOption("child.keepAlive", true);
+            peerBootstrap.setOption("child.tcpNoDelay", true);
+            peerBootstrap.setOption("child.sendBufferSize", Controller.SEND_BUFFER_SIZE);
+
             final ServerBootstrap bootstrap = createServerBootStrap();
 
             bootstrap.setOption("reuseAddr", true);
@@ -143,6 +148,36 @@
     }
 
     /**
+     * Creates peer boot strap.
+     *
+     * @return ClientBootstrap
+     */
+    private ClientBootstrap createPeerBootStrap() {
+
+        if (peerWorkerThreads == 0) {
+            peerExecFactory = new NioClientSocketChannelFactory(
+                              Executors.newCachedThreadPool(groupedThreads("onos/bgp", "boss-%d")),
+                             Executors.newCachedThreadPool(groupedThreads("onos/bgp", "worker-%d")));
+            return new ClientBootstrap(peerExecFactory);
+        } else {
+            peerExecFactory = new NioClientSocketChannelFactory(
+                              Executors.newCachedThreadPool(groupedThreads("onos/bgp",  "boss-%d")),
+                              Executors.newCachedThreadPool(groupedThreads("onos/bgp", "worker-%d")),
+                                                                          peerWorkerThreads);
+            return new ClientBootstrap(peerExecFactory);
+        }
+    }
+
+    /**
+     * Gets peer bootstrap.
+     *
+     * @return peer  bootstrap
+     */
+    public static ClientBootstrap peerBootstrap() {
+        return peerBootstrap;
+    }
+
+    /**
      * Initialize internal data structures.
      */
     public void init() {
@@ -151,10 +186,11 @@
         this.systemStartTime = System.currentTimeMillis();
     }
 
-    // **************
-    // Utility methods
-    // **************
-
+    /**
+     * Gets run time memory.
+     *
+     * @return m run time memory
+     */
     public Map<String, Long> getMemory() {
         Map<String, Long> m = new HashMap<>();
         Runtime runtime = Runtime.getRuntime();
@@ -163,6 +199,11 @@
         return m;
     }
 
+    /**
+     * Gets UP time.
+     *
+     * @return UP time
+     */
     public Long getUptime() {
         RuntimeMXBean rb = ManagementFactory.getRuntimeMXBean();
         return rb.getUptime();
@@ -183,6 +224,7 @@
     public void stop() {
         log.info("Stopped");
         serverExecFactory.shutdown();
+        peerExecFactory.shutdown();
         cg.close();
     }
 
