diff --git a/utils/misc/src/main/java/org/onlab/util/SharedExecutors.java b/utils/misc/src/main/java/org/onlab/util/SharedExecutors.java
new file mode 100644
index 0000000..5c96d3b
--- /dev/null
+++ b/utils/misc/src/main/java/org/onlab/util/SharedExecutors.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onlab.util;
+
+
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+import static org.onlab.util.Tools.groupedThreads;
+
+/**
+ * SharedExecutors is designed to use thread pool for applications.
+ * SharedExecutors is recommended for applications instead of creating new thread groups.
+ */
+public final class SharedExecutors {
+
+    private static int numberOfThreads = 30;
+
+    private static ExecutorService singleThreadExecutor =
+            Executors.newSingleThreadExecutor(groupedThreads("onos/shared", "onos-single-executor"));
+
+    private static ExecutorService poolThreadExecutor =
+            Executors.newFixedThreadPool(numberOfThreads, groupedThreads("onos/shared", "onos-pool-executor-%d"));
+
+    private static java.util.Timer sharedTimer =
+            new java.util.Timer("onos-shared-timer");
+
+
+
+    private SharedExecutors() {
+
+    }
+
+    /**
+     * Returns the single thread executor.
+     *
+     * @return shared single thread executor
+     */
+    public static ExecutorService getSingleThreadExecutor() {
+        return singleThreadExecutor;
+    }
+    /**
+     * Returns the pool thread executor.
+     *
+     * @return shared executor pool
+     */
+    public static ExecutorService getPoolThreadExecutor() {
+        return poolThreadExecutor;
+    }
+    /**
+     * Returns the pool timer.
+     *
+     * @return shared timer
+     */
+    public static java.util.Timer getTimer() {
+        return sharedTimer;
+    }
+
+
+
+
+}
diff --git a/utils/misc/src/test/java/org/onlab/util/SharedExecutorsTest.java b/utils/misc/src/test/java/org/onlab/util/SharedExecutorsTest.java
new file mode 100644
index 0000000..1730ca1
--- /dev/null
+++ b/utils/misc/src/test/java/org/onlab/util/SharedExecutorsTest.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onlab.util;
+
+import org.junit.Test;
+
+import java.util.concurrent.ExecutorService;
+
+import static org.junit.Assert.*;
+
+/**
+ * Tests of the SharedExecutors  Test.
+ */
+public class SharedExecutorsTest {
+
+    @Test
+    public void singleThread() {
+       ExecutorService a =  SharedExecutors.getSingleThreadExecutor();
+       assertNotNull("ExecutorService must not be null", a);
+       ExecutorService b =  SharedExecutors.getSingleThreadExecutor();
+       assertSame("factories should be same", a, b);
+
+    }
+
+    @Test
+    public void poolThread() {
+        ExecutorService a =  SharedExecutors.getPoolThreadExecutor();
+        assertNotNull("ExecutorService must not be null", a);
+        ExecutorService b =  SharedExecutors.getPoolThreadExecutor();
+        assertSame("factories should be same", a, b);
+
+    }
+
+    @Test
+    public void timer() {
+        java.util.Timer a = SharedExecutors.getTimer();
+        assertNotNull("Timer must not be null", a);
+        java.util.Timer b = SharedExecutors.getTimer();
+        assertSame("factories should be same", a, b);
+    }
+}
