diff --git a/.settings/edu.umd.cs.findbugs.core.prefs b/.settings/edu.umd.cs.findbugs.core.prefs
index b3b0f6f36bf67b3128adadb8610cbcc2987c090d..c2826c2959746e0619b56870a6f9e95a2f678349 100644
--- a/.settings/edu.umd.cs.findbugs.core.prefs
+++ b/.settings/edu.umd.cs.findbugs.core.prefs
@@ -1,5 +1,5 @@
 #FindBugs User Preferences
-#Wed Oct 22 13:18:41 CEST 2014
+#Thu Oct 23 07:49:05 CEST 2014
 detector_threshold=3
 effort=max
 excludefilter0=.fbExcludeFilterFile|true
diff --git a/src/main/java/teetime/stage/io/DbReader.java b/src/main/java/teetime/stage/io/DbReader.java
index d01fa8f0a53fc890078f4bdd018c3fef77c639b9..82f4a4e76dd6d21bd75fe5c52b6590eddfaba522 100644
--- a/src/main/java/teetime/stage/io/DbReader.java
+++ b/src/main/java/teetime/stage/io/DbReader.java
@@ -23,6 +23,7 @@ import java.sql.ResultSet;
 import java.sql.SQLException;
 
 import teetime.framework.ProducerStage;
+import teetime.framework.signal.OnStartingException;
 
 import kieker.common.exception.MonitoringRecordException;
 import kieker.common.record.AbstractMonitoringRecord;
