diff --git a/src/main/java/teetime/framework/AbstractRunnableStage.java b/src/main/java/teetime/framework/AbstractRunnableStage.java
index e2f87810a016fdadbf0e6221666c7d2937afa194..d9116d45cb552c56a3fc7c6ec96f6898c4dcf7e7 100644
--- a/src/main/java/teetime/framework/AbstractRunnableStage.java
+++ b/src/main/java/teetime/framework/AbstractRunnableStage.java
@@ -49,9 +49,9 @@ abstract class AbstractRunnableStage implements Runnable {
 					throw new IllegalArgumentException("Argument stage may not have a nullable owning context");
 				}
 				try {
-					do {
+					while (!stage.shouldBeTerminated()) {
 						executeStage();
-					} while (!stage.shouldBeTerminated());
+					}
 				} catch (TerminateException e) {
 					this.stage.terminate();
 					stage.getOwningContext().abortConfigurationRun();
@@ -65,13 +65,16 @@ abstract class AbstractRunnableStage implements Runnable {
 			} catch (InterruptedException e) {
 				this.logger.error(TERMINATING_THREAD_DUE_TO_THE_FOLLOWING_EXCEPTION, e);
 			}
-		} finally {
+		} finally
+
+		{
 			if (stage.getTerminationStrategy() != TerminationStrategy.BY_INTERRUPT) {
 				stage.getOwningContext().getThreadService().getRunnableCounter().dec();
 			}
 		}
 
 		logger.debug("Finished runnable stage. (" + stage.getId() + ")");
+
 	}
 
 	protected abstract void beforeStageExecution() throws InterruptedException;
diff --git a/src/main/java/teetime/framework/AbstractStage.java b/src/main/java/teetime/framework/AbstractStage.java
index 308165a764b4100c8b730b0eb345f0ca51c50988..da8144202a25ec4c17f880f3b3b0e499ad3e7d38 100644
--- a/src/main/java/teetime/framework/AbstractStage.java
+++ b/src/main/java/teetime/framework/AbstractStage.java
@@ -55,7 +55,11 @@ public abstract class AbstractStage extends Stage {
 	@Override
 	public void onSignal(final ISignal signal, final InputPort<?> inputPort) {
 		if (!this.signalAlreadyReceived(signal, inputPort)) {
-			signal.trigger(this);
+			try {
+				signal.trigger(this);
+			} catch (Exception e) {
+				this.getOwningContext().abortConfigurationRun();
+			}
 			for (OutputPort<?> outputPort : outputPorts.getOpenedPorts()) {
 				outputPort.sendSignal(signal);
 			}
diff --git a/src/main/java/teetime/framework/signal/AbstractSignal.java b/src/main/java/teetime/framework/signal/AbstractSignal.java
deleted file mode 100644
index cd67b53cebfebd785c6fe3fdfecc3f7462a05782..0000000000000000000000000000000000000000
--- a/src/main/java/teetime/framework/signal/AbstractSignal.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * Copyright (C) 2015 Christian Wulf, Nelson Tavares de Sousa (http://christianwulf.github.io/teetime)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *         http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package teetime.framework.signal;
-
-import java.util.LinkedList;
-import java.util.List;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-abstract class AbstractSignal implements ISignal {
-
-	protected static final Logger LOGGER = LoggerFactory.getLogger(AbstractSignal.class);
-
-	protected final List<Exception> catchedExceptions = new LinkedList<Exception>();
-
-	protected AbstractSignal() {
-		super();
-	}
-
-	public List<Exception> getCatchedExceptions() {
-		return this.catchedExceptions;
-	}
-
-}
diff --git a/src/main/java/teetime/framework/signal/ISignal.java b/src/main/java/teetime/framework/signal/ISignal.java
index 13ecf747a31ae2d69a8d697267e8b7cf81e51f4b..80469661a1a5d7ff68667135081f7888c668ccd7 100644
--- a/src/main/java/teetime/framework/signal/ISignal.java
+++ b/src/main/java/teetime/framework/signal/ISignal.java
@@ -23,7 +23,7 @@ import teetime.framework.Stage;
 
 public interface ISignal {
 
-	void trigger(Stage stage);
+	void trigger(Stage stage) throws Exception;
 
 	// Only used by the merger so far
 	boolean mayBeTriggered(Set<InputPort<?>> receivedInputPorts, List<InputPort<?>> allInputPorts);
diff --git a/src/main/java/teetime/framework/signal/StartingSignal.java b/src/main/java/teetime/framework/signal/StartingSignal.java
index cb668ba995174e82d2b0643c327e5729d54c986b..f8e001592ba6250696beef8201c61fd8c64307da 100644
--- a/src/main/java/teetime/framework/signal/StartingSignal.java
+++ b/src/main/java/teetime/framework/signal/StartingSignal.java
@@ -19,20 +19,13 @@ import java.util.List;
 import java.util.Set;
 
 import teetime.framework.InputPort;
-import teetime.framework.RuntimeServiceFacade;
 import teetime.framework.Stage;
 
-public final class StartingSignal extends AbstractSignal {
+public final class StartingSignal implements ISignal {
 
 	@Override
-	public void trigger(final Stage stage) {
-		try {
-			stage.onStarting();
-		} catch (final Exception e) { // NOCS NOPMD (Stages can throw any arbitrary Exception)
-			this.catchedExceptions.add(e);
-			RuntimeServiceFacade.INSTANCE.abortExecution(stage);
-			LOGGER.error("Exception while sending the start signal", e);
-		}
+	public void trigger(final Stage stage) throws Exception {
+		stage.onStarting();
 	}
 
 	@Override
diff --git a/src/main/java/teetime/framework/signal/TerminatingSignal.java b/src/main/java/teetime/framework/signal/TerminatingSignal.java
index 96ef9d3be7b05512cc2a521ba4c9213ede16abbc..f17b532a66bb26b634f5de32d35707e5a2249a32 100644
--- a/src/main/java/teetime/framework/signal/TerminatingSignal.java
+++ b/src/main/java/teetime/framework/signal/TerminatingSignal.java
@@ -19,20 +19,13 @@ import java.util.List;
 import java.util.Set;
 
 import teetime.framework.InputPort;
-import teetime.framework.RuntimeServiceFacade;
 import teetime.framework.Stage;
 
-public final class TerminatingSignal extends AbstractSignal {
+public final class TerminatingSignal implements ISignal {
 
 	@Override
-	public void trigger(final Stage stage) {
-		try {
-			stage.onTerminating();
-		} catch (final Exception e) { // NOCS NOPMD (Stages can throw any arbitrary Exception)
-			this.catchedExceptions.add(e);
-			RuntimeServiceFacade.INSTANCE.abortExecution(stage);
-			LOGGER.error("Exception while sending the termination signal", e);
-		}
+	public void trigger(final Stage stage) throws Exception {
+		stage.onTerminating();
 	}
 
 	@Override