diff --git a/drivers/src/main/java/org/onosproject/driver/handshaker/DefaultSwitchHandShaker.java b/drivers/src/main/java/org/onosproject/driver/handshaker/DefaultSwitchHandShaker.java
index c9455a0..21c59e6 100644
--- a/drivers/src/main/java/org/onosproject/driver/handshaker/DefaultSwitchHandShaker.java
+++ b/drivers/src/main/java/org/onosproject/driver/handshaker/DefaultSwitchHandShaker.java
@@ -45,7 +45,7 @@
         if (factory().getVersion() == OFVersion.OF_10) {
             OFFlowAdd.Builder fmBuilder = factory().buildFlowAdd();
             fmBuilder.setPriority(LOWEST_PRIORITY);
-            sendMsg(fmBuilder.build());
+            sendHandshakeMessage(fmBuilder.build());
         }
     }
 
diff --git a/drivers/src/main/java/org/onosproject/driver/handshaker/OFCorsaSwitchDriver.java b/drivers/src/main/java/org/onosproject/driver/handshaker/OFCorsaSwitchDriver.java
index da26a49..05c907e 100644
--- a/drivers/src/main/java/org/onosproject/driver/handshaker/OFCorsaSwitchDriver.java
+++ b/drivers/src/main/java/org/onosproject/driver/handshaker/OFCorsaSwitchDriver.java
@@ -64,7 +64,7 @@
                 .setXid(barrierXid).build();
 
 
-        sendMsg(Collections.singletonList(barrier));
+        sendHandshakeMessage(barrier);
 
     }
 
diff --git a/drivers/src/main/java/org/onosproject/driver/handshaker/OFOpticalSwitchImplLINC13.java b/drivers/src/main/java/org/onosproject/driver/handshaker/OFOpticalSwitchImplLINC13.java
index d294e56..2c0749c 100644
--- a/drivers/src/main/java/org/onosproject/driver/handshaker/OFOpticalSwitchImplLINC13.java
+++ b/drivers/src/main/java/org/onosproject/driver/handshaker/OFOpticalSwitchImplLINC13.java
@@ -64,9 +64,6 @@
 
     @Override
     public boolean isDriverHandshakeComplete() {
-        if (!startDriverHandshakeCalled) {
-            throw new SwitchDriverSubHandshakeNotStarted();
-        }
         return driverHandshakeComplete.get();
     }
 
@@ -161,7 +158,7 @@
                          "message " +
                          "{}",
                  circuitPortsRequest.toString());
-        this.sendMsg(Collections.<OFMessage>singletonList(circuitPortsRequest));
+        this.sendHandshakeMessage(circuitPortsRequest);
     }
 
     @Override
diff --git a/drivers/src/main/java/org/onosproject/driver/handshaker/OFSwitchImplCPqD13.java b/drivers/src/main/java/org/onosproject/driver/handshaker/OFSwitchImplCPqD13.java
index 1c9e66a..483bbda 100644
--- a/drivers/src/main/java/org/onosproject/driver/handshaker/OFSwitchImplCPqD13.java
+++ b/drivers/src/main/java/org/onosproject/driver/handshaker/OFSwitchImplCPqD13.java
@@ -222,7 +222,7 @@
                 .build();
         msglist.add(getAC);
 
