diff --git a/pom.xml b/pom.xml
index 3ba20e4d0cba21a6eea5a00c102b8c5ae6a73feb..1382270b4ed4867197d749177e4d48e0cb70ecae 100644
--- a/pom.xml
+++ b/pom.xml
@@ -172,20 +172,7 @@
 				</executions>
 			</plugin>
 
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-gpg-plugin</artifactId>
-				<version>1.5</version>
-				<executions>
-					<execution>
-						<id>sign-artifacts</id>
-						<phase>verify</phase>
-						<goals>
-							<goal>sign</goal>
-						</goals>
-					</execution>
-				</executions>
-			</plugin>
+
 
 			<plugin>
 				<groupId>org.sonatype.plugins</groupId>
@@ -220,22 +207,22 @@
 				<groupId>org.apache.maven.plugins</groupId>
 				<artifactId>maven-checkstyle-plugin</artifactId>
 				<version>2.13</version>
-<!-- 				<executions> -->
-<!-- 					<execution> -->
-<!-- 						<phase>test</phase> -->
-<!-- 						<configuration> -->
-<!-- 						<configLocation>${project.basedir}/conf/quality-config/cs-conf.xml</configLocation> -->
-<!-- 						<includeTestSourceDirectory>true</includeTestSourceDirectory> -->
-<!-- 						<encoding>UTF-8</encoding> -->
-<!-- 						<consoleOutput>true</consoleOutput> -->
-<!-- 						<failsOnError>false</failsOnError> -->
-<!-- 						<linkXRef>false</linkXRef> -->
-<!-- 						</configuration> -->
-<!-- 						<goals> -->
-<!-- 							<goal>check</goal> -->
-<!-- 						</goals> -->
-<!-- 					</execution> -->
-<!-- 				</executions> -->
+				<!-- <executions> -->
+				<!-- <execution> -->
+				<!-- <phase>test</phase> -->
+				<!-- <configuration> -->
+				<!-- <configLocation>${project.basedir}/conf/quality-config/cs-conf.xml</configLocation> -->
+				<!-- <includeTestSourceDirectory>true</includeTestSourceDirectory> -->
+				<!-- <encoding>UTF-8</encoding> -->
+				<!-- <consoleOutput>true</consoleOutput> -->
+				<!-- <failsOnError>false</failsOnError> -->
+				<!-- <linkXRef>false</linkXRef> -->
+				<!-- </configuration> -->
+				<!-- <goals> -->
+				<!-- <goal>check</goal> -->
+				<!-- </goals> -->
+				<!-- </execution> -->
+				<!-- </executions> -->
 			</plugin>
 
 			<!-- Findbugs -->
@@ -346,6 +333,33 @@
 			<activation>
 			</activation>
 		</profile>
+		<profile>
+			<id>signing</id>
+			<activation>
+				<property>
+					<name>sign-jars</name>
+					<value>true</value>
+				</property>
+			</activation>
+			<build>
+				<plugins>
+					<plugin>
+						<groupId>org.apache.maven.plugins</groupId>
+						<artifactId>maven-gpg-plugin</artifactId>
+						<version>1.5</version>
+						<executions>
+							<execution>
+								<id>sign-artifacts</id>
+								<phase>verify</phase>
+								<goals>
+									<goal>sign</goal>
+								</goals>
+							</execution>
+						</executions>
+					</plugin>
+				</plugins>
+			</build>
+		</profile>
 	</profiles>
 
 </project>
