diff --git a/src/main/java/teetime/framework/ConfigurationContext.java b/src/main/java/teetime/framework/ConfigurationContext.java
index 9e0f7e1a705afd56c0aa1bbef5efabd152049631..41fe620bb45dad13e1345cdf33554236fe3ee525 100644
--- a/src/main/java/teetime/framework/ConfigurationContext.java
+++ b/src/main/java/teetime/framework/ConfigurationContext.java
@@ -85,7 +85,6 @@ final class ConfigurationContext {
 		} else {
 			stage.owningContext = this;
 		}
-
 	}
 
 	final void initializeContext() {
diff --git a/src/main/java/teetime/framework/Stage.java b/src/main/java/teetime/framework/Stage.java
index 986593eacf3e9d1c2dd03e9b31ae74ed723fa31d..8b51301e873578cbbcc098d42278965445da8a6b 100644
--- a/src/main/java/teetime/framework/Stage.java
+++ b/src/main/java/teetime/framework/Stage.java
@@ -134,7 +134,6 @@ public abstract class Stage {
 		return owningThread;
 	}
 
-	@SuppressWarnings("PMD.DefaultPackage")
 	void setOwningThread(final Thread owningThread) {
 		this.owningThread = owningThread;
 	}
diff --git a/src/main/java/teetime/framework/ThreadService.java b/src/main/java/teetime/framework/ThreadService.java
index aca4c7b340ec5a46df61bad43243a9dce5cdd1b6..161e94cf968c2b3ceca777cdeb880cc4f593273d 100644
--- a/src/main/java/teetime/framework/ThreadService.java
+++ b/src/main/java/teetime/framework/ThreadService.java
@@ -1,19 +1,17 @@
 package teetime.framework;
 
-import java.util.Collection;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.concurrent.ConcurrentLinkedQueue;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import teetime.framework.exceptionHandling.AbstractExceptionListener;
 import teetime.framework.exceptionHandling.IExceptionListenerFactory;
-import teetime.util.ThreadThrowableContainer;
 import teetime.util.framework.concurrent.SignalingCounter;
 
 /**
@@ -39,21 +37,15 @@ class ThreadService extends AbstractService<ThreadService> {
 
 	public ThreadService(final AbstractCompositeStage compositeStage) {
 		this.compositeStage = compositeStage;
-
 	}
 
-	private final Collection<ThreadThrowableContainer> exceptions = new ConcurrentLinkedQueue<ThreadThrowableContainer>();
-
 	private final List<RunnableProducerStage> producerRunnables = new LinkedList<RunnableProducerStage>();
 
 	@Override
 	void onInitialize() {
-		IExceptionListenerFactory factory;
-		try {
-			factory = ((Configuration) compositeStage).getFactory();
-		} catch (ClassCastException e) {
-			throw new IllegalStateException("Something went wrong");
-		}
+		// is invoked only by a Configuration
+		IExceptionListenerFactory factory = ((Configuration) compositeStage).getFactory();
+
 		if (threadableStages.isEmpty()) {
 			throw new IllegalStateException("No stage was added using the addThreadableStage(..) method. Add at least one stage.");
 		}
@@ -121,9 +113,23 @@ class ThreadService extends AbstractService<ThreadService> {
 			thread.interrupt();
 		}
 
-		// if (!exceptions.isEmpty()) {
-		// throw new ExecutionException(exceptions);
-		// }
+		List<Exception> exceptions = collectExceptions();
+		if (!exceptions.isEmpty()) {
+			// throw new ExecutionException(exceptions);
+		}
+	}
+
+	// TODO impl throw exception
+	private List<Exception> collectExceptions() {
+		// Collection<ThreadThrowableContainer> exceptions = new ConcurrentLinkedQueue<ThreadThrowableContainer>();
+		List<Exception> exceptions = new ArrayList<Exception>();
+
+		for (Stage stage : threadableStages.keySet()) {
+			// List<Exception> stageExceptions = stage.exceptionListener.getExceptions();
+			// exceptions.addAll(stageExceptions);
+		}
+
+		return exceptions;
 	}
 
 	private void initializeIntraStages(final Set<Stage> intraStages, final Thread thread, final AbstractExceptionListener newListener) {
diff --git a/src/main/java/teetime/framework/exceptionHandling/TerminatingExceptionListener.java b/src/main/java/teetime/framework/exceptionHandling/TerminatingExceptionListener.java
index fef3dff68ef330e1830c6e9e33d61d7b6cfe2730..d0c7dec4ff085fc059458f9ac8572381e831e069 100644
--- a/src/main/java/teetime/framework/exceptionHandling/TerminatingExceptionListener.java
+++ b/src/main/java/teetime/framework/exceptionHandling/TerminatingExceptionListener.java
@@ -15,14 +15,26 @@
  */
 package teetime.framework.exceptionHandling;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import teetime.framework.Stage;
 
 class TerminatingExceptionListener extends AbstractExceptionListener {
 
+	private final List<Exception> exceptions = new ArrayList<Exception>();
+
 	@Override
 	public FurtherExecution onStageException(final Exception e, final Stage throwingStage) {
-		logger.warn("Exception occurred in " + throwingStage.getId(), e);
+		if (logger.isWarnEnabled()) {
+			logger.warn("Exception occurred in " + throwingStage.getId(), e);
+		}
+		exceptions.add(e);
 		return FurtherExecution.TERMINATE;
 	}
 
+	public List<Exception> getExceptions() {
+		return exceptions;
+	}
+
 }
diff --git a/src/main/java/teetime/framework/signal/StartingSignal.java b/src/main/java/teetime/framework/signal/StartingSignal.java
index 375952f009c1506bd02b42c4a69d3094519f6af7..5b547dd5e6fb6253af064271b5578fd72598adf3 100644
--- a/src/main/java/teetime/framework/signal/StartingSignal.java
+++ b/src/main/java/teetime/framework/signal/StartingSignal.java
@@ -27,7 +27,7 @@ public final class StartingSignal extends AbstractSignal {
 	public void trigger(final Stage stage) {
 		try {
 			stage.onStarting();
-		} catch (Exception e) { // NOCS (Stages can throw any arbitrary Exception)
+		} catch (final Exception e) { // NOCS NOPMD (Stages can throw any arbitrary Exception)
 			this.catchedExceptions.add(e);
 			LOGGER.error("Exception while sending the start signal", e);
 		}
diff --git a/src/main/java/teetime/framework/signal/TerminatingSignal.java b/src/main/java/teetime/framework/signal/TerminatingSignal.java
index 5823902b87110544e213e0302c23e967e00ec9f4..32ec5bf20e9d38a56c0f949d32954cae4490be52 100644
--- a/src/main/java/teetime/framework/signal/TerminatingSignal.java
+++ b/src/main/java/teetime/framework/signal/TerminatingSignal.java
@@ -27,7 +27,7 @@ public final class TerminatingSignal extends AbstractSignal {
 	public void trigger(final Stage stage) {
 		try {
 			stage.onTerminating();
-		} catch (Exception e) { // NOCS (Stages can throw any arbitrary Exception)
+		} catch (final Exception e) { // NOCS NOPMD (Stages can throw any arbitrary Exception)
 			this.catchedExceptions.add(e);
 			LOGGER.error("Exception while sending the termination signal", e);
 		}