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);
