diff --git a/src/main/java/teetime/framework/AbstractCompositeStage.java b/src/main/java/teetime/framework/AbstractCompositeStage.java
index f02e0bc8dde9d2eb6fde1697801de23b88edc284..61df743f38c534896e005e900e7de76fb4aa0713 100644
--- a/src/main/java/teetime/framework/AbstractCompositeStage.java
+++ b/src/main/java/teetime/framework/AbstractCompositeStage.java
@@ -33,7 +33,7 @@ public abstract class AbstractCompositeStage {
 	private final ConfigurationContext context;
 
 	public AbstractCompositeStage() {
-		this.context = new ConfigurationContext();
+		this.context = new ConfigurationContext(this);
 	}
 
 	ConfigurationContext getContext() {
diff --git a/src/main/java/teetime/framework/ConfigurationContext.java b/src/main/java/teetime/framework/ConfigurationContext.java
index ff410c9d9162220e67277e676ff14580422b8f61..26c731426eece5ed203c8ed89267aa9bd8aa7249 100644
--- a/src/main/java/teetime/framework/ConfigurationContext.java
+++ b/src/main/java/teetime/framework/ConfigurationContext.java
@@ -32,14 +32,19 @@ import teetime.framework.pipe.InstantiationPipe;
  */
 final class ConfigurationContext {
 
-	public static final ConfigurationContext EMPTY_CONTEXT = new ConfigurationContext();
+	public static final ConfigurationContext EMPTY_CONTEXT = new ConfigurationContext(null);
 
 	private static final Logger LOGGER = LoggerFactory.getLogger(ConfigurationContext.class);
 
-	private ThreadService runtimeService = new ThreadService();
 	private final List<ConfigurationContext> childs = new ArrayList<ConfigurationContext>(); // parent-child-tree
+	private final AbstractCompositeStage compositeStage;
 
-	ConfigurationContext() {}
+	private ThreadService runtimeService;
+
+	ConfigurationContext(final AbstractCompositeStage compositeStage) {
+		this.compositeStage = compositeStage;
+		this.runtimeService = new ThreadService(compositeStage);
+	}
 
 	Map<Stage, String> getThreadableStages() {
 		return runtimeService.getThreadableStages();
diff --git a/src/main/java/teetime/framework/Execution.java b/src/main/java/teetime/framework/Execution.java
index 84396bd18ec1bcae7886a5e5b17acdad87aef6c0..f77dc3375e8a02354ca22bce1f1330bfa1c4d312 100644
--- a/src/main/java/teetime/framework/Execution.java
+++ b/src/main/java/teetime/framework/Execution.java
@@ -20,8 +20,6 @@ import java.util.Map;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import teetime.framework.exceptionHandling.IExceptionListenerFactory;
-import teetime.framework.exceptionHandling.TerminatingExceptionListenerFactory;
 import teetime.framework.signal.ValidatingSignal;
 import teetime.framework.validation.AnalysisNotValidException;
 
@@ -45,8 +43,6 @@ public final class Execution<T extends Configuration> {
 
 	private final T configuration;
 
-	private final IExceptionListenerFactory factory;
-
 	private final boolean executionInterrupted = false;
 
 	/**
@@ -59,30 +55,6 @@ public final class Execution<T extends Configuration> {
 		this(configuration, false);
 	}
 
-	/**
-	 * Creates a new {@link Execution} that uses the default listener.
-	 *
-	 * @param configuration
-	 *            to be used for the analysis
-	 * @param validationEnabled
-	 *            whether or not the validation should be executed
-	 */
-	public Execution(final T configuration, final boolean validationEnabled) {
-		this(configuration, validationEnabled, new TerminatingExceptionListenerFactory());
-	}
-
-	/**
-	 * Creates a new {@link Execution} that skips validating the port connections and uses a specific listener.
-	 *
-	 * @param configuration
-	 *            to be used for the analysis
-	 * @param factory
-	 *            specific listener for the exception handling
-	 */
-	public Execution(final T configuration, final IExceptionListenerFactory factory) {
-		this(configuration, false, factory);
-	}
-
 	/**
 	 * Creates a new {@link Execution} that uses a specific listener.
 	 *
@@ -93,9 +65,8 @@ public final class Execution<T extends Configuration> {
 	 * @param factory
 	 *            specific listener for the exception handling
 	 */
-	public Execution(final T configuration, final boolean validationEnabled, final IExceptionListenerFactory factory) {
+	public Execution(final T configuration, final boolean validationEnabled) {
 		this.configuration = configuration;
-		this.factory = factory;
 		if (configuration.isExecuted()) {
 			throw new IllegalStateException("Configuration was already executed");
 		}
@@ -185,13 +156,4 @@ public final class Execution<T extends Configuration> {
 		return this.configuration;
 	}
 
-	/**
-	 * @return
-	 * 		the given ExceptionListenerFactory instance
-	 *
-	 * @since 2.0
-	 */
-	public IExceptionListenerFactory getExceptionListenerFactory() {
-		return factory;
-	}
 }
diff --git a/src/main/java/teetime/framework/ThreadService.java b/src/main/java/teetime/framework/ThreadService.java
index aefe24a22e1bb68796859c907b5a30b8ac0dbe27..7f37828203a659408636d8fb9350bb3c81fdd53b 100644
--- a/src/main/java/teetime/framework/ThreadService.java
+++ b/src/main/java/teetime/framework/ThreadService.java
@@ -12,7 +12,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import teetime.framework.exceptionHandling.AbstractExceptionListener;
-import teetime.framework.exceptionHandling.TerminatingExceptionListenerFactory;
 import teetime.framework.signal.InitializingSignal;
 import teetime.util.ThreadThrowableContainer;
 import teetime.util.framework.concurrent.SignalingCounter;
@@ -36,6 +35,13 @@ class ThreadService extends AbstractService<ThreadService> {
 
 	private final SignalingCounter runnableCounter = new SignalingCounter();
 
+	private final AbstractCompositeStage compositeStage;
+
+	public ThreadService(final AbstractCompositeStage compositeStage) {
+		this.compositeStage = compositeStage;
+
+	}
+
 	SignalingCounter getRunnableCounter() {
 		return runnableCounter;
 	}
@@ -46,6 +52,7 @@ class ThreadService extends AbstractService<ThreadService> {
 
 	@Override
 	void initialize() {
+		Configuration config = (Configuration) compositeStage;
 		if (threadableStages.isEmpty()) {
 			throw new IllegalStateException("No stage was added using the addThreadableStage(..) method. Add at least one stage.");
 		}
@@ -56,7 +63,7 @@ class ThreadService extends AbstractService<ThreadService> {
 			final Set<Stage> intraStages = traverseIntraStages(stage);
 
 			// FIXME: receive factory from config!
-			final AbstractExceptionListener newListener = new TerminatingExceptionListenerFactory().createInstance();
+			final AbstractExceptionListener newListener = config.getFactory().createInstance();
 			initializeIntraStages(intraStages, thread, newListener);
 		}
 
diff --git a/src/test/java/teetime/framework/exceptionHandling/ExceptionHandlingTest.java b/src/test/java/teetime/framework/exceptionHandling/ExceptionHandlingTest.java
index 98a2a5f03c65c128fcc949feb1ec4fec1a715013..1388df7075ba18bc22e86ca640da196888ecd35c 100644
--- a/src/test/java/teetime/framework/exceptionHandling/ExceptionHandlingTest.java
+++ b/src/test/java/teetime/framework/exceptionHandling/ExceptionHandlingTest.java
@@ -30,7 +30,7 @@ public class ExceptionHandlingTest {
 
 	public ExceptionTestConfiguration newInstances() {
 		ExceptionTestConfiguration configuration = new ExceptionTestConfiguration();
-		execution = new Execution<ExceptionTestConfiguration>(configuration, new TestListenerFactory());
+		execution = new Execution<ExceptionTestConfiguration>(configuration);
 		return configuration;
 	}
 
diff --git a/src/test/java/teetime/framework/exceptionHandling/ExceptionTestConfiguration.java b/src/test/java/teetime/framework/exceptionHandling/ExceptionTestConfiguration.java
index ca231db95d28eb22dd3e9df80b62733efc65d2a8..9229eb758a8a5cb16a7ed0618e84e6e62ea10841 100644
--- a/src/test/java/teetime/framework/exceptionHandling/ExceptionTestConfiguration.java
+++ b/src/test/java/teetime/framework/exceptionHandling/ExceptionTestConfiguration.java
@@ -24,6 +24,8 @@ public class ExceptionTestConfiguration extends Configuration {
 	ExceptionTestProducerStage third;
 
 	public ExceptionTestConfiguration() {
+		super(new TestListenerFactory());
+
 		first = new ExceptionTestProducerStage();
 		second = new ExceptionTestConsumerStage();
 		third = new ExceptionTestProducerStage();
diff --git a/src/test/java/teetime/stage/basic/merger/dynamic/DynamicMergerTest.java b/src/test/java/teetime/stage/basic/merger/dynamic/DynamicMergerTest.java
index 356d27c289905e5930b5384f8ddae223e4365f4a..64b7d4f80fd101c942734144088fe22a1c1e560a 100644
--- a/src/test/java/teetime/stage/basic/merger/dynamic/DynamicMergerTest.java
+++ b/src/test/java/teetime/stage/basic/merger/dynamic/DynamicMergerTest.java
@@ -49,8 +49,7 @@ public class DynamicMergerTest {
 		}
 
 		DynamicMergerTestConfig<Integer> config = new DynamicMergerTestConfig<Integer>(inputNumbers, Arrays.asList(inputActions));
-		Execution<DynamicMergerTestConfig<Integer>> analysis = new Execution<DynamicMergerTestConfig<Integer>>(config,
-				new TerminatingExceptionListenerFactory());
+		Execution<DynamicMergerTestConfig<Integer>> analysis = new Execution<DynamicMergerTestConfig<Integer>>(config);
 
 		analysis.executeBlocking();
 
@@ -68,8 +67,7 @@ public class DynamicMergerTest {
 		}
 
 		DynamicMergerTestConfig<Integer> config = new DynamicMergerTestConfig<Integer>(inputNumbers, Arrays.asList(inputActions));
-		Execution<DynamicMergerTestConfig<Integer>> analysis = new Execution<DynamicMergerTestConfig<Integer>>(config,
-				new TerminatingExceptionListenerFactory());
+		Execution<DynamicMergerTestConfig<Integer>> analysis = new Execution<DynamicMergerTestConfig<Integer>>(config);
 
 		analysis.executeBlocking();
 
@@ -90,8 +88,7 @@ public class DynamicMergerTest {
 		inputActions[5] = new RemovePortAction<Integer>(null);
 
 		DynamicMergerTestConfig<Integer> config = new DynamicMergerTestConfig<Integer>(inputNumbers, Arrays.asList(inputActions));
-		Execution<DynamicMergerTestConfig<Integer>> analysis = new Execution<DynamicMergerTestConfig<Integer>>(config,
-				new TerminatingExceptionListenerFactory());
+		Execution<DynamicMergerTestConfig<Integer>> analysis = new Execution<DynamicMergerTestConfig<Integer>>(config);
 
 		analysis.executeBlocking();
 
@@ -119,6 +116,7 @@ public class DynamicMergerTest {
 		private final CollectorSink<T> collectorSink;
 
 		public DynamicMergerTestConfig(final List<T> elements, final List<PortAction<DynamicMerger<T>>> inputActions) {
+			super(new TerminatingExceptionListenerFactory());
 			InitialElementProducer<T> initialElementProducer = new InitialElementProducer<T>(elements);
 			DynamicMerger<T> merger = new DynamicMerger<T>(new BusyWaitingRoundRobinStrategy());
 			collectorSink = new CollectorSink<T>();