diff --git a/src/main/java/teetime/framework/test/StageTester.java b/src/main/java/teetime/framework/test/StageTester.java
index 3a1840a1d69c473090ace52e742714eee304c230..4d3cf95e78314b784402db6fb3b6134c7c683148 100644
--- a/src/main/java/teetime/framework/test/StageTester.java
+++ b/src/main/java/teetime/framework/test/StageTester.java
@@ -17,7 +17,6 @@ package teetime.framework.test;
 
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Collection;
 import java.util.List;
 
 import teetime.framework.Analysis;
@@ -29,7 +28,6 @@ import teetime.framework.pipe.PipeFactoryRegistry.PipeOrdering;
 import teetime.framework.pipe.PipeFactoryRegistry.ThreadCommunication;
 import teetime.stage.CollectorSink;
 import teetime.stage.IterableProducer;
-import teetime.util.Pair;
 
 /**
  * This class can be used to test single stages in JUnit test cases.
@@ -73,10 +71,10 @@ public final class StageTester {
 		return this;
 	}
 
-	public Collection<Pair<Thread, Throwable>> start() {
+	public void start() {
 		final AnalysisConfiguration configuration = new Configuration(inputHolders, stage, outputHolders);
 		final Analysis analysis = new Analysis(configuration);
-		return analysis.start();
+		analysis.executeBlocking();
 	}
 
 	private final class Configuration extends AnalysisConfiguration {
diff --git a/src/performancetest/java/teetime/examples/experiment16/MethodCallThoughputTimestampAnalysis16Test.java b/src/performancetest/java/teetime/examples/experiment16/MethodCallThoughputTimestampAnalysis16Test.java
index 6de353f7969c21b74ce7aa6985086814e598c0bd..15ba3ff9f5bdba9e9df721057bca364d3b564875 100644
--- a/src/performancetest/java/teetime/examples/experiment16/MethodCallThoughputTimestampAnalysis16Test.java
+++ b/src/performancetest/java/teetime/examples/experiment16/MethodCallThoughputTimestampAnalysis16Test.java
@@ -92,11 +92,10 @@ public class MethodCallThoughputTimestampAnalysis16Test extends PerformanceTest
 		configuration.build();
 
 		final Analysis analysis = new Analysis(configuration);
-		analysis.init();
 
 		this.stopWatch.start();
 		try {
-			analysis.start();
+			analysis.executeBlocking();
 		} finally {
 			this.stopWatch.end();
 		}
diff --git a/src/performancetest/java/teetime/examples/experiment19/MethodCallThoughputTimestampAnalysis19Test.java b/src/performancetest/java/teetime/examples/experiment19/MethodCallThoughputTimestampAnalysis19Test.java
index bcf3c7c2e3f01b3941866dc499f699d98b620278..d100c6b62752cc82b8ceb0b2e31343f92d07ef8b 100644
--- a/src/performancetest/java/teetime/examples/experiment19/MethodCallThoughputTimestampAnalysis19Test.java
+++ b/src/performancetest/java/teetime/examples/experiment19/MethodCallThoughputTimestampAnalysis19Test.java
@@ -77,11 +77,10 @@ public class MethodCallThoughputTimestampAnalysis19Test extends PerformanceTest
 		configuration.build();
 
 		final Analysis analysis = new Analysis(configuration);
-		analysis.init();
 
 		this.stopWatch.start();
 		try {
-			analysis.start();
+			analysis.executeBlocking();
 		} finally {
 			this.stopWatch.end();
 		}
diff --git a/src/performancetest/java/teetime/examples/loopStage/FiniteSignalPassingTest.java b/src/performancetest/java/teetime/examples/loopStage/FiniteSignalPassingTest.java
index 5dd3a2c8759d94b83471c377335d3ddb373e4f71..104c58b6dbcaaefcfd6fdcd8f34c66ee0dd81155 100644
--- a/src/performancetest/java/teetime/examples/loopStage/FiniteSignalPassingTest.java
+++ b/src/performancetest/java/teetime/examples/loopStage/FiniteSignalPassingTest.java
@@ -29,9 +29,8 @@ public class FiniteSignalPassingTest {
 		boolean exceptionsOccured = false;
 		LoopStageAnalysisConfiguration configuration = new LoopStageAnalysisConfiguration();
 		Analysis analysis = new Analysis(configuration);
-		analysis.init();
 		try {
-			analysis.start();
+			analysis.executeBlocking();
 		} catch (RuntimeException e) {
 			exceptionsOccured = true;
 		}
diff --git a/src/test/java/teetime/examples/cipher/CipherTest.java b/src/test/java/teetime/examples/cipher/CipherTest.java
index be2b0f92391b9f76fb13da69f752cf131aeb462b..ac03de784a47b3a892d4ecdf9724898965a0ff1f 100644
--- a/src/test/java/teetime/examples/cipher/CipherTest.java
+++ b/src/test/java/teetime/examples/cipher/CipherTest.java
@@ -45,7 +45,7 @@ public class CipherTest {
 
 		final AnalysisConfiguration configuration = new CipherConfiguration(inputFile, outputFile, password);
 		final Analysis analysis = new Analysis(configuration);
-		analysis.start();
+		analysis.executeBlocking();
 
 		Assert.assertTrue(Files.equal(new File(inputFile), new File(outputFile)));
 	}
diff --git a/src/test/java/teetime/examples/tokenizer/TokenizerTest.java b/src/test/java/teetime/examples/tokenizer/TokenizerTest.java
index d711b6a0210f4e49b9063426f09eab060b2b4a20..b1396eae30773290f18e1a5aa0a511c63d1280dc 100644
--- a/src/test/java/teetime/examples/tokenizer/TokenizerTest.java
+++ b/src/test/java/teetime/examples/tokenizer/TokenizerTest.java
@@ -44,7 +44,7 @@ public class TokenizerTest {
 
 		final TokenizerConfiguration configuration = new TokenizerConfiguration(inputFile, password);
 		final Analysis analysis = new Analysis(configuration);
-		analysis.start();
+		analysis.executeBlocking();
 
 		final String string = Files.toString(new File("src/test/resources/data/input.txt"), Charset.forName("UTF-8"));
 
diff --git a/src/test/java/teetime/framework/RunnableConsumerStageTest.java b/src/test/java/teetime/framework/RunnableConsumerStageTest.java
index f8a4d312c69036e166e0e8bc945d603a23c3447c..5be8ef32e1ace9e38c468d41984df0b5bc016ecc 100644
--- a/src/test/java/teetime/framework/RunnableConsumerStageTest.java
+++ b/src/test/java/teetime/framework/RunnableConsumerStageTest.java
@@ -18,6 +18,7 @@ package teetime.framework;
 import static org.junit.Assert.assertEquals;
 
 import java.lang.Thread.State;
+import java.util.ArrayList;
 import java.util.Collection;
 
 import org.junit.Ignore;
@@ -117,7 +118,12 @@ public class RunnableConsumerStageTest {
 	}
 
 	private void start(final Analysis analysis) {
-		Collection<Pair<Thread, Throwable>> exceptions = analysis.start();
+		Collection<Pair<Thread, Throwable>> exceptions = new ArrayList<Pair<Thread, Throwable>>();
+		try {
+			analysis.executeBlocking();
+		} catch (AnalysisException e) {
+			exceptions = e.getThrownExceptions();
+		}
 		for (Pair<Thread, Throwable> pair : exceptions) {
 			System.err.println(pair.getSecond());
 			System.err.println(Joiner.on("\n").join(pair.getSecond().getStackTrace()));
diff --git a/src/test/java/teetime/stage/basic/merger/MergerTest.java b/src/test/java/teetime/stage/basic/merger/MergerTest.java
index 35d4aa47edb70a9102e1af6f50a72ca9115bbd35..e85129480b4284ab9f26655752f5d9078a23d202 100644
--- a/src/test/java/teetime/stage/basic/merger/MergerTest.java
+++ b/src/test/java/teetime/stage/basic/merger/MergerTest.java
@@ -23,7 +23,6 @@ import static org.junit.Assert.assertThat;
 import static teetime.framework.test.StageTester.test;
 
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.List;
 
 import org.junit.Before;
@@ -33,7 +32,6 @@ import teetime.framework.pipe.IPipeFactory;
 import teetime.framework.pipe.SingleElementPipeFactory;
 import teetime.stage.CollectorSink;
 import teetime.stage.InitialElementProducer;
-import teetime.util.Pair;
 
 /**
  * @author Nils Christian Ehmke
@@ -86,13 +84,12 @@ public class MergerTest {
 		mergerUnderTest = new Merger<Integer>(new RoundRobinStrategy());
 
 		List<Integer> outputList = new ArrayList<Integer>();
-		Collection<Pair<Thread, Throwable>> exceptions = test(mergerUnderTest)
+		test(mergerUnderTest)
 				.and().send(1, 2, 3).to(mergerUnderTest.getNewInputPort())
 				.and().send(4, 5, 6).to(mergerUnderTest.getNewInputPort())
 				.and().receive(outputList).from(mergerUnderTest.getOutputPort())
 				.start();
 
-		assertThat(exceptions, is(empty()));
 		assertThat(outputList, is(not(empty())));
 		assertThat(outputList, contains(1, 4, 2, 5, 3, 6));
 	}