diff --git a/README b/README
index 0b596b0b7e70020acbc3595e1c8a638606ceb6b6..39d9a20f3dd4adae27ad5e6f34be334aab2c11cb 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-The MooBench Monitoring OVerhead Benchmark
+The MooBench Monitoring Overhead Benchmark
 ------------------------------------------
 
 This micro-benchmarks can be used to quantify the performance
diff --git a/frameworks/Kieker/src/kieker/Logger.java b/frameworks/Kieker/src/kieker/Logger.java
index da3b1daafd06b42390c8124ed06bbc3dc4a7fd41..55029356a9b746ba01208a056073885f817e25bf 100644
--- a/frameworks/Kieker/src/kieker/Logger.java
+++ b/frameworks/Kieker/src/kieker/Logger.java
@@ -1,5 +1,5 @@
 /***************************************************************************
- * Copyright 2013 Kieker Project (http://kieker-monitoring.net)
+ * Copyright 2014 Kieker Project (http://kieker-monitoring.net)
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/frameworks/Kieker/src/kieker/tcp/TestExperiment1.java b/frameworks/Kieker/src/kieker/tcp/TestExperiment1.java
index fa1a2ed17151404d512eae4644a1eba1e277e9b2..415c419b2a3847d47c4e3988e23bd75b56397a8a 100644
--- a/frameworks/Kieker/src/kieker/tcp/TestExperiment1.java
+++ b/frameworks/Kieker/src/kieker/tcp/TestExperiment1.java
@@ -1,5 +1,5 @@
 /***************************************************************************
- * Copyright 2013 Kieker Project (http://kieker-monitoring.net)
+ * Copyright 2014 Kieker Project (http://kieker-monitoring.net)
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/frameworks/Kieker/src/kieker/tcp/TestExperiment2.java b/frameworks/Kieker/src/kieker/tcp/TestExperiment2.java
index 803dbf3334afd42be8d157dd0e4328cd2e9581b4..1a0a6aaa00ce22234b7aaf06b7ef32de610d280a 100644
--- a/frameworks/Kieker/src/kieker/tcp/TestExperiment2.java
+++ b/frameworks/Kieker/src/kieker/tcp/TestExperiment2.java
@@ -1,5 +1,5 @@
 /***************************************************************************
- * Copyright 2013 Kieker Project (http://kieker-monitoring.net)
+ * Copyright 2014 Kieker Project (http://kieker-monitoring.net)
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/frameworks/Kieker/src/kieker/tcp/TestExperiment3.java b/frameworks/Kieker/src/kieker/tcp/TestExperiment3.java
index ddac5da67418fb29617988863f9c16310deadb9c..702677db052978e1f3da4aab0d28a63a57148b5f 100644
--- a/frameworks/Kieker/src/kieker/tcp/TestExperiment3.java
+++ b/frameworks/Kieker/src/kieker/tcp/TestExperiment3.java
@@ -1,5 +1,5 @@
 /***************************************************************************
- * Copyright 2013 Kieker Project (http://kieker-monitoring.net)
+ * Copyright 2014 Kieker Project (http://kieker-monitoring.net)
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/src/mooBench/benchmark/Benchmark.java b/src/mooBench/benchmark/Benchmark.java
index d6e04669b22d6a3037909f92089041a996735423..b543bd07885c51be24f1d31566fe6d1d24d45a48 100644
--- a/src/mooBench/benchmark/Benchmark.java
+++ b/src/mooBench/benchmark/Benchmark.java
@@ -1,5 +1,5 @@
 /***************************************************************************
- * Copyright 2013 Kieker Project (http://kieker-monitoring.net)
+ * Copyright 2014 Kieker Project (http://kieker-monitoring.net)
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -30,6 +30,7 @@ import org.apache.commons.cli.OptionBuilder;
 import org.apache.commons.cli.Options;
 
 import mooBench.monitoredApplication.MonitoredClass;
+import mooBench.monitoredApplication.MonitoredClassThreaded;
 
 /**
  * @author Jan Waller
@@ -44,6 +45,7 @@ public final class Benchmark {
 	private static long methodTime = 0;
 	private static int recursionDepth = 0;
 	private static boolean quickstart = false;
+	private static MonitoredClass mc = null;
 
 	private Benchmark() {}
 
@@ -61,10 +63,9 @@ public final class Benchmark {
 
 		// 2. Initialize Threads and Classes
 		final CountDownLatch doneSignal = new CountDownLatch(Benchmark.totalThreads);
-		final MonitoredClass mc = new MonitoredClass();
 		final BenchmarkingThread[] threads = new BenchmarkingThread[Benchmark.totalThreads];
 		for (int i = 0; i < Benchmark.totalThreads; i++) {
-			threads[i] = new BenchmarkingThread(mc, Benchmark.totalCalls, Benchmark.methodTime, Benchmark.recursionDepth, doneSignal);
+			threads[i] = new BenchmarkingThread(Benchmark.mc, Benchmark.totalCalls, Benchmark.methodTime, Benchmark.recursionDepth, doneSignal);
 			threads[i].setName(String.valueOf(i + 1));
 		}
 		if (!quickstart) {
@@ -137,6 +138,9 @@ public final class Benchmark {
 		cmdlOpts.addOption(OptionBuilder.withLongOpt("runnable").withArgName("classname").hasArg(true).isRequired(false)
 				.withDescription("Class implementing the Runnable interface. run() method is executed before the benchmark starts.").withValueSeparator('=')
 				.create("r"));
+		cmdlOpts.addOption(OptionBuilder.withLongOpt("application").withArgName("classname").hasArg(true).isRequired(false)
+				.withDescription("Class implementing the MonitoredClass interface.").withValueSeparator('=')
+				.create("a"));
 		try {
 			CommandLine cmdl = null;
 			final CommandLineParser cmdlParser = new BasicParser();
@@ -148,6 +152,12 @@ public final class Benchmark {
 			Benchmark.recursionDepth = Integer.parseInt(cmdl.getOptionValue("recursiondepth"));
 			Benchmark.quickstart = cmdl.hasOption("quickstart");
 			Benchmark.ps = new PrintStream(new BufferedOutputStream(new FileOutputStream(Benchmark.outputFn, true), 8192 * 8), false, Benchmark.ENCODING);
+			final String application = cmdl.getOptionValue("application");
+			if (null != application) {
+				mc = ((MonitoredClass) Class.forName(application).newInstance());
+			} else {
+				mc = new MonitoredClassThreaded();
+			}
 			final String clazzname = cmdl.getOptionValue("runnable");
 			if (null != clazzname) {
 				((Runnable) Class.forName(clazzname).newInstance()).run();
diff --git a/src/mooBench/benchmark/BenchmarkingThread.java b/src/mooBench/benchmark/BenchmarkingThread.java
index 6f649e4d6fa2a9454ba5b2d2a82a43a6d4421d78..354fcd59b1caed548123686dabffca74950dfe76 100644
--- a/src/mooBench/benchmark/BenchmarkingThread.java
+++ b/src/mooBench/benchmark/BenchmarkingThread.java
@@ -1,5 +1,5 @@
 /***************************************************************************
- * Copyright 2013 Kieker Project (http://kieker-monitoring.net)
+ * Copyright 2014 Kieker Project (http://kieker-monitoring.net)
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/src/mooBench/monitoredApplication/MonitoredClass.java b/src/mooBench/monitoredApplication/MonitoredClass.java
index b13c6faaea2cae7bcd0ac25d9d4777e506ff033b..db4be4271ac06cf46097ef110b07d0805b428fa2 100644
--- a/src/mooBench/monitoredApplication/MonitoredClass.java
+++ b/src/mooBench/monitoredApplication/MonitoredClass.java
@@ -1,5 +1,5 @@
 /***************************************************************************
- * Copyright 2013 Kieker Project (http://kieker-monitoring.net)
+ * Copyright 2014 Kieker Project (http://kieker-monitoring.net)
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,32 +16,10 @@
 
 package mooBench.monitoredApplication;
 
-import java.lang.management.ManagementFactory;
-import java.lang.management.ThreadMXBean;
-
 /**
  * @author Jan Waller
  */
