diff --git a/src/test/java/teetime/examples/throughput/methodcall/AbstractStage.java b/src/test/java/teetime/examples/throughput/methodcall/AbstractStage.java
index 18f43603251edb14f64ee41f0b5c6d190140277f..acd437ab5afe783fddecfb611ee0d1bc697fcf4b 100644
--- a/src/test/java/teetime/examples/throughput/methodcall/AbstractStage.java
+++ b/src/test/java/teetime/examples/throughput/methodcall/AbstractStage.java
@@ -20,6 +20,8 @@ abstract class AbstractStage<I, O> implements Stage<I, O> {
 
 	private Stage successor;
 
+	private boolean reschedulable;
+
 	// @Override
 	// public InputPort<I> getInputPort() {
 	// return this.inputPort;
@@ -48,18 +50,10 @@ abstract class AbstractStage<I, O> implements Stage<I, O> {
 		// throw new IllegalStateException();
 		// }
 
-		// boolean inputIsEmpty = elements.isEmpty();
-
 		this.execute4(elements);
 
 		this.outputElements.commit();
 
-		// boolean outputIsEmpty = this.outputElements.isEmpty();
-		//
-		// if (inputIsEmpty && outputIsEmpty) {
-		// this.disable();
-		// }
-
 		return this.outputElements;
 	}
 
@@ -69,6 +63,11 @@ abstract class AbstractStage<I, O> implements Stage<I, O> {
 
 	protected final void send(final O element) {
 		this.outputElements.addToTailUncommitted(element);
+
+		this.outputElements.commit();
+		do {
+			CommittableQueue execute = this.next().execute2(this.outputElements);
+		} while (this.next().isReschedulable());
 	}
 
 	@Override
@@ -117,4 +116,13 @@ abstract class AbstractStage<I, O> implements Stage<I, O> {
 		this.successor = successor;
 	}
 
+	@Override
+	public boolean isReschedulable() {
+		return this.reschedulable;
+	}
+
+	public void setReschedulable(final boolean reschedulable) {
+		this.reschedulable = reschedulable;
+	}
+
 }
diff --git a/src/test/java/teetime/examples/throughput/methodcall/ConsumerStage.java b/src/test/java/teetime/examples/throughput/methodcall/ConsumerStage.java
index 0948612d7c19387eff64641f87c49e218531421b..51ecdc300b50f0547dd2d9bd09580954c4072747 100644
--- a/src/test/java/teetime/examples/throughput/methodcall/ConsumerStage.java
+++ b/src/test/java/teetime/examples/throughput/methodcall/ConsumerStage.java
@@ -12,7 +12,9 @@ public abstract class ConsumerStage<I, O> extends AbstractStage<I, O> {
 			return this.outputElements;
 		}
 
-		return super.execute2(elements);
+		CommittableQueue<O> output = super.execute2(elements);
+		this.setReschedulable(!elements.isEmpty()); // costs ~1200 ns on chw-work
+		return output;
 	}
 
 }
diff --git a/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis2.java b/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis2.java
index c1c4f42047cdd9bc691698324ff73bb25ed1a238..330bda0b4eae85e18a37860b7a0c8f617c21e9f8 100644
--- a/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis2.java
+++ b/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis2.java
@@ -80,7 +80,7 @@ public class MethodCallThroughputAnalysis2 extends Analysis {
 
 				do {
 					outputQueue = pipeline.execute2(inputQueue);
-				} while (pipeline.getSchedulingInformation().isActive());
+				} while (pipeline.getSchedulingInformation().isActive() && pipeline.isReschedulable());
 			}
 		};
 
