diff --git a/src/main/java/teetime/variant/methodcallWithPorts/framework/core/pipe/SpScPipe.java b/src/main/java/teetime/variant/methodcallWithPorts/framework/core/pipe/SpScPipe.java
index f55d3257200451fc04f6954a8977cf9d1ff94393..67c6dca5818dac96d39336ac1586709899722fc3 100644
--- a/src/main/java/teetime/variant/methodcallWithPorts/framework/core/pipe/SpScPipe.java
+++ b/src/main/java/teetime/variant/methodcallWithPorts/framework/core/pipe/SpScPipe.java
@@ -8,15 +8,17 @@ public class SpScPipe<T> extends AbstractPipe<T> {
 
 	private final FFBufferOrdered3<T> queue;
 
-	public SpScPipe(final int initialCapacity) {
+	private SpScPipe(final int initialCapacity) {
 		this.queue = new FFBufferOrdered3<T>(initialCapacity);
 	}
 
 	public static <T> void connect(final OutputPort<T> sourcePort, final InputPort<T> targetPort, final int initialCapacity) {
 		IPipe<T> pipe = new SpScPipe<T>(initialCapacity);
-		sourcePort.setPipe(pipe);
 		targetPort.setPipe(pipe);
-		sourcePort.setCachedTargetStage(targetPort.getOwningStage());
+		if (sourcePort != null) {
+			sourcePort.setPipe(pipe);
+			sourcePort.setCachedTargetStage(targetPort.getOwningStage());
+		}
 	}
 
 	@Override
diff --git a/src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/Dir2RecordFilter.java b/src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/Dir2RecordsFilter.java
similarity index 96%
rename from src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/Dir2RecordFilter.java
rename to src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/Dir2RecordsFilter.java
index 65c5dad611b30a573418c42b17c53335e666cf73..1e713b6f2e61cdcaa77d6b6e55bd848b88054002 100644
--- a/src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/Dir2RecordFilter.java
+++ b/src/main/java/teetime/variant/methodcallWithPorts/stage/kieker/Dir2RecordsFilter.java
@@ -38,14 +38,14 @@ import kieker.common.util.filesystem.FSUtil;
  * 
  * @since 1.10
  */
-public class Dir2RecordFilter extends Pipeline<File, IMonitoringRecord> {
+public class Dir2RecordsFilter extends Pipeline<File, IMonitoringRecord> {
 
 	private ClassNameRegistryRepository classNameRegistryRepository;
 
 	/**
 	 * @since 1.10
 	 */
-	public Dir2RecordFilter(final ClassNameRegistryRepository classNameRegistryRepository) {
+	public Dir2RecordsFilter(final ClassNameRegistryRepository classNameRegistryRepository) {
 		this.classNameRegistryRepository = classNameRegistryRepository;
 
 		// FIXME does not yet work with more than one thread due to classNameRegistryRepository: classNameRegistryRepository is set after the ctor
@@ -91,7 +91,7 @@ public class Dir2RecordFilter extends Pipeline<File, IMonitoringRecord> {
 	/**
 	 * @since 1.10
 	 */
-	public Dir2RecordFilter() {
+	public Dir2RecordsFilter() {
 		this(null);
 	}
 
diff --git a/src/test/java/teetime/variant/methodcallWithPorts/examples/ChwComparisonMethodcallWithPorts.java b/src/test/java/teetime/variant/methodcallWithPorts/examples/ChwComparisonMethodcallWithPorts.java
index 777a9ca57d0b3e84cab02b686328558ea3f0fbf7..60453dad644de2c7e28a6aaa0c188d238121b881 100644
--- a/src/test/java/teetime/variant/methodcallWithPorts/examples/ChwComparisonMethodcallWithPorts.java
+++ b/src/test/java/teetime/variant/methodcallWithPorts/examples/ChwComparisonMethodcallWithPorts.java
@@ -73,11 +73,21 @@ public class ChwComparisonMethodcallWithPorts {
 		PerformanceResult test19c = performanceResults
 				.get("testWithManyObjectsAnd4Threads(teetime.variant.methodcallWithPorts.examples.experiment19.MethodCallThoughputTimestampAnalysis19Test)");
 
-		assertEquals(60, (double) test14.quantiles.get(0.5) / test1.quantiles.get(0.5), 5.1);
-		assertEquals(14, (double) test10.quantiles.get(0.5) / test1.quantiles.get(0.5), 2.1);
-		assertEquals(32, (double) test11.quantiles.get(0.5) / test1.quantiles.get(0.5), 4.1);
-		assertEquals(22, (double) test9.quantiles.get(0.5) / test1.quantiles.get(0.5), 2.1);
-		assertEquals(44, (double) test15.quantiles.get(0.5) / test1.quantiles.get(0.5), 4.1);
+		// until 25.06.2014 (incl.)
+		// assertEquals(60, (double) test14.quantiles.get(0.5) / test1.quantiles.get(0.5), 5.1);
+		// assertEquals(14, (double) test10.quantiles.get(0.5) / test1.quantiles.get(0.5), 2.1);
+		// assertEquals(32, (double) test11.quantiles.get(0.5) / test1.quantiles.get(0.5), 4.1);
+		// assertEquals(22, (double) test9.quantiles.get(0.5) / test1.quantiles.get(0.5), 2.1);
+		// assertEquals(44, (double) test15.quantiles.get(0.5) / test1.quantiles.get(0.5), 4.1);
+		// assertEquals(39, (double) test17.quantiles.get(0.5) / test1.quantiles.get(0.5), 4.1);
+
+		// since 26.06.2014 (incl.)
+		assertEquals(76, (double) test14.quantiles.get(0.5) / test1.quantiles.get(0.5), 5.1); // +16
+		assertEquals(26, (double) test10.quantiles.get(0.5) / test1.quantiles.get(0.5), 2.1); // +14
+		assertEquals(44, (double) test11.quantiles.get(0.5) / test1.quantiles.get(0.5), 4.1); // +12
+		assertEquals(36, (double) test9.quantiles.get(0.5) / test1.quantiles.get(0.5), 2.1); // +14
+		assertEquals(44, (double) test15.quantiles.get(0.5) / test1.quantiles.get(0.5), 4.1); // +0
+		assertEquals(53, (double) test17.quantiles.get(0.5) / test1.quantiles.get(0.5), 4.1); // +14
 
 		// below results vary too much, possibly due to the OS' scheduler
 		// assertEquals(RESULT_TESTS_16, (double) test16a.quantiles.get(0.5) / test1.quantiles.get(0.5), 5.1);
@@ -88,14 +98,12 @@ public class ChwComparisonMethodcallWithPorts {
 		// assertEquals(RESULT_TESTS_19, (double) test19b.quantiles.get(0.5) / test1.quantiles.get(0.5), 5.1);
 		// assertEquals(RESULT_TESTS_19, (double) test19c.quantiles.get(0.5) / test1.quantiles.get(0.5), 5.1);
 
-		assertEquals(39, (double) test17.quantiles.get(0.5) / test1.quantiles.get(0.5), 4.1);
-
 		// check speedup
-		assertEquals(2, (double) test16a.overallDurationInNs / test16b.overallDurationInNs, 0.2);
+		assertEquals(2, (double) test16a.overallDurationInNs / test16b.overallDurationInNs, 0.3);
 		assertEquals(2.5, (double) test16a.overallDurationInNs / test16c.overallDurationInNs, 0.2);
 
-		assertEquals(2, (double) test19a.overallDurationInNs / test19b.overallDurationInNs, 0.2);
-		assertEquals(2.5, (double) test19a.overallDurationInNs / test19c.overallDurationInNs, 0.2);
+		assertEquals(2, (double) test19a.overallDurationInNs / test19b.overallDurationInNs, 0.3);
+		assertEquals(2.5, (double) test19a.overallDurationInNs / test19c.overallDurationInNs, 0.3);
 	}
 
 }
diff --git a/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment17/MethodCallThroughputAnalysis17.java b/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment17/MethodCallThroughputAnalysis17.java
index 5bcfadf9c8c18fe79d6dc1d2c91d4645e5c4479d..2098b1557924840f301601d3adec0153eadfaae1 100644
--- a/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment17/MethodCallThroughputAnalysis17.java
+++ b/src/test/java/teetime/variant/methodcallWithPorts/examples/experiment17/MethodCallThroughputAnalysis17.java
@@ -154,18 +154,12 @@ public class MethodCallThroughputAnalysis17 extends Analysis {
 		pipeline.addIntermediateStage(stopTimestampFilter);
 		pipeline.setLastStage(collectorSink);
 
-		IPipe<TimestampObject> startPipe = new SpScPipe<TimestampObject>(SPSC_INITIAL_CAPACITY);
-		try {
-			for (int i = 0; i < this.numInputObjects; i++) {
-				startPipe.add(this.inputObjectCreator.create());
-			}
-			startPipe.close();
-		} catch (Exception e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+		SpScPipe.connect(null, relay.getInputPort(), SPSC_INITIAL_CAPACITY);
+		IPipe<TimestampObject> startPipe = relay.getInputPort().getPipe();
+		for (int i = 0; i < this.numInputObjects; i++) {
+			startPipe.add(this.inputObjectCreator.create());
 		}
-		relay.getInputPort().setPipe(startPipe);
-		// previousStage.getOutputPort().pipe = startPipe;
+		startPipe.close();
 
 		UnorderedGrowablePipe.connect(relay.getOutputPort(), startTimestampFilter.getInputPort());
 
diff --git a/src/test/java/teetime/variant/methodcallWithPorts/examples/recordReader/RecordReaderAnalysis.java b/src/test/java/teetime/variant/methodcallWithPorts/examples/recordReader/RecordReaderAnalysis.java
index 8a1b3397d4da7ae6f34a9cbc1586ed2aebc9e327..548156b9a24dbdeb765a30923a47190a3a8d0a4f 100644
--- a/src/test/java/teetime/variant/methodcallWithPorts/examples/recordReader/RecordReaderAnalysis.java
+++ b/src/test/java/teetime/variant/methodcallWithPorts/examples/recordReader/RecordReaderAnalysis.java
@@ -25,7 +25,7 @@ import teetime.variant.methodcallWithPorts.framework.core.RunnableStage;
 import teetime.variant.methodcallWithPorts.framework.core.pipe.SingleElementPipe;
 import teetime.variant.methodcallWithPorts.framework.core.pipe.SpScPipe;
 import teetime.variant.methodcallWithPorts.stage.CollectorSink;
-import teetime.variant.methodcallWithPorts.stage.kieker.Dir2RecordFilter;
+import teetime.variant.methodcallWithPorts.stage.kieker.Dir2RecordsFilter;
 import teetime.variant.methodcallWithPorts.stage.kieker.className.ClassNameRegistryRepository;
 
 import kieker.common.record.IMonitoringRecord;
@@ -53,7 +53,7 @@ public class RecordReaderAnalysis extends Analysis {
 	private Pipeline<File, Object> buildProducerPipeline() {
 		this.classNameRegistryRepository = new ClassNameRegistryRepository();
 		// create stages
-		Dir2RecordFilter file2RecordFilter = new Dir2RecordFilter(this.classNameRegistryRepository);
+		Dir2RecordsFilter file2RecordFilter = new Dir2RecordsFilter(this.classNameRegistryRepository);
 		CollectorSink<IMonitoringRecord> collector = new CollectorSink<IMonitoringRecord>(this.elementCollection);
 
 		final Pipeline<File, Object> pipeline = new Pipeline<File, Object>();
@@ -62,9 +62,8 @@ public class RecordReaderAnalysis extends Analysis {
 
 		SingleElementPipe.connect(file2RecordFilter.getOutputPort(), collector.getInputPort());
 
-		SpScPipe<File> dirInputPipe = new SpScPipe<File>(1);
-		dirInputPipe.add(new File("src/test/data/bookstore-logs"));
-		file2RecordFilter.getInputPort().setPipe(dirInputPipe);
+		SpScPipe.connect(null, file2RecordFilter.getInputPort(), 1);
+		file2RecordFilter.getInputPort().getPipe().add(new File("src/test/data/bookstore-logs"));
 
 		return pipeline;
 	}