-public final class MonitoredClass {
-	private final ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
-
-	/**
-	 * Default constructor.
-	 */
-	public MonitoredClass() {
-		// empty default constructor
-	}
+public interface MonitoredClass {
 
-	public final long monitoredMethod(final long methodTime, final int recDepth) {
-		if (recDepth > 1) {
-			return this.monitoredMethod(methodTime, recDepth - 1);
-		} else {
-			final long exitTime = this.threadMXBean.getCurrentThreadUserTime() + methodTime;
-			long currentTime;
-			do {
-				currentTime = this.threadMXBean.getCurrentThreadUserTime();
-			} while (currentTime < exitTime);
-			return currentTime;
-		}
-	}
+	public long monitoredMethod(final long methodTime, final int recDepth);
 }
diff --git a/src/mooBench/monitoredApplication/MonitoredClassSimple.java b/src/mooBench/monitoredApplication/MonitoredClassSimple.java
new file mode 100644
index 0000000000000000000000000000000000000000..3227e38d823de12297dc1a18ff1c25d839143b80
--- /dev/null
+++ b/src/mooBench/monitoredApplication/MonitoredClassSimple.java
@@ -0,0 +1,43 @@
+/***************************************************************************
+ * Copyright 2014 Kieker Project (http://kieker-monitoring.net)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ***************************************************************************/
+
+package mooBench.monitoredApplication;
+
+/**
+ * @author Jan Waller
+ */
+public final class MonitoredClassSimple implements MonitoredClass {
+
+	/**
+	 * Default constructor.
+	 */
+	public MonitoredClassSimple() {
+		// empty default constructor
+	}
+
+	public final long monitoredMethod(final long methodTime, final int recDepth) {
+		if (recDepth > 1) {
+			return this.monitoredMethod(methodTime, recDepth - 1);
+		} else {
+			final long exitTime = System.nanoTime() + methodTime;
+			long currentTime;
+			do {
+				currentTime = System.nanoTime();
+			} while (currentTime < exitTime);
+			return currentTime;
+		}
+	}
+}
diff --git a/src/mooBench/monitoredApplication/MonitoredClassThreaded.java b/src/mooBench/monitoredApplication/MonitoredClassThreaded.java
new file mode 100644
index 0000000000000000000000000000000000000000..869e0d8d88b3fba41131d364162da1533fc73fe5
--- /dev/null
+++ b/src/mooBench/monitoredApplication/MonitoredClassThreaded.java
@@ -0,0 +1,47 @@
+/***************************************************************************
+ * Copyright 2014 Kieker Project (http://kieker-monitoring.net)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ***************************************************************************/
+
+package mooBench.monitoredApplication;
+
+import java.lang.management.ManagementFactory;
+import java.lang.management.ThreadMXBean;
+
+/**
+ * @author Jan Waller
+ */
+public final class MonitoredClassThreaded implements MonitoredClass {
+	final ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
+
+	/**
+	 * Default constructor.
+	 */
+	public MonitoredClassThreaded() {
+		// empty default constructor
+	}
+
+	public final long monitoredMethod(final long methodTime, final int recDepth) {
+		if (recDepth > 1) {
+			return this.monitoredMethod(methodTime, recDepth - 1);
+		} else {
+			final long exitTime = this.threadMXBean.getCurrentThreadUserTime() + methodTime;
+			long currentTime;
+			do {
+				currentTime = this.threadMXBean.getCurrentThreadUserTime();
+			} while (currentTime < exitTime);
+			return currentTime;
+		}
+	}
+}