diff --git a/src/main/java/teetime/framework/A3PipeInstantiation.java b/src/main/java/teetime/framework/A3PipeInstantiation.java
index 4bbe1a9cf9315b59b96ce98a788ed89d3b5c3377..e5b6ea062f46983efc659108b24238bc17b2ca82 100644
--- a/src/main/java/teetime/framework/A3PipeInstantiation.java
+++ b/src/main/java/teetime/framework/A3PipeInstantiation.java
@@ -18,6 +18,9 @@ package teetime.framework;
 import java.util.HashSet;
 import java.util.Set;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import teetime.framework.Traverser.VisitorBehavior;
 import teetime.framework.pipe.IPipe;
 import teetime.framework.pipe.IPipeFactory;
@@ -31,6 +34,8 @@ import teetime.framework.pipe.UnboundedSpScPipeFactory;
  */
 class A3PipeInstantiation implements ITraverserVisitor {
 
+	private static final Logger LOGGER = LoggerFactory.getLogger(A3PipeInstantiation.class);
+
 	private static final IPipeFactory interBoundedThreadPipeFactory = new SpScPipeFactory();
 	private static final IPipeFactory interUnboundedThreadPipeFactory = new UnboundedSpScPipeFactory();
 	private static final IPipeFactory intraThreadPipeFactory = new SingleElementPipeFactory();
@@ -67,14 +72,22 @@ class A3PipeInstantiation implements ITraverserVisitor {
 			// inter
 			if (pipe.capacity() != 0) {
 				interBoundedThreadPipeFactory.create(pipe.getSourcePort(), pipe.getTargetPort(), pipe.capacity());
+				if (LOGGER.isDebugEnabled()) {
+					LOGGER.debug("Connected (bounded) " + pipe.getSourcePort() + " and " + pipe.getTargetPort());
+				}
 			} else {
 				interUnboundedThreadPipeFactory.create(pipe.getSourcePort(), pipe.getTargetPort(), 4);
+				if (LOGGER.isDebugEnabled()) {
+					LOGGER.debug("Connected (unbounded) " + pipe.getSourcePort() + " and " + pipe.getTargetPort());
+				}
 			}
 		} else {
 			// normal or reflexive pipe => intra
 			intraThreadPipeFactory.create(pipe.getSourcePort(), pipe.getTargetPort(), 4);
+			if (LOGGER.isDebugEnabled()) {
+				LOGGER.debug("Connected (unsynch) " + pipe.getSourcePort() + " and " + pipe.getTargetPort());
+			}
 		}
 
 	}
-
 }
diff --git a/src/main/java/teetime/framework/AbstractStage.java b/src/main/java/teetime/framework/AbstractStage.java
index 6a6769cae34e0e2bdad803326a9bddcedfefa4dd..6496217823a2f07bbff3fe2f16c83472b803db13 100644
--- a/src/main/java/teetime/framework/AbstractStage.java
+++ b/src/main/java/teetime/framework/AbstractStage.java
@@ -91,7 +91,9 @@ public abstract class AbstractStage extends Stage {
 
 	private void changeState(final StageState newState) {
 		currentState = newState;
-		logger.trace(newState.toString());
+		if (logger.isTraceEnabled()) {
+			logger.trace(newState.toString());
+		}
 	}
 
 	@Override
diff --git a/src/main/java/teetime/framework/InputPort.java b/src/main/java/teetime/framework/InputPort.java
index a11035a31c38955dde678e29dedcc40a28838c05..d4409bb173d5c282510c0886842f70e954867ee2 100644
--- a/src/main/java/teetime/framework/InputPort.java
+++ b/src/main/java/teetime/framework/InputPort.java
@@ -24,7 +24,7 @@ package teetime.framework;
  *
  * @since 1.0
  */
-public class InputPort<T> extends AbstractPort<T> {
+public final class InputPort<T> extends AbstractPort<T> {
 
 	InputPort(final Class<T> type, final Stage owningStage, final String portName) {
 		super(type, owningStage, portName);
diff --git a/src/main/java/teetime/framework/OutputPort.java b/src/main/java/teetime/framework/OutputPort.java
index 7bdb677d051222714f339b8674ea6194cec3fe57..0f2db809a9c3edd66a1c6d07b478247cfce4fe94 100644
--- a/src/main/java/teetime/framework/OutputPort.java
+++ b/src/main/java/teetime/framework/OutputPort.java
@@ -28,7 +28,7 @@ import teetime.framework.signal.TerminatingSignal;
  *
  * @since 1.0
  */
-public class OutputPort<T> extends AbstractPort<T> {
+public final class OutputPort<T> extends AbstractPort<T> {
 
 	OutputPort(final Class<T> type, final Stage owningStage, final String portName) {
 		super(type, owningStage, portName);