diff --git a/src/main/java/teetime/framework/AbstractBasicStage.java b/src/main/java/teetime/framework/AbstractBasicStage.java
new file mode 100644
index 0000000000000000000000000000000000000000..0bbcb5a56ab23230eaa44988ede9d7dad5d537fe
--- /dev/null
+++ b/src/main/java/teetime/framework/AbstractBasicStage.java
@@ -0,0 +1,16 @@
+package teetime.framework;
+
+import teetime.framework.signal.ISignal;
+
+public abstract class AbstractBasicStage implements IStage {
+
+	protected abstract void executeWithPorts();
+
+	protected abstract void onSignal(ISignal signal, InputPort<?> inputPort);
+
+	protected abstract TerminationStrategy getTerminationStrategy();
+
+	protected abstract void terminate();
+
+	protected abstract boolean shouldBeTerminated();
+}
diff --git a/src/main/java/teetime/framework/pipe/AbstractInterThreadPipe.java b/src/main/java/teetime/framework/AbstractInterThreadPipe.java
similarity index 80%
rename from src/main/java/teetime/framework/pipe/AbstractInterThreadPipe.java
rename to src/main/java/teetime/framework/AbstractInterThreadPipe.java
index e1504baad4e789fee4d8cee541153fa64167e4ea..872f965ea66e3c371b4fbde9da8571bc083400a4 100644
--- a/src/main/java/teetime/framework/pipe/AbstractInterThreadPipe.java
+++ b/src/main/java/teetime/framework/AbstractInterThreadPipe.java
@@ -1,4 +1,4 @@
-package teetime.framework.pipe;
+package teetime.framework;
 
 import java.util.Queue;
 
@@ -7,15 +7,14 @@ import org.jctools.queues.spec.ConcurrentQueueSpec;
 import org.jctools.queues.spec.Ordering;
 import org.jctools.queues.spec.Preference;
 
