diff --git a/src/main/java/teetime/framework/Analysis.java b/src/main/java/teetime/framework/Analysis.java
index ea917227e8417d3e96de2d8ccd7e0a4a8e30ff3c..a8fc0514bf9697495140cb317db28cace9af5ec8 100644
--- a/src/main/java/teetime/framework/Analysis.java
+++ b/src/main/java/teetime/framework/Analysis.java
@@ -118,8 +118,8 @@ public final class Analysis<T extends AnalysisConfiguration> implements Uncaught
 	 *
 	 */
 	private final void init() {
-
-		AnalysisInstantiation.instantiatePipes(configuration);
+		AnalysisInstantiation analysisInstantiation = new AnalysisInstantiation(configuration);
+		analysisInstantiation.instantiatePipes();
 
 		final Set<Stage> threadableStageJobs = this.configuration.getThreadableStages();
 		if (threadableStageJobs.isEmpty()) {
diff --git a/src/main/java/teetime/framework/AnalysisConfiguration.java b/src/main/java/teetime/framework/AnalysisConfiguration.java
index f89870448301a4ebc3f33e8e3e3a16b5afe4bfb2..fc8c16c86aaca5d4cd1e8113664a641bff7fc69e 100644
--- a/src/main/java/teetime/framework/AnalysisConfiguration.java
+++ b/src/main/java/teetime/framework/AnalysisConfiguration.java
@@ -176,8 +176,7 @@ public abstract class AnalysisConfiguration {
 	 *            the pipe is set to this capacity, if the value is greater than 0. If it is 0, than the pipe is unbounded, thus growing of the pipe is enabled.
 	 */
 	protected final <T> void connectPorts(final OutputPort<? extends T> sourcePort, final InputPort<T> targetPort, final int capacity) {
-		new InstantiationPipe<T>(sourcePort, targetPort, capacity);
-		// connections.add(new Connection<T>(sourcePort, targetPort, capacity));
+		new InstantiationPipe(sourcePort, targetPort, capacity);
 	}
 
 }
diff --git a/src/main/java/teetime/framework/AnalysisInstantiation.java b/src/main/java/teetime/framework/AnalysisInstantiation.java
index e659e4e77f89f5fabb2d8b31a2c5182401c79ec1..d1283e22f181038399fd2bfb9f770bb1da8594be 100644
--- a/src/main/java/teetime/framework/AnalysisInstantiation.java
+++ b/src/main/java/teetime/framework/AnalysisInstantiation.java
@@ -17,12 +17,18 @@ class AnalysisInstantiation {
 
 	private static final Logger LOGGER = LoggerFactory.getLogger(AnalysisInstantiation.class);
 
-	private static final IPipeFactory interBoundedThreadPipeFactory = new SpScPipeFactory();
-	private static final IPipeFactory interUnboundedThreadPipeFactory = new UnboundedSpScPipeFactory();
-	private static final IPipeFactory intraThreadPipeFactory = new SingleElementPipeFactory();
+	private final IPipeFactory interBoundedThreadPipeFactory = new SpScPipeFactory();
+	private final IPipeFactory interUnboundedThreadPipeFactory = new UnboundedSpScPipeFactory();
+	private final IPipeFactory intraThreadPipeFactory = new SingleElementPipeFactory();
+
+	private final AnalysisConfiguration configuration;
+
+	public AnalysisInstantiation(final AnalysisConfiguration configuration) {
+		this.configuration = configuration;
+	}
 
 	@SuppressWarnings("rawtypes")
-	static Integer colorAndConnectStages(final Integer i, final Map<Stage, Integer> colors, final Stage threadableStage, final AnalysisConfiguration configuration) {
+	Integer colorAndConnectStages(final Integer i, final Map<Stage, Integer> colors, final Stage threadableStage, final AnalysisConfiguration configuration) {
 		Integer createdConnections = new Integer(0);
 		Set<Stage> threadableStageJobs = configuration.getThreadableStages();
 		for (OutputPort outputPort : threadableStage.getOutputPorts()) {
@@ -58,7 +64,7 @@ class AnalysisInstantiation {
 		return createdConnections;
 	}
 
-	static void instantiatePipes(final AnalysisConfiguration configuration) {
+	void instantiatePipes() {
 		Integer i = new Integer(0);
 		Map<Stage, Integer> colors = new HashMap<Stage, Integer>();
 		Set<Stage> threadableStageJobs = configuration.getThreadableStages();
@@ -66,7 +72,7 @@ class AnalysisInstantiation {
 		for (Stage threadableStage : threadableStageJobs) {
 			i++;
 			colors.put(threadableStage, i);
-			createdConnections = AnalysisInstantiation.colorAndConnectStages(i, colors, threadableStage, configuration);
+			createdConnections = colorAndConnectStages(i, colors, threadableStage, configuration);
 		}
 		LOGGER.debug("Created " + createdConnections + "connections");
 	}
diff --git a/src/main/java/teetime/framework/pipe/InstantiationPipe.java b/src/main/java/teetime/framework/pipe/InstantiationPipe.java
index 799ed32400fb2c28858dc62b4ed74ee55294e9b0..702de98809cd9659fc4c2753785753460e7a1dd5 100644
--- a/src/main/java/teetime/framework/pipe/InstantiationPipe.java
+++ b/src/main/java/teetime/framework/pipe/InstantiationPipe.java
@@ -19,12 +19,12 @@ import teetime.framework.InputPort;
 import teetime.framework.OutputPort;
 import teetime.framework.signal.ISignal;
 
-public class InstantiationPipe<T> implements IPipe {
+public class InstantiationPipe implements IPipe {
 
-	private final InputPort<T> target;
+	private final InputPort target;
 	private final int capacity;
 
-	public InstantiationPipe(final OutputPort<? extends T> sourcePort, final InputPort<T> targetPort, final int capacity) {
+	public <T> InstantiationPipe(final OutputPort<? extends T> sourcePort, final InputPort<T> targetPort, final int capacity) {
 		this.target = targetPort;
 		this.capacity = capacity;
 		sourcePort.setPipe(this);