@@ -56,11 +57,11 @@ public class DbReader extends ProducerStage<IMonitoringRecord> {
 	private volatile boolean running = true;
 
 	@Override
-	public void onStarting() {
+	public void onStarting() throws OnStartingException {
 		try {
 			Class.forName(this.driverClassname).newInstance();
 		} catch (final Exception ex) { // NOPMD NOCS (IllegalCatchCheck)
-			throw new RuntimeException("DB driver registration failed. Perhaps the driver jar is missing?", ex);
+			throw new OnStartingException("DB driver registration failed. Perhaps the driver jar is missing?", ex);
 		}
 	}
 
diff --git a/src/main/java/teetime/stage/io/TCPReader.java b/src/main/java/teetime/stage/io/TCPReader.java
index ee2d8d5b8f96b9fa009dbce20f623c1852e946a0..3d4931a217c30be4fd2873ad01ba0848ba95ec90 100644
--- a/src/main/java/teetime/stage/io/TCPReader.java
+++ b/src/main/java/teetime/stage/io/TCPReader.java
@@ -24,6 +24,7 @@ import java.nio.channels.ServerSocketChannel;
 import java.nio.channels.SocketChannel;
 
 import teetime.framework.ProducerStage;
+import teetime.framework.signal.OnStartingException;
 
 import kieker.common.exception.MonitoringRecordException;
 import kieker.common.logging.Log;
@@ -76,13 +77,13 @@ public class TCPReader extends ProducerStage<IMonitoringRecord> {
 	}
 
 	@Override
-	public void onStarting() {
+	public void onStarting() throws OnStartingException {
+		super.onStarting();
 		this.recordFactory = new RecordFactory();
 		this.register();
 
 		this.tcpStringReader = new TCPStringReader(this.port2, this.stringRegistry);
 		this.tcpStringReader.start();
-		super.onStarting();
 	}
 
 	private void register() {
diff --git a/src/main/java/teetime/stage/kieker/TCPReaderSink.java b/src/main/java/teetime/stage/kieker/TCPReaderSink.java
index e3e0523aa85017b72da40e79c04708ef07c947d2..0c4e78a16e6fac369a1988585f6f6bfb3f75eb3f 100644
--- a/src/main/java/teetime/stage/kieker/TCPReaderSink.java
+++ b/src/main/java/teetime/stage/kieker/TCPReaderSink.java
@@ -27,6 +27,8 @@ import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import teetime.framework.ProducerStage;
+import teetime.framework.signal.OnStartingException;
+import teetime.framework.signal.OnTerminatingException;
 
 import kieker.common.exception.MonitoringRecordException;
 import kieker.common.logging.Log;
@@ -78,7 +80,7 @@ public class TCPReaderSink extends ProducerStage<IMonitoringRecord> {
 	}
 
 	@Override
-	public void onStarting() {
+	public void onStarting() throws OnStartingException {
 		this.executorService.scheduleAtFixedRate(new Runnable() {
 			@Override
 			public void run() {
@@ -149,8 +151,7 @@ public class TCPReaderSink extends ProducerStage<IMonitoringRecord> {
 	}
 
 	@Override
-	public void onTerminating() {
-		super.onTerminating();
+	public void onTerminating() throws OnTerminatingException {
 		this.executorService.shutdown();
 		this.tcpStringReader.interrupt();
 		super.onTerminating();
diff --git a/src/main/java/teetime/stage/kieker/fileToRecord/BinaryFile2RecordFilter.java b/src/main/java/teetime/stage/kieker/fileToRecord/BinaryFile2RecordFilter.java
index c25ebe898c1f1fabe752f4a0c1e07283356a32b8..a6c917f468919c16fa74b52d82c2484cd780b53e 100644
--- a/src/main/java/teetime/stage/kieker/fileToRecord/BinaryFile2RecordFilter.java
+++ b/src/main/java/teetime/stage/kieker/fileToRecord/BinaryFile2RecordFilter.java
@@ -21,6 +21,7 @@ import java.io.IOException;
 
 import teetime.framework.ConsumerStage;
 import teetime.framework.OutputPort;
+import teetime.framework.signal.OnStartingException;
 import teetime.stage.kieker.className.ClassNameRegistryRepository;
 
 import kieker.common.exception.MonitoringRecordException;
@@ -29,7 +30,7 @@ import kieker.common.util.filesystem.BinaryCompressionMethod;
 
 /**
  * @author Christian Wulf
- * 
+ *
  * @since 1.10
  */
 public class BinaryFile2RecordFilter extends ConsumerStage<File> {
@@ -58,9 +59,9 @@ public class BinaryFile2RecordFilter extends ConsumerStage<File> {
 	}
 
 	@Override
-	public void onStarting() {
-		this.recordFromBinaryFileCreator = new RecordFromBinaryFileCreator(this.logger, this.classNameRegistryRepository);
+	public void onStarting() throws OnStartingException {
 		super.onStarting();
+		this.recordFromBinaryFileCreator = new RecordFromBinaryFileCreator(this.logger, this.classNameRegistryRepository);
 	}
 
 	public ClassNameRegistryRepository getClassNameRegistryRepository() {
diff --git a/src/main/java/teetime/stage/kieker/traceReconstruction/TraceReconstructionFilter.java b/src/main/java/teetime/stage/kieker/traceReconstruction/TraceReconstructionFilter.java
index b9e1d973fedf6dbcaa68b46a6d734e55133632de..51d3752befc04a5c7e13e758ddbd72951a83aa65 100644
--- a/src/main/java/teetime/stage/kieker/traceReconstruction/TraceReconstructionFilter.java
+++ b/src/main/java/teetime/stage/kieker/traceReconstruction/TraceReconstructionFilter.java
@@ -19,6 +19,7 @@ import java.util.concurrent.TimeUnit;
 
 import teetime.framework.ConsumerStage;
 import teetime.framework.OutputPort;
+import teetime.framework.signal.OnTerminatingException;
 import teetime.util.concurrent.hashmap.ConcurrentHashMapWithDefault;
 import teetime.util.concurrent.hashmap.TraceBuffer;
 
@@ -94,8 +95,7 @@ public class TraceReconstructionFilter extends ConsumerStage<IFlowRecord> {
 	}
 
 	@Override
-	public void onTerminating() {
-		super.onTerminating();
+	public void onTerminating() throws OnTerminatingException {
 		for (Long traceId : this.traceId2trace.keySet()) {
 			this.put(traceId, false);
 		}
diff --git a/src/main/java/teetime/stage/kieker/traceReduction/TraceReductionFilter.java b/src/main/java/teetime/stage/kieker/traceReduction/TraceReductionFilter.java
index f9a282328367ae32c3396299a0571b6f1c231e86..874b3fd3cccc650bbc90d950393866cc2d942ca5 100644
--- a/src/main/java/teetime/stage/kieker/traceReduction/TraceReductionFilter.java
+++ b/src/main/java/teetime/stage/kieker/traceReduction/TraceReductionFilter.java
@@ -23,6 +23,7 @@ import java.util.Map.Entry;
 import teetime.framework.ConsumerStage;
 import teetime.framework.InputPort;
 import teetime.framework.OutputPort;
+import teetime.framework.signal.OnTerminatingException;
 
 import kieker.analysis.plugin.filter.flow.TraceEventRecords;
 
@@ -73,8 +74,7 @@ public class TraceReductionFilter extends ConsumerStage<TraceEventRecords> {
 	}
 
 	@Override
-	public void onTerminating() {
-		super.onTerminating();
+	public void onTerminating() throws OnTerminatingException {
 		synchronized (this.trace2buffer) { // BETTER hide and improve synchronization in the buffer
 			for (final Entry<TraceEventRecords, TraceAggregationBuffer> entry : this.trace2buffer.entrySet()) {
 				final TraceAggregationBuffer buffer = entry.getValue();
diff --git a/src/main/java/teetime/stage/stringBuffer/StringBufferFilter.java b/src/main/java/teetime/stage/stringBuffer/StringBufferFilter.java
index 2cefc39dd013fb00c160ef34adb223a0439b8b97..8390619bf7a34ba8c1459ad60e23802d3406a1a2 100644
--- a/src/main/java/teetime/stage/stringBuffer/StringBufferFilter.java
+++ b/src/main/java/teetime/stage/stringBuffer/StringBufferFilter.java
@@ -20,12 +20,13 @@ import java.util.LinkedList;
 
 import teetime.framework.ConsumerStage;
 import teetime.framework.OutputPort;
+import teetime.framework.signal.OnStartingException;
 import teetime.stage.stringBuffer.handler.AbstractDataTypeHandler;
 import teetime.stage.stringBuffer.util.KiekerHashMap;
 
 /**
  * @author Christian Wulf
- * 
+ *
  * @since 1.10
  */
 public class StringBufferFilter<T> extends ConsumerStage<T> {
@@ -44,7 +45,7 @@ public class StringBufferFilter<T> extends ConsumerStage<T> {
 	}
 
 	@Override
-	public void onStarting() {
+	public void onStarting() throws OnStartingException {
 		for (final AbstractDataTypeHandler<?> handler : this.dataTypeHandlers) {
 			handler.setLogger(this.logger);
 			handler.setStringRepository(this.kiekerHashMap);