diff --git a/protocols/openflow/api/src/main/java/org/onosproject/openflow/controller/driver/AbstractOpenFlowSwitch.java b/protocols/openflow/api/src/main/java/org/onosproject/openflow/controller/driver/AbstractOpenFlowSwitch.java
index 182935a..3a999a2 100644
--- a/protocols/openflow/api/src/main/java/org/onosproject/openflow/controller/driver/AbstractOpenFlowSwitch.java
+++ b/protocols/openflow/api/src/main/java/org/onosproject/openflow/controller/driver/AbstractOpenFlowSwitch.java
@@ -95,7 +95,7 @@
     protected Set<OpenFlowEventListener> ofOutgoingMsgListener = new CopyOnWriteArraySet<>();
 
     protected ExecutorService executorMsgs =
-            Executors.newCachedThreadPool(groupedThreads("onos/of", "event-outgoing-msg-stats-%d"));
+            Executors.newCachedThreadPool(groupedThreads("onos/of", "event-outgoing-msg-stats-%d", log));
 
     // messagesPendingMastership is used as synchronization variable for
     // all mastership related changes. In this block, mastership (including
@@ -173,7 +173,7 @@
                 if (m.getType() == OFType.PACKET_OUT ||
                         m.getType() == OFType.FLOW_MOD ||
                         m.getType() == OFType.STATS_REQUEST) {
-                    executorMsgs.submit(new OFMessageHandler(dpid, m));
+                    executorMsgs.execute(new OFMessageHandler(dpid, m));
                 }
             });
         }
diff --git a/protocols/openflow/api/src/test/java/org/onosproject/openflow/controller/driver/AbstractOpenFlowSwitchTest.java b/protocols/openflow/api/src/test/java/org/onosproject/openflow/controller/driver/AbstractOpenFlowSwitchTest.java
index 288f141..fb8d977 100644
--- a/protocols/openflow/api/src/test/java/org/onosproject/openflow/controller/driver/AbstractOpenFlowSwitchTest.java
+++ b/protocols/openflow/api/src/test/java/org/onosproject/openflow/controller/driver/AbstractOpenFlowSwitchTest.java
@@ -15,15 +15,15 @@
  */
 package org.onosproject.openflow.controller.driver;
 
+import org.jboss.netty.channel.Channel;
 import org.junit.Before;
 import org.junit.Test;
 import org.onosproject.openflow.controller.Dpid;
 import org.onosproject.openflow.controller.OpenFlowEventListener;
 import org.projectfloodlight.openflow.protocol.OFMessage;
-import org.jboss.netty.channel.Channel;
+
 import java.util.ArrayList;
 import java.util.List;
-import java.util.concurrent.Future;
 
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.hasSize;
@@ -48,11 +48,10 @@
         }
 
         @Override
-        public Future<?> submit(Runnable task) {
+        public void execute(Runnable task) {
             AbstractOpenFlowSwitch.OFMessageHandler handler =
                     (AbstractOpenFlowSwitch.OFMessageHandler) task;
             submittedMessages.add(handler.msg);
-            return null;
         }
     }
 
diff --git a/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OpenFlowControllerImpl.java b/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OpenFlowControllerImpl.java
index eb90c26..84d2b9f 100644
--- a/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OpenFlowControllerImpl.java
+++ b/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OpenFlowControllerImpl.java
@@ -113,16 +113,16 @@
     private int workerThreads = DEFAULT_WORKER_THREADS;
 
     protected ExecutorService executorMsgs =
-        Executors.newFixedThreadPool(32, groupedThreads("onos/of", "event-stats-%d"));
+        Executors.newFixedThreadPool(32, groupedThreads("onos/of", "event-stats-%d", log));
 
     protected ExecutorService executorPacketIn =
-        Executors.newCachedThreadPool(groupedThreads("onos/of", "event-pkt-in-stats-%d"));
+        Executors.newCachedThreadPool(groupedThreads("onos/of", "event-pkt-in-stats-%d", log));
 
     protected ExecutorService executorFlowRemoved =
-        Executors.newCachedThreadPool(groupedThreads("onos/of", "event-flow-removed-stats-%d"));
+        Executors.newCachedThreadPool(groupedThreads("onos/of", "event-flow-removed-stats-%d", log));
 
     private final ExecutorService executorBarrier =
-        Executors.newFixedThreadPool(4, groupedThreads("onos/of", "event-barrier-%d"));
+        Executors.newFixedThreadPool(4, groupedThreads("onos/of", "event-barrier-%d", log));
 
     protected ConcurrentMap<Dpid, OpenFlowSwitch> connectedSwitches =
             new ConcurrentHashMap<>();
@@ -286,19 +286,19 @@
                 p.handlePacket(pktCtx);
             }
             if (monitorAllEvents) {
-                executorPacketIn.submit(new OFMessageHandler(dpid, msg));
+                executorPacketIn.execute(new OFMessageHandler(dpid, msg));
             }
             break;
         // TODO: Consider using separate threadpool for sensitive messages.
         //    ie. Back to back error could cause us to starve.
         case FLOW_REMOVED:
             if (monitorAllEvents) {
-                executorFlowRemoved.submit(new OFMessageHandler(dpid, msg));
+                executorFlowRemoved.execute(new OFMessageHandler(dpid, msg));
                 break;
             }
         case ERROR:
             log.debug("Received error message from {}: {}", dpid, msg);
-            executorMsgs.submit(new OFMessageHandler(dpid, msg));
+            executorMsgs.execute(new OFMessageHandler(dpid, msg));
             break;
         case STATS_REPLY:
             OFStatsReply reply = (OFStatsReply) msg;