-import teetime.framework.InputPort;
-import teetime.framework.OutputPort;
+import teetime.framework.pipe.AbstractPipe;
 import teetime.framework.signal.ISignal;
 
 public abstract class AbstractInterThreadPipe extends AbstractPipe {
 
 	private final Queue<ISignal> signalQueue = QueueFactory.newQueue(new ConcurrentQueueSpec(1, 1, 0, Ordering.FIFO, Preference.THROUGHPUT));
 
-	<T> AbstractInterThreadPipe(final OutputPort<? extends T> sourcePort, final InputPort<T> targetPort) {
+	protected <T> AbstractInterThreadPipe(final OutputPort<? extends T> sourcePort, final InputPort<T> targetPort) {
 		super(sourcePort, targetPort);
 	}
 
diff --git a/src/main/java/teetime/framework/pipe/AbstractIntraThreadPipe.java b/src/main/java/teetime/framework/AbstractIntraThreadPipe.java
similarity index 69%
rename from src/main/java/teetime/framework/pipe/AbstractIntraThreadPipe.java
rename to src/main/java/teetime/framework/AbstractIntraThreadPipe.java
index b593b105add067a832a0e28dfc63a3816d730068..dffefffc2e8024f1be72fb1e8d51be6fe6318df7 100644
--- a/src/main/java/teetime/framework/pipe/AbstractIntraThreadPipe.java
+++ b/src/main/java/teetime/framework/AbstractIntraThreadPipe.java
@@ -1,13 +1,11 @@
-package teetime.framework.pipe;
+package teetime.framework;
 
-import teetime.framework.InputPort;
-import teetime.framework.OutputPort;
+import teetime.framework.pipe.AbstractPipe;
 import teetime.framework.signal.ISignal;
 
 public abstract class AbstractIntraThreadPipe extends AbstractPipe {
 
-
-	<T> AbstractIntraThreadPipe(final OutputPort<? extends T> sourcePort, final InputPort<T> targetPort) {
+	protected <T> AbstractIntraThreadPipe(final OutputPort<? extends T> sourcePort, final InputPort<T> targetPort) {
 		super(sourcePort, targetPort);
 	}
 
diff --git a/src/main/java/teetime/framework/AbstractProducerStage.java b/src/main/java/teetime/framework/AbstractProducerStage.java
index 7918c922da305a933b8d6cfbee3a2a56c98eaee3..e34f6705c6fb7728a6e68f4a16405d477a2aa15e 100644
--- a/src/main/java/teetime/framework/AbstractProducerStage.java
+++ b/src/main/java/teetime/framework/AbstractProducerStage.java
@@ -9,7 +9,7 @@ package teetime.framework;
  *            the type of the default output port
  *
  */
-public abstract class AbstractProducerStage<O> extends AbstractStage implements IStage {
+public abstract class AbstractProducerStage<O> extends AbstractStage {
 
 	protected final OutputPort<O> outputPort = this.createOutputPort();
 
diff --git a/src/main/java/teetime/framework/AbstractStage.java b/src/main/java/teetime/framework/AbstractStage.java
index 1ccec6406871ab77fc28c72e46176691b24c55b3..06d80bfe8c44642113599e12b4e487f5f245be20 100644
--- a/src/main/java/teetime/framework/AbstractStage.java
+++ b/src/main/java/teetime/framework/AbstractStage.java
@@ -14,7 +14,7 @@ import teetime.framework.pipe.IPipe;
 import teetime.framework.signal.ISignal;
 import teetime.framework.validation.InvalidPortConnection;
 
-public abstract class AbstractStage implements IStage {
+public abstract class AbstractStage extends AbstractBasicStage {
 
 	private final String id;
 	/**
diff --git a/src/main/java/teetime/framework/Analysis.java b/src/main/java/teetime/framework/Analysis.java
index 2e115cdc1feaf8bf0ebe58fd05ebe1024511fbf1..286db07a5da6d43605f55562ffd67654477eff98 100644
--- a/src/main/java/teetime/framework/Analysis.java
+++ b/src/main/java/teetime/framework/Analysis.java
@@ -28,8 +28,8 @@ public class Analysis implements UncaughtExceptionHandler {
 	}
 
 	public void init() {
-		final List<IStage> threadableStageJobs = this.configuration.getThreadableStageJobs();
-		for (IStage stage : threadableStageJobs) {
+		final List<AbstractBasicStage> threadableStageJobs = this.configuration.getThreadableStageJobs();
+		for (AbstractBasicStage stage : threadableStageJobs) {
 			final Thread thread = new Thread(new RunnableStage(stage));
 			switch (stage.getTerminationStrategy()) {
 			case BY_SIGNAL:
diff --git a/src/main/java/teetime/framework/AnalysisConfiguration.java b/src/main/java/teetime/framework/AnalysisConfiguration.java
index 3850987eb23573d05ae4781ff4eeb1ff24187e6f..81f41e1a953ff0796a644f50adb45048f4fab89e 100644
--- a/src/main/java/teetime/framework/AnalysisConfiguration.java
+++ b/src/main/java/teetime/framework/AnalysisConfiguration.java
@@ -8,15 +8,15 @@ import teetime.framework.pipe.PipeFactoryRegistry;
 public class AnalysisConfiguration {
 
 	protected static final PipeFactoryRegistry PIPE_FACTORY_REGISTRY = PipeFactoryRegistry.INSTANCE;
-	private final List<IStage> threadableStageJobs = new LinkedList<IStage>();
+	private final List<AbstractBasicStage> threadableStageJobs = new LinkedList<AbstractBasicStage>();
 
 	public AnalysisConfiguration() {}
 
-	List<IStage> getThreadableStageJobs() {
+	List<AbstractBasicStage> getThreadableStageJobs() {
 		return this.threadableStageJobs;
 	}
 
-	public void addThreadableStage(final IStage stage) {
+	public void addThreadableStage(final AbstractBasicStage stage) {
 		this.threadableStageJobs.add(stage);
 	}
 
diff --git a/src/main/java/teetime/framework/IStage.java b/src/main/java/teetime/framework/IStage.java
index 91fd7393da37758cdb1261f94efd3d99c7aa3664..a9033bba0caf9f08b247035fa717ee94dd098c53 100644
--- a/src/main/java/teetime/framework/IStage.java
+++ b/src/main/java/teetime/framework/IStage.java
@@ -2,25 +2,21 @@ package teetime.framework;
 
 import java.util.List;
 
-import teetime.framework.signal.ISignal;
 import teetime.framework.validation.InvalidPortConnection;
 
-public interface IStage extends ITerminable {
+@Deprecated
+public interface IStage {
 
-	String getId();
+	public String getId();
 
-	void executeWithPorts();
+	public IStage getParentStage();
 
-	IStage getParentStage();
-
-	void setParentStage(IStage parentStage, int index);
-
-	void onSignal(ISignal signal, InputPort<?> inputPort);
+	public void setParentStage(IStage parentStage, int index);
 
 	/**
 	 *
 	 * @param invalidPortConnections
 	 *            <i>(Passed as parameter for performance reasons)</i>
 	 */
-	void validateOutputPorts(List<InvalidPortConnection> invalidPortConnections);
+	public void validateOutputPorts(List<InvalidPortConnection> invalidPortConnections);
 }
diff --git a/src/main/java/teetime/framework/ITerminable.java b/src/main/java/teetime/framework/ITerminable.java
deleted file mode 100644
index 175db53931772336b8e6e4a40060673b605082e3..0000000000000000000000000000000000000000
--- a/src/main/java/teetime/framework/ITerminable.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package teetime.framework;
-
-interface ITerminable {
-
-	TerminationStrategy getTerminationStrategy();
-
-	void terminate();
-
-	boolean shouldBeTerminated();
-
-}
diff --git a/src/main/java/teetime/framework/InputPort.java b/src/main/java/teetime/framework/InputPort.java
index ccdd19d9bc378b6863290eb0e3a62e081c893c7c..942f06f76afc56decf83c5113331cbfff0640edb 100644
--- a/src/main/java/teetime/framework/InputPort.java
+++ b/src/main/java/teetime/framework/InputPort.java
@@ -4,9 +4,9 @@ import teetime.framework.pipe.IPipe;
 
 public class InputPort<T> extends AbstractPort<T> {
 
-	private final IStage owningStage;
+	private final AbstractBasicStage owningStage;
 
-	InputPort(final IStage owningStage) {
+	InputPort(final AbstractBasicStage owningStage) {
 		super();
 		this.owningStage = owningStage;
 	}
@@ -33,7 +33,7 @@ public class InputPort<T> extends AbstractPort<T> {
 		this.pipe = pipe;
 	}
 
-	public IStage getOwningStage() {
+	public AbstractBasicStage getOwningStage() {
 		return this.owningStage;
 	}
 
diff --git a/src/main/java/teetime/framework/RunnableStage.java b/src/main/java/teetime/framework/RunnableStage.java
index b0d234bf016123f6c59d0a0d02ca5f068f022c74..89796f9020836da664edf609c52e7916c7a7d4a4 100644
--- a/src/main/java/teetime/framework/RunnableStage.java
+++ b/src/main/java/teetime/framework/RunnableStage.java
@@ -8,14 +8,13 @@ import teetime.framework.signal.TerminatingSignal;
 import teetime.framework.signal.ValidatingSignal;
 import teetime.framework.validation.AnalysisNotValidException;
 
-@SuppressWarnings("PMD.BeanMembersShouldSerialize")
 public class RunnableStage implements Runnable {
 
-	private final IStage stage;
+	private final AbstractBasicStage stage;
 	private final Logger logger; // NOPMD
 	private boolean validationEnabled;
 
-	public RunnableStage(final IStage stage) {
+	public RunnableStage(final AbstractBasicStage stage) {
 		this.stage = stage;
 		this.logger = LoggerFactory.getLogger(stage.getClass());
 	}
@@ -47,9 +46,9 @@ public class RunnableStage implements Runnable {
 			this.logger.error("Terminating thread due to the following exception: ", e);
 			throw e;
 		} // catch (RuntimeException e) {
-		// this.logger.error("Terminating thread due to the following exception: ", e);
-		// throw e;
-		// }
+			// this.logger.error("Terminating thread due to the following exception: ", e);
+			// throw e;
+			// }
 
 		this.logger.debug("Finished runnable stage. (" + this.stage.getId() + ")");
 	}
diff --git a/src/main/java/teetime/framework/pipe/AbstractPipe.java b/src/main/java/teetime/framework/pipe/AbstractPipe.java
index d3382dbc54193d873869dd41a338edc3dd852151..cc28ecf90584eb6807682d0dac1d320cf9e04c85 100644
--- a/src/main/java/teetime/framework/pipe/AbstractPipe.java
+++ b/src/main/java/teetime/framework/pipe/AbstractPipe.java
@@ -1,6 +1,6 @@
 package teetime.framework.pipe;
 
-import teetime.framework.IStage;
+import teetime.framework.AbstractBasicStage;
 import teetime.framework.InputPort;
 import teetime.framework.OutputPort;
 
@@ -13,7 +13,7 @@ public abstract class AbstractPipe implements IPipe {
 	 * this.getPipe().getTargetPort().getOwningStage()
 	 * </pre>
 	 */
-	protected IStage cachedTargetStage;
+	protected AbstractBasicStage cachedTargetStage;
 
 	private InputPort<?> targetPort;
 
diff --git a/src/main/java/teetime/framework/pipe/CommittablePipe.java b/src/main/java/teetime/framework/pipe/CommittablePipe.java
index 41cea9411884e8b3e5d796f38bc0b5290c3d579a..f425bbb45d4e541cee6c186b33e67389f502f733 100644
--- a/src/main/java/teetime/framework/pipe/CommittablePipe.java
+++ b/src/main/java/teetime/framework/pipe/CommittablePipe.java
@@ -1,5 +1,6 @@
 package teetime.framework.pipe;
 
+import teetime.framework.AbstractIntraThreadPipe;
 import teetime.framework.InputPort;
 import teetime.framework.OutputPort;
 import teetime.util.list.CommittableResizableArrayQueue;
diff --git a/src/main/java/teetime/framework/pipe/OrderedGrowableArrayPipe.java b/src/main/java/teetime/framework/pipe/OrderedGrowableArrayPipe.java
index eefa35be748a691469bb60562a37bcd23a5c8a46..d5db551a3dc5c8eafd1e8299d1152f6d7ea5b7a5 100644
--- a/src/main/java/teetime/framework/pipe/OrderedGrowableArrayPipe.java
+++ b/src/main/java/teetime/framework/pipe/OrderedGrowableArrayPipe.java
@@ -1,5 +1,6 @@
 package teetime.framework.pipe;
 
+import teetime.framework.AbstractIntraThreadPipe;
 import teetime.framework.InputPort;
 import teetime.framework.OutputPort;
 import teetime.util.concurrent.workstealing.CircularArray;
diff --git a/src/main/java/teetime/framework/pipe/OrderedGrowablePipe.java b/src/main/java/teetime/framework/pipe/OrderedGrowablePipe.java
index 23b3d43f83a2507f7ec1c15998fa1ff90641987a..8901664518c63466d4f759e171e1d8afdb28967c 100644
--- a/src/main/java/teetime/framework/pipe/OrderedGrowablePipe.java
+++ b/src/main/java/teetime/framework/pipe/OrderedGrowablePipe.java
@@ -2,6 +2,7 @@ package teetime.framework.pipe;
 
 import java.util.LinkedList;
 
+import teetime.framework.AbstractIntraThreadPipe;
 import teetime.framework.InputPort;
 import teetime.framework.OutputPort;
 
diff --git a/src/main/java/teetime/framework/pipe/RelayTestPipe.java b/src/main/java/teetime/framework/pipe/RelayTestPipe.java
index 3a7bc13c99fa68e1660efcd5a4d034fe50988c82..ff09a32a51931f62ddb2772ea765668c4cb2d551 100644
--- a/src/main/java/teetime/framework/pipe/RelayTestPipe.java
+++ b/src/main/java/teetime/framework/pipe/RelayTestPipe.java
@@ -1,5 +1,6 @@
 package teetime.framework.pipe;
 
+import teetime.framework.AbstractInterThreadPipe;
 import teetime.util.ConstructorClosure;
 
 public final class RelayTestPipe<T> extends AbstractInterThreadPipe {
diff --git a/src/main/java/teetime/framework/pipe/SingleElementPipe.java b/src/main/java/teetime/framework/pipe/SingleElementPipe.java
index f71d3957c09f96baee6574dcb07c31568de4b009..cc519a2b4402e1049af59ce1d249b04f6563f918 100644
--- a/src/main/java/teetime/framework/pipe/SingleElementPipe.java
+++ b/src/main/java/teetime/framework/pipe/SingleElementPipe.java
@@ -1,5 +1,6 @@
 package teetime.framework.pipe;
 
+import teetime.framework.AbstractIntraThreadPipe;
 import teetime.framework.InputPort;
 import teetime.framework.OutputPort;
 
diff --git a/src/main/java/teetime/framework/pipe/SpScPipe.java b/src/main/java/teetime/framework/pipe/SpScPipe.java
index 4941e4a7dca7c10e16019332d9f73fb801fd5199..8facbf44a72c4aa96087f8fe2372d54a6c7d7a7f 100644
--- a/src/main/java/teetime/framework/pipe/SpScPipe.java
+++ b/src/main/java/teetime/framework/pipe/SpScPipe.java
@@ -7,6 +7,7 @@ import org.jctools.queues.spec.ConcurrentQueueSpec;
 import org.jctools.queues.spec.Ordering;
 import org.jctools.queues.spec.Preference;
 
+import teetime.framework.AbstractInterThreadPipe;
 import teetime.framework.InputPort;
 import teetime.framework.OutputPort;
 
diff --git a/src/main/java/teetime/framework/pipe/UnorderedGrowablePipe.java b/src/main/java/teetime/framework/pipe/UnorderedGrowablePipe.java
index 76075d7c64ab20805ad540bfa3a0225610b2b7c4..6fb7e9a12b0c2487cf49f34ee972af63a46c9958 100644
--- a/src/main/java/teetime/framework/pipe/UnorderedGrowablePipe.java
+++ b/src/main/java/teetime/framework/pipe/UnorderedGrowablePipe.java
@@ -1,5 +1,6 @@
 package teetime.framework.pipe;
 
+import teetime.framework.AbstractIntraThreadPipe;
 import teetime.framework.InputPort;
 import teetime.framework.OutputPort;
 
diff --git a/src/main/java/teetime/stage/Relay.java b/src/main/java/teetime/stage/Relay.java
index 0d898b3d4bd305bbe8b08f7bfe5cbf77cf3ecf3f..e42808be295ba2541d658cedd67c99d04312b8ef 100644
--- a/src/main/java/teetime/stage/Relay.java
+++ b/src/main/java/teetime/stage/Relay.java
@@ -1,8 +1,8 @@
 package teetime.stage;
 
+import teetime.framework.AbstractInterThreadPipe;
 import teetime.framework.InputPort;
 import teetime.framework.AbstractProducerStage;
-import teetime.framework.pipe.AbstractInterThreadPipe;
 import teetime.framework.signal.TerminatingSignal;
 
 public class Relay<T> extends AbstractProducerStage<T> {
diff --git a/src/main/java/teetime/stage/io/File2ByteArray.java b/src/main/java/teetime/stage/io/File2ByteArray.java
index 647b42ae7731219cf97bf732064c0238e94c675d..17509009179ea1a7a93ef52caddcc1265d1be8cd 100644
--- a/src/main/java/teetime/stage/io/File2ByteArray.java
+++ b/src/main/java/teetime/stage/io/File2ByteArray.java
@@ -5,11 +5,10 @@ import java.io.IOException;
 
 import teetime.framework.AbstractConsumerStage;
 import teetime.framework.OutputPort;
-import teetime.framework.IStage;
 
 import com.google.common.io.Files;
 
-public class File2ByteArray extends AbstractConsumerStage<File> implements IStage {
+public class File2ByteArray extends AbstractConsumerStage<File> {
 
 	private final OutputPort<byte[]> outputPort = this.createOutputPort();
 
diff --git a/src/performancetest/java/teetime/examples/experiment09/MethodCallThroughputAnalysis9.java b/src/performancetest/java/teetime/examples/experiment09/MethodCallThroughputAnalysis9.java
index dfdbfbd6df8aba627cc2e18fd5a95b6a0c01d50e..18476d0ca6e46e8d11f02e7f158d098a0f107c3d 100644
--- a/src/performancetest/java/teetime/examples/experiment09/MethodCallThroughputAnalysis9.java
+++ b/src/performancetest/java/teetime/examples/experiment09/MethodCallThroughputAnalysis9.java
@@ -17,9 +17,9 @@ package teetime.examples.experiment09;
 
 import java.util.List;
 
+import teetime.framework.AbstractBasicStage;
 import teetime.framework.OldHeadPipeline;
 import teetime.framework.RunnableStage;
-import teetime.framework.IStage;
 import teetime.framework.pipe.CommittablePipe;
 import teetime.stage.CollectorSink;
 import teetime.stage.NoopFilter;
@@ -43,7 +43,7 @@ public class MethodCallThroughputAnalysis9 {
 	private Runnable runnable;
 
 	public void init() {
-		IStage pipeline = this.buildPipeline();
+		AbstractBasicStage pipeline = this.buildPipeline();
 		this.runnable = new RunnableStage(pipeline);
 	}
 
diff --git a/src/performancetest/java/teetime/examples/experiment11/MethodCallThroughputAnalysis11.java b/src/performancetest/java/teetime/examples/experiment11/MethodCallThroughputAnalysis11.java
index d95d9f923bd66ce2326846865c9d9dde9369bf62..e1598de80e5a1f79ebc05e5866869eeb7df1b260 100644
--- a/src/performancetest/java/teetime/examples/experiment11/MethodCallThroughputAnalysis11.java
+++ b/src/performancetest/java/teetime/examples/experiment11/MethodCallThroughputAnalysis11.java
@@ -17,9 +17,9 @@ package teetime.examples.experiment11;
 
 import java.util.List;
 
+import teetime.framework.AbstractBasicStage;
 import teetime.framework.OldHeadPipeline;
 import teetime.framework.RunnableStage;
-import teetime.framework.IStage;
 import teetime.framework.pipe.UnorderedGrowablePipe;
 import teetime.stage.CollectorSink;
 import teetime.stage.NoopFilter;
@@ -43,7 +43,7 @@ public class MethodCallThroughputAnalysis11 {
 	private Runnable runnable;
 
 	public void init() {
-		IStage pipeline = this.buildPipeline(this.numInputObjects, this.inputObjectCreator);
+		AbstractBasicStage pipeline = this.buildPipeline(this.numInputObjects, this.inputObjectCreator);
 		this.runnable = new RunnableStage(pipeline);
 	}
 
diff --git a/src/performancetest/java/teetime/examples/experiment14/MethodCallThroughputAnalysis14.java b/src/performancetest/java/teetime/examples/experiment14/MethodCallThroughputAnalysis14.java
index 31f374d8dca46b0a9726ff18923438089faf214d..1546da21c2a9975f14037d0167cab39cc5ebe1e8 100644
--- a/src/performancetest/java/teetime/examples/experiment14/MethodCallThroughputAnalysis14.java
+++ b/src/performancetest/java/teetime/examples/experiment14/MethodCallThroughputAnalysis14.java
@@ -17,9 +17,9 @@ package teetime.examples.experiment14;
 
 import java.util.List;
 
+import teetime.framework.AbstractBasicStage;
 import teetime.framework.OldHeadPipeline;
 import teetime.framework.RunnableStage;
-import teetime.framework.IStage;
 import teetime.framework.pipe.IPipeFactory;
 import teetime.framework.pipe.PipeFactoryRegistry;
 import teetime.framework.pipe.PipeFactoryRegistry.PipeOrdering;
@@ -47,7 +47,7 @@ public class MethodCallThroughputAnalysis14 {
 	private final PipeFactoryRegistry pipeFactory = PipeFactoryRegistry.INSTANCE;
 
 	public void init() {
-		IStage pipeline = this.buildPipeline();
+		AbstractBasicStage pipeline = this.buildPipeline();
 		this.runnable = new RunnableStage(pipeline);
 	}
 
diff --git a/src/performancetest/java/teetime/examples/experiment15/MethodCallThroughputAnalysis15.java b/src/performancetest/java/teetime/examples/experiment15/MethodCallThroughputAnalysis15.java
index 738579aa22a0dffe2477c60b949f514a5890c805..059611424d23726eb525705674d84dd06ac68db8 100644
--- a/src/performancetest/java/teetime/examples/experiment15/MethodCallThroughputAnalysis15.java
+++ b/src/performancetest/java/teetime/examples/experiment15/MethodCallThroughputAnalysis15.java
@@ -17,9 +17,9 @@ package teetime.examples.experiment15;
 
 import java.util.List;
 
+import teetime.framework.AbstractBasicStage;
 import teetime.framework.OldHeadPipeline;
 import teetime.framework.RunnableStage;
-import teetime.framework.IStage;
 import teetime.framework.pipe.OrderedGrowableArrayPipe;
 import teetime.framework.pipe.SingleElementPipe;
 import teetime.framework.pipe.SpScPipe;
@@ -58,7 +58,7 @@ public class MethodCallThroughputAnalysis15 {
 		OldHeadPipeline<Clock, Sink<Long>> clockPipeline = this.buildClockPipeline();
 		this.clockRunnable = new RunnableStage(clockPipeline);
 
-		IStage pipeline = this.buildPipeline(this.clock);
+		AbstractBasicStage pipeline = this.buildPipeline(this.clock);
 		this.runnable = new RunnableStage(pipeline);
 	}
 
diff --git a/src/performancetest/java/teetime/framework/OldHeadPipeline.java b/src/performancetest/java/teetime/framework/OldHeadPipeline.java
index 8f3418483e5c6e66ea7db42cc10cb55e59790c1d..976baa44dcb4c436e7cb2a3fec705da7ca6317ab 100644
--- a/src/performancetest/java/teetime/framework/OldHeadPipeline.java
+++ b/src/performancetest/java/teetime/framework/OldHeadPipeline.java
@@ -1,7 +1,7 @@
 package teetime.framework;
 
 @Deprecated
-public class OldHeadPipeline<FirstStage extends IStage, LastStage extends IStage> extends OldPipeline<FirstStage, LastStage> implements IStage {
+public class OldHeadPipeline<FirstStage extends AbstractBasicStage, LastStage extends IStage> extends OldPipeline<FirstStage, LastStage> implements IStage {
 
 	public OldHeadPipeline() {}
 
diff --git a/src/performancetest/java/teetime/framework/OldPipeline.java b/src/performancetest/java/teetime/framework/OldPipeline.java
index 98f846d6b7d91465ee3909bf99a7ac0364f72781..e883cfc92495a9ed562a18c55b59b7804331ce1b 100644
--- a/src/performancetest/java/teetime/framework/OldPipeline.java
+++ b/src/performancetest/java/teetime/framework/OldPipeline.java
@@ -6,7 +6,7 @@ import teetime.framework.signal.ISignal;
 import teetime.framework.validation.InvalidPortConnection;
 
 @Deprecated
-public class OldPipeline<FirstStage extends IStage, LastStage extends IStage> implements IStage {
+public class OldPipeline<FirstStage extends AbstractBasicStage, LastStage extends IStage> extends AbstractBasicStage {
 
 	protected FirstStage firstStage;
 	protected LastStage lastStage;
diff --git a/src/test/java/teetime/framework/pipe/SpScPipeTest.java b/src/test/java/teetime/framework/pipe/SpScPipeTest.java
index b5f7a1281afa1c0a950dca112e742df61cfd22bb..20d366d6aea0079c67138c645e373f0f5a4f71e2 100644
--- a/src/test/java/teetime/framework/pipe/SpScPipeTest.java
+++ b/src/test/java/teetime/framework/pipe/SpScPipeTest.java
@@ -6,6 +6,7 @@ import java.util.List;
 import org.junit.Assert;
 import org.junit.Test;
 
+import teetime.framework.AbstractInterThreadPipe;
 import teetime.framework.InputPort;
 import teetime.framework.OutputPort;
 import teetime.framework.signal.ISignal;