-        sendMsg(msglist);
+        msglist.stream().forEach(m -> sendHandshakeMessage(m));
     }
 
     private void decodeAsyncGetReply(OFAsyncGetReply rep) {
@@ -245,21 +245,21 @@
         OFMessage gtf = factory.buildTableFeaturesStatsRequest()
                 .setXid(getNextTransactionId())
                 .build();
-        sendMsg(gtf);
+        sendHandshakeMessage(gtf);
     }
 
     private void sendGroupFeaturesRequest() throws IOException {
         OFMessage gfr = factory.buildGroupFeaturesStatsRequest()
                 .setXid(getNextTransactionId())
                 .build();
-        sendMsg(gfr);
+        sendHandshakeMessage(gfr);
     }
 
     private void sendGroupDescRequest() throws IOException {
         OFMessage gdr = factory.buildGroupDescStatsRequest()
                 .setXid(getNextTransactionId())
                 .build();
-        sendMsg(gdr);
+        sendHandshakeMessage(gdr);
     }
 
     /*Create L2 interface groups for all physical ports
@@ -290,12 +290,12 @@
                         .setGroupType(OFGroupType.INDIRECT)
                         .setXid(getNextTransactionId())
                         .build();
+                sendHandshakeMessage(gmAdd);
                 msglist.add(gmAdd);
                 l2groups.put(pnum, gl2);
             }
         }
         log.debug("Creating {} L2 groups in sw {}", msglist.size(), getStringId());
-        sendMsg(msglist);
     }
 
     private int getVlanConfig(int portnum) {
@@ -394,9 +394,10 @@
                     .setGroupType(OFGroupType.INDIRECT)
                     .setXid(getNextTransactionId())
                     .build();
-            msglist.add(gmAdd);
+            sendHandshakeMessage(gmAdd);
+
         }
-        sendMsg(msglist);
+
         log.debug("Creating {} L3 groups in sw {}", msglist.size(), getStringId());
     }
 
@@ -407,7 +408,7 @@
      * instead of the IP ttl
      */
     private void setL25Groups() throws IOException {
-        List<OFMessage> msglist = new ArrayList<OFMessage>();
+
         for (OFGroup gl2 : l2groups.values()) {
             int gnum = gl2.getGroupNumber();
             int portnum = gnum & 0x0000ffff;
@@ -445,11 +446,12 @@
                         .setGroupType(OFGroupType.INDIRECT)
                         .setXid(getNextTransactionId())
                         .build();
-                msglist.add(gmAdd);
+                sendHandshakeMessage(gmAdd);
+
             }
         }