diff --git a/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis8.java b/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis8.java
index 916727cf88daf1f002ca2ed8d9c9436dd69bda22..7c8fecc8518fd04f1ecd07cbe0b632a816852295 100644
--- a/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis8.java
+++ b/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis8.java
@@ -75,11 +75,13 @@ public class MethodCallThroughputAnalysis8 extends Analysis {
 		final AbstractStage[] stages = stageList.toArray(new AbstractStage[0]);
 
 		final WrappingPipeline pipeline = new WrappingPipeline() {
+			private int startIndex;
+
 			@Override
 			public boolean execute() {
 				// using the foreach for arrays (i.e., w/o using an iterator variable) increases the performance from 200ms to 130ms
 				Object element = null;
-				for (int i = 0; i < stages.length; i++) {
+				for (int i = this.startIndex; i < stages.length; i++) {
 					Stage stage = stages[i];
 					element = stage.execute(element);
 					if (element == null) {
diff --git a/src/test/java/teetime/examples/throughput/methodcall/ObjectProducer.java b/src/test/java/teetime/examples/throughput/methodcall/ObjectProducer.java
index 7c4199d271d26f097ffd080ff89673e967d6aa1a..db409576ca95fdf336195304c8eb4818e3bcfb8f 100644
--- a/src/test/java/teetime/examples/throughput/methodcall/ObjectProducer.java
+++ b/src/test/java/teetime/examples/throughput/methodcall/ObjectProducer.java
@@ -40,6 +40,7 @@ public class ObjectProducer<T> extends ProducerStage<Void, T> {
 	@Override
 	public T execute(final Object element) {
 		if (this.numInputObjects == 0) {
+			this.setReschedulable(false);
 			return null;
 		}
 
@@ -89,6 +90,7 @@ public class ObjectProducer<T> extends ProducerStage<Void, T> {
 	@Override
 	protected void execute4(final CommittableQueue<Void> elements) {
 		if (this.numInputObjects == 0) {
+			this.setReschedulable(false);
 			return;
 		}
 
diff --git a/src/test/java/teetime/examples/throughput/methodcall/Pipeline.java b/src/test/java/teetime/examples/throughput/methodcall/Pipeline.java
index f0789f7b7dd7bc58d6c03021d5c497ba9b8cf6c8..8be8637cae36318f037234577d2ba3f8ef0e2d53 100644
--- a/src/test/java/teetime/examples/throughput/methodcall/Pipeline.java
+++ b/src/test/java/teetime/examples/throughput/methodcall/Pipeline.java
@@ -20,6 +20,8 @@ public class Pipeline<I, O> implements Stage<I, O>, OnDisableListener {
 	private int startIndex;
 	private OnDisableListener listener;
 
+	private boolean reschedulable;
+
 	void setFirstStage(final Stage<I, ?> stage) {
 		this.firstStage = stage;
 	}
@@ -46,10 +48,14 @@ public class Pipeline<I, O> implements Stage<I, O>, OnDisableListener {
 
 		// below is faster than above (probably because of the instantiation of a list iterator in each (!) execution)
 		CommittableQueue queue = elements;
-		for (int i = this.startIndex; i < this.stages.length; i++) {
-			Stage<?, ?> stage = this.stages[i];
-			queue = stage.execute2(queue);
-		}
+
+		// for (int i = this.startIndex; i < this.stages.length; i++) {
+		// Stage<?, ?> stage = this.stages[i];
+		// queue = stage.execute2(queue);
+		// }
+
+		this.stages[0].execute2(elements);
+		this.setReschedulable(this.stages[0].isReschedulable());
 		return queue;
 	}
 
@@ -89,6 +95,11 @@ public class Pipeline<I, O> implements Stage<I, O>, OnDisableListener {
 			stage.setParentStage(this, i);
 			stage.setListener(this);
 		}
+
+		for (int i = 0; i < this.stages.length - 1; i++) {
+			Stage<?, ?> stage = this.stages[i];
+			stage.setSuccessor(this.stages[i + 1]);
+		}
 	}
 
 	//
@@ -156,6 +167,15 @@ public class Pipeline<I, O> implements Stage<I, O>, OnDisableListener {
 		throw new IllegalStateException();
 	}
 
+	@Override
+	public boolean isReschedulable() {
+		return this.reschedulable;
+	}
+
+	public void setReschedulable(final boolean reschedulable) {
+		this.reschedulable = reschedulable;
+	}
+
 	// @Override
 	// public OutputPort getOutputPort() {
 	// return this.lastStage.getOutputPort();
diff --git a/src/test/java/teetime/examples/throughput/methodcall/ProducerStage.java b/src/test/java/teetime/examples/throughput/methodcall/ProducerStage.java
index be0f81e4215424c6409efae0db1ab7f52030aba5..262119dc8bfd9eecc35d7b99c0be1ad3bb5116b9 100644
--- a/src/test/java/teetime/examples/throughput/methodcall/ProducerStage.java
+++ b/src/test/java/teetime/examples/throughput/methodcall/ProducerStage.java
@@ -4,6 +4,10 @@ import teetime.util.list.CommittableQueue;
 
 public abstract class ProducerStage<I, O> extends AbstractStage<I, O> {
 
+	public ProducerStage() {
+		this.setReschedulable(true);
+	}
+
 	@Override
 	public CommittableQueue<O> execute2(final CommittableQueue<I> elements) {
 		CommittableQueue<O> outputElements = super.execute2(elements);
@@ -15,4 +19,5 @@ public abstract class ProducerStage<I, O> extends AbstractStage<I, O> {
 
 		return outputElements;
 	}
+
 }
diff --git a/src/test/java/teetime/examples/throughput/methodcall/Stage.java b/src/test/java/teetime/examples/throughput/methodcall/Stage.java
index d9c0670ea165f9c0a95517f11fc74991907c5b4c..10eefc4593599d0d9b94b6cae1794a1da8928e42 100644
--- a/src/test/java/teetime/examples/throughput/methodcall/Stage.java
+++ b/src/test/java/teetime/examples/throughput/methodcall/Stage.java
@@ -27,4 +27,6 @@ public interface Stage<I, O> {
 	Stage next();
 
 	void setSuccessor(Stage<?, ?> successor);
+
+	boolean isReschedulable();
 }