diff --git a/src/main/java/teetime/framework/Stage.java b/src/main/java/teetime/framework/Stage.java
index 7af474dd13600acc188369d8e3b3a824d9fc3b46..582f7b3f1c128b41e8894dc6a23d1c1417e8e3f5 100644
--- a/src/main/java/teetime/framework/Stage.java
+++ b/src/main/java/teetime/framework/Stage.java
@@ -111,7 +111,7 @@ public abstract class Stage {
 	 */
 	public abstract void validateOutputPorts(List<InvalidPortConnection> invalidPortConnections);
 
-	protected void executeStage() {
+	protected final void executeStage() {
 		try {
 			this.execute();
 		} catch (NotEnoughInputException e) {
diff --git a/src/main/java/teetime/stage/basic/AbstractTrigger.java b/src/main/java/teetime/stage/basic/AbstractTrigger.java
index 0296ebb6e2a2006650487af606046a7059f54703..03f3bddcbe60be7c51227ee3a1f6899662414e2e 100644
--- a/src/main/java/teetime/stage/basic/AbstractTrigger.java
+++ b/src/main/java/teetime/stage/basic/AbstractTrigger.java
@@ -32,8 +32,8 @@ abstract class AbstractTrigger<I, T, O> extends AbstractStage {
 	@SuppressWarnings("PMD.EmptyMethodInAbstractClassShouldBeAbstract")
 	// disabled while in development
 	@Override
-	protected void executeStage() {
-
+	protected void execute() {
+		// TODO implement
 	}
 
 }
diff --git a/src/main/java/teetime/stage/basic/Delay.java b/src/main/java/teetime/stage/basic/Delay.java
index 6cf85e0df7fe04b48881c2b456249eb225d2044d..bd99f464709647a91dd62fa44f8b1dda50481365 100644
--- a/src/main/java/teetime/stage/basic/Delay.java
+++ b/src/main/java/teetime/stage/basic/Delay.java
@@ -31,7 +31,7 @@ public final class Delay<T> extends AbstractStage {
 	private final List<T> bufferedElements = new LinkedList<T>();
 
 	@Override
-	public void executeStage() {
+	protected void execute() {
 		T element = inputPort.receive();
 		if (null != element) {
 			bufferedElements.add(element);
@@ -49,7 +49,6 @@ public final class Delay<T> extends AbstractStage {
 		while (!bufferedElements.isEmpty()) {
 			T element = bufferedElements.remove(0);
 			outputPort.send(element);
-			logger.trace("Sent buffered element: " + element);
 		}
 	}
 
@@ -64,7 +63,6 @@ public final class Delay<T> extends AbstractStage {
 		T element;
 		while (null != (element = inputPort.receive())) {
 			outputPort.send(element);
-			logger.trace("Sent element: " + element);
 		}
 
 		super.onTerminating();
@@ -82,10 +80,4 @@ public final class Delay<T> extends AbstractStage {
 		return this.outputPort;
 	}
 
-	@Override
-	protected void execute() {
-		// TODO Auto-generated method stub
-
-	}
-
 }
diff --git a/src/main/java/teetime/stage/basic/merger/Merger.java b/src/main/java/teetime/stage/basic/merger/Merger.java
index a1c427e1c2d67684601fd415929375947a77946c..89bc76226e56997b30506d46edb82d704d58fe7f 100644
--- a/src/main/java/teetime/stage/basic/merger/Merger.java
+++ b/src/main/java/teetime/stage/basic/merger/Merger.java
@@ -58,7 +58,7 @@ public class Merger<T> extends AbstractStage {
 	}
 
 	@Override
-	public void executeStage() {
+	protected void execute() {
 		final T token = this.strategy.getNextInput(this);
 		if (token == null) {
 			returnNoElement();
@@ -119,10 +119,4 @@ public class Merger<T> extends AbstractStage {
 		return this.outputPort;
 	}
 
-	@Override
-	protected void execute() {
-		// TODO Auto-generated method stub
-
-	}
-
 }
diff --git a/src/main/java/teetime/stage/basic/merger/dynamic/DynamicMerger.java b/src/main/java/teetime/stage/basic/merger/dynamic/DynamicMerger.java
index 5559c105665e7a4ef41d14406f5b65c8e9f8b690..20b51253ce2f12aef9d3f164dfcd830789c8ba6f 100644
--- a/src/main/java/teetime/stage/basic/merger/dynamic/DynamicMerger.java
+++ b/src/main/java/teetime/stage/basic/merger/dynamic/DynamicMerger.java
@@ -33,8 +33,8 @@ public class DynamicMerger<T> extends Merger<T> {
 	}
 
 	@Override
-	public void executeStage() {
-		super.executeStage(); // must be first, to throw NotEnoughInputException before checking
+	protected void execute() {
+		super.execute(); // must be first, to throw NotEnoughInputException before checking
 		checkForPendingPortActionRequest();
 	}