-        sendMsg(msglist);
-        log.debug("Creating {} MPLS groups in sw {}", msglist.size(), getStringId());
+
+        log.debug("Created MPLS groups in sw {}", getStringId());
     }
 
     /* Using ECMP groups
@@ -560,13 +562,14 @@
                         .setHardTimeout(0)
                         .setXid(getNextTransactionId())
                         .build();
-                msglist.add(flowEntry);
+                sendHandshakeMessage(flowEntry);
+
             }
         }
         // table-vlan has no table-miss entry, and so packets that miss are
         // essentially dropped
-        sendMsg(msglist);
-        log.debug("Adding {} vlan-rules in sw {}", msglist.size(), getStringId());
+
+        log.debug("Added vlan-rules in sw {}", getStringId());
     }
 
     private void populateTableTMac() throws IOException {
@@ -617,7 +620,7 @@
         List<OFMessage> msglist = new ArrayList<OFMessage>(2);
         msglist.add(ipEntry);
         msglist.add(mplsEntry);
-        sendMsg(msglist);
+        msglist.stream().forEach(m -> sendHandshakeMessage(m));
     }
 
     private List<String> getMyIps() { // send to controller
@@ -762,10 +765,10 @@
                     .setHardTimeout(0)
                     .setXid(getNextTransactionId())
                     .build();
-            msglist.add(myIpEntry);
+            sendHandshakeMessage(myIpEntry);
+
         }
-        sendMsg(msglist);
-        log.debug("Adding {} my-ip-rules in sw {}", msglist.size(), getStringId());
+        log.debug("Added {} my-ip-rules in sw {}", getStringId());
     }
 
     private void populateMySubnets() throws IOException {
@@ -804,11 +807,10 @@
                     .setHardTimeout(0)
                     .setXid(getNextTransactionId())
                     .build();
-            msglist.add(myIpEntry);
+            sendHandshakeMessage(myIpEntry);
+
         }
-        sendMsg(msglist);
-        log.debug("Adding {} subnet-ip-rules in sw {}", msglist.size(), getStringId());
-        msglist.clear();
+        log.debug("Added subnet-ip-rules in sw {}", getStringId());
     }
 
     private void populateRoutes() throws IOException {
@@ -948,10 +950,10 @@
                     .setHardTimeout(0)
                     .setXid(getNextTransactionId())
                     .build();
+            sendHandshakeMessage(myMetaEntry);
             msglist.add(myMetaEntry);
 
         }
-        sendMsg(msglist);
         log.debug("Adding {} next-hop-router-rules in sw {}", msglist.size(),
                 getStringId());
 
@@ -1007,9 +1009,9 @@
                     .setHardTimeout(0)
                     .setXid(getNextTransactionId())
                     .build();
-            msglist.add(myIpEntry);
+            sendHandshakeMessage(myIpEntry);
         }
-        sendMsg(msglist);
+
         log.debug("Adding {} next-hop-host-rules in sw {}", msglist.size(), getStringId());
     }
 
@@ -1081,9 +1083,10 @@
                     .setHardTimeout(0)
                     .setXid(getNextTransactionId())
                     .build();
+            sendHandshakeMessage(myMplsEntry);
             msglist.add(myMplsEntry);
         }
-        sendMsg(msglist);
+
         log.debug("Adding {} mpls-forwarding-rules in sw {}", msglist.size(),
                 getStringId());
 
@@ -1166,7 +1169,7 @@
                 .setXid(getNextTransactionId())
                 .build();
 
-        sendMsg(tableMissEntry);
+        sendHandshakeMessage(tableMissEntry);
     }
 
     private void sendBarrier(boolean finalBarrier) {
@@ -1179,7 +1182,7 @@
                 .setXid(xid)
                 .build();
 
-        sendMsg(br);
+        sendHandshakeMessage(br);
     }
 
     @Override
diff --git a/openflow/api/src/main/java/org/onosproject/openflow/controller/driver/AbstractOpenFlowSwitch.java b/openflow/api/src/main/java/org/onosproject/openflow/controller/driver/AbstractOpenFlowSwitch.java
index 56d88b5..586deab 100644
--- a/openflow/api/src/main/java/org/onosproject/openflow/controller/driver/AbstractOpenFlowSwitch.java
+++ b/openflow/api/src/main/java/org/onosproject/openflow/controller/driver/AbstractOpenFlowSwitch.java
@@ -136,6 +136,12 @@
                                                    "a non role request message");
     }
 
+    public final void sendHandshakeMessage(OFMessage message) {
+        if (!this.isDriverHandshakeComplete()) {
+            channel.write(Collections.singletonList(message));
+        }
+    }
+
     @Override
     public final boolean isConnected() {
         return this.connected;
diff --git a/openflow/api/src/main/java/org/onosproject/openflow/controller/driver/OpenFlowSwitchDriver.java b/openflow/api/src/main/java/org/onosproject/openflow/controller/driver/OpenFlowSwitchDriver.java
index 365f525..ae3f8db 100644
--- a/openflow/api/src/main/java/org/onosproject/openflow/controller/driver/OpenFlowSwitchDriver.java
+++ b/openflow/api/src/main/java/org/onosproject/openflow/controller/driver/OpenFlowSwitchDriver.java
@@ -210,4 +210,12 @@
      */
     void sendRoleRequest(OFMessage message);
 
+    /**
+     * Allows the handshaker behaviour to send messages during the
+     * handshake phase only.
+     *
+     * @param message an OpenFlow message
+     */
+    void sendHandshakeMessage(OFMessage message);
+
 }
diff --git a/openflow/ctl/src/test/java/org/onosproject/openflow/controller/impl/RoleManagerTest.java b/openflow/ctl/src/test/java/org/onosproject/openflow/controller/impl/RoleManagerTest.java
index 06929d2..ad10783 100644
--- a/openflow/ctl/src/test/java/org/onosproject/openflow/controller/impl/RoleManagerTest.java
+++ b/openflow/ctl/src/test/java/org/onosproject/openflow/controller/impl/RoleManagerTest.java
@@ -229,6 +229,10 @@
         }
 
         @Override
+        public void sendHandshakeMessage(OFMessage message) {
+        }
+
+        @Override
         public boolean connectSwitch() {
             return false;
         }
