diff --git a/src/main/java/teetime/framework/AbstractStage.java b/src/main/java/teetime/framework/AbstractStage.java
index b541b0aa415e4764db5e340c802d80ce15cd025b..5bb58812432667c97c13f7e1e8f5df8eb0411533 100644
--- a/src/main/java/teetime/framework/AbstractStage.java
+++ b/src/main/java/teetime/framework/AbstractStage.java
@@ -4,10 +4,6 @@ import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
-import java.util.UUID;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import teetime.framework.pipe.DummyPipe;
 import teetime.framework.pipe.IPipe;
@@ -16,14 +12,6 @@ import teetime.framework.validation.InvalidPortConnection;
 
 public abstract class AbstractStage extends Stage {
 
-	private final String id;
-	/**
-	 * A unique logger instance per stage instance
-	 */
-	protected final Logger logger; // NOPMD
-
-	private Stage parentStage;
-
 	private final List<InputPort<?>> inputPortList = new ArrayList<InputPort<?>>();
 	private final List<OutputPort<?>> outputPortList = new ArrayList<OutputPort<?>>();
 
@@ -35,11 +23,6 @@ public abstract class AbstractStage extends Stage {
 	private final Set<ISignal> triggeredSignals = new HashSet<ISignal>();
 	private boolean shouldTerminate;
 
-	public AbstractStage() {
-		this.id = UUID.randomUUID().toString(); // the id should only be represented by a UUID, not additionally by the class name
-		this.logger = LoggerFactory.getLogger(this.getClass().getName() + "(" + this.id + ")");
-	}
-
 	private void connectUnconnectedOutputPorts() {
 		for (OutputPort<?> outputPort : this.cachedOutputPorts) {
 			if (null == outputPort.getPipe()) { // if port is unconnected
@@ -57,21 +40,6 @@ public abstract class AbstractStage extends Stage {
 		return this.cachedOutputPorts;
 	}
 
-	@Override
-	public Stage getParentStage() {
-		return this.parentStage;
-	}
-
-	@Override
-	public void setParentStage(final Stage parentStage, final int index) {
-		this.parentStage = parentStage;
-	}
-
-	@Override
-	public String getId() {
-		return this.id;
-	}
-
 	/**
 	 * May not be invoked outside of IPipe implementations
 	 */
@@ -141,11 +109,6 @@ public abstract class AbstractStage extends Stage {
 		}
 	}
 
-	@Override
-	public String toString() {
-		return this.getClass().getName() + ": " + this.id;
-	}
-
 	@Override
 	public void terminate() {
 		this.shouldTerminate = true;
diff --git a/src/main/java/teetime/framework/Stage.java b/src/main/java/teetime/framework/Stage.java
index d490bc631a669a4b43509bda8c511331f80e754b..99f6c0b8d15139c066de47dd9c287e63dd797da9 100644
--- a/src/main/java/teetime/framework/Stage.java
+++ b/src/main/java/teetime/framework/Stage.java
@@ -1,17 +1,39 @@
 package teetime.framework;
 
 import java.util.List;
+import java.util.UUID;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import teetime.framework.signal.ISignal;
 import teetime.framework.validation.InvalidPortConnection;
 
 public abstract class Stage {
 
-	public abstract String getId();
+	private final String id;
+	/**
+	 * A unique logger instance per stage instance
+	 */
+	protected final Logger logger; // NOPMD
+
+	protected Stage() {
+		this.id = UUID.randomUUID().toString(); // the id should only be represented by a UUID, not additionally by the class name
+		this.logger = LoggerFactory.getLogger(this.getClass().getName() + "(" + this.id + ")");
+	}
+
+	public String getId() {
+		return this.id;
+	}
 
-	public abstract Stage getParentStage();
+	@Override
+	public String toString() {
+		return this.getClass().getName() + ": " + this.getId();
+	}
 
-	public abstract void setParentStage(Stage parentStage, int index);
+	// public abstract Stage getParentStage();
+	//
+	// public abstract void setParentStage(Stage parentStage, int index);
 
 	/**
 	 *
diff --git a/src/main/java/teetime/stage/CollectorSink.java b/src/main/java/teetime/stage/CollectorSink.java
index a18f597dd9297c0272d8d923188c94298be4ce1c..eb4f3a0c5cb4aba15ce875f464499e5d28af8f42 100644
--- a/src/main/java/teetime/stage/CollectorSink.java
+++ b/src/main/java/teetime/stage/CollectorSink.java
@@ -15,6 +15,7 @@
  ***************************************************************************/
 package teetime.stage;
 
+import java.util.ArrayList;
 import java.util.List;
 
 import teetime.framework.AbstractConsumerStage;
@@ -24,39 +25,24 @@ import teetime.framework.AbstractConsumerStage;
  *
  * @since 1.0
  */
-public class CollectorSink<T> extends AbstractConsumerStage<T> {
+public final class CollectorSink<T> extends AbstractConsumerStage<T> {
 
 	private final List<T> elements;
-	private final int threshold;
 
-	public CollectorSink(final List<T> list, final int threshold) {
-		this.elements = list;
-		this.threshold = threshold;
+	/**
+	 * Creates a new {@link CollectorSink} with an {@link ArrayList}.
+	 */
+	public CollectorSink() {
+		this(new ArrayList<T>());
 	}
 
 	public CollectorSink(final List<T> list) {
-		this(list, 100000);
-	}
-
-	@Override
-	public void onTerminating() throws Exception {
-		logNumElements();
-		super.onTerminating();
+		this.elements = list;
 	}
 
 	@Override
 	protected void execute(final T element) {
 		this.elements.add(element);
-
-		if ((this.elements.size() % this.threshold) == 0) {
-			logNumElements();
-		}
-	}
-
-	private void logNumElements() {
-		if (logger.isInfoEnabled()) {
-			logger.info("size: " + this.elements.size());
-		}
 	}
 
 }
diff --git a/src/main/java/teetime/stage/Counter.java b/src/main/java/teetime/stage/Counter.java
index 10632de710b00dbe9d12d3a701feb09fd69cd3d0..0a9b1c88b65d0a480dbb572b4b9263f3bde7a30d 100644
--- a/src/main/java/teetime/stage/Counter.java
+++ b/src/main/java/teetime/stage/Counter.java
@@ -12,7 +12,7 @@ public class Counter<T> extends AbstractConsumerStage<T> {
 	@Override
 	protected void execute(final T element) {
 		this.numElementsPassed++;
-		// this.logger.debug("count: " + this.numElementsPassed);
+
 		outputPort.send(element);
 	}
 
diff --git a/src/main/java/teetime/stage/EveryXthStage.java b/src/main/java/teetime/stage/EveryXthStage.java
new file mode 100644
index 0000000000000000000000000000000000000000..3ff9319df3e295bc30875652efbbd2dbb1a86a68
--- /dev/null
+++ b/src/main/java/teetime/stage/EveryXthStage.java
@@ -0,0 +1,29 @@
+package teetime.stage;
+
+import teetime.framework.AbstractConsumerStage;
+import teetime.framework.OutputPort;
+
+public class EveryXthStage<T> extends AbstractConsumerStage<T> {
+
+	private final OutputPort<T> outputPort = createOutputPort();
+	private final int threshold;
+
+	private int counter;
+
+	public EveryXthStage(final int threshold) {
+		this.threshold = threshold;
+	}
+
+	@Override
+	protected void execute(final T element) {
+		counter++;
+		if (counter % threshold == 0) {
+			outputPort.send(element);
+		}
+	}
+
+	public OutputPort<T> getOutputPort() {
+		return outputPort;
+	}
+
+}
diff --git a/src/main/java/teetime/stage/FileExtensionSwitch.java b/src/main/java/teetime/stage/FileExtensionSwitch.java
index b58f2e9017e67094feffcfa075215a66a49bf86d..3824d223544827b2a24516040aa7309292518cad 100644
--- a/src/main/java/teetime/stage/FileExtensionSwitch.java
+++ b/src/main/java/teetime/stage/FileExtensionSwitch.java
@@ -9,14 +9,17 @@ import teetime.framework.OutputPort;
 
 import com.google.common.io.Files;
 
-public class FileExtensionSwitch extends AbstractConsumerStage<File> {
+public final class FileExtensionSwitch extends AbstractConsumerStage<File> {
 
 	private final Map<String, OutputPort<File>> fileExtensions = new HashMap<String, OutputPort<File>>();
 
 	@Override
 	protected void execute(final File file) {
 		String fileExtension = Files.getFileExtension(file.getAbsolutePath());
-		this.logger.debug("fileExtension: " + fileExtension);
+		if (logger.isDebugEnabled()) {
+			this.logger.debug("fileExtension: " + fileExtension);
+		}
+
 		OutputPort<File> outputPort = this.fileExtensions.get(fileExtension);
 		outputPort.send(file);
 	}
diff --git a/src/main/java/teetime/stage/InstanceCounter.java b/src/main/java/teetime/stage/InstanceCounter.java
index 7b5b4a0d88402a7966a1d75b5f852afeb0d9c40f..16a57baa62f78556fe13dad0427eec1aa4770818 100644
--- a/src/main/java/teetime/stage/InstanceCounter.java
+++ b/src/main/java/teetime/stage/InstanceCounter.java
@@ -3,7 +3,7 @@ package teetime.stage;
 import teetime.framework.AbstractConsumerStage;
 import teetime.framework.OutputPort;
 
-public class InstanceCounter<T, C extends T> extends AbstractConsumerStage<T> {
+public final class InstanceCounter<T, C extends T> extends AbstractConsumerStage<T> {
 
 	private final OutputPort<T> outputPort = this.createOutputPort();
 
diff --git a/src/main/java/teetime/stage/InstanceOfFilter.java b/src/main/java/teetime/stage/InstanceOfFilter.java
index a32b6963a2bd2b7a7f084489a237c123c7692ff5..710ea79f2b42ee100ecb468a2388346c6c384066 100644
--- a/src/main/java/teetime/stage/InstanceOfFilter.java
+++ b/src/main/java/teetime/stage/InstanceOfFilter.java
@@ -5,9 +5,9 @@ import teetime.framework.OutputPort;
 
 /**
  * @author Jan Waller, Nils Christian Ehmke, Christian Wulf
- * 
+ *
  */
-public class InstanceOfFilter<I, O> extends AbstractConsumerStage<I> {
+public final class InstanceOfFilter<I, O> extends AbstractConsumerStage<I> {
 
 	private final OutputPort<O> outputPort = this.createOutputPort();
 
diff --git a/src/main/java/teetime/stage/IterableProducer.java b/src/main/java/teetime/stage/IterableProducer.java
index f83f1201e9951f92e2f0d34050660b8580647a8a..b66245ca71111456570c9ee8db6c3f0250ef2d9f 100644
--- a/src/main/java/teetime/stage/IterableProducer.java
+++ b/src/main/java/teetime/stage/IterableProducer.java
@@ -2,7 +2,7 @@ package teetime.stage;
 
 import teetime.framework.AbstractProducerStage;
 
-public class IterableProducer<O extends Iterable<T>, T> extends AbstractProducerStage<T> {
+public final class IterableProducer<O extends Iterable<T>, T> extends AbstractProducerStage<T> {
 
 	private O iter = null;
 
diff --git a/src/main/java/teetime/stage/NoopFilter.java b/src/main/java/teetime/stage/NoopFilter.java
index f42247ffa82c604d8bb3882796020c43f360e9c0..1b777bf0d01a06235056ab23e2b217416efe0b01 100644
--- a/src/main/java/teetime/stage/NoopFilter.java
+++ b/src/main/java/teetime/stage/NoopFilter.java
@@ -21,9 +21,9 @@ import teetime.framework.OutputPort;
 /**
  * @author Christian Wulf
  *
- * @since 1.10
+ * @since 1.0
  */
-public class NoopFilter<T> extends AbstractConsumerStage<T> {
+public final class NoopFilter<T> extends AbstractConsumerStage<T> {
 
 	private final OutputPort<T> outputPort = this.createOutputPort();
 
diff --git a/src/main/java/teetime/stage/ObjectProducer.java b/src/main/java/teetime/stage/ObjectProducer.java
index 63b4a9c41049aa0a925a5e87c733779de48a6ae3..b4969d4ad4e42e7fd803d4d45f86b3713959f494 100644
--- a/src/main/java/teetime/stage/ObjectProducer.java
+++ b/src/main/java/teetime/stage/ObjectProducer.java
@@ -21,15 +21,15 @@ import teetime.util.ConstructorClosure;
 /**
  * @author Christian Wulf
  *
- * @since 1.10
+ * @since 1.0
  */
-public class ObjectProducer<T> extends AbstractProducerStage<T> {
+public final class ObjectProducer<T> extends AbstractProducerStage<T> {
 
 	private long numInputObjects;
 	private ConstructorClosure<T> inputObjectCreator;
 
 	/**
-	 * @since 1.10
+	 * @since 1.0
 	 */
 	public ObjectProducer(final long numInputObjects, final ConstructorClosure<T> inputObjectCreator) {
 		this.numInputObjects = numInputObjects;
diff --git a/src/main/java/teetime/stage/Relay.java b/src/main/java/teetime/stage/Relay.java
index 08d2ac811e29cbc8f4c1ac9dcc70e6db06deba4a..96e303348613094e57ddec5cd177c22bdf4ecdde 100644
--- a/src/main/java/teetime/stage/Relay.java
+++ b/src/main/java/teetime/stage/Relay.java
@@ -1,11 +1,11 @@
 package teetime.stage;
 
 import teetime.framework.AbstractInterThreadPipe;
-import teetime.framework.InputPort;
 import teetime.framework.AbstractProducerStage;
+import teetime.framework.InputPort;
 import teetime.framework.signal.TerminatingSignal;
 
-public class Relay<T> extends AbstractProducerStage<T> {
+public final class Relay<T> extends AbstractProducerStage<T> {
 
 	private final InputPort<T> inputPort = this.createInputPort();
 
diff --git a/src/main/java/teetime/stage/StartTimestampFilter.java b/src/main/java/teetime/stage/StartTimestampFilter.java
index 67a0cb5d96db0af47e921630a8224bbe6d1f1113..a229af1656f23e6229fec3b008aff91d2c067b2a 100644
--- a/src/main/java/teetime/stage/StartTimestampFilter.java
+++ b/src/main/java/teetime/stage/StartTimestampFilter.java
@@ -24,7 +24,7 @@ import teetime.util.TimestampObject;
  *
  * @since 1.10
  */
-public class StartTimestampFilter extends AbstractConsumerStage<TimestampObject> {
+public final class StartTimestampFilter extends AbstractConsumerStage<TimestampObject> {
 
 	private final OutputPort<TimestampObject> outputPort = this.createOutputPort();
 
diff --git a/src/main/java/teetime/stage/StopTimestampFilter.java b/src/main/java/teetime/stage/StopTimestampFilter.java
index 03eb05732a2af30676bb7c9d2220c30d264c2997..253ea8b0fb872049cd13d5b8b2f75cc86fcddd15 100644
--- a/src/main/java/teetime/stage/StopTimestampFilter.java
+++ b/src/main/java/teetime/stage/StopTimestampFilter.java
@@ -24,7 +24,7 @@ import teetime.util.TimestampObject;
  *
  * @since 1.10
  */
-public class StopTimestampFilter extends AbstractConsumerStage<TimestampObject> {
+public final class StopTimestampFilter extends AbstractConsumerStage<TimestampObject> {
 
 	private final OutputPort<TimestampObject> outputPort = this.createOutputPort();
 
diff --git a/src/main/java/teetime/stage/ZipByteArray.java b/src/main/java/teetime/stage/ZipByteArray.java
index ea3d3d9d3d030caa5cc2c3fd08a0c1fdb09ed2c5..8b251ce669d61a63d0293e1edebdf82ec5bcb174 100644
--- a/src/main/java/teetime/stage/ZipByteArray.java
+++ b/src/main/java/teetime/stage/ZipByteArray.java
@@ -15,7 +15,7 @@ import teetime.framework.OutputPort;
  * @author Nelson Tavares de Sousa
  *
  */
-public class ZipByteArray extends AbstractConsumerStage<byte[]> {
+public final class ZipByteArray extends AbstractConsumerStage<byte[]> {
 
 	private final OutputPort<byte[]> outputPort = this.createOutputPort();
 	private final ZipMode mode;
diff --git a/src/main/java/teetime/stage/basic/Delay.java b/src/main/java/teetime/stage/basic/Delay.java
index d2cf63b4a2225c5cd204abfeffaf2c37a8b7efed..29f152d0fd8589b1d5e75da901f3269baef878c1 100644
--- a/src/main/java/teetime/stage/basic/Delay.java
+++ b/src/main/java/teetime/stage/basic/Delay.java
@@ -7,7 +7,7 @@ import teetime.framework.AbstractStage;
 import teetime.framework.InputPort;
 import teetime.framework.OutputPort;
 
-public class Delay<T> extends AbstractStage {
+public final class Delay<T> extends AbstractStage {
 
 	private final InputPort<T> inputPort = this.createInputPort();
 	private final InputPort<Long> timestampTriggerInputPort = this.createInputPort();
diff --git a/src/main/java/teetime/stage/basic/Sink.java b/src/main/java/teetime/stage/basic/Sink.java
index 1b790990958c02d1be79be5c460bdb39d7f838e4..87ee070d18dc732150a6ef9cd8e4c2e1abff9002 100644
--- a/src/main/java/teetime/stage/basic/Sink.java
+++ b/src/main/java/teetime/stage/basic/Sink.java
@@ -2,7 +2,7 @@ package teetime.stage.basic;
 
 import teetime.framework.AbstractConsumerStage;
 
-public class Sink<T> extends AbstractConsumerStage<T> {
+public final class Sink<T> extends AbstractConsumerStage<T> {
 
 	// PERFORMANCE let the sink remove all available input at once by using a new method receiveAll() that clears the pipe's buffer
 
diff --git a/src/main/java/teetime/stage/basic/distributor/CopyByReferenceStrategy.java b/src/main/java/teetime/stage/basic/distributor/CopyByReferenceStrategy.java
index d5f2697228bbfc7851057eae82e24fa71fe92bcb..3a31976eac4d3831fce0230c543e27631625ed39 100644
--- a/src/main/java/teetime/stage/basic/distributor/CopyByReferenceStrategy.java
+++ b/src/main/java/teetime/stage/basic/distributor/CopyByReferenceStrategy.java
@@ -26,8 +26,8 @@ public final class CopyByReferenceStrategy<T> implements IDistributorStrategy<T>
 
 	@Override
 	public boolean distribute(final OutputPort<T>[] outputPorts, final T element) {
-		for (final OutputPort<T> port : outputPorts) {
-			port.send(element);
+		for (final OutputPort<T> outputPort : outputPorts) {
+			outputPort.send(element);
 		}
 
 		return true;
diff --git a/src/main/java/teetime/stage/basic/distributor/Distributor.java b/src/main/java/teetime/stage/basic/distributor/Distributor.java
index 1f2ed53e5accb5e9bf654b3a4084b68ae3d59875..5fecfe44430510cf97bfdd17097bd6cee527bc84 100644
--- a/src/main/java/teetime/stage/basic/distributor/Distributor.java
+++ b/src/main/java/teetime/stage/basic/distributor/Distributor.java
@@ -22,7 +22,7 @@ import teetime.framework.OutputPort;
 /**
  * @author Christian Wulf
  *
- * @since 1.10
+ * @since 1.0
  *
  * @param T
  *            the type of the input port and the output ports
diff --git a/src/main/java/teetime/stage/basic/merger/Merger.java b/src/main/java/teetime/stage/basic/merger/Merger.java
index 92d370468f7b515f507d36cf1724e868d032a7a9..69b778a4751b8777cf9fab2656972b7af4c4daff 100644
--- a/src/main/java/teetime/stage/basic/merger/Merger.java
+++ b/src/main/java/teetime/stage/basic/merger/Merger.java
@@ -38,7 +38,7 @@ import teetime.framework.signal.ISignal;
  * @param <T>
  *            the type of both the input and output ports
  */
-public class Merger<T> extends AbstractStage {
+public final class Merger<T> extends AbstractStage {
 
 	private final OutputPort<T> outputPort = this.createOutputPort();
 
diff --git a/src/main/java/teetime/stage/io/EveryXthPrinter.java b/src/main/java/teetime/stage/io/EveryXthPrinter.java
new file mode 100644
index 0000000000000000000000000000000000000000..1b17337fa1f9ae09cc5cb2d7a7418afc88f42d53
--- /dev/null
+++ b/src/main/java/teetime/stage/io/EveryXthPrinter.java
@@ -0,0 +1,59 @@
+package teetime.stage.io;
+
+import java.util.List;
+
+import teetime.framework.InputPort;
+import teetime.framework.Stage;
+import teetime.framework.TerminationStrategy;
+import teetime.framework.pipe.IPipeFactory;
+import teetime.framework.pipe.PipeFactoryRegistry;
+import teetime.framework.pipe.PipeFactoryRegistry.PipeOrdering;
+import teetime.framework.pipe.PipeFactoryRegistry.ThreadCommunication;
+import teetime.framework.signal.ISignal;
+import teetime.framework.validation.InvalidPortConnection;
+import teetime.stage.EveryXthStage;
+
+public final class EveryXthPrinter<T> extends Stage {
+
+	private final EveryXthStage<T> everyXthStage;
+	private final Printer<T> printer;
+
+	public EveryXthPrinter(final int threshold) {
+		everyXthStage = new EveryXthStage<T>(threshold);
+		printer = new Printer<T>();
+
+		IPipeFactory pipeFactory = PipeFactoryRegistry.INSTANCE.getPipeFactory(ThreadCommunication.INTRA, PipeOrdering.ARBITRARY, false);
+		pipeFactory.create(everyXthStage.getOutputPort(), printer.getInputPort());
+	}
+
+	@Override
+	protected void executeWithPorts() {
+		everyXthStage.executeWithPorts();
+	}
+
+	@Override
+	public void validateOutputPorts(final List<InvalidPortConnection> invalidPortConnections) {
+		printer.validateOutputPorts(invalidPortConnections);
+	}
+
+	@Override
+	protected void onSignal(final ISignal signal, final InputPort<?> inputPort) {
+		everyXthStage.onSignal(signal, inputPort);
+	}
+
+	@Override
+	protected TerminationStrategy getTerminationStrategy() {
+		return everyXthStage.getTerminationStrategy();
+	}
+
+	@Override
+	protected void terminate() {
+		everyXthStage.terminate();
+	}
+
+	@Override
+	protected boolean shouldBeTerminated() {
+		return everyXthStage.shouldBeTerminated();
+	}
+
+}
diff --git a/src/main/java/teetime/stage/Tokenizer.java b/src/main/java/teetime/stage/string/Tokenizer.java
similarity index 85%
rename from src/main/java/teetime/stage/Tokenizer.java
rename to src/main/java/teetime/stage/string/Tokenizer.java
index 2cbb80b09990fbfe71b1d9c0ea1aa30c0b82b233..812dedf4edeba7a0eaf0ecbd76ce95600aab6819 100644
--- a/src/main/java/teetime/stage/Tokenizer.java
+++ b/src/main/java/teetime/stage/string/Tokenizer.java
@@ -1,11 +1,11 @@
-package teetime.stage;
+package teetime.stage.string;
 
 import java.util.StringTokenizer;
 
 import teetime.framework.AbstractConsumerStage;
 import teetime.framework.OutputPort;
 
-public class Tokenizer extends AbstractConsumerStage<String> {
+public final class Tokenizer extends AbstractConsumerStage<String> {
 
 	private final OutputPort<String> outputPort = this.createOutputPort();
 	private final String regex;
diff --git a/src/main/java/teetime/stage/stringBuffer/StringBufferFilter.java b/src/main/java/teetime/stage/string/buffer/StringBufferFilter.java
similarity index 91%
rename from src/main/java/teetime/stage/stringBuffer/StringBufferFilter.java
rename to src/main/java/teetime/stage/string/buffer/StringBufferFilter.java
index 24d030f52644fabe78d4bcfb9a3b29b27da1797c..6b20b26f189c2fc6ae1f55d590b8d5b5545bbeac 100644
--- a/src/main/java/teetime/stage/stringBuffer/StringBufferFilter.java
+++ b/src/main/java/teetime/stage/string/buffer/StringBufferFilter.java
@@ -13,22 +13,22 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  ***************************************************************************/
-package teetime.stage.stringBuffer;
+package teetime.stage.string.buffer;
 
 import java.util.Collection;
 import java.util.LinkedList;
 
 import teetime.framework.AbstractConsumerStage;
 import teetime.framework.OutputPort;
-import teetime.stage.stringBuffer.handler.AbstractDataTypeHandler;
-import teetime.stage.stringBuffer.util.KiekerHashMap;
+import teetime.stage.string.buffer.handler.AbstractDataTypeHandler;
+import teetime.stage.string.buffer.util.KiekerHashMap;
 
 /**
  * @author Christian Wulf
  *
  * @since 1.10
  */
-public class StringBufferFilter<T> extends AbstractConsumerStage<T> {
+public final class StringBufferFilter<T> extends AbstractConsumerStage<T> {
 
 	private final OutputPort<T> outputPort = this.createOutputPort();
 
diff --git a/src/main/java/teetime/stage/stringBuffer/handler/AbstractDataTypeHandler.java b/src/main/java/teetime/stage/string/buffer/handler/AbstractDataTypeHandler.java
similarity index 93%
rename from src/main/java/teetime/stage/stringBuffer/handler/AbstractDataTypeHandler.java
rename to src/main/java/teetime/stage/string/buffer/handler/AbstractDataTypeHandler.java
index f58688df027c7ab160fabf1a55ddb1f708e161b0..da82bc87a8adbb3625bf830e04196550194d24a1 100644
--- a/src/main/java/teetime/stage/stringBuffer/handler/AbstractDataTypeHandler.java
+++ b/src/main/java/teetime/stage/string/buffer/handler/AbstractDataTypeHandler.java
@@ -13,11 +13,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  ***************************************************************************/
-package teetime.stage.stringBuffer.handler;
+package teetime.stage.string.buffer.handler;
 
 import org.slf4j.Logger;
 
-import teetime.stage.stringBuffer.util.KiekerHashMap;
+import teetime.stage.string.buffer.util.KiekerHashMap;
 
 /**
  * @author Christian Wulf
diff --git a/src/main/java/teetime/stage/stringBuffer/handler/StringHandler.java b/src/main/java/teetime/stage/string/buffer/handler/StringHandler.java
similarity index 96%
rename from src/main/java/teetime/stage/stringBuffer/handler/StringHandler.java
rename to src/main/java/teetime/stage/string/buffer/handler/StringHandler.java
index 82c356faf7727ec9d4b1521a9aceb8594837afca..83e28fa621ad595a9addca807a5a38cdd7f81c05 100644
--- a/src/main/java/teetime/stage/stringBuffer/handler/StringHandler.java
+++ b/src/main/java/teetime/stage/string/buffer/handler/StringHandler.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  ***************************************************************************/
-package teetime.stage.stringBuffer.handler;
+package teetime.stage.string.buffer.handler;
 
 /**
  * @author Christian Wulf
diff --git a/src/main/java/teetime/stage/stringBuffer/util/KiekerHashMap.java b/src/main/java/teetime/stage/string/buffer/util/KiekerHashMap.java
similarity index 99%
rename from src/main/java/teetime/stage/stringBuffer/util/KiekerHashMap.java
rename to src/main/java/teetime/stage/string/buffer/util/KiekerHashMap.java
index 82667eed1ccd4e0a0579a55d2587391f9d1dbadb..259265abc4d2b84b560ffff2215b9c9ed4f1cad1 100644
--- a/src/main/java/teetime/stage/stringBuffer/util/KiekerHashMap.java
+++ b/src/main/java/teetime/stage/string/buffer/util/KiekerHashMap.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  ***************************************************************************/
-package teetime.stage.stringBuffer.util;
+package teetime.stage.string.buffer.util;
 
 import java.lang.ref.SoftReference;
 import java.util.concurrent.locks.ReentrantLock;
diff --git a/src/performancetest/java/teetime/framework/OldPipeline.java b/src/performancetest/java/teetime/framework/OldPipeline.java
index 05bdb62f3e148053f9906947f9271fd7dd9341fd..56c8fffd59bc22e7b2a9efec73b9c83095ed502b 100644
--- a/src/performancetest/java/teetime/framework/OldPipeline.java
+++ b/src/performancetest/java/teetime/framework/OldPipeline.java
@@ -27,26 +27,11 @@ public class OldPipeline<FirstStage extends Stage, LastStage extends Stage> exte
 		this.lastStage = lastStage;
 	}
 
-	@Override
-	public String getId() {
-		return this.firstStage.getId();
-	}
-
 	@Override
 	public void executeWithPorts() {
 		this.firstStage.executeWithPorts();
 	}
 
-	@Override
-	public Stage getParentStage() {
-		return this.firstStage.getParentStage();
-	}
-
-	@Override
-	public void setParentStage(final Stage parentStage, final int index) {
-		this.firstStage.setParentStage(parentStage, index);
-	}
-
 	@Override
 	public void onSignal(final ISignal signal, final InputPort<?> inputPort) {
 		this.firstStage.onSignal(signal, inputPort);
@@ -59,20 +44,17 @@ public class OldPipeline<FirstStage extends Stage, LastStage extends Stage> exte
 
 	@Override
 	public TerminationStrategy getTerminationStrategy() {
-		// TODO Auto-generated method stub
-		return null;
+		return firstStage.getTerminationStrategy();
 	}
 
 	@Override
 	public void terminate() {
-		// TODO Auto-generated method stub
-
+		firstStage.terminate();
 	}
 
 	@Override
 	public boolean shouldBeTerminated() {
-		// TODO Auto-generated method stub
-		return false;
+		return firstStage.shouldBeTerminated();
 	}
 
 }
diff --git a/src/test/java/teetime/examples/tokenizer/TokenizerConfiguration.java b/src/test/java/teetime/examples/tokenizer/TokenizerConfiguration.java
index d8c344e366736cb8fb67d9e30b6ac0705e438fce..a7af14594eaf8ae8ee0628b17b88e924dbe4a7ef 100644
--- a/src/test/java/teetime/examples/tokenizer/TokenizerConfiguration.java
+++ b/src/test/java/teetime/examples/tokenizer/TokenizerConfiguration.java
@@ -10,10 +10,10 @@ import teetime.stage.CipherByteArray;
 import teetime.stage.CipherByteArray.CipherMode;
 import teetime.stage.Counter;
 import teetime.stage.InitialElementProducer;
-import teetime.stage.Tokenizer;
 import teetime.stage.ZipByteArray;
 import teetime.stage.ZipByteArray.ZipMode;
 import teetime.stage.io.File2ByteArray;
+import teetime.stage.string.Tokenizer;
 
 public class TokenizerConfiguration extends AnalysisConfiguration {