diff --git a/results/overhead-findings.txt b/results/overhead-findings.txt
new file mode 100644
index 0000000000000000000000000000000000000000..888c4d3e9404787aba0188245325c79c45eae829
--- /dev/null
+++ b/results/overhead-findings.txt
@@ -0,0 +1,9 @@
+[increases overhead]
+-for loop with list vs. array (due to new instantiation of iterator)
+-for loop with super type vs. concrete type (due to less JIT optimization possibilities)
+-
+
+[irrelevant w.r.t. overhead]
+-foreach vs. index-based iteration
+-iterative vs. recursive execution
+-
\ No newline at end of file
diff --git a/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis1.java b/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis1.java
index f85dea6775b32b6c6569b0ac70b8be11a902e529..e99550676199947c63d44d805f8bb0ec56ba911e 100644
--- a/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis1.java
+++ b/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis1.java
@@ -19,6 +19,11 @@ import java.util.List;
 import java.util.concurrent.Callable;
 
 import teetime.examples.throughput.TimestampObject;
+import teetime.examples.throughput.methodcall.stage.CollectorSink;
+import teetime.examples.throughput.methodcall.stage.NoopFilter;
+import teetime.examples.throughput.methodcall.stage.ObjectProducer;
+import teetime.examples.throughput.methodcall.stage.StartTimestampFilter;
+import teetime.examples.throughput.methodcall.stage.StopTimestampFilter;
 import teetime.framework.core.Analysis;
 
 /**
diff --git a/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis2.java b/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis2.java
index 330bda0b4eae85e18a37860b7a0c8f617c21e9f8..fb0cf885ba5af9b7eca5d8097bcd3fbc73bcd09e 100644
--- a/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis2.java
+++ b/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis2.java
@@ -19,6 +19,12 @@ import java.util.List;
 import java.util.concurrent.Callable;
 
 import teetime.examples.throughput.TimestampObject;
+import teetime.examples.throughput.methodcall.stage.CollectorSink;
+import teetime.examples.throughput.methodcall.stage.NoopFilter;
+import teetime.examples.throughput.methodcall.stage.ObjectProducer;
+import teetime.examples.throughput.methodcall.stage.Pipeline;
+import teetime.examples.throughput.methodcall.stage.StartTimestampFilter;
+import teetime.examples.throughput.methodcall.stage.StopTimestampFilter;
 import teetime.framework.core.Analysis;
 import teetime.util.list.CommittableQueue;
 import teetime.util.list.CommittableResizableArrayQueue;
diff --git a/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis3.java b/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis3.java
index 29b7a0ab53511842a483b9bffae34ddd0c8f27b5..e40e3bb5f6d3e7a0de7cc0fa364480d6674f07b0 100644
--- a/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis3.java
+++ b/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis3.java
@@ -21,6 +21,11 @@ import java.util.List;
 import java.util.concurrent.Callable;
 
 import teetime.examples.throughput.TimestampObject;
+import teetime.examples.throughput.methodcall.stage.CollectorSink;
+import teetime.examples.throughput.methodcall.stage.NoopFilter;
+import teetime.examples.throughput.methodcall.stage.ObjectProducer;
+import teetime.examples.throughput.methodcall.stage.StartTimestampFilter;
+import teetime.examples.throughput.methodcall.stage.StopTimestampFilter;
 import teetime.framework.core.Analysis;
 
 /**
diff --git a/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis4.java b/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis4.java
index eaf0c945dd22ae8dc7fe72861bd8039dc5e55a3a..f60c083801573fbf8147402f5b35dbf11ce72339 100644
--- a/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis4.java
+++ b/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis4.java
@@ -21,6 +21,11 @@ import java.util.List;
 import java.util.concurrent.Callable;
 
 import teetime.examples.throughput.TimestampObject;
+import teetime.examples.throughput.methodcall.stage.CollectorSink;
+import teetime.examples.throughput.methodcall.stage.NoopFilter;
+import teetime.examples.throughput.methodcall.stage.ObjectProducer;
+import teetime.examples.throughput.methodcall.stage.StartTimestampFilter;
+import teetime.examples.throughput.methodcall.stage.StopTimestampFilter;
 import teetime.framework.core.Analysis;
 
 /**
diff --git a/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis5.java b/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis5.java
index 394e28a6854c26f2a21819dfaaf36c1781f84c2b..ae54e4b4730fdca736f80af232ab829069ab1606 100644
--- a/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis5.java
+++ b/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis5.java
@@ -21,6 +21,11 @@ import java.util.List;
 import java.util.concurrent.Callable;
 
 import teetime.examples.throughput.TimestampObject;
+import teetime.examples.throughput.methodcall.stage.CollectorSink;
+import teetime.examples.throughput.methodcall.stage.NoopFilter;
+import teetime.examples.throughput.methodcall.stage.ObjectProducer;
+import teetime.examples.throughput.methodcall.stage.StartTimestampFilter;
+import teetime.examples.throughput.methodcall.stage.StopTimestampFilter;
 import teetime.framework.core.Analysis;
 
 /**
diff --git a/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis6.java b/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis6.java
index 2b74c99a09b5624e6a96a83ab052db3f75b6d2aa..ee056d28ea06fc9ce6b2e7f4db5e5454e394620f 100644
--- a/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis6.java
+++ b/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis6.java
@@ -21,6 +21,11 @@ import java.util.List;
 import java.util.concurrent.Callable;
 
 import teetime.examples.throughput.TimestampObject;
+import teetime.examples.throughput.methodcall.stage.CollectorSink;
+import teetime.examples.throughput.methodcall.stage.NoopFilter;
+import teetime.examples.throughput.methodcall.stage.ObjectProducer;
+import teetime.examples.throughput.methodcall.stage.StartTimestampFilter;
+import teetime.examples.throughput.methodcall.stage.StopTimestampFilter;
 import teetime.framework.core.Analysis;
 
 /**
diff --git a/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis7.java b/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis7.java
index b9e4060e639204e72c3f8572852670de449d009e..7f865f5a8c16c0a8e56d2ea7346b4efdf1d09fba 100644
--- a/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis7.java
+++ b/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis7.java
@@ -21,6 +21,11 @@ import java.util.List;
 import java.util.concurrent.Callable;
 
 import teetime.examples.throughput.TimestampObject;
+import teetime.examples.throughput.methodcall.stage.CollectorSink;
+import teetime.examples.throughput.methodcall.stage.NoopFilter;
+import teetime.examples.throughput.methodcall.stage.ObjectProducer;
+import teetime.examples.throughput.methodcall.stage.StartTimestampFilter;
+import teetime.examples.throughput.methodcall.stage.StopTimestampFilter;
 import teetime.framework.core.Analysis;
 
 /**
diff --git a/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis8.java b/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis8.java
index 7c8fecc8518fd04f1ecd07cbe0b632a816852295..7f458284cade9b127f02209f2c3c2f76d9164e1a 100644
--- a/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis8.java
+++ b/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis8.java
@@ -21,6 +21,11 @@ import java.util.List;
 import java.util.concurrent.Callable;
 
 import teetime.examples.throughput.TimestampObject;
+import teetime.examples.throughput.methodcall.stage.CollectorSink;
+import teetime.examples.throughput.methodcall.stage.NoopFilter;
+import teetime.examples.throughput.methodcall.stage.ObjectProducer;
+import teetime.examples.throughput.methodcall.stage.StartTimestampFilter;
+import teetime.examples.throughput.methodcall.stage.StopTimestampFilter;
 import teetime.framework.core.Analysis;
 
 /**
diff --git a/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis9.java b/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis9.java
index 3bb16df843bd4cee0797375f7c4f95cdc60d817a..1e533252ed9d5d1ae185b8af0692e12a6eca37d6 100644
--- a/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis9.java
+++ b/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis9.java
@@ -19,6 +19,12 @@ import java.util.List;
 import java.util.concurrent.Callable;
 
 import teetime.examples.throughput.TimestampObject;
+import teetime.examples.throughput.methodcall.stage.CollectorSink;
+import teetime.examples.throughput.methodcall.stage.NoopFilter;
+import teetime.examples.throughput.methodcall.stage.ObjectProducer;
+import teetime.examples.throughput.methodcall.stage.Pipeline;
+import teetime.examples.throughput.methodcall.stage.StartTimestampFilter;
+import teetime.examples.throughput.methodcall.stage.StopTimestampFilter;
 import teetime.framework.core.Analysis;
 
 /**
diff --git a/src/test/java/teetime/examples/throughput/methodcall/CollectorSink.java b/src/test/java/teetime/examples/throughput/methodcall/stage/CollectorSink.java
similarity index 94%
rename from src/test/java/teetime/examples/throughput/methodcall/CollectorSink.java
rename to src/test/java/teetime/examples/throughput/methodcall/stage/CollectorSink.java
index 90fefc3a21292e4509a5495dacb0283d7e2fffb9..77a2ef04c72bc41538d4b6628fd1dd6afec77f2d 100644
--- a/src/test/java/teetime/examples/throughput/methodcall/CollectorSink.java
+++ b/src/test/java/teetime/examples/throughput/methodcall/stage/CollectorSink.java
@@ -13,10 +13,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  ***************************************************************************/
-package teetime.examples.throughput.methodcall;
+package teetime.examples.throughput.methodcall.stage;
 
 import java.util.List;
 