diff --git a/run-configurations/deploy.launch b/run-configurations/deploy.launch
new file mode 100644
index 0000000000000000000000000000000000000000..761ef41eb3321c784871a714d127f6201a8daea8
--- /dev/null
+++ b/run-configurations/deploy.launch
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.m2e.Maven2LaunchConfigurationType">
+<booleanAttribute key="M2_DEBUG_OUTPUT" value="false"/>
+<stringAttribute key="M2_GOALS" value="-Psigning -Dmaven.javadoc.skip=true clean deploy"/>
+<booleanAttribute key="M2_NON_RECURSIVE" value="false"/>
+<booleanAttribute key="M2_OFFLINE" value="false"/>
+<stringAttribute key="M2_PROFILES" value=""/>
+<listAttribute key="M2_PROPERTIES"/>
+<stringAttribute key="M2_RUNTIME" value="EMBEDDED"/>
+<booleanAttribute key="M2_SKIP_TESTS" value="false"/>
+<intAttribute key="M2_THREADS" value="1"/>
+<booleanAttribute key="M2_UPDATE_SNAPSHOTS" value="false"/>
+<stringAttribute key="M2_USER_SETTINGS" value=""/>
+<booleanAttribute key="M2_WORKSPACE_RESOLUTION" value="false"/>
+<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
+<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
+</listAttribute>
+<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
+<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${project_loc}"/>
+</launchConfiguration>
diff --git a/run-configurations/install with signing.launch b/run-configurations/install with signing.launch
new file mode 100644
index 0000000000000000000000000000000000000000..12e8f56d6143fabf0e64925e8ba9ce50221194c5
--- /dev/null
+++ b/run-configurations/install with signing.launch	
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.m2e.Maven2LaunchConfigurationType">
+<booleanAttribute key="M2_DEBUG_OUTPUT" value="false"/>
+<stringAttribute key="M2_GOALS" value="-Psigning -Dmaven.javadoc.skip=true install"/>
+<booleanAttribute key="M2_NON_RECURSIVE" value="false"/>
+<booleanAttribute key="M2_OFFLINE" value="false"/>
+<stringAttribute key="M2_PROFILES" value=""/>
+<listAttribute key="M2_PROPERTIES"/>
+<stringAttribute key="M2_RUNTIME" value="EMBEDDED"/>
+<booleanAttribute key="M2_SKIP_TESTS" value="false"/>
+<intAttribute key="M2_THREADS" value="1"/>
+<booleanAttribute key="M2_UPDATE_SNAPSHOTS" value="false"/>
+<stringAttribute key="M2_USER_SETTINGS" value=""/>
+<booleanAttribute key="M2_WORKSPACE_RESOLUTION" value="false"/>
+<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
+<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
+</listAttribute>
+<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
+<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.launching.macosx.MacOSXType/Java SE 7 [1.7.0_25]"/>
+<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${project_loc}"/>
+</launchConfiguration>
diff --git a/run-configurations/maven-listdependencies.launch b/run-configurations/maven-listdependencies.launch
index 43aac7069058a7056ee0b40a572baa4f803735a6..154868512c1f43bf7d0b75bb27510937268d1f31 100644
--- a/run-configurations/maven-listdependencies.launch
+++ b/run-configurations/maven-listdependencies.launch
@@ -12,6 +12,9 @@
 <booleanAttribute key="M2_UPDATE_SNAPSHOTS" value="false"/>
 <stringAttribute key="M2_USER_SETTINGS" value=""/>
 <booleanAttribute key="M2_WORKSPACE_RESOLUTION" value="false"/>
+<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
+<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
+</listAttribute>
 <booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
 <stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${project_loc}"/>
 </launchConfiguration>
diff --git a/run-configurations/maven-test.launch b/run-configurations/maven-test.launch
index 0fb01690bd5f205664275114b5e59e383374db73..a0cd8248cc7d79652d4905ecb7112d43e50646a7 100644
--- a/run-configurations/maven-test.launch
+++ b/run-configurations/maven-test.launch
@@ -14,6 +14,9 @@
 <booleanAttribute key="M2_WORKSPACE_RESOLUTION" value="false"/>
 <stringAttribute key="org.eclipse.debug.core.source_locator_id" value="org.eclipse.m2e.launching.MavenSourceLocator"/>
 <stringAttribute key="org.eclipse.debug.core.source_locator_memento" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;sourceLookupDirector&gt;&#10;&lt;sourceContainers duplicates=&quot;false&quot;&gt;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#10;&amp;lt;folder nest=&amp;quot;false&amp;quot; path=&amp;quot;/teetime/src/perfomancetest&amp;quot;/&amp;gt;&amp;#10;&quot; typeId=&quot;org.eclipse.debug.core.containerType.folder&quot;/&gt;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#10;&amp;lt;default/&amp;gt;&amp;#10;&quot; typeId=&quot;org.eclipse.debug.core.containerType.default&quot;/&gt;&#10;&lt;/sourceContainers&gt;&#10;&lt;/sourceLookupDirector&gt;&#10;"/>
+<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
+<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
+</listAttribute>
 <booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
 <stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${project_loc}"/>
 </launchConfiguration>
diff --git a/src/main/java/teetime/framework/AbstractStage.java b/src/main/java/teetime/framework/AbstractStage.java
index 33be2f0cfb5b0773f794ffe0097a679d1e23b36b..63ef55465abade9299a4d0baff89c37c6c77d9c3 100644
--- a/src/main/java/teetime/framework/AbstractStage.java
+++ b/src/main/java/teetime/framework/AbstractStage.java
@@ -117,14 +117,14 @@ public abstract class AbstractStage implements Stage {
 		this.validateOutputPorts(invalidPortConnections);
 	}
 
