diff --git a/src/main/java/teetime/framework/AbstractRunnableStage.java b/src/main/java/teetime/framework/AbstractRunnableStage.java
index 8b20fa8c0c7f2490f674d8307ea4bbe5198f5780..35f41f13fb138957276ef11442afcc98ae0fff4b 100644
--- a/src/main/java/teetime/framework/AbstractRunnableStage.java
+++ b/src/main/java/teetime/framework/AbstractRunnableStage.java
@@ -4,13 +4,13 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import teetime.framework.exceptionHandling.StageException;
-import teetime.framework.exceptionHandling.AbstractStageExceptionHandler;
-import teetime.framework.exceptionHandling.AbstractStageExceptionHandler.FurtherExecution;
+import teetime.framework.exceptionHandling.AbstractExceptionListener;
+import teetime.framework.exceptionHandling.AbstractExceptionListener.FurtherExecution;
 import teetime.framework.signal.TerminatingSignal;
 
 abstract class AbstractRunnableStage implements Runnable {
 
-	private final AbstractStageExceptionHandler exceptionHandler;
+	private final AbstractExceptionListener exceptionHandler;
 
 	private static final String TERMINATING_THREAD_DUE_TO_THE_FOLLOWING_EXCEPTION = "Terminating thread due to the following exception: ";
 
@@ -18,7 +18,7 @@ abstract class AbstractRunnableStage implements Runnable {
 	@SuppressWarnings("PMD.LoggerIsNotStaticFinal")
 	protected final Logger logger;
 
-	public AbstractRunnableStage(final Stage stage, final AbstractStageExceptionHandler exceptionHandler) {
+	public AbstractRunnableStage(final Stage stage, final AbstractExceptionListener exceptionHandler) {
 		this.stage = stage;
 		this.logger = LoggerFactory.getLogger(stage.getClass());
 		this.exceptionHandler = exceptionHandler;
diff --git a/src/main/java/teetime/framework/Analysis.java b/src/main/java/teetime/framework/Analysis.java
index 9238dce94707318e07787c04ec8c59e0f812b0e2..01cefe37fa0b4915a95a6396f3a69da8cc747650 100644
--- a/src/main/java/teetime/framework/Analysis.java
+++ b/src/main/java/teetime/framework/Analysis.java
@@ -24,8 +24,9 @@ import java.util.concurrent.ConcurrentLinkedQueue;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import teetime.framework.exceptionHandling.IgnoringStageListener;
-import teetime.framework.exceptionHandling.AbstractStageExceptionHandler;
+import teetime.framework.exceptionHandling.AbstractExceptionListener;
+import teetime.framework.exceptionHandling.IExceptionListenerFactory;
+import teetime.framework.exceptionHandling.IgnoringExceptionListenerFactory;
 import teetime.framework.signal.ValidatingSignal;
 import teetime.framework.validation.AnalysisNotValidException;
 import teetime.util.Pair;
@@ -43,7 +44,7 @@ public final class Analysis implements UncaughtExceptionHandler {
 
 	private final AnalysisConfiguration configuration;
 
-	private final Class<? extends teetime.framework.exceptionHandling.AbstractStageExceptionHandler> listener;
+	private final IExceptionListenerFactory factory;
 
 	private boolean executionInterrupted = false;
 
@@ -62,13 +63,13 @@ public final class Analysis implements UncaughtExceptionHandler {
 	 *            to be used for the analysis
 	 */
 	public Analysis(final AnalysisConfiguration configuration) {
-		this(configuration, false, IgnoringStageListener.class);
+		this(configuration, false, new IgnoringExceptionListenerFactory());
 	}
 
 	@SuppressWarnings("PMD.ConstructorCallsOverridableMethod")
 	// TODO remove @SuppressWarnings if init is no longer deprecated
 	public Analysis(final AnalysisConfiguration configuration, final boolean validationEnabled) {
-		this(configuration, validationEnabled, IgnoringStageListener.class);
+		this(configuration, validationEnabled, new IgnoringExceptionListenerFactory());
 	}
 
 	/**
@@ -76,16 +77,16 @@ public final class Analysis implements UncaughtExceptionHandler {
 	 *
 	 * @param configuration
 	 *            to be used for the analysis
-	 * @param listener
+	 * @param factory
 	 *            specific listener for the exception handling
 	 */
-	public Analysis(final AnalysisConfiguration configuration, final Class<? extends AbstractStageExceptionHandler> listener) {
-		this(configuration, false, listener);
+	public Analysis(final AnalysisConfiguration configuration, final IExceptionListenerFactory factory) {
+		this(configuration, false, factory);
 	}
 
-	public Analysis(final AnalysisConfiguration configuration, final boolean validationEnabled, final Class<? extends AbstractStageExceptionHandler> listener) {
+	public Analysis(final AnalysisConfiguration configuration, final boolean validationEnabled, final IExceptionListenerFactory factory) {
 		this.configuration = configuration;
-		this.listener = listener;
+		this.factory = factory;
 		if (validationEnabled) {
 			validateStages();
 		}
@@ -124,14 +125,8 @@ public final class Analysis implements UncaughtExceptionHandler {
 			throw new IllegalStateException("No stage was added using the addThreadableStage(..) method. Add at least one stage.");
 		}
 		for (Stage stage : threadableStageJobs) {
-			AbstractStageExceptionHandler newListener;
-			try {
-				newListener = listener.newInstance();
-			} catch (InstantiationException e) {
-				throw new IllegalStateException(e);
-			} catch (IllegalAccessException e) {
-				throw new IllegalStateException(e);
-			}
+			AbstractExceptionListener newListener;
+			newListener = factory.newHandlerInstance();
 			switch (stage.getTerminationStrategy()) {
 			case BY_SIGNAL: {
 				final Thread thread = new Thread(new RunnableConsumerStage(stage, newListener));
diff --git a/src/main/java/teetime/framework/RunnableConsumerStage.java b/src/main/java/teetime/framework/RunnableConsumerStage.java
index 9c37dde762205d47ddc91c151924c23181d99d42..92ed61e4853fefdba6c7a25900bd21a383ee7a9c 100644
--- a/src/main/java/teetime/framework/RunnableConsumerStage.java
+++ b/src/main/java/teetime/framework/RunnableConsumerStage.java
@@ -15,7 +15,7 @@
  */
 package teetime.framework;
 
-import teetime.framework.exceptionHandling.AbstractStageExceptionHandler;
+import teetime.framework.exceptionHandling.AbstractExceptionListener;
 import teetime.framework.idle.IdleStrategy;
 import teetime.framework.idle.YieldStrategy;
 import teetime.framework.signal.ISignal;
@@ -32,11 +32,11 @@ final class RunnableConsumerStage extends AbstractRunnableStage {
 	 * @param stage
 	 *            to execute within an own thread
 	 */
-	public RunnableConsumerStage(final Stage stage, final AbstractStageExceptionHandler exceptionListener) {
+	public RunnableConsumerStage(final Stage stage, final AbstractExceptionListener exceptionListener) {
 		this(stage, new YieldStrategy(), exceptionListener);
 	}
 
-	public RunnableConsumerStage(final Stage stage, final IdleStrategy idleStrategy, final AbstractStageExceptionHandler exceptionListener) {
+	public RunnableConsumerStage(final Stage stage, final IdleStrategy idleStrategy, final AbstractExceptionListener exceptionListener) {
 		super(stage, exceptionListener);
 		this.inputPorts = stage.getInputPorts(); // FIXME should getInputPorts() really be defined in Stage?
 	}
diff --git a/src/main/java/teetime/framework/RunnableProducerStage.java b/src/main/java/teetime/framework/RunnableProducerStage.java
index fc4c8a546bd17a7f08678da4001697dfe741661d..adda02b6221afe85751f114dbaa39433714a53e8 100644
--- a/src/main/java/teetime/framework/RunnableProducerStage.java
+++ b/src/main/java/teetime/framework/RunnableProducerStage.java
@@ -15,13 +15,13 @@
  */
 package teetime.framework;
 
-import teetime.framework.exceptionHandling.AbstractStageExceptionHandler;
+import teetime.framework.exceptionHandling.AbstractExceptionListener;
 import teetime.framework.signal.StartingSignal;
 import teetime.framework.signal.TerminatingSignal;
 
 public final class RunnableProducerStage extends AbstractRunnableStage {
 
-	public RunnableProducerStage(final Stage stage, final AbstractStageExceptionHandler listener) {
+	public RunnableProducerStage(final Stage stage, final AbstractExceptionListener listener) {
 		super(stage, listener);
 	}
 
diff --git a/src/main/java/teetime/framework/exceptionHandling/AbstractStageExceptionHandler.java b/src/main/java/teetime/framework/exceptionHandling/AbstractExceptionListener.java
similarity index 91%
rename from src/main/java/teetime/framework/exceptionHandling/AbstractStageExceptionHandler.java
rename to src/main/java/teetime/framework/exceptionHandling/AbstractExceptionListener.java
index eac052e88179d138f05c61cfc3b3008f2a84b676..990c58e9c7ff3ade3409103a0fdc437862e5c23d 100644
--- a/src/main/java/teetime/framework/exceptionHandling/AbstractStageExceptionHandler.java
+++ b/src/main/java/teetime/framework/exceptionHandling/AbstractExceptionListener.java
@@ -9,7 +9,7 @@ import teetime.framework.Stage;
  * Represent a minimalistic StageExceptionListener. Listener which extend from this one, must a least implement this functionality.
  * This abstract class provides a Logger {@link #logger} and a method to terminate the threads execution {@link #terminateExecution()}.
  */
-public abstract class AbstractStageExceptionHandler {
+public abstract class AbstractExceptionListener {
 
 	public enum FurtherExecution {
 		CONTINUE, TERMINATE
@@ -20,7 +20,7 @@ public abstract class AbstractStageExceptionHandler {
 	 */
 	protected final Logger logger;
 
-	public AbstractStageExceptionHandler() {
+	public AbstractExceptionListener() {
 		this.logger = LoggerFactory.getLogger(this.getClass().getCanonicalName());
 	}
 
diff --git a/src/main/java/teetime/framework/exceptionHandling/IExceptionListenerFactory.java b/src/main/java/teetime/framework/exceptionHandling/IExceptionListenerFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..56e93d4fcfb3ddb9291d0cf65e04a36227132713
--- /dev/null
+++ b/src/main/java/teetime/framework/exceptionHandling/IExceptionListenerFactory.java
@@ -0,0 +1,7 @@
+package teetime.framework.exceptionHandling;
+
+public interface IExceptionListenerFactory {
+
+	public AbstractExceptionListener newHandlerInstance();
+
+}
diff --git a/src/main/java/teetime/framework/exceptionHandling/IgnoringStageListener.java b/src/main/java/teetime/framework/exceptionHandling/IgnoringExceptionListener.java
similarity index 67%
rename from src/main/java/teetime/framework/exceptionHandling/IgnoringStageListener.java
rename to src/main/java/teetime/framework/exceptionHandling/IgnoringExceptionListener.java
index a815fa2a27b29db549c7af746eb7ada2814cbc6d..f64d828ae15eeb143a85132eece8f3d5d471b97a 100644
--- a/src/main/java/teetime/framework/exceptionHandling/IgnoringStageListener.java
+++ b/src/main/java/teetime/framework/exceptionHandling/IgnoringExceptionListener.java
@@ -2,9 +2,9 @@ package teetime.framework.exceptionHandling;
 
 import teetime.framework.Stage;
 
-public class IgnoringStageListener extends AbstractStageExceptionHandler {
+public class IgnoringExceptionListener extends AbstractExceptionListener {
 
-	public IgnoringStageListener() {
+	public IgnoringExceptionListener() {
 		super();
 	}
 
diff --git a/src/main/java/teetime/framework/exceptionHandling/IgnoringExceptionListenerFactory.java b/src/main/java/teetime/framework/exceptionHandling/IgnoringExceptionListenerFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..9d3423b2daaeb6428c44f9ff5a7b1a73a2a793f7
--- /dev/null
+++ b/src/main/java/teetime/framework/exceptionHandling/IgnoringExceptionListenerFactory.java
@@ -0,0 +1,10 @@
+package teetime.framework.exceptionHandling;
+
+public class IgnoringExceptionListenerFactory implements IExceptionListenerFactory {
+
+	@Override
+	public AbstractExceptionListener newHandlerInstance() {
+		return new IgnoringExceptionListener();
+	}
+
+}
diff --git a/src/main/java/teetime/framework/exceptionHandling/LoggingExceptionListenerFactory.java b/src/main/java/teetime/framework/exceptionHandling/LoggingExceptionListenerFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..5bac663e1a36d04ec04b858664811274d8488972
--- /dev/null
+++ b/src/main/java/teetime/framework/exceptionHandling/LoggingExceptionListenerFactory.java
@@ -0,0 +1,10 @@
+package teetime.framework.exceptionHandling;
+
+public class LoggingExceptionListenerFactory implements IExceptionListenerFactory {
+
+	@Override
+	public AbstractExceptionListener newHandlerInstance() {
+		return new LoggingExceptionListenerListener();
+	}
+
+}
diff --git a/src/main/java/teetime/framework/exceptionHandling/LoggingStageListener.java b/src/main/java/teetime/framework/exceptionHandling/LoggingExceptionListenerListener.java
similarity index 77%
rename from src/main/java/teetime/framework/exceptionHandling/LoggingStageListener.java
rename to src/main/java/teetime/framework/exceptionHandling/LoggingExceptionListenerListener.java
index 8df9fc4517d9b3634f61e48622052ecb7320cbd5..2cdd03d5e79d13e3a0b7551df6abffd30f5f947e 100644
--- a/src/main/java/teetime/framework/exceptionHandling/LoggingStageListener.java
+++ b/src/main/java/teetime/framework/exceptionHandling/LoggingExceptionListenerListener.java
@@ -2,7 +2,7 @@ package teetime.framework.exceptionHandling;
 
 import teetime.framework.Stage;
 
-public class LoggingStageListener extends AbstractStageExceptionHandler {
+public class LoggingExceptionListenerListener extends AbstractExceptionListener {
 
 	@Override
 	public FurtherExecution onStageException(final Exception e, final Stage throwingStage) {
diff --git a/src/main/java/teetime/framework/exceptionHandling/TerminatingStageListener.java b/src/main/java/teetime/framework/exceptionHandling/TerminatingExceptionListener.java
similarity index 78%
rename from src/main/java/teetime/framework/exceptionHandling/TerminatingStageListener.java
rename to src/main/java/teetime/framework/exceptionHandling/TerminatingExceptionListener.java
index 020e7fbe733b9b0b392f6ce0150bb82d40b10450..14a3f9d7d3dfd54d889b7cbf5d788e637c0f90d6 100644
--- a/src/main/java/teetime/framework/exceptionHandling/TerminatingStageListener.java
+++ b/src/main/java/teetime/framework/exceptionHandling/TerminatingExceptionListener.java
@@ -2,7 +2,7 @@ package teetime.framework.exceptionHandling;
 
 import teetime.framework.Stage;
 
-public class TerminatingStageListener extends AbstractStageExceptionHandler {
+public class TerminatingExceptionListener extends AbstractExceptionListener {
 
 	@Override
 	public FurtherExecution onStageException(final Exception e, final Stage throwingStage) {
diff --git a/src/main/java/teetime/framework/exceptionHandling/TerminatingExceptionListenerFactory.java b/src/main/java/teetime/framework/exceptionHandling/TerminatingExceptionListenerFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..49822c174c99cf51489f1b7d60009cd366299c1c
--- /dev/null
+++ b/src/main/java/teetime/framework/exceptionHandling/TerminatingExceptionListenerFactory.java
@@ -0,0 +1,10 @@
+package teetime.framework.exceptionHandling;
+
+public class TerminatingExceptionListenerFactory implements IExceptionListenerFactory {
+
+	@Override
+	public AbstractExceptionListener newHandlerInstance() {
+		return new TerminatingExceptionListener();
+	}
+
+}
diff --git a/src/performancetest/java/teetime/examples/experiment09pipeimpls/MethodCallThroughputAnalysis9.java b/src/performancetest/java/teetime/examples/experiment09pipeimpls/MethodCallThroughputAnalysis9.java
index 6bfaad61fd3e42735944034148b812d201a4bb52..43260a7b626a0cd66f0613f7380bb88f1bebdd7a 100644
--- a/src/performancetest/java/teetime/examples/experiment09pipeimpls/MethodCallThroughputAnalysis9.java
+++ b/src/performancetest/java/teetime/examples/experiment09pipeimpls/MethodCallThroughputAnalysis9.java
@@ -20,7 +20,7 @@ import java.util.List;
 import teetime.framework.OldHeadPipeline;
 import teetime.framework.RunnableProducerStage;
 import teetime.framework.Stage;
-import teetime.framework.exceptionHandling.IgnoringStageListener;
+import teetime.framework.exceptionHandling.IgnoringExceptionListener;
 import teetime.framework.pipe.IPipeFactory;
 import teetime.stage.CollectorSink;
 import teetime.stage.NoopFilter;
@@ -45,7 +45,7 @@ public class MethodCallThroughputAnalysis9 {
 
 	public void init(final IPipeFactory pipeFactory) {
 		Stage pipeline = this.buildPipeline(pipeFactory);
-		this.runnable = new RunnableProducerStage(pipeline, new IgnoringStageListener());
+		this.runnable = new RunnableProducerStage(pipeline, new IgnoringExceptionListener());
 	}
 
 	/**
diff --git a/src/performancetest/java/teetime/examples/experiment11/MethodCallThroughputAnalysis11.java b/src/performancetest/java/teetime/examples/experiment11/MethodCallThroughputAnalysis11.java
index 1c14ea89a79b581d8dcceb8ae78780f42ab6ee2d..60926b61e0373e81e73a94ec6a58627959b30099 100644
--- a/src/performancetest/java/teetime/examples/experiment11/MethodCallThroughputAnalysis11.java
+++ b/src/performancetest/java/teetime/examples/experiment11/MethodCallThroughputAnalysis11.java
@@ -20,7 +20,7 @@ import java.util.List;
 import teetime.framework.OldHeadPipeline;
 import teetime.framework.RunnableProducerStage;
 import teetime.framework.Stage;
-import teetime.framework.exceptionHandling.IgnoringStageListener;
+import teetime.framework.exceptionHandling.IgnoringExceptionListener;
 import teetime.framework.pipe.UnorderedGrowablePipe;
 import teetime.stage.CollectorSink;
 import teetime.stage.NoopFilter;
@@ -45,7 +45,7 @@ public class MethodCallThroughputAnalysis11 {
 
 	public void init() {
 		Stage pipeline = this.buildPipeline(this.numInputObjects, this.inputObjectCreator);
-		this.runnable = new RunnableProducerStage(pipeline, new IgnoringStageListener());
+		this.runnable = new RunnableProducerStage(pipeline, new IgnoringExceptionListener());
 	}
 
 	private OldHeadPipeline<ObjectProducer<TimestampObject>, CollectorSink<TimestampObject>> buildPipeline(final long numInputObjects,
diff --git a/src/performancetest/java/teetime/examples/experiment15/MethodCallThroughputAnalysis15.java b/src/performancetest/java/teetime/examples/experiment15/MethodCallThroughputAnalysis15.java
index e276da60d99e09e7cf2cb92b0cf9382f1afb0e94..2182aa24d83375dcdcc296d601b94d9398da060c 100644
--- a/src/performancetest/java/teetime/examples/experiment15/MethodCallThroughputAnalysis15.java
+++ b/src/performancetest/java/teetime/examples/experiment15/MethodCallThroughputAnalysis15.java
@@ -21,7 +21,7 @@ import teetime.framework.AnalysisConfiguration;
 import teetime.framework.OldHeadPipeline;
 import teetime.framework.RunnableProducerStage;
 import teetime.framework.Stage;
-import teetime.framework.exceptionHandling.IgnoringStageListener;
+import teetime.framework.exceptionHandling.IgnoringExceptionListener;
 import teetime.framework.pipe.IPipeFactory;
 import teetime.framework.pipe.OrderedGrowableArrayPipe;
 import teetime.framework.pipe.PipeFactoryRegistry.PipeOrdering;
@@ -65,10 +65,10 @@ public class MethodCallThroughputAnalysis15 extends AnalysisConfiguration {
 
 	public void init() {
 		OldHeadPipeline<Clock, Sink<Long>> clockPipeline = this.buildClockPipeline();
-		this.clockRunnable = new RunnableProducerStage(clockPipeline, new IgnoringStageListener());
+		this.clockRunnable = new RunnableProducerStage(clockPipeline, new IgnoringExceptionListener());
 
 		Stage pipeline = this.buildPipeline(this.clock);
-		this.runnable = new RunnableProducerStage(pipeline, new IgnoringStageListener());
+		this.runnable = new RunnableProducerStage(pipeline, new IgnoringExceptionListener());
 	}
 
 	private OldHeadPipeline<Clock, Sink<Long>> buildClockPipeline() {
diff --git a/src/test/java/teetime/framework/ExceptionHandling.java b/src/test/java/teetime/framework/exceptionHandling/ExceptionHandling.java
similarity index 73%
rename from src/test/java/teetime/framework/ExceptionHandling.java
rename to src/test/java/teetime/framework/exceptionHandling/ExceptionHandling.java
index 8e4681cb92fbae0de11fa139a9f765fb9413ec87..a13865c804155cf9e5631e66ce7a912a0a4b9af8 100644
--- a/src/test/java/teetime/framework/ExceptionHandling.java
+++ b/src/test/java/teetime/framework/exceptionHandling/ExceptionHandling.java
@@ -1,4 +1,4 @@
-package teetime.framework;
+package teetime.framework.exceptionHandling;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
@@ -6,17 +6,15 @@ import static org.junit.Assert.assertTrue;
 import org.junit.Before;
 import org.junit.Test;
 
-import teetime.framework.exceptionHandling.TestListener;
+import teetime.framework.Analysis;
 
 public class ExceptionHandling {
 
-	private Class<TestListener> listener;
 	private Analysis analysis;
 
 	@Before
 	public void newInstances() {
-		listener = TestListener.class;
-		analysis = new Analysis(new ExceptionTestConfiguration(), listener);
+		analysis = new Analysis(new ExceptionTestConfiguration(), new TestListenerFactory());
 	}
 
 	@Test(timeout = 5000, expected = RuntimeException.class)
diff --git a/src/test/java/teetime/framework/ExceptionTestConfiguration.java b/src/test/java/teetime/framework/exceptionHandling/ExceptionTestConfiguration.java
similarity index 89%
rename from src/test/java/teetime/framework/ExceptionTestConfiguration.java
rename to src/test/java/teetime/framework/exceptionHandling/ExceptionTestConfiguration.java
index f7f2a76cafcba26e6c2432239ff619489a4225ea..64a742a2eb647f66b148840a59e78c6b58163dce 100644
--- a/src/test/java/teetime/framework/ExceptionTestConfiguration.java
+++ b/src/test/java/teetime/framework/exceptionHandling/ExceptionTestConfiguration.java
@@ -1,5 +1,6 @@
-package teetime.framework;
+package teetime.framework.exceptionHandling;
 
+import teetime.framework.AnalysisConfiguration;
 import teetime.framework.pipe.PipeFactoryRegistry.PipeOrdering;
 import teetime.framework.pipe.PipeFactoryRegistry.ThreadCommunication;
 
diff --git a/src/test/java/teetime/framework/ExceptionTestConsumerStage.java b/src/test/java/teetime/framework/exceptionHandling/ExceptionTestConsumerStage.java
similarity index 76%
rename from src/test/java/teetime/framework/ExceptionTestConsumerStage.java
rename to src/test/java/teetime/framework/exceptionHandling/ExceptionTestConsumerStage.java
index 034055fd542931281bee1e4edeff571cb385b487..05f84fde0ce726b746f552bccbc3d6250bf04af5 100644
--- a/src/test/java/teetime/framework/ExceptionTestConsumerStage.java
+++ b/src/test/java/teetime/framework/exceptionHandling/ExceptionTestConsumerStage.java
@@ -1,4 +1,6 @@
-package teetime.framework;
+package teetime.framework.exceptionHandling;
+
+import teetime.framework.AbstractConsumerStage;
 
 public class ExceptionTestConsumerStage extends AbstractConsumerStage<Object> {
 
diff --git a/src/test/java/teetime/framework/ExceptionTestProducerStage.java b/src/test/java/teetime/framework/exceptionHandling/ExceptionTestProducerStage.java
similarity index 82%
rename from src/test/java/teetime/framework/ExceptionTestProducerStage.java
rename to src/test/java/teetime/framework/exceptionHandling/ExceptionTestProducerStage.java
index 02c0a086cce5b085e7459efe1157b1df859d5aa8..637143ed57e3762f258524d922b15f896ac5b823 100644
--- a/src/test/java/teetime/framework/ExceptionTestProducerStage.java
+++ b/src/test/java/teetime/framework/exceptionHandling/ExceptionTestProducerStage.java
@@ -1,4 +1,8 @@
-package teetime.framework;
+package teetime.framework.exceptionHandling;
+
+import teetime.framework.AbstractProducerStage;
+import teetime.framework.InputPort;
+import teetime.framework.TerminationStrategy;
 
 public class ExceptionTestProducerStage extends AbstractProducerStage<Object> {
 
diff --git a/src/test/java/teetime/framework/exceptionHandling/TestListener.java b/src/test/java/teetime/framework/exceptionHandling/TestListener.java
index 809fbd5f727048a9da3583c9bc4830a26c8b2b79..9638e84d8d914488ef82a9dde95ffd51a4d96f72 100644
--- a/src/test/java/teetime/framework/exceptionHandling/TestListener.java
+++ b/src/test/java/teetime/framework/exceptionHandling/TestListener.java
@@ -2,7 +2,7 @@ package teetime.framework.exceptionHandling;
 
 import teetime.framework.Stage;
 
-public class TestListener extends AbstractStageExceptionHandler {
+public class TestListener extends AbstractExceptionListener {
 
 	public static int exceptionInvoked = 0;
 
diff --git a/src/test/java/teetime/framework/exceptionHandling/TestListenerFactory.java b/src/test/java/teetime/framework/exceptionHandling/TestListenerFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..ae3785d92642edc04e3b792873f498f5960a5502
--- /dev/null
+++ b/src/test/java/teetime/framework/exceptionHandling/TestListenerFactory.java
@@ -0,0 +1,10 @@
+package teetime.framework.exceptionHandling;
+
+public class TestListenerFactory implements IExceptionListenerFactory {
+
+	@Override
+	public AbstractExceptionListener newHandlerInstance() {
+		return new TestListener();
+	}
+
+}