diff --git a/src/main/java/teetime/framework/AbstractRunnableStage.java b/src/main/java/teetime/framework/AbstractRunnableStage.java
index 2d4a24b2dab47abca571f1723b5d26ea8217cd75..b280d14395fc3e56ab0d2082e79dd722360fe8c0 100644
--- a/src/main/java/teetime/framework/AbstractRunnableStage.java
+++ b/src/main/java/teetime/framework/AbstractRunnableStage.java
@@ -50,7 +50,8 @@ abstract class AbstractRunnableStage implements Runnable {
 					} while (!stage.shouldBeTerminated());
 				} catch (TerminateException e) {
 					this.stage.terminate();
-					throw e;
+					stage.owningContext.getRuntimeService().onTerminate();
+					throw e; // FIXME: Still needed?
 				} finally {
 					afterStageExecution();
 				}
diff --git a/src/main/java/teetime/framework/AbstractService.java b/src/main/java/teetime/framework/AbstractService.java
index 4ac0200dab222c9ef0ea8a45e7edcaa33e5dd57a..fe716ca116f4b3dbb2e444b8259616b494c5ee9e 100644
--- a/src/main/java/teetime/framework/AbstractService.java
+++ b/src/main/java/teetime/framework/AbstractService.java
@@ -12,13 +12,15 @@ package teetime.framework;
  */
 public abstract class AbstractService<T> {
 
-	abstract void initialize();
+	abstract void onInitialize();
 
-	abstract void start();
+	abstract void onStart();
 
-	abstract void terminate();
+	abstract void onExecute();
 
-	abstract void finish();
+	abstract void onTerminate();
+
+	abstract void onFinish();
 
 	abstract void merge(T source);
 
diff --git a/src/main/java/teetime/framework/ConfigurationContext.java b/src/main/java/teetime/framework/ConfigurationContext.java
index 26c731426eece5ed203c8ed89267aa9bd8aa7249..2f5392142c52ff3ccb706eaa603de0e851d49be9 100644
--- a/src/main/java/teetime/framework/ConfigurationContext.java
+++ b/src/main/java/teetime/framework/ConfigurationContext.java
@@ -98,7 +98,7 @@ final class ConfigurationContext {
 	}
 
 	final void initializeServices() {
-		runtimeService.initialize();
+		runtimeService.onInitialize();
 	}
 
 	private void mergeContexts(final ConfigurationContext child) {
diff --git a/src/main/java/teetime/framework/Execution.java b/src/main/java/teetime/framework/Execution.java
index f77dc3375e8a02354ca22bce1f1330bfa1c4d312..f309d4966ffd5f52c77757ff5438643ee5692370 100644
--- a/src/main/java/teetime/framework/Execution.java
+++ b/src/main/java/teetime/framework/Execution.java
@@ -113,14 +113,12 @@ public final class Execution<T extends Configuration> {
 	 * @since 2.0
 	 */
 	public void waitForTermination() {
-		getConfiguration().getContext().getRuntimeService().waitForTermination();
+		getConfiguration().getContext().getRuntimeService().onFinish();
 	}
 
 	// TODO: implement
 	private void abortEventually() {
-		for (Stage stage : configuration.getContext().getThreadableStages().keySet()) {
-			stage.terminate();
-		}
+		getConfiguration().getContext().getRuntimeService().onTerminate();
 		waitForTermination();
 	}
 
@@ -144,7 +142,7 @@ public final class Execution<T extends Configuration> {
 	 * @since 2.0
 	 */
 	public void executeNonBlocking() {
-		configuration.getContext().getRuntimeService().executeNonBlocking();
+		configuration.getContext().getRuntimeService().onExecute();
 	}
 
 	/**
diff --git a/src/main/java/teetime/framework/ThreadService.java b/src/main/java/teetime/framework/ThreadService.java
index e87d9f082211b1aeb6faecfb9d445c734470ad53..46e2315dfe52e0d03e97b467626c50d446d94f5a 100644
--- a/src/main/java/teetime/framework/ThreadService.java
+++ b/src/main/java/teetime/framework/ThreadService.java
@@ -52,7 +52,7 @@ class ThreadService extends AbstractService<ThreadService> {
 	private final List<RunnableProducerStage> producerRunnables = new LinkedList<RunnableProducerStage>();
 
 	@Override
-	void initialize() {
+	void onInitialize() {
 		IExceptionListenerFactory factory;
 		try {
 			factory = ((Configuration) compositeStage).getFactory();
@@ -72,7 +72,7 @@ class ThreadService extends AbstractService<ThreadService> {
 			initializeIntraStages(intraStages, thread, newListener);
 		}
 
-		start();
+		onStart();
 	}
 
 	private void initializeIntraStages(final Set<Stage> intraStages, final Thread thread, final AbstractExceptionListener newListener) {
@@ -135,7 +135,8 @@ class ThreadService extends AbstractService<ThreadService> {
 		}
 	}
 
-	void waitForTermination() {
+	@Override
+	void onFinish() {
 		try {
 			runnableCounter.waitFor(0);
 
@@ -169,12 +170,13 @@ class ThreadService extends AbstractService<ThreadService> {
 		}
 	}
 
-	void executeNonBlocking() {
+	@Override
+	void onExecute() {
 		sendStartingSignal();
 	}
 
 	@Override
-	void start() {
+	void onStart() {
 		startThreads(this.consumerThreads);
 		startThreads(this.finiteProducerThreads);
 		startThreads(this.infiniteProducerThreads);
@@ -215,15 +217,10 @@ class ThreadService extends AbstractService<ThreadService> {
 	}
 
 	@Override
-	void terminate() {
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	void finish() {
-		// TODO Auto-generated method stub
-
+	void onTerminate() {
+		for (Stage stage : threadableStages.keySet()) {
+			stage.terminate();
+		}
 	}
 
 }
diff --git a/src/main/java/teetime/framework/exceptionHandling/AbstractExceptionListener.java b/src/main/java/teetime/framework/exceptionHandling/AbstractExceptionListener.java
index 2fa976b1e3117d97c06bd303483f99d6a3d64192..c34480fa78fa3f8643af4d52e01804a825272683 100644
--- a/src/main/java/teetime/framework/exceptionHandling/AbstractExceptionListener.java
+++ b/src/main/java/teetime/framework/exceptionHandling/AbstractExceptionListener.java
@@ -48,7 +48,7 @@ public abstract class AbstractExceptionListener {
 	 * @param throwingStage
 	 *            the stage, which has thrown the exception.
 	 * @return
-	 *         true, if the thread should be terminated, false otherwise
+	 * 		true, if the thread should be terminated, false otherwise
 	 */
 	public abstract FurtherExecution onStageException(Exception e, Stage throwingStage);