diff --git a/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/Controller.java b/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/Controller.java
index ed787db..23fd149 100644
--- a/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/Controller.java
+++ b/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/Controller.java
@@ -16,15 +16,6 @@
 
 package org.onosproject.openflow.controller.impl;
 
-import static org.onlab.util.Tools.namedThreads;
-
-import java.lang.management.ManagementFactory;
-import java.lang.management.RuntimeMXBean;
-import java.net.InetSocketAddress;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.Executors;
-
 import org.jboss.netty.bootstrap.ServerBootstrap;
 import org.jboss.netty.channel.ChannelPipelineFactory;
 import org.jboss.netty.channel.group.ChannelGroup;
@@ -41,6 +32,15 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.lang.management.ManagementFactory;
+import java.lang.management.RuntimeMXBean;
+import java.net.InetSocketAddress;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.Executors;
+
+import static org.onlab.util.Tools.groupedThreads;
+
 
 /**
  * The main controller class.  Handles all setup and network listeners
@@ -85,7 +85,6 @@
     }
 
 
-
     public Map<String, String> getControllerNodeIPs() {
         // We return a copy of the mapping so we can guarantee that
         // the mapping return is the same as one that will be (or was)
@@ -136,14 +135,14 @@
     private ServerBootstrap createServerBootStrap() {
 
         if (workerThreads == 0) {
-            execFactory =  new NioServerSocketChannelFactory(
-                    Executors.newCachedThreadPool(namedThreads("onos-of-boss-%d")),
-                    Executors.newCachedThreadPool(namedThreads("onos-of-worker-%d")));
+            execFactory = new NioServerSocketChannelFactory(
+                    Executors.newCachedThreadPool(groupedThreads("onos/of", "boss-%d")),
+                    Executors.newCachedThreadPool(groupedThreads("onos/of", "worker-%d")));
             return new ServerBootstrap(execFactory);
         } else {
             execFactory = new NioServerSocketChannelFactory(
-                    Executors.newCachedThreadPool(namedThreads("onos-of-boss-%d")),
-                    Executors.newCachedThreadPool(namedThreads("onos-of-worker-%d")), workerThreads);
+                    Executors.newCachedThreadPool(groupedThreads("onos/of", "boss-%d")),
+                    Executors.newCachedThreadPool(groupedThreads("onos/of", "worker-%d")), workerThreads);
             return new ServerBootstrap(execFactory);
         }
     }
@@ -162,6 +161,7 @@
 
     /**
      * Initialize internal data structures.
+     *
      * @param configParams configuration parameters
      */
     public void init(Map<String, String> configParams) {
@@ -195,13 +195,14 @@
 
     /**
      * Forward to the driver-manager to get an IOFSwitch instance.
+     *
      * @param dpid data path id
      * @param desc switch description
-     * @param ofv OpenFlow version
+     * @param ofv  OpenFlow version
      * @return switch instance
      */
     protected OpenFlowSwitchDriver getOFSwitchInstance(long dpid,
-            OFDescStatsReply desc, OFVersion ofv) {
+                                                       OFDescStatsReply desc, OFVersion ofv) {
         OpenFlowSwitchDriver sw = DriverManager.getSwitch(new Dpid(dpid),
                                                           desc, ofv);
         sw.setAgent(agent);
diff --git a/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OpenFlowControllerImpl.java b/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OpenFlowControllerImpl.java
index 4a1e684..a98f000 100644
--- a/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OpenFlowControllerImpl.java
+++ b/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OpenFlowControllerImpl.java
@@ -15,18 +15,10 @@
  */
 package org.onosproject.openflow.controller.impl;
 
-import static org.onlab.util.Tools.namedThreads;
-
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantLock;
-
+import com.google.common.collect.ArrayListMultimap;
 import com.google.common.collect.Lists;
+import com.google.common.collect.Multimap;
+import com.google.common.collect.Sets;
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Deactivate;
@@ -59,9 +51,16 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.collect.ArrayListMultimap;
-import com.google.common.collect.Multimap;
-import com.google.common.collect.Sets;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+
+import static org.onlab.util.Tools.groupedThreads;
 
 @Component(immediate = true)
 @Service
@@ -71,12 +70,10 @@
             LoggerFactory.getLogger(OpenFlowControllerImpl.class);
 
     private final ExecutorService executorMsgs =
-        Executors.newFixedThreadPool(32,
-                                     namedThreads("onos-of-event-stats-%d"));
+        Executors.newFixedThreadPool(32, groupedThreads("onos/of", "event-stats-%d"));
 
     private final ExecutorService executorBarrier =
-        Executors.newFixedThreadPool(4,
-                                     namedThreads("onos-of-event-barrier-%d"));
+        Executors.newFixedThreadPool(4, groupedThreads("onos/of", "event-barrier-%d"));
 
     protected ConcurrentHashMap<Dpid, OpenFlowSwitch> connectedSwitches =
             new ConcurrentHashMap<Dpid, OpenFlowSwitch>();