-	public void onStarting() {
+	public void onStarting() throws Exception {
 		this.cachedInputPorts = this.inputPortList.toArray(new InputPort<?>[0]);
 		this.cachedOutputPorts = this.outputPortList.toArray(new OutputPort<?>[0]);
 
 		this.connectUnconnectedOutputPorts();
 	}
 
-	public void onTerminating() {
+	public void onTerminating() throws Exception {
 		// empty default implementation
 	}
 
diff --git a/src/main/java/teetime/framework/signal/StartingSignal.java b/src/main/java/teetime/framework/signal/StartingSignal.java
index d1b7aa5474236f782e6b8436f9934ed87149e9f6..77637f97d7989d2a94937384391e4ea0d33c628f 100644
--- a/src/main/java/teetime/framework/signal/StartingSignal.java
+++ b/src/main/java/teetime/framework/signal/StartingSignal.java
@@ -1,12 +1,30 @@
 package teetime.framework.signal;
 
+import java.util.LinkedList;
+import java.util.List;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import teetime.framework.AbstractStage;
 
 public class StartingSignal implements ISignal {
 
+	private static final Logger LOGGER = LoggerFactory.getLogger(StartingSignal.class);
+	private final List<Exception> catchedExceptions = new LinkedList<Exception>();
+
 	@Override
 	public void trigger(final AbstractStage stage) {
-		stage.onStarting();
+		try {
+			stage.onStarting();
+		} catch (Exception e) {
+			catchedExceptions.add(e);
+			LOGGER.error("Exception while sending the start signal", e);
+		}
+	}
+
+	public List<Exception> getCatchedExceptions() {
+		return catchedExceptions;
 	}
 
 }
diff --git a/src/main/java/teetime/framework/signal/TerminatingSignal.java b/src/main/java/teetime/framework/signal/TerminatingSignal.java
index 0aba57bae09d4045d6d76163c86a108206a8d660..081adccdd2d071916599e0a4b1a2b89972e00bfb 100644
--- a/src/main/java/teetime/framework/signal/TerminatingSignal.java
+++ b/src/main/java/teetime/framework/signal/TerminatingSignal.java
@@ -1,12 +1,30 @@
 package teetime.framework.signal;
 
+import java.util.LinkedList;
+import java.util.List;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import teetime.framework.AbstractStage;
 
 public class TerminatingSignal implements ISignal {
 
+	private static final Logger LOGGER = LoggerFactory.getLogger(TerminatingSignal.class);
+	private final List<Exception> catchedExceptions = new LinkedList<Exception>();
+
 	@Override
 	public void trigger(final AbstractStage stage) {
-		stage.onTerminating();
+		try {
+			stage.onTerminating();
+		} catch (Exception e) {
+			catchedExceptions.add(e);
+			LOGGER.error("Exception while sending the start signal", e);
+		}
+	}
+
+	public List<Exception> getCatchedExceptions() {
+		return catchedExceptions;
 	}
 
 }
diff --git a/src/main/java/teetime/stage/Cache.java b/src/main/java/teetime/stage/Cache.java
index 07b7d2896a04bb5338ff31f63aa09613b8ff9cdf..6fb6f4b7332d04bff4389d93dde7ea3a90262c5e 100644
--- a/src/main/java/teetime/stage/Cache.java
+++ b/src/main/java/teetime/stage/Cache.java
@@ -20,8 +20,7 @@ public class Cache<T> extends ConsumerStage<T> {
 	}
 
 	@Override
-	public void onTerminating() {
-		super.onTerminating();
+	public void onTerminating() throws Exception {
 		this.logger.debug("Emitting " + this.cachedObjects.size() + " cached elements...");
 		StopWatch stopWatch = new StopWatch();
 		stopWatch.start();
diff --git a/src/main/java/teetime/stage/CollectorSink.java b/src/main/java/teetime/stage/CollectorSink.java
index f3b3875dce73a457cc1bec91c195944e7cc9689a..39a2c8f83085c8e0bcd2a78d83b4fb443d200a2c 100644
--- a/src/main/java/teetime/stage/CollectorSink.java
+++ b/src/main/java/teetime/stage/CollectorSink.java
@@ -45,9 +45,9 @@ public class CollectorSink<T> extends ConsumerStage<T> {
 	}
 
 	@Override
-	public void onTerminating() {
-		super.onTerminating();
+	public void onTerminating() throws Exception {
 		System.out.println("size: " + this.elements.size());
+		super.onTerminating();
 	}
 
 	@Override
diff --git a/src/main/java/teetime/stage/ElementDelayMeasuringStage.java b/src/main/java/teetime/stage/ElementDelayMeasuringStage.java
index 452f75e3701d2bb29e74e156b152c5df1156d82f..2f963dbe92cda310ea9add3dc67c523d7708729a 100644
--- a/src/main/java/teetime/stage/ElementDelayMeasuringStage.java
+++ b/src/main/java/teetime/stage/ElementDelayMeasuringStage.java
@@ -29,9 +29,9 @@ public class ElementDelayMeasuringStage<T> extends ConsumerStage<T> {
 	}
 
 	@Override
-	public void onStarting() {
-		this.resetTimestamp(System.nanoTime());
+	public void onStarting() throws Exception {
 		super.onStarting();
+		this.resetTimestamp(System.nanoTime());
 	}
 
 	private void computeElementDelay(final Long timestampInNs) {
diff --git a/src/main/java/teetime/stage/ElementThroughputMeasuringStage.java b/src/main/java/teetime/stage/ElementThroughputMeasuringStage.java
index ea36801a4d4ccbb07868f9582f2fdaab7837f7a9..ed4626c527076e5d4feefc30815930405fafb5a6 100644
--- a/src/main/java/teetime/stage/ElementThroughputMeasuringStage.java
+++ b/src/main/java/teetime/stage/ElementThroughputMeasuringStage.java
@@ -30,9 +30,9 @@ public class ElementThroughputMeasuringStage<T> extends ConsumerStage<T> {
 	}
 
 	@Override
-	public void onStarting() {
-		this.resetTimestamp(System.nanoTime());
+	public void onStarting() throws Exception {
 		super.onStarting();
+		this.resetTimestamp(System.nanoTime());
 	}
 
 	private void computeElementThroughput(final Long timestampInNs) {
diff --git a/src/main/java/teetime/stage/Relay.java b/src/main/java/teetime/stage/Relay.java
index 144b34eaf9d0e6dd7f611b54aa3df28f21e14a00..b5c82faebf04aba2c773c649af2fc0232eba89a1 100644
--- a/src/main/java/teetime/stage/Relay.java
+++ b/src/main/java/teetime/stage/Relay.java
@@ -25,9 +25,9 @@ public class Relay<T> extends ProducerStage<T> {
 	}
 
 	@Override
-	public void onStarting() {
-		this.cachedCastedInputPipe = (InterThreadPipe) this.inputPort.getPipe();
+	public void onStarting() throws Exception {
 		super.onStarting();
+		this.cachedCastedInputPipe = (InterThreadPipe) this.inputPort.getPipe();
 	}
 
 	public InputPort<T> getInputPort() {
diff --git a/src/main/java/teetime/stage/basic/Delay.java b/src/main/java/teetime/stage/basic/Delay.java
index 6c0ecac5b2b93a86500ee939623e110e1a80f4e9..4682ba64fe7a9afa2b6258fc132a090c0ae1c461 100644
--- a/src/main/java/teetime/stage/basic/Delay.java
+++ b/src/main/java/teetime/stage/basic/Delay.java
@@ -34,11 +34,11 @@ public class Delay<T> extends AbstractStage {
 	}
 
 	@Override
-	public void onTerminating() {
-		super.onTerminating();
+	public void onTerminating() throws Exception {
 		while (!this.inputPort.getPipe().isEmpty()) {
 			this.executeWithPorts();
 		}
+		super.onTerminating();
 	}
 
 	public InputPort<T> getInputPort() {
diff --git a/src/main/java/teetime/stage/basic/distributor/Distributor.java b/src/main/java/teetime/stage/basic/distributor/Distributor.java
index b80c8e5ef21356fde8b837e2611df330187b75c9..3e4b59bd8b6da3ad96d8564ae6ae7ed5929bbfbc 100644
--- a/src/main/java/teetime/stage/basic/distributor/Distributor.java
+++ b/src/main/java/teetime/stage/basic/distributor/Distributor.java
@@ -37,15 +37,6 @@ public class Distributor<T> extends ConsumerStage<T> {
 		this.strategy.distribute((OutputPort<T>[]) this.getOutputPorts(), element);
 	}
 
-	@Override
-	public void onTerminating() {
-		super.onTerminating();
-		// for (OutputPort<T> op : this.outputPortList) {
-		// op.getPipe().close();
-		// System.out.println("End signal sent, size: " + op.getPipe().size());
-		// }
-	}
-
 	public OutputPort<T> getNewOutputPort() {
 		return this.createOutputPort();
 	}
diff --git a/src/main/java/teetime/stage/basic/merger/Merger.java b/src/main/java/teetime/stage/basic/merger/Merger.java
index 870b22b90832de34648468ba03f7c67abc7c21b4..6afda057e455d38760c2073822730459ee939879 100644
--- a/src/main/java/teetime/stage/basic/merger/Merger.java
+++ b/src/main/java/teetime/stage/basic/merger/Merger.java
@@ -62,9 +62,9 @@ public class Merger<T> extends AbstractStage {
 	}
 
 	@Override
-	public void onTerminating() {
-		super.onTerminating();
+	public void onTerminating() throws Exception {
 		this.finishedInputPorts++;
+		super.onTerminating();
 	}
 
 	public IMergerStrategy<T> getStrategy() {
diff --git a/src/main/java/teetime/stage/io/AbstractTcpReader.java b/src/main/java/teetime/stage/io/AbstractTcpReader.java
new file mode 100644
index 0000000000000000000000000000000000000000..daf0a31da83b421ea41d28eadab86b0adb3b499f
--- /dev/null
+++ b/src/main/java/teetime/stage/io/AbstractTcpReader.java
@@ -0,0 +1,71 @@
+package teetime.stage.io;
+
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.nio.BufferUnderflowException;
+import java.nio.ByteBuffer;
+import java.nio.channels.ServerSocketChannel;
+import java.nio.channels.SocketChannel;
+
+import teetime.framework.ProducerStage;
+
+public abstract class AbstractTcpReader<T> extends ProducerStage<T> {
+
+	private final int port;
+	private final int bufferCapacity;
+
+	public AbstractTcpReader(final int port, final int bufferCapacity) {
+		super();
+		this.port = port;
+		this.bufferCapacity = bufferCapacity;
+	}
+
+	@Override
+	protected void execute() {
+		ServerSocketChannel serversocket = null;
+		try {
+			serversocket = ServerSocketChannel.open();
+			serversocket.socket().bind(new InetSocketAddress(this.port));
+			logger.debug("Listening on port " + this.port);
+
+			final SocketChannel socketChannel = serversocket.accept();
+			try {
+				final ByteBuffer buffer = ByteBuffer.allocateDirect(bufferCapacity);
+				while (socketChannel.read(buffer) != -1) {
+					process(buffer);
+				}
+			} finally {
+				socketChannel.close();
+			}
+		} catch (final IOException ex) {
+			logger.error("Error while reading", ex);
+		} finally {
+			if (null != serversocket) {
+				try {
+					serversocket.close();
+				} catch (final IOException e) {
+					logger.debug("Failed to close TCP connection!", e);
+				}
+			}
+
+			this.terminate();
+		}
+	}
+
+	private void process(final ByteBuffer buffer) {
+		buffer.flip();
+		try {
+			while (buffer.hasRemaining()) {
+				buffer.mark();
+				this.read(buffer);
+			}
+			buffer.clear();
+		} catch (final BufferUnderflowException ex) {
+			buffer.reset();
+			buffer.compact();
+		}
+	}
+
+	protected abstract void read(final ByteBuffer buffer);
+
+}
diff --git a/src/main/java/teetime/stage/io/Printer.java b/src/main/java/teetime/stage/io/Printer.java
index 40ee69ee69202d70a1d25d744e66b4e39d9b8843..21936fbc82159c307a071510b6b63e2720ad9c6c 100644
--- a/src/main/java/teetime/stage/io/Printer.java
+++ b/src/main/java/teetime/stage/io/Printer.java
@@ -86,13 +86,13 @@ public class Printer<T> extends ConsumerStage<T> {
 	}
 
 	@Override
-	public void onStarting() {
+	public void onStarting() throws Exception {
 		super.onStarting();
 		this.initializeStream();
 	}
 
 	@Override
-	public void onTerminating() {
+	public void onTerminating() throws Exception {
 		this.closeStream();
 		super.onTerminating();
 	}
diff --git a/src/main/java/teetime/stage/stringBuffer/StringBufferFilter.java b/src/main/java/teetime/stage/stringBuffer/StringBufferFilter.java
index 2cefc39dd013fb00c160ef34adb223a0439b8b97..6e2d9ac4e846798b594fad5b84ae76f5dc257ef4 100644
--- a/src/main/java/teetime/stage/stringBuffer/StringBufferFilter.java
+++ b/src/main/java/teetime/stage/stringBuffer/StringBufferFilter.java
@@ -25,7 +25,7 @@ import teetime.stage.stringBuffer.util.KiekerHashMap;
 
 /**
  * @author Christian Wulf
- * 
+ *
  * @since 1.10
  */
 public class StringBufferFilter<T> extends ConsumerStage<T> {
@@ -44,12 +44,12 @@ public class StringBufferFilter<T> extends ConsumerStage<T> {
 	}
 
 	@Override
-	public void onStarting() {
+	public void onStarting() throws Exception {
+		super.onStarting();
 		for (final AbstractDataTypeHandler<?> handler : this.dataTypeHandlers) {
 			handler.setLogger(this.logger);
 			handler.setStringRepository(this.kiekerHashMap);
 		}
-		super.onStarting();
 	}
 
 	private T handle(final T object) {
diff --git a/src/performancetest/java/teetime/examples/ChwHomeComparisonMethodcallWithPorts.java b/src/performancetest/java/teetime/examples/ChwHomeComparisonMethodcallWithPorts.java
index afd8226e3c0a964f4b31339e42364a745a1bcd5f..96b58dcdbc63f685f08a5c20c37c94a7d8fc3642 100644
--- a/src/performancetest/java/teetime/examples/ChwHomeComparisonMethodcallWithPorts.java
+++ b/src/performancetest/java/teetime/examples/ChwHomeComparisonMethodcallWithPorts.java
@@ -65,8 +65,12 @@ public class ChwHomeComparisonMethodcallWithPorts extends ProfiledPerformanceAss
 		// assertEquals(53, value17, 4.1); // +0
 
 		// since 31.08.2014 (incl.)
-		assertEquals(68, value15, 4.1); // ??
-		assertEquals(75, value17, 4.1); // ??
+		// assertEquals(68, value15, 4.1); // +24
+		// assertEquals(75, value17, 4.1); // +22
+
+		// since 04.11.2014 (incl.)
+		assertEquals(40, value15, 4.1); // -28
+		assertEquals(78, value17, 4.1); // +3
 
 		// below results vary too much, possibly due to the OS' scheduler
 		// assertEquals(RESULT_TESTS_16, (double) test16a.quantiles.get(0.5) / test1.quantiles.get(0.5), 5.1);
diff --git a/src/performancetest/java/teetime/examples/experiment01/ChwHomePerformanceCheck.java b/src/performancetest/java/teetime/examples/experiment01/ChwHomePerformanceCheck.java
index 9c9321d3bfccbe7a004a9b5e31ff8ec24702f52f..3493118d6e215d34100d5a23073918c4b42e913b 100644
--- a/src/performancetest/java/teetime/examples/experiment01/ChwHomePerformanceCheck.java
+++ b/src/performancetest/java/teetime/examples/experiment01/ChwHomePerformanceCheck.java
@@ -5,7 +5,7 @@ import util.test.PerformanceResult;
 import util.test.PerformanceTest;
 import util.test.ProfiledPerformanceAssertion;
 
-public class ChwHomePerformanceCheck extends ProfiledPerformanceAssertion {
+class ChwHomePerformanceCheck extends ProfiledPerformanceAssertion {
 
 	@Override
 	public String getCorrespondingPerformanceProfile() {
diff --git a/src/performancetest/java/teetime/examples/experiment01/ChwWorkPerformanceCheck.java b/src/performancetest/java/teetime/examples/experiment01/ChwWorkPerformanceCheck.java
index 0f7c9f1912896f178be06e132f36508ab8c7cd51..07bdf5090b7e2d2dda07ec0a889f165bb5ee8583 100644
--- a/src/performancetest/java/teetime/examples/experiment01/ChwWorkPerformanceCheck.java
+++ b/src/performancetest/java/teetime/examples/experiment01/ChwWorkPerformanceCheck.java
@@ -5,7 +5,7 @@ import util.test.PerformanceResult;
 import util.test.PerformanceTest;
 import util.test.ProfiledPerformanceAssertion;
 
-public class ChwWorkPerformanceCheck extends ProfiledPerformanceAssertion {
+class ChwWorkPerformanceCheck extends ProfiledPerformanceAssertion {
 
 	@Override
 	public String getCorrespondingPerformanceProfile() {
diff --git a/src/performancetest/java/teetime/examples/experiment09/ChwHomePerformanceCheck.java b/src/performancetest/java/teetime/examples/experiment09/ChwHomePerformanceCheck.java
index 248925bd7af978a6719b83e2678a90615388cd33..4ea53153b9f60c019437a9a90a6ac056121eb177 100644
--- a/src/performancetest/java/teetime/examples/experiment09/ChwHomePerformanceCheck.java
+++ b/src/performancetest/java/teetime/examples/experiment09/ChwHomePerformanceCheck.java
@@ -2,7 +2,7 @@ package teetime.examples.experiment09;
 
 import static org.junit.Assert.assertEquals;
 
-public class ChwHomePerformanceCheck extends AbstractPerformanceCheck {
+class ChwHomePerformanceCheck extends AbstractPerformanceCheck {
 
 	@Override
 	public String getCorrespondingPerformanceProfile() {
@@ -21,11 +21,13 @@ public class ChwHomePerformanceCheck extends AbstractPerformanceCheck {
 		// assertEquals(22, (double) test9.quantiles.get(0.5) / test1.quantiles.get(0.5), 2.1);
 		// since 26.06.2014 (incl.)
 		// assertEquals(36, value9, 2.1); // +14
-		// // since 04.07.2014 (incl.)
+		// since 04.07.2014 (incl.)
 		// assertEquals(42, value9, 2.1); // +6
 		// since 11.08.2014 (incl.)
 		// assertEquals(42, value9, 2.1); // +6
 		// since 31.08.2014 (incl.)
-		assertEquals(44, medianSpeedup, 2.1); // ??
+		// assertEquals(44, medianSpeedup, 2.1); // +2
+		// since 04.11.2014 (incl.)
+		assertEquals(71, medianSpeedup, 2.1); // +33
 	}
 }
diff --git a/src/performancetest/java/teetime/examples/experiment09/ChwWorkPerformanceCheck.java b/src/performancetest/java/teetime/examples/experiment09/ChwWorkPerformanceCheck.java
index 1f5e65eb9c3ffdac0f89ef4690547342864af34f..ba4eda095004196eb3167016292893ac4af4b888 100644
--- a/src/performancetest/java/teetime/examples/experiment09/ChwWorkPerformanceCheck.java
+++ b/src/performancetest/java/teetime/examples/experiment09/ChwWorkPerformanceCheck.java
@@ -2,7 +2,7 @@ package teetime.examples.experiment09;
 
 import static org.junit.Assert.assertEquals;
 
-public class ChwWorkPerformanceCheck extends AbstractPerformanceCheck {
+class ChwWorkPerformanceCheck extends AbstractPerformanceCheck {
 
 	@Override
 	public String getCorrespondingPerformanceProfile() {
diff --git a/src/performancetest/java/teetime/examples/experiment09/MethodCallThoughputTimestampAnalysis9Test.java b/src/performancetest/java/teetime/examples/experiment09/MethodCallThoughputTimestampAnalysis9Test.java
index 4267330d592daa97fffe7ae6ae159061b9f71dd2..2fe74dffa95ddee3b1ba162c7716ef71ea33bc94 100644
--- a/src/performancetest/java/teetime/examples/experiment09/MethodCallThoughputTimestampAnalysis9Test.java
+++ b/src/performancetest/java/teetime/examples/experiment09/MethodCallThoughputTimestampAnalysis9Test.java
@@ -19,8 +19,6 @@ import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
-import teetime.examples.experiment10.ChwHomePerformanceCheck;
-import teetime.examples.experiment10.ChwWorkPerformanceCheck;
 import teetime.util.ConstructorClosure;
 import teetime.util.TimestampObject;
 import util.test.PerformanceTest;
diff --git a/src/performancetest/java/teetime/examples/experiment10/ChwHomePerformanceCheck.java b/src/performancetest/java/teetime/examples/experiment10/ChwHomePerformanceCheck.java
index 925ab5bbc66743dc9eacf3b14269856fb2a1b8ec..8bda58f2804773cf7b363c8629aa1eb8eac4607c 100644
--- a/src/performancetest/java/teetime/examples/experiment10/ChwHomePerformanceCheck.java
+++ b/src/performancetest/java/teetime/examples/experiment10/ChwHomePerformanceCheck.java
@@ -2,7 +2,7 @@ package teetime.examples.experiment10;
 
 import static org.junit.Assert.assertEquals;
 
-public class ChwHomePerformanceCheck extends AbstractPerformanceCheck {
+class ChwHomePerformanceCheck extends AbstractPerformanceCheck {
 
 	@Override
 	public String getCorrespondingPerformanceProfile() {
@@ -13,9 +13,9 @@ public class ChwHomePerformanceCheck extends AbstractPerformanceCheck {
 	public void check() {
 		super.check();
 
-		double meanSpeedup = (double) test10.quantiles.get(0.5) / test01.quantiles.get(0.5);
+		double medianSpeedup = (double) test10.quantiles.get(0.5) / test01.quantiles.get(0.5);
 
-		System.out.println("meanSpeedup (10): " + meanSpeedup);
+		System.out.println("meanSpeedup (10): " + medianSpeedup);
 
 		// since 26.06.2014 (incl.)
 		// assertEquals(26, value10, 2.1); // +14
@@ -24,6 +24,6 @@ public class ChwHomePerformanceCheck extends AbstractPerformanceCheck {
 		// since 11.08.2014 (incl.)
 		// assertEquals(47, value10, 2.1); // +21
 		// since 31.08.2014 (incl.)
-		assertEquals(51, meanSpeedup, 2.1);
+		assertEquals(51, medianSpeedup, 3.2);
 	}
 }
diff --git a/src/performancetest/java/teetime/examples/experiment10/ChwWorkPerformanceCheck.java b/src/performancetest/java/teetime/examples/experiment10/ChwWorkPerformanceCheck.java
index 2845935e1e0d2870c1574f79a8682da88f4dc496..bbb49ded324bbea6fa44fa9561c4a7676b1241ea 100644
--- a/src/performancetest/java/teetime/examples/experiment10/ChwWorkPerformanceCheck.java
+++ b/src/performancetest/java/teetime/examples/experiment10/ChwWorkPerformanceCheck.java
@@ -2,7 +2,7 @@ package teetime.examples.experiment10;
 
 import static org.junit.Assert.assertEquals;
 
-public class ChwWorkPerformanceCheck extends AbstractPerformanceCheck {
+class ChwWorkPerformanceCheck extends AbstractPerformanceCheck {
 
 	@Override
 	public String getCorrespondingPerformanceProfile() {
diff --git a/src/performancetest/java/teetime/examples/experiment11/ChwHomePerformanceCheck.java b/src/performancetest/java/teetime/examples/experiment11/ChwHomePerformanceCheck.java
index 6b5d256d1ac58d6147532a0b9dbbf4ce522f9b06..99f8fc667af04219ef2c1451b4fd6fbfdc08b280 100644
--- a/src/performancetest/java/teetime/examples/experiment11/ChwHomePerformanceCheck.java
+++ b/src/performancetest/java/teetime/examples/experiment11/ChwHomePerformanceCheck.java
@@ -5,7 +5,7 @@ import util.test.PerformanceResult;
 import util.test.PerformanceTest;
 import util.test.ProfiledPerformanceAssertion;
 
-public class ChwHomePerformanceCheck extends ProfiledPerformanceAssertion {
+class ChwHomePerformanceCheck extends ProfiledPerformanceAssertion {
 
 	@Override
 	public String getCorrespondingPerformanceProfile() {
diff --git a/src/performancetest/java/teetime/examples/experiment11/ChwWorkPerformanceCheck.java b/src/performancetest/java/teetime/examples/experiment11/ChwWorkPerformanceCheck.java
index 65049146d5c0fa586343bbc91c91f0b3c8c4bb59..8dcfd608223e99f3b33ea50ac6f4424c0a9d0f18 100644
--- a/src/performancetest/java/teetime/examples/experiment11/ChwWorkPerformanceCheck.java
+++ b/src/performancetest/java/teetime/examples/experiment11/ChwWorkPerformanceCheck.java
@@ -5,7 +5,7 @@ import util.test.PerformanceResult;
 import util.test.PerformanceTest;
 import util.test.ProfiledPerformanceAssertion;
 
-public class ChwWorkPerformanceCheck extends ProfiledPerformanceAssertion {
+class ChwWorkPerformanceCheck extends ProfiledPerformanceAssertion {
 
 	@Override
 	public String getCorrespondingPerformanceProfile() {
diff --git a/src/performancetest/java/teetime/examples/experiment14/ChwHomePerformanceCheck.java b/src/performancetest/java/teetime/examples/experiment14/ChwHomePerformanceCheck.java
index 5b34a6d4c9a87ffb1e6eec3f39e10ae86e8b4273..e0b3ec95a3f3300a43f7afaea04b3a851e0f46a1 100644
--- a/src/performancetest/java/teetime/examples/experiment14/ChwHomePerformanceCheck.java
+++ b/src/performancetest/java/teetime/examples/experiment14/ChwHomePerformanceCheck.java
@@ -2,7 +2,7 @@ package teetime.examples.experiment14;
 
 import static org.junit.Assert.assertEquals;
 
-public class ChwHomePerformanceCheck extends AbstractPerformanceCheck {
+class ChwHomePerformanceCheck extends AbstractPerformanceCheck {
 
 	@Override
 	public String getCorrespondingPerformanceProfile() {
@@ -26,6 +26,8 @@ public class ChwHomePerformanceCheck extends AbstractPerformanceCheck {
 		// since 11.08.2014 (incl.)
 		// assertEquals(103, medianSpeedup, 5.1); // +17
 		// since 31.08.2014 (incl.)
-		assertEquals(62, medianSpeedup, 2.1); // -41
+		// assertEquals(62, medianSpeedup, 2.1); // -41
+		// since 04.11.2014 (incl.)
+		assertEquals(84, medianSpeedup, 2.1); // +22
 	}
 }
diff --git a/src/performancetest/java/teetime/examples/experiment14/ChwWorkPerformanceCheck.java b/src/performancetest/java/teetime/examples/experiment14/ChwWorkPerformanceCheck.java
index eeea568d8114f5434186582faa6b72e516715c83..b8ce7c10b4e4348406cb7eef983b8fa45b4c76ce 100644
--- a/src/performancetest/java/teetime/examples/experiment14/ChwWorkPerformanceCheck.java
+++ b/src/performancetest/java/teetime/examples/experiment14/ChwWorkPerformanceCheck.java
@@ -2,7 +2,7 @@ package teetime.examples.experiment14;
 
 import static org.junit.Assert.assertEquals;
 
-public class ChwWorkPerformanceCheck extends AbstractPerformanceCheck {
+class ChwWorkPerformanceCheck extends AbstractPerformanceCheck {
 
 	@Override
 	public String getCorrespondingPerformanceProfile() {
diff --git a/src/performancetest/java/teetime/examples/experiment16/ChwHomePerformanceCheck.java b/src/performancetest/java/teetime/examples/experiment16/ChwHomePerformanceCheck.java
index 29a27cf7b1b80831cc30b5db330429f51686a399..f09cd1e04257d4e9c2a27c1c6edbd3cc298bb718 100644
--- a/src/performancetest/java/teetime/examples/experiment16/ChwHomePerformanceCheck.java
+++ b/src/performancetest/java/teetime/examples/experiment16/ChwHomePerformanceCheck.java
@@ -5,7 +5,7 @@ import util.test.PerformanceResult;
 import util.test.PerformanceTest;
 import util.test.ProfiledPerformanceAssertion;
 
-public class ChwHomePerformanceCheck extends ProfiledPerformanceAssertion {
+class ChwHomePerformanceCheck extends ProfiledPerformanceAssertion {
 
 	@Override
 	public String getCorrespondingPerformanceProfile() {
@@ -28,6 +28,9 @@ public class ChwHomePerformanceCheck extends ProfiledPerformanceAssertion {
 		System.out.println("speedupC: " + speedupC);
 
 		assertEquals(2, speedupB, 0.3);
-		assertEquals(3.6, speedupC, 0.3);
+		// since 31.08.2014 (incl.)
+		// assertEquals(3.6, speedupC, 0.3);
+		// since 04.11.2014 (incl.)
+		assertEquals(5, speedupC, 0.3);
 	}
 }
diff --git a/src/performancetest/java/teetime/examples/experiment16/ChwWorkPerformanceCheck.java b/src/performancetest/java/teetime/examples/experiment16/ChwWorkPerformanceCheck.java
index 8aeae42d96d7c92a9f652774ed37612e8dc3e9de..6a61017acd506ae173520b5c1f26c0027548d20a 100644
--- a/src/performancetest/java/teetime/examples/experiment16/ChwWorkPerformanceCheck.java
+++ b/src/performancetest/java/teetime/examples/experiment16/ChwWorkPerformanceCheck.java
@@ -5,7 +5,7 @@ import util.test.PerformanceResult;
 import util.test.PerformanceTest;
 import util.test.ProfiledPerformanceAssertion;
 
-public class ChwWorkPerformanceCheck extends ProfiledPerformanceAssertion {
+class ChwWorkPerformanceCheck extends ProfiledPerformanceAssertion {
 
 	@Override
 	public void check() {
diff --git a/src/performancetest/java/teetime/examples/loopStage/Countdown.java b/src/performancetest/java/teetime/examples/loopStage/Countdown.java
index f70e3eb60a80eadb286bd2c78095040b26ccd2ed..adbbeff6a36c2351e4ad165b29f390eb7eb9e7d4 100644
--- a/src/performancetest/java/teetime/examples/loopStage/Countdown.java
+++ b/src/performancetest/java/teetime/examples/loopStage/Countdown.java
@@ -17,9 +17,9 @@ public class Countdown extends ProducerStage<Void> {
 	}
 
 	@Override
-	public void onStarting() {
-		this.countdownInputPort.getPipe().add(this.initialCountdown);
+	public void onStarting() throws Exception {
 		super.onStarting();
+		this.countdownInputPort.getPipe().add(this.initialCountdown);
 	}
 
 	@Override