diff --git a/src/main/java/teetime/stage/ByteArray2String.java b/src/main/java/teetime/stage/ByteArray2String.java
index 8bd6234cd99ee1fddbe84d55d4db4c22eeee396e..aa9ca7264f134c38c003fdfd5924327c240d1285 100644
--- a/src/main/java/teetime/stage/ByteArray2String.java
+++ b/src/main/java/teetime/stage/ByteArray2String.java
@@ -20,7 +20,7 @@ import java.nio.charset.Charset;
 import teetime.framework.AbstractConsumerStage;
 import teetime.framework.OutputPort;
 
-public class ByteArray2String extends AbstractConsumerStage<byte[]> {
+public final class ByteArray2String extends AbstractConsumerStage<byte[]> {
 
 	private final OutputPort<String> outputPort = this.createOutputPort();
 
diff --git a/src/main/java/teetime/stage/Cache.java b/src/main/java/teetime/stage/Cache.java
index a3562e520d777b9d05d971de9c1c68561f498e34..392fcd7968da493f3af24328c124fa96f3be2818 100644
--- a/src/main/java/teetime/stage/Cache.java
+++ b/src/main/java/teetime/stage/Cache.java
@@ -23,7 +23,7 @@ import teetime.framework.AbstractConsumerStage;
 import teetime.framework.OutputPort;
 import teetime.util.StopWatch;
 
-public class Cache<T> extends AbstractConsumerStage<T> {
+public final class Cache<T> extends AbstractConsumerStage<T> {
 
 	private final OutputPort<T> outputPort = this.createOutputPort();
 
diff --git a/src/main/java/teetime/stage/CipherByteArray.java b/src/main/java/teetime/stage/CipherByteArray.java
index 1dfaab158173b7706a4843d7a3a7d3de168d1fae..ea8c4fb26c82f0670da9de0017f5b5b24ac4676e 100644
--- a/src/main/java/teetime/stage/CipherByteArray.java
+++ b/src/main/java/teetime/stage/CipherByteArray.java
@@ -30,7 +30,7 @@ import javax.crypto.spec.SecretKeySpec;
 import teetime.framework.AbstractConsumerStage;
 import teetime.framework.OutputPort;
 
-public class CipherByteArray extends AbstractConsumerStage<byte[]> {
+public final class CipherByteArray extends AbstractConsumerStage<byte[]> {
 
 	private final OutputPort<byte[]> outputPort = this.createOutputPort();
 	private Cipher cipher = null;
diff --git a/src/main/java/teetime/stage/Clock.java b/src/main/java/teetime/stage/Clock.java
index 502121fbc4a67610d258c52c4db98dddfafd9d95..27d35ab4ad031eec283ce97a72469779ce908430 100644
--- a/src/main/java/teetime/stage/Clock.java
+++ b/src/main/java/teetime/stage/Clock.java
@@ -18,7 +18,7 @@ package teetime.stage;
 import teetime.framework.AbstractProducerStage;
 import teetime.framework.TerminationStrategy;
 
-public class Clock extends AbstractProducerStage<Long> {
+public final class Clock extends AbstractProducerStage<Long> {
 
 	private boolean initialDelayExceeded = false;
 
diff --git a/src/main/java/teetime/stage/Counter.java b/src/main/java/teetime/stage/Counter.java
index bcc54f1cf6274a839d26d9b5812d64c90e2cb5b3..0808f85c115b0d410f194c27396417c4428075a3 100644
--- a/src/main/java/teetime/stage/Counter.java
+++ b/src/main/java/teetime/stage/Counter.java
@@ -18,7 +18,7 @@ package teetime.stage;
 import teetime.framework.AbstractConsumerStage;
 import teetime.framework.OutputPort;
 
-public class Counter<T> extends AbstractConsumerStage<T> {
+public final class Counter<T> extends AbstractConsumerStage<T> {
 
 	private final OutputPort<T> outputPort = this.createOutputPort();
 
diff --git a/src/main/java/teetime/stage/CountingMapMerger.java b/src/main/java/teetime/stage/CountingMapMerger.java
index 1ca07fb2016ecbfa6ed6f57b8763cb090da3c781..22a5bb1b71451a844654e16711e1330f90b97357 100644
--- a/src/main/java/teetime/stage/CountingMapMerger.java
+++ b/src/main/java/teetime/stage/CountingMapMerger.java
@@ -34,7 +34,7 @@ import teetime.stage.util.CountingMap;
  * @param <T>
  *            Key type of the map to be sent
  */
-public class CountingMapMerger<T> extends AbstractConsumerStage<CountingMap<T>> {
+public final class CountingMapMerger<T> extends AbstractConsumerStage<CountingMap<T>> {
 
 	private final CountingMap<T> result = new CountingMap<T>();
 	private final OutputPort<Map<T, Integer>> port = createOutputPort();
diff --git a/src/main/java/teetime/stage/ElementDelayMeasuringStage.java b/src/main/java/teetime/stage/ElementDelayMeasuringStage.java
index 1769482d7ff344152663c5e5f9927fcf370094f4..5777aebb0daf4ca50a466ddf0fc83c4235c68128 100644
--- a/src/main/java/teetime/stage/ElementDelayMeasuringStage.java
+++ b/src/main/java/teetime/stage/ElementDelayMeasuringStage.java
@@ -22,7 +22,7 @@ import teetime.framework.AbstractConsumerStage;
 import teetime.framework.InputPort;
 import teetime.framework.OutputPort;
 
-public class ElementDelayMeasuringStage<T> extends AbstractConsumerStage<T> {
+public final class ElementDelayMeasuringStage<T> extends AbstractConsumerStage<T> {
 
 	private final InputPort<Long> triggerInputPort = this.createInputPort();
 	private final OutputPort<T> outputPort = this.createOutputPort();
diff --git a/src/main/java/teetime/stage/ElementThroughputMeasuringStage.java b/src/main/java/teetime/stage/ElementThroughputMeasuringStage.java
index 923941317a99fbd0407ebeee6570c723d78915ae..a986ed8ef9e647ebd181afc621c11cef15f14482 100644
--- a/src/main/java/teetime/stage/ElementThroughputMeasuringStage.java
+++ b/src/main/java/teetime/stage/ElementThroughputMeasuringStage.java
@@ -23,7 +23,7 @@ import teetime.framework.AbstractConsumerStage;
 import teetime.framework.InputPort;
 import teetime.framework.OutputPort;
 
-public class ElementThroughputMeasuringStage<T> extends AbstractConsumerStage<T> {
+public final class ElementThroughputMeasuringStage<T> extends AbstractConsumerStage<T> {
 
 	private final InputPort<Long> triggerInputPort = this.createInputPort();
 	private final OutputPort<T> outputPort = this.createOutputPort();
diff --git a/src/main/java/teetime/stage/InitialElementProducer.java b/src/main/java/teetime/stage/InitialElementProducer.java
index 4cc172052248e066509506e01a1d74a977a0195e..733d3be8aeef1404520f9d8a24166ff4d70b973e 100644
--- a/src/main/java/teetime/stage/InitialElementProducer.java
+++ b/src/main/java/teetime/stage/InitialElementProducer.java
@@ -17,7 +17,7 @@ package teetime.stage;
 
 import teetime.framework.AbstractProducerStage;
 
-public class InitialElementProducer<T> extends AbstractProducerStage<T> {
+public final class InitialElementProducer<T> extends AbstractProducerStage<T> {
 
 	private final T[] elements;
 
diff --git a/src/main/java/teetime/stage/MappingCounter.java b/src/main/java/teetime/stage/MappingCounter.java
index 5f433696a1a57c1ea2b28949a78c2a8e3b91254c..ee9ab91800c2124003501b3a0a15e4e9e9deadc4 100644
--- a/src/main/java/teetime/stage/MappingCounter.java
+++ b/src/main/java/teetime/stage/MappingCounter.java
@@ -30,7 +30,7 @@ import teetime.stage.util.CountingMap;
  * @param <T>
  *            Type to be count
  */
-public class MappingCounter<T> extends AbstractConsumerStage<T> {
+public final class MappingCounter<T> extends AbstractConsumerStage<T> {
 
 	private final CountingMap<T> counter = new CountingMap<T>();
 	private final OutputPort<CountingMap<T>> port = createOutputPort();
diff --git a/src/main/java/teetime/stage/basic/distributor/Distributor.java b/src/main/java/teetime/stage/basic/distributor/Distributor.java
index e591cfd20aa189a5f4ae305dc42933c9c4107620..ac5f845af15d2de0fa5c55cb1a57eb0e2ccb60e1 100644
--- a/src/main/java/teetime/stage/basic/distributor/Distributor.java
+++ b/src/main/java/teetime/stage/basic/distributor/Distributor.java
@@ -26,7 +26,7 @@ import teetime.framework.OutputPort;
  * @param T
  *            the type of the input port and the output ports
  */
-public class Distributor<T> extends AbstractConsumerStage<T> {
+public final class Distributor<T> extends AbstractConsumerStage<T> {
 
 	private IDistributorStrategy strategy;
 
diff --git a/src/main/java/teetime/stage/io/ByteArrayFileWriter.java b/src/main/java/teetime/stage/io/ByteArrayFileWriter.java
index b7a3d048c699c5d2970df566d02385edd996f59d..66bb89cb8366c323abacc3e26e602deafd900a72 100644
--- a/src/main/java/teetime/stage/io/ByteArrayFileWriter.java
+++ b/src/main/java/teetime/stage/io/ByteArrayFileWriter.java
@@ -23,7 +23,7 @@ import teetime.framework.AbstractConsumerStage;
 
 import com.google.common.io.Files;
 
-public class ByteArrayFileWriter extends AbstractConsumerStage<byte[]> {
+public final class ByteArrayFileWriter extends AbstractConsumerStage<byte[]> {
 
 	private final File file;
 	private FileOutputStream fo;
diff --git a/src/main/java/teetime/stage/io/Directory2FilesFilter.java b/src/main/java/teetime/stage/io/Directory2FilesFilter.java
index 4833b3ec149a7c448fa21b79e56dd6dc68ccf032..c306b236a5e57abf0f21aa20c23961e8e150bbe5 100644
--- a/src/main/java/teetime/stage/io/Directory2FilesFilter.java
+++ b/src/main/java/teetime/stage/io/Directory2FilesFilter.java
@@ -28,7 +28,7 @@ import teetime.framework.OutputPort;
  * 
  * @since 1.10
  */
-public class Directory2FilesFilter extends AbstractConsumerStage<File> {
+public final class Directory2FilesFilter extends AbstractConsumerStage<File> {
 
 	private final OutputPort<File> outputPort = this.createOutputPort();
 
diff --git a/src/main/java/teetime/stage/io/File2ByteArray.java b/src/main/java/teetime/stage/io/File2ByteArray.java
index 30d0b757f6972d3bebc33e8fb69322e8b8a49a1b..155a45a31a7581d5fb77553afdf9461471976f6f 100644
--- a/src/main/java/teetime/stage/io/File2ByteArray.java
+++ b/src/main/java/teetime/stage/io/File2ByteArray.java
@@ -23,7 +23,7 @@ import teetime.framework.OutputPort;
 
 import com.google.common.io.Files;
 
-public class File2ByteArray extends AbstractConsumerStage<File> {
+public final class File2ByteArray extends AbstractConsumerStage<File> {
 
 	private final OutputPort<byte[]> outputPort = this.createOutputPort();
 
diff --git a/src/main/java/teetime/stage/io/File2TextLinesFilter.java b/src/main/java/teetime/stage/io/File2TextLinesFilter.java
index 609232d90992486265f55ada9bc39dc63e6e52dd..977fef59d491ea0a2663171537a25d33209ce1cf 100644
--- a/src/main/java/teetime/stage/io/File2TextLinesFilter.java
+++ b/src/main/java/teetime/stage/io/File2TextLinesFilter.java
@@ -30,7 +30,7 @@ import teetime.stage.util.TextLine;
  * @author Christian Wulf
  *
  */
-public class File2TextLinesFilter extends AbstractConsumerStage<File> {
+public final class File2TextLinesFilter extends AbstractConsumerStage<File> {
 
 	private final OutputPort<TextLine> outputPort = this.createOutputPort();
 
diff --git a/src/main/java/teetime/stage/io/Printer.java b/src/main/java/teetime/stage/io/Printer.java
index 3aacc3b096fc621a11487c76d8e351abfbf0164b..bd36983163775b5ce6e3b027e58d262da59449fe 100644
--- a/src/main/java/teetime/stage/io/Printer.java
+++ b/src/main/java/teetime/stage/io/Printer.java
@@ -29,7 +29,7 @@ import teetime.framework.AbstractConsumerStage;
  *
  * @since 1.10
  */
-public class Printer<T> extends AbstractConsumerStage<T> {
+public final class Printer<T> extends AbstractConsumerStage<T> {
 
 	public static final String STREAM_STDOUT = "STDOUT";
 	public static final String STREAM_STDERR = "STDERR";
diff --git a/src/main/java/teetime/stage/string/ToLowerCase.java b/src/main/java/teetime/stage/string/ToLowerCase.java
index 9841dbc1f87f241a1c1de6b729b3b36fd258f059..ee32c2bda2396cd81ece31fb68ce350387e02c13 100644
--- a/src/main/java/teetime/stage/string/ToLowerCase.java
+++ b/src/main/java/teetime/stage/string/ToLowerCase.java
@@ -27,7 +27,7 @@ import teetime.framework.OutputPort;
  * @author Nelson Tavares de Sousa
  *
  */
-public class ToLowerCase extends AbstractConsumerStage<String> {
+public final class ToLowerCase extends AbstractConsumerStage<String> {
 
 	private final OutputPort<String> outputPort = this.createOutputPort();
 
diff --git a/src/main/java/teetime/stage/string/WordCounter.java b/src/main/java/teetime/stage/string/WordCounter.java
index 0266f0447b1649fff126c448a72a3d0f4a0408cc..9f26beee3e9093c3ec35d954abd3e29e896f5c49 100644
--- a/src/main/java/teetime/stage/string/WordCounter.java
+++ b/src/main/java/teetime/stage/string/WordCounter.java
@@ -34,7 +34,7 @@ import teetime.stage.util.CountingMap;
  * @author Nelson Tavares de Sousa
  *
  */
-public class WordCounter extends CompositeStage {
+public final class WordCounter extends CompositeStage {
 
 	// This fields are needed for the methods to work.
 	private final Tokenizer tokenizer = new Tokenizer(" ");
diff --git a/src/main/java/teetime/stage/util/CountingMap.java b/src/main/java/teetime/stage/util/CountingMap.java
index 1c995c28f7080c75fe5ab90db03729cae47742a9..e468acaca4ba9dd39260947823e3a039626233a8 100644
--- a/src/main/java/teetime/stage/util/CountingMap.java
+++ b/src/main/java/teetime/stage/util/CountingMap.java
@@ -28,7 +28,7 @@ import java.util.HashMap;
  * @param <T>
  *            Key type to be count
  */
-public class CountingMap<T> extends HashMap<T, Integer> {
+public final class CountingMap<T> extends HashMap<T, Integer> {
 
 	/**
 	 * Generated serialVersionUID
diff --git a/src/main/java/teetime/stage/util/MappingException.java b/src/main/java/teetime/stage/util/MappingException.java
index 8761af48bf3bbc8bf06225372a1d174b46d0173d..456b61911d730afea1d6f85f194210956776b238 100644
--- a/src/main/java/teetime/stage/util/MappingException.java
+++ b/src/main/java/teetime/stage/util/MappingException.java
@@ -20,7 +20,7 @@ package teetime.stage.util;
  *
  * @since 1.10
  */
-public class MappingException extends Exception {
+public final class MappingException extends Exception {
 
 	private static final long serialVersionUID = 7300752837946139350L;
 
diff --git a/src/main/java/teetime/stage/util/TextLine.java b/src/main/java/teetime/stage/util/TextLine.java
index e9ddbd6f756490376025a910ce6add12e08004aa..ecbfdb3295b8d36bb8998c006740d8b0e25cc1a1 100644
--- a/src/main/java/teetime/stage/util/TextLine.java
+++ b/src/main/java/teetime/stage/util/TextLine.java
@@ -22,7 +22,7 @@ import java.io.File;
  *
  * @since 1.10
  */
-public class TextLine {
+public final class TextLine {
 
 	private final File textFile;
 	private final String textLine;