diff --git a/src/main/java/teetime/framework/Analysis.java b/src/main/java/teetime/framework/Analysis.java
index f77315e5a05a1cd2a5734ea783402dac0820b953..3156529382e1febae7819cc925d2bbca304bea58 100644
--- a/src/main/java/teetime/framework/Analysis.java
+++ b/src/main/java/teetime/framework/Analysis.java
@@ -93,31 +93,29 @@ public class Analysis implements UncaughtExceptionHandler {
 			}
 			switch (stage.getTerminationStrategy()) {
 			case BY_SIGNAL: {
-				RunnableConsumerStage runnable = null;
-				newListener.setHeadStage(runnable);
+				RunnableConsumerStage runnable;
 				if (stage instanceof AbstractConsumerStage<?>) {
 					runnable = new RunnableConsumerStage(stage, ((AbstractConsumerStage<?>) stage).getIdleStrategy(), newListener); // FIXME remove this word-around
 				} else {
 					runnable = new RunnableConsumerStage(stage, newListener);
 				}
+				newListener.setRunnableStage(runnable);
 				final Thread thread = new Thread(runnable);
 				stage.setOwningThread(thread);
 				this.consumerThreads.add(thread);
 				break;
 			}
 			case BY_SELF_DECISION: {
-				RunnableProducerStage runnable = null;
-				newListener.setHeadStage(runnable);
-				runnable = new RunnableProducerStage(stage, newListener);
+				RunnableProducerStage runnable = new RunnableProducerStage(stage, newListener);
+				newListener.setRunnableStage(runnable);
 				final Thread thread = new Thread(runnable);
 				stage.setOwningThread(thread);
 				this.finiteProducerThreads.add(thread);
 				break;
 			}
 			case BY_INTERRUPT: {
-				RunnableProducerStage runnable = null;
-				newListener.setHeadStage(runnable);
-				runnable = new RunnableProducerStage(stage, newListener);
+				RunnableProducerStage runnable = new RunnableProducerStage(stage, newListener);
+				newListener.setRunnableStage(runnable);
 				final Thread thread = new Thread(runnable);
 				stage.setOwningThread(thread);
 				this.infiniteProducerThreads.add(thread);
diff --git a/src/main/java/teetime/framework/RunnableStage.java b/src/main/java/teetime/framework/RunnableStage.java
index 44fe489aca48848f78aed30530752e271513959a..6a8453bab06a09d5e7f686bc3d2cd162ad376b17 100644
--- a/src/main/java/teetime/framework/RunnableStage.java
+++ b/src/main/java/teetime/framework/RunnableStage.java
@@ -3,7 +3,6 @@ package teetime.framework;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import teetime.framework.exceptionHandling.DefaultListener;
 import teetime.framework.exceptionHandling.StageException;
 import teetime.framework.exceptionHandling.StageExceptionListener;
 
@@ -14,13 +13,6 @@ public abstract class RunnableStage implements Runnable {
 	protected final Logger logger;
 	private final StageExceptionListener listener;
 
-	public RunnableStage(final Stage stage) {
-		this.stage = stage;
-		this.logger = LoggerFactory.getLogger(stage.getClass());
-		this.listener = new DefaultListener();
-		listener.setHeadStage(this);
-	}
-
 	public RunnableStage(final Stage stage, final StageExceptionListener exceptionListener) {
 		this.stage = stage;
 		this.logger = LoggerFactory.getLogger(stage.getClass());
diff --git a/src/main/java/teetime/framework/exceptionHandling/StageExceptionListener.java b/src/main/java/teetime/framework/exceptionHandling/StageExceptionListener.java
index 5efc432f56767c70fe83ce5c2b7f538a7c884c7b..8283ebd2346e9bc85cb6dacb32092ddfa27ee09d 100644
--- a/src/main/java/teetime/framework/exceptionHandling/StageExceptionListener.java
+++ b/src/main/java/teetime/framework/exceptionHandling/StageExceptionListener.java
@@ -40,7 +40,7 @@ public abstract class StageExceptionListener {
 		this.runnable.abortExecution();
 	}
 
-	public final void setHeadStage(final RunnableStage headStage) {
-		this.runnable = headStage;
+	public final void setRunnableStage(final RunnableStage runnableStage) {
+		this.runnable = runnableStage;
 	}
 }