diff --git a/src/main/java/teetime/framework/Stage.java b/src/main/java/teetime/framework/Stage.java
index 4cc0cf7673b735c4641265ac624e68d0204a1970..a768ac37def7977b929a1ecf31cb6d2371f71830 100644
--- a/src/main/java/teetime/framework/Stage.java
+++ b/src/main/java/teetime/framework/Stage.java
@@ -119,7 +119,7 @@ public abstract class Stage {
 		} catch (TerminateException e) {
 			throw e;
 		} catch (Exception e) {
-			final FurtherExecution furtherExecution = this.exceptionListener.onStageException(e, this);
+			final FurtherExecution furtherExecution = this.exceptionListener.reportException(e, this);
 			if (furtherExecution == FurtherExecution.TERMINATE) {
 				throw TerminateException.INSTANCE;
 			}
diff --git a/src/main/java/teetime/framework/exceptionHandling/AbstractExceptionListener.java b/src/main/java/teetime/framework/exceptionHandling/AbstractExceptionListener.java
index 3cc9dcae8d3218c23cc5194e0ebae60f4b2055ff..81cc2f0297258ddb89dadd5c094f9b28bc41ba71 100644
--- a/src/main/java/teetime/framework/exceptionHandling/AbstractExceptionListener.java
+++ b/src/main/java/teetime/framework/exceptionHandling/AbstractExceptionListener.java
@@ -31,6 +31,7 @@ import teetime.framework.Stage;
 public abstract class AbstractExceptionListener {
 
 	private final List<Exception> exceptionsList = new ArrayList<Exception>();
+	private final boolean logExceptions;
 
 	public enum FurtherExecution {
 		CONTINUE, TERMINATE
@@ -41,8 +42,9 @@ public abstract class AbstractExceptionListener {
 	 */
 	protected final Logger logger;
 
-	public AbstractExceptionListener() {
+	protected AbstractExceptionListener(final boolean shouldLogExceptions) {
 		this.logger = LoggerFactory.getLogger(this.getClass().getCanonicalName());
+		this.logExceptions = shouldLogExceptions;
 	}
 
 	/**
@@ -61,4 +63,11 @@ public abstract class AbstractExceptionListener {
 		return exceptionsList;
 	}
 
+	public FurtherExecution reportException(final Exception e, final Stage stage) {
+		if (logExceptions) {
+			exceptionsList.add(e);
+		}
+		return onStageException(e, stage);
+	}
+
 }
diff --git a/src/main/java/teetime/framework/exceptionHandling/IgnoringExceptionListener.java b/src/main/java/teetime/framework/exceptionHandling/IgnoringExceptionListener.java
index c46c70a2a585341536612753eaae83cfa3bec38d..3eb5445131482966918d4137e0faee2dc31ec070 100644
--- a/src/main/java/teetime/framework/exceptionHandling/IgnoringExceptionListener.java
+++ b/src/main/java/teetime/framework/exceptionHandling/IgnoringExceptionListener.java
@@ -19,6 +19,10 @@ import teetime.framework.Stage;
 
 class IgnoringExceptionListener extends AbstractExceptionListener {
 
+	IgnoringExceptionListener() {
+		super(false);
+	}
+
 	@Override
 	public FurtherExecution onStageException(final Exception e, final Stage throwingStage) {
 		return FurtherExecution.CONTINUE;
diff --git a/src/main/java/teetime/framework/exceptionHandling/LoggingExceptionListener.java b/src/main/java/teetime/framework/exceptionHandling/LoggingExceptionListener.java
index ab7f91768616042130b8430835f6498f5b9a0ef1..8fee623cb29f4068f6d98cedcf68e1dab33cb1ba 100644
--- a/src/main/java/teetime/framework/exceptionHandling/LoggingExceptionListener.java
+++ b/src/main/java/teetime/framework/exceptionHandling/LoggingExceptionListener.java
@@ -19,6 +19,10 @@ import teetime.framework.Stage;
 
 class LoggingExceptionListener extends AbstractExceptionListener {
 
+	LoggingExceptionListener() {
+		super(true);
+	}
+
 	@Override
 	public FurtherExecution onStageException(final Exception e, final Stage throwingStage) {
 		logger.warn("Exception occurred in " + throwingStage.getId(), e);
diff --git a/src/main/java/teetime/framework/exceptionHandling/TerminatingExceptionListener.java b/src/main/java/teetime/framework/exceptionHandling/TerminatingExceptionListener.java
index b8bcf36df06c6f44d91270df3fa428c0d66e9f69..2490c0e43ad4a15b4ffd47baf86521a642cd1c07 100644
--- a/src/main/java/teetime/framework/exceptionHandling/TerminatingExceptionListener.java
+++ b/src/main/java/teetime/framework/exceptionHandling/TerminatingExceptionListener.java
@@ -25,7 +25,7 @@ class TerminatingExceptionListener extends AbstractExceptionListener {
 	private final List<Exception> exceptions = new ArrayList<Exception>();
 
 	TerminatingExceptionListener() {
-		// should only be instantiated by its factory
+		super(true);
 	}
 
 	@Override
diff --git a/src/test/java/teetime/framework/exceptionHandling/TestListener.java b/src/test/java/teetime/framework/exceptionHandling/TestListener.java
index 7a8826a9fff58f8d7a84225fa485e3c1e1420e1e..06b32bcd2c3971fe9838776229c0b651ba68fc7e 100644
--- a/src/test/java/teetime/framework/exceptionHandling/TestListener.java
+++ b/src/test/java/teetime/framework/exceptionHandling/TestListener.java
@@ -19,6 +19,10 @@ import teetime.framework.Stage;
 
 public class TestListener extends AbstractExceptionListener {
 
+	protected TestListener() {
+		super(false);
+	}
+
 	private int numExceptionsInvoked;
 
 	@Override