+import teetime.examples.throughput.methodcall.ConsumerStage;
 import teetime.util.list.CommittableQueue;
 
 /**
diff --git a/src/test/java/teetime/examples/throughput/methodcall/NoopFilter.java b/src/test/java/teetime/examples/throughput/methodcall/stage/NoopFilter.java
similarity index 88%
rename from src/test/java/teetime/examples/throughput/methodcall/NoopFilter.java
rename to src/test/java/teetime/examples/throughput/methodcall/stage/NoopFilter.java
index 17d1abba174ea3ea9282c978364b3d111115a787..7fdf98b2bca1ab6f0149be7222429d2cd01c1122 100644
--- a/src/test/java/teetime/examples/throughput/methodcall/NoopFilter.java
+++ b/src/test/java/teetime/examples/throughput/methodcall/stage/NoopFilter.java
@@ -13,8 +13,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  ***************************************************************************/
-package teetime.examples.throughput.methodcall;
+package teetime.examples.throughput.methodcall.stage;
 
+import teetime.examples.throughput.methodcall.ConsumerStage;
 import teetime.util.list.CommittableQueue;
 
 /**
@@ -44,7 +45,7 @@ public class NoopFilter<T> extends ConsumerStage<T, T> {
 
 	@Override
 	protected void execute5(final T element) {
-		this.send(element);
+		this.send(element); // "send" calls the next stage and so on
 	}
 
 }
diff --git a/src/test/java/teetime/examples/throughput/methodcall/ObjectProducer.java b/src/test/java/teetime/examples/throughput/methodcall/stage/ObjectProducer.java
similarity index 96%
rename from src/test/java/teetime/examples/throughput/methodcall/ObjectProducer.java
rename to src/test/java/teetime/examples/throughput/methodcall/stage/ObjectProducer.java
index deeb0df7155cb07f6785bffe0741a4e021239cd5..d6093bbe0806d26ceb1614f0ae244908be8ae0f1 100644
--- a/src/test/java/teetime/examples/throughput/methodcall/ObjectProducer.java
+++ b/src/test/java/teetime/examples/throughput/methodcall/stage/ObjectProducer.java
@@ -13,10 +13,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  ***************************************************************************/
-package teetime.examples.throughput.methodcall;
+package teetime.examples.throughput.methodcall.stage;
 
 import java.util.concurrent.Callable;
 