@@ -315,7 +315,7 @@
                                 OFFactories.getFactory(msg.getVersion()).buildFlowStatsReply();
                         rep.setEntries(Lists.newLinkedList(flowStats));
                         rep.setXid(reply.getXid());
-                        executorMsgs.submit(new OFMessageHandler(dpid, rep.build()));
+                        executorMsgs.execute(new OFMessageHandler(dpid, rep.build()));
                     }
                     break;
                 case TABLE:
@@ -324,7 +324,7 @@
                         OFTableStatsReply.Builder rep =
                                 OFFactories.getFactory(msg.getVersion()).buildTableStatsReply();
                         rep.setEntries(Lists.newLinkedList(tableStats));
-                        executorMsgs.submit(new OFMessageHandler(dpid, rep.build()));
+                        executorMsgs.execute(new OFMessageHandler(dpid, rep.build()));
                     }
                     break;
                 case GROUP:
@@ -334,7 +334,7 @@
                                 OFFactories.getFactory(msg.getVersion()).buildGroupStatsReply();
                         rep.setEntries(Lists.newLinkedList(groupStats));
                         rep.setXid(reply.getXid());
-                        executorMsgs.submit(new OFMessageHandler(dpid, rep.build()));
+                        executorMsgs.execute(new OFMessageHandler(dpid, rep.build()));
                     }
                     break;
                 case GROUP_DESC:
@@ -345,14 +345,14 @@
                                 OFFactories.getFactory(msg.getVersion()).buildGroupDescStatsReply();
                         rep.setEntries(Lists.newLinkedList(groupDescStats));
                         rep.setXid(reply.getXid());
-                        executorMsgs.submit(new OFMessageHandler(dpid, rep.build()));
+                        executorMsgs.execute(new OFMessageHandler(dpid, rep.build()));
                     }
                     break;
                 case PORT:
-                    executorMsgs.submit(new OFMessageHandler(dpid, reply));
+                    executorMsgs.execute(new OFMessageHandler(dpid, reply));
                     break;
                 case METER:
-                    executorMsgs.submit(new OFMessageHandler(dpid, reply));
+                    executorMsgs.execute(new OFMessageHandler(dpid, reply));
                     break;
                 case EXPERIMENTER:
                     if (reply instanceof OFCalientFlowStatsReply) {
@@ -394,10 +394,10 @@
                             OFFlowStatsReply.Builder rep =
                                     OFFactories.getFactory(msg.getVersion()).buildFlowStatsReply();
                             rep.setEntries(Lists.newLinkedList(flowStats));
-                            executorMsgs.submit(new OFMessageHandler(dpid, rep.build()));
+                            executorMsgs.execute(new OFMessageHandler(dpid, rep.build()));
                         }
                     } else {
-                        executorMsgs.submit(new OFMessageHandler(dpid, reply));
+                        executorMsgs.execute(new OFMessageHandler(dpid, reply));
                     }
                     break;
                 default:
@@ -406,7 +406,7 @@
             }
             break;
         case BARRIER_REPLY:
-            executorBarrier.submit(new OFMessageHandler(dpid, msg));
+            executorBarrier.execute(new OFMessageHandler(dpid, msg));
             break;
         case EXPERIMENTER:
             long experimenter = ((OFExperimenter) msg).getExperimenter();
diff --git a/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/controller/impl/OpenFlowControllerImplPacketsTest.java b/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/controller/impl/OpenFlowControllerImplPacketsTest.java
index 3fef8dd..9f713ee 100644
--- a/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/controller/impl/OpenFlowControllerImplPacketsTest.java
+++ b/protocols/openflow/ctl/src/test/java/org/onosproject/openflow/controller/impl/OpenFlowControllerImplPacketsTest.java
@@ -15,21 +15,15 @@
  */
 package org.onosproject.openflow.controller.impl;
 
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.Future;
-
 import org.junit.Before;
 import org.junit.Test;
 import org.onosproject.openflow.ExecutorServiceAdapter;
-import org.onosproject.openflow.MockOfPortStatus;
-import org.onosproject.openflow.OpenFlowSwitchListenerAdapter;
-import org.onosproject.openflow.OpenflowSwitchDriverAdapter;
 import org.onosproject.openflow.MockOfFeaturesReply;
 import org.onosproject.openflow.MockOfPacketIn;
+import org.onosproject.openflow.MockOfPortStatus;
 import org.onosproject.openflow.OfMessageAdapter;
+import org.onosproject.openflow.OpenFlowSwitchListenerAdapter;
+import org.onosproject.openflow.OpenflowSwitchDriverAdapter;
 import org.onosproject.openflow.controller.Dpid;
 import org.onosproject.openflow.controller.OpenFlowPacketContext;
 import org.onosproject.openflow.controller.OpenFlowSwitch;
@@ -37,11 +31,14 @@
 import org.projectfloodlight.openflow.protocol.OFMessage;
 import org.projectfloodlight.openflow.protocol.OFType;
 
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.List;
+
 import static junit.framework.TestCase.fail;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.hasSize;
-import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.*;
 
 /**
  * Tests for packet processing in the open flow controller impl class.
@@ -85,11 +82,10 @@
         }
 
         @Override
-        public Future<?> submit(Runnable task) {
+        public void execute(Runnable task) {
             OpenFlowControllerImpl.OFMessageHandler handler =
                     (OpenFlowControllerImpl.OFMessageHandler) task;
             submittedMessages.add(handler.msg);
-            return null;
         }
     }
 
