diff --git a/src/main/java/teetime/framework/AbstractService.java b/src/main/java/teetime/framework/AbstractService.java
new file mode 100644
index 0000000000000000000000000000000000000000..429b71b33ea47095c4ee51ba7dbd67d50a923b00
--- /dev/null
+++ b/src/main/java/teetime/framework/AbstractService.java
@@ -0,0 +1,7 @@
+package teetime.framework;
+
+public abstract class AbstractService<T> {
+
+	abstract void merge(T target, T source);
+
+}
diff --git a/src/main/java/teetime/framework/IService.java b/src/main/java/teetime/framework/IService.java
deleted file mode 100644
index 8f5f6935ebe04d4f3eefc20f22cce1c29c3a5359..0000000000000000000000000000000000000000
--- a/src/main/java/teetime/framework/IService.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package teetime.framework;
-
-public interface IService {
-
-	public void merge(IService first, IService second);
-
-}
diff --git a/src/main/java/teetime/framework/ThreadService.java b/src/main/java/teetime/framework/ThreadService.java
index deab96c48bbcd3b092dbf07e7c5aaaf3b04a3f33..47f3e81cca1ac7f6480024f7c4b51e183e5b6036 100644
--- a/src/main/java/teetime/framework/ThreadService.java
+++ b/src/main/java/teetime/framework/ThreadService.java
@@ -14,7 +14,13 @@ import teetime.framework.signal.InitializingSignal;
 import teetime.util.ThreadThrowableContainer;
 import teetime.util.framework.concurrent.SignalingCounter;
 
-class ThreadService implements IService {
+/**
+ * A Service which manages thread creation and running.
+ *
+ * @author Nelson Tavares de Sousa
+ *
+ */
+class ThreadService extends AbstractService<ThreadService> {
 
 	private Map<Stage, String> threadableStages = new HashMap<Stage, String>();
 
@@ -75,7 +81,7 @@ class ThreadService implements IService {
 		return thread;
 	}
 
-	public void addThreadableStage(final Stage stage, final String threadName) {
+	void addThreadableStage(final Stage stage, final String threadName) {
 		if (this.threadableStages.put(stage, threadName) != null) {
 			LOGGER.warn("Stage " + stage.getId() + " was already marked as threadable stage.");
 		}
@@ -145,12 +151,7 @@ class ThreadService implements IService {
 		}
 	}
 
-	@Override
-	public void merge(final IService first, final IService second) {
-
-	}
-
-	public Map<Stage, String> getThreadableStages() {
+	Map<Stage, String> getThreadableStages() {
 		return threadableStages;
 	}
 
@@ -158,4 +159,10 @@ class ThreadService implements IService {
 		this.threadableStages = threadableStages;
 	}
 
+	@Override
+	void merge(final ThreadService target, final ThreadService source) {
+		// TODO Auto-generated method stub
+
+	}
+
 }
diff --git a/src/main/java/teetime/framework/ThreadServiceB.java b/src/main/java/teetime/framework/ThreadServiceB.java
deleted file mode 100644
index aca4cba953e6db6115f0bb094b2d22170e36bde1..0000000000000000000000000000000000000000
--- a/src/main/java/teetime/framework/ThreadServiceB.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * Copyright (C) 2015 Christian Wulf, Nelson Tavares de Sousa (http://christianwulf.github.io/teetime)
- *
- * 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 teetime.framework;
-
-public class ThreadServiceB {
-
-	public Runnable startWithinNewThread(final Stage stage) {
-		Runnable runnable = wrap(stage);
-		Thread thread = new Thread(runnable);
-		thread.start();
-		return runnable;
-	}
-
-	private AbstractRunnableStage wrap(final Stage stage) {
-		if (stage.getInputPorts().size() > 0) {
-			return new RunnableConsumerStage(stage);
-		}
-		return new RunnableProducerStage(stage);
-	}
-}