diff --git a/src/main/java/teetime/framework/AbstractStage.java b/src/main/java/teetime/framework/AbstractStage.java
index 59012068d271b5ab42fb903cf8da037e51a34575..50c9ee708cce74aa4257336f900a51f0a61ff4b4 100644
--- a/src/main/java/teetime/framework/AbstractStage.java
+++ b/src/main/java/teetime/framework/AbstractStage.java
@@ -40,7 +40,6 @@ import teetime.util.framework.port.PortRemovedListener;
  * Represents a minimal Stage, with some pre-defined methods.
  * Implemented stages need to adapt all abstract methods with own implementations.
  */
-@SuppressWarnings("PMD.AbstractNaming")
 public abstract class AbstractStage {
 
 	private static final ConcurrentMap<String, Integer> INSTANCES_COUNTER = new ConcurrentHashMap<String, Integer>();
@@ -100,7 +99,6 @@ public abstract class AbstractStage {
 		return newId;
 	}
 
-	@SuppressWarnings("PMD.DefaultPackage")
 	static void clearInstanceCounters() {
 		INSTANCES_COUNTER.clear();
 	}
@@ -208,7 +206,6 @@ public abstract class AbstractStage {
 	 * @param inputPort
 	 *            The port which received the signal
 	 */
-	@SuppressWarnings("PMD.DataflowAnomalyAnalysis")
 	final void onSignal(final ISignal signal, final InputPort<?> inputPort) {
 		Class<? extends ISignal> signalClass = signal.getClass();
 
diff --git a/src/main/java/teetime/framework/AbstractCompositeStage.java b/src/main/java/teetime/framework/CompositeStage.java
similarity index 92%
rename from src/main/java/teetime/framework/AbstractCompositeStage.java
rename to src/main/java/teetime/framework/CompositeStage.java
index 3b421195e813be4d07da5512bf0c0f9a0d06f455..27cc0acbf543364ccae5b70671b2d958c2d210b2 100644
--- a/src/main/java/teetime/framework/AbstractCompositeStage.java
+++ b/src/main/java/teetime/framework/CompositeStage.java
@@ -19,19 +19,24 @@ import teetime.framework.pipe.InstantiationPipe;
 
 /**
  * Represents a minimal stage that composes several other stages.
+ * In order to work with this class, you need to extend from it and work from within the extending class.
  *
  * @since 2.0
  *
  * @author Christian Wulf, Nelson Tavares de Sousa
  *
  */
-public abstract class AbstractCompositeStage {
+public class CompositeStage {
 
 	/**
 	 * Default capacity for pipes
 	 */
 	private static final int DEFAULT_CAPACITY = 4;
 
+	protected CompositeStage() {
+		// prohibit instantiation of this class
+	}
+
 	/**
 	 * Connects two ports with a pipe with a default capacity of currently {@value #DEFAULT_CAPACITY}.
 	 *
diff --git a/src/main/java/teetime/framework/Configuration.java b/src/main/java/teetime/framework/Configuration.java
index 05e3c2b948190c516a638ac09715f4591a9b97e8..06f1b654d4b75b5ec0c52bee89eaec63cef23313 100644
--- a/src/main/java/teetime/framework/Configuration.java
+++ b/src/main/java/teetime/framework/Configuration.java
@@ -26,7 +26,7 @@ import teetime.framework.exceptionHandling.TerminatingExceptionListenerFactory;
  * @since 2.0
  *
  */
-public class Configuration extends AbstractCompositeStage {
+public class Configuration extends CompositeStage {
 
 	private final AbstractExceptionListenerFactory<?> factory;
 	private final ConfigurationContext context;
diff --git a/src/main/java/teetime/stage/io/EveryXthPrinter.java b/src/main/java/teetime/stage/io/EveryXthPrinter.java
index 91c0b39818dc1984aa39475c189bd3f70a755db0..1f88fe8a005e4e2258b11170103fb31c434ad5ee 100644
--- a/src/main/java/teetime/stage/io/EveryXthPrinter.java
+++ b/src/main/java/teetime/stage/io/EveryXthPrinter.java
@@ -18,7 +18,7 @@ package teetime.stage.io;
 import java.util.ArrayList;
 import java.util.List;
 
-import teetime.framework.AbstractCompositeStage;
+import teetime.framework.CompositeStage;
 import teetime.framework.InputPort;
 import teetime.framework.OutputPort;
 import teetime.framework.AbstractStage;
@@ -26,7 +26,7 @@ import teetime.stage.EveryXthStage;
 import teetime.stage.basic.distributor.Distributor;
 import teetime.stage.basic.distributor.strategy.CopyByReferenceStrategy;
 
-public final class EveryXthPrinter<T> extends AbstractCompositeStage {
+public final class EveryXthPrinter<T> extends CompositeStage {
 
 	private final Distributor<T> distributor;
 	private final List<AbstractStage> lastStages = new ArrayList<AbstractStage>();
diff --git a/src/main/java/teetime/stage/string/WordCounter.java b/src/main/java/teetime/stage/string/WordCounter.java
index db1679cc3b260d88506889f17f95c337b2ba6af5..4323c31cfe9e615f31a00650f7bc8a071d980594 100644
--- a/src/main/java/teetime/stage/string/WordCounter.java
+++ b/src/main/java/teetime/stage/string/WordCounter.java
@@ -15,7 +15,7 @@
  */
 package teetime.stage.string;
 
-import teetime.framework.AbstractCompositeStage;
+import teetime.framework.CompositeStage;
 import teetime.framework.InputPort;
 import teetime.framework.OutputPort;
 import teetime.stage.MappingCounter;
@@ -31,7 +31,7 @@ import teetime.stage.util.CountingMap;
  * @author Nelson Tavares de Sousa
  *
  */
-public final class WordCounter extends AbstractCompositeStage implements ITaskFarmDuplicable<String, CountingMap<String>> {
+public final class WordCounter extends CompositeStage implements ITaskFarmDuplicable<String, CountingMap<String>> {
 
 	private final Tokenizer tokenizer;
 	private final MappingCounter<String> mapCounter;
diff --git a/src/main/java/teetime/stage/taskfarm/ITaskFarmDuplicable.java b/src/main/java/teetime/stage/taskfarm/ITaskFarmDuplicable.java
index 63bf0300323b1d769f36d2e1aa54e62492ca2005..556314b957aa6a46b746ecb3df20400429395ba2 100644
--- a/src/main/java/teetime/stage/taskfarm/ITaskFarmDuplicable.java
+++ b/src/main/java/teetime/stage/taskfarm/ITaskFarmDuplicable.java
@@ -19,7 +19,7 @@ import teetime.framework.InputPort;
 import teetime.framework.OutputPort;
 
 /**
- * Any {@link teetime.framework.AbstractStage AbstractStage} or {@link teetime.framework.AbstractCompositeStage AbstractCompositeStage} implementing this interface
+ * Any {@link teetime.framework.AbstractStage AbstractStage} or {@link teetime.framework.CompositeStage AbstractCompositeStage} implementing this interface
  * can be used by a Task Farm as an enclosed stage. The enclosed
  * stage may not have more than one input or output port each.
  *
diff --git a/src/main/java/teetime/stage/taskfarm/TaskFarmStage.java b/src/main/java/teetime/stage/taskfarm/TaskFarmStage.java
index 17e2c17d207ce8a79d0853668b3a6f3dadc2d148..d5cd237ecb7da203fe58e4ded8fe95624518a7a6 100644
--- a/src/main/java/teetime/stage/taskfarm/TaskFarmStage.java
+++ b/src/main/java/teetime/stage/taskfarm/TaskFarmStage.java
@@ -18,7 +18,7 @@ package teetime.stage.taskfarm;
 import java.util.LinkedList;
 import java.util.List;
 
-import teetime.framework.AbstractCompositeStage;
+import teetime.framework.CompositeStage;
 import teetime.framework.InputPort;
 import teetime.framework.OutputPort;
 import teetime.stage.basic.distributor.dynamic.DynamicDistributor;
@@ -41,7 +41,7 @@ import teetime.stage.taskfarm.monitoring.SingleTaskFarmMonitoringService;
  * @param <T>
  *            Type of the parallelized stage
  */
-public final class TaskFarmStage<I, O, T extends ITaskFarmDuplicable<I, O>> extends AbstractCompositeStage {
+public final class TaskFarmStage<I, O, T extends ITaskFarmDuplicable<I, O>> extends CompositeStage {
 
 	/** currently existing worker stages **/
 	private final List<ITaskFarmDuplicable<I, O>> enclosedStageInstances = new LinkedList<ITaskFarmDuplicable<I, O>>();
diff --git a/src/test/java/teetime/framework/CompositeCounterIncrementer.java b/src/test/java/teetime/framework/CompositeCounterIncrementer.java
index 6feb5ac1e101a2746678db7de9af0520282b199c..10dd62b9626098f8ee14dc151cbace7c142555d0 100644
--- a/src/test/java/teetime/framework/CompositeCounterIncrementer.java
+++ b/src/test/java/teetime/framework/CompositeCounterIncrementer.java
@@ -15,7 +15,7 @@
  */
 package teetime.framework;
 
-class CompositeCounterIncrementer extends AbstractCompositeStage {
+class CompositeCounterIncrementer extends CompositeStage {
 
 	private final InputPort<CounterContainer> inputPort;
 	private final OutputPort<CounterContainer> outputPort;
diff --git a/src/test/java/teetime/framework/CompositeProducerStage.java b/src/test/java/teetime/framework/CompositeProducerStage.java
index d763a7b0024d13886eafbcdea7f7d533dd98a573..66b8a23f83386bd7f908754f72ab1f247dbd4107 100644
--- a/src/test/java/teetime/framework/CompositeProducerStage.java
+++ b/src/test/java/teetime/framework/CompositeProducerStage.java
@@ -26,7 +26,7 @@ import teetime.stage.basic.merger.Merger;
  * @param <T>
  *            the element type of the producer
  */
-class CompositeProducerStage<T> extends AbstractCompositeStage {
+class CompositeProducerStage<T> extends CompositeStage {
 
 	private final Merger<T> merger;
 
diff --git a/src/test/java/teetime/framework/AbstractCompositeStageTest.java b/src/test/java/teetime/framework/CompositeStageTest.java
similarity index 99%
rename from src/test/java/teetime/framework/AbstractCompositeStageTest.java
rename to src/test/java/teetime/framework/CompositeStageTest.java
index 1e8730e921067f0ef168952e494f7a5ba39fa8b7..be9d357d8801bebee84ad562f3f1fe921544679d 100644
--- a/src/test/java/teetime/framework/AbstractCompositeStageTest.java
+++ b/src/test/java/teetime/framework/CompositeStageTest.java
@@ -40,7 +40,7 @@ import teetime.testutil.AssertHelper;
  * @author Christian Wulf
  *
  */
-public class AbstractCompositeStageTest {
+public class CompositeStageTest {
 
 	@Before
 	public void before() {
diff --git a/src/test/java/teetime/stage/taskfarm/TaskFarmStageTestConfiguration.java b/src/test/java/teetime/stage/taskfarm/TaskFarmStageTestConfiguration.java
index 3f35c80d2d374cfb9810150bd3f79e171beb22df..30abe6e0c26c1e276c34f4bb0d3c01933a0115b1 100644
--- a/src/test/java/teetime/stage/taskfarm/TaskFarmStageTestConfiguration.java
+++ b/src/test/java/teetime/stage/taskfarm/TaskFarmStageTestConfiguration.java
@@ -18,7 +18,7 @@ package teetime.stage.taskfarm;
 import java.util.LinkedList;
 import java.util.List;
 
-import teetime.framework.AbstractCompositeStage;
+import teetime.framework.CompositeStage;
 import teetime.framework.Configuration;
 import teetime.framework.InputPort;
 import teetime.framework.OutputPort;
@@ -54,7 +54,7 @@ public class TaskFarmStageTestConfiguration extends Configuration {
 		connectPorts(taskFarmStage.getOutputPort(), sink.getInputPort());
 	}
 
-	private static class CompositeTestStage extends AbstractCompositeStage implements ITaskFarmDuplicable<Long, String> {
+	private static class CompositeTestStage extends CompositeStage implements ITaskFarmDuplicable<Long, String> {
 		private final PlusOneInStringStage pOne = new PlusOneInStringStage();
 		private final StringDuplicationStage sDup = new StringDuplicationStage();