+import teetime.examples.throughput.methodcall.ProducerStage;
 import teetime.util.list.CommittableQueue;
 
 /**
diff --git a/src/test/java/teetime/examples/throughput/methodcall/Pipeline.java b/src/test/java/teetime/examples/throughput/methodcall/stage/Pipeline.java
similarity index 87%
rename from src/test/java/teetime/examples/throughput/methodcall/Pipeline.java
rename to src/test/java/teetime/examples/throughput/methodcall/stage/Pipeline.java
index 82dfe6bf7fc6efe65703298e06b727dedb7179c2..23c63395f8b552f4c9d8b07d061684e8ccea259e 100644
--- a/src/test/java/teetime/examples/throughput/methodcall/Pipeline.java
+++ b/src/test/java/teetime/examples/throughput/methodcall/stage/Pipeline.java
@@ -1,9 +1,15 @@
-package teetime.examples.throughput.methodcall;
+package teetime.examples.throughput.methodcall.stage;
 
 import java.util.Arrays;
 import java.util.LinkedList;
 import java.util.List;
 
+import teetime.examples.throughput.methodcall.InputPort;
+import teetime.examples.throughput.methodcall.OnDisableListener;
+import teetime.examples.throughput.methodcall.OutputPort;
+import teetime.examples.throughput.methodcall.SchedulingInformation;
+import teetime.examples.throughput.methodcall.Stage;
+import teetime.examples.throughput.methodcall.StageWithPort;
 import teetime.util.list.CommittableQueue;
 
 public class Pipeline<I, O> implements StageWithPort<I, O>, OnDisableListener {
@@ -22,19 +28,19 @@ public class Pipeline<I, O> implements StageWithPort<I, O>, OnDisableListener {
 
 	private boolean reschedulable;
 
-	void setFirstStage(final StageWithPort<I, ?> stage) {
+	public void setFirstStage(final StageWithPort<I, ?> stage) {
 		this.firstStage = stage;
 	}
 
-	void addIntermediateStages(final StageWithPort... stages) {
+	public void addIntermediateStages(final StageWithPort... stages) {
 		this.intermediateStages.addAll(Arrays.asList(stages));
 	}
 
-	void addIntermediateStage(final StageWithPort stage) {
+	public void addIntermediateStage(final StageWithPort stage) {
 		this.intermediateStages.add(stage);
 	}
 
-	void setLastStage(final StageWithPort<?, O> stage) {
+	public void setLastStage(final StageWithPort<?, O> stage) {
 		this.lastStage = stage;
 	}
 
@@ -66,7 +72,7 @@ public class Pipeline<I, O> implements StageWithPort<I, O>, OnDisableListener {
 		this.setReschedulable(this.stages[0].isReschedulable());
 	}
 
-	void onStart() {
+	public void onStart() {
 		// Pipe pipe = new Pipe();
 		// this.outputPort.pipe = pipe;
 		// this.firstStage.getInputPort().pipe = pipe;
diff --git a/src/test/java/teetime/examples/throughput/methodcall/StartTimestampFilter.java b/src/test/java/teetime/examples/throughput/methodcall/stage/StartTimestampFilter.java
similarity index 93%
rename from src/test/java/teetime/examples/throughput/methodcall/StartTimestampFilter.java
rename to src/test/java/teetime/examples/throughput/methodcall/stage/StartTimestampFilter.java
index d4d6d5a7b45e6bdfaaf406305cdcdb843d992367..fdcc6d44c062bc501698c440d5db48f59f73ebc9 100644
--- a/src/test/java/teetime/examples/throughput/methodcall/StartTimestampFilter.java
+++ b/src/test/java/teetime/examples/throughput/methodcall/stage/StartTimestampFilter.java
@@ -13,9 +13,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  ***************************************************************************/
-package teetime.examples.throughput.methodcall;
+package teetime.examples.throughput.methodcall.stage;
 
 import teetime.examples.throughput.TimestampObject;
+import teetime.examples.throughput.methodcall.ConsumerStage;
 import teetime.util.list.CommittableQueue;
 
 /**
diff --git a/src/test/java/teetime/examples/throughput/methodcall/StopTimestampFilter.java b/src/test/java/teetime/examples/throughput/methodcall/stage/StopTimestampFilter.java
similarity index 93%
rename from src/test/java/teetime/examples/throughput/methodcall/StopTimestampFilter.java
rename to src/test/java/teetime/examples/throughput/methodcall/stage/StopTimestampFilter.java
index 78c333cdf78087eaa824cb7daeda56ea5162d40f..0dfd5adced75c402b44fbc31635511bfba656e26 100644
--- a/src/test/java/teetime/examples/throughput/methodcall/StopTimestampFilter.java
+++ b/src/test/java/teetime/examples/throughput/methodcall/stage/StopTimestampFilter.java
@@ -13,9 +13,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  ***************************************************************************/
-package teetime.examples.throughput.methodcall;
+package teetime.examples.throughput.methodcall.stage;
 
 import teetime.examples.throughput.TimestampObject;
+import teetime.examples.throughput.methodcall.ConsumerStage;
 import teetime.util.list.CommittableQueue;
 
 /**