diff --git a/src/main/java/teetime/framework/AbstractRunnableStage.java b/src/main/java/teetime/framework/AbstractRunnableStage.java
index 2739161a86a81c7fa18d57a8df215f809e21701b..6a60232182d242ffbf3641d5f47651f82fa9b9f7 100644
--- a/src/main/java/teetime/framework/AbstractRunnableStage.java
+++ b/src/main/java/teetime/framework/AbstractRunnableStage.java
@@ -53,7 +53,7 @@ abstract class AbstractRunnableStage implements Runnable {
 						executeStage();
 					}
 				} catch (TerminateException e) {
-					this.stage.terminate();
+					this.stage.abort();
 					stage.getOwningContext().abortConfigurationRun();
 				} finally {
 					afterStageExecution();
diff --git a/src/main/java/teetime/framework/AbstractStage.java b/src/main/java/teetime/framework/AbstractStage.java
index da8144202a25ec4c17f880f3b3b0e499ad3e7d38..6a6769cae34e0e2bdad803326a9bddcedfefa4dd 100644
--- a/src/main/java/teetime/framework/AbstractStage.java
+++ b/src/main/java/teetime/framework/AbstractStage.java
@@ -254,9 +254,14 @@ public abstract class AbstractStage extends Stage {
 	@Override
 	protected void terminate() {
 		changeState(StageState.TERMINATING);
-		getOwningThread().interrupt();
 	}
 
+	@Override
+	protected void abort() {
+		this.terminate();
+		this.getOwningThread().interrupt();
+	};
+
 	@Override
 	protected boolean shouldBeTerminated() {
 		return (getCurrentState() == StageState.TERMINATING);
diff --git a/src/main/java/teetime/framework/Stage.java b/src/main/java/teetime/framework/Stage.java
index ae33ba66d87b285c4b6adb1f85f7b4e79ed358cd..4cc0cf7673b735c4641265ac624e68d0204a1970 100644
--- a/src/main/java/teetime/framework/Stage.java
+++ b/src/main/java/teetime/framework/Stage.java
@@ -134,6 +134,8 @@ public abstract class Stage {
 
 	protected abstract void terminate();
 
+	protected abstract void abort();
+
 	protected abstract boolean shouldBeTerminated();
 
 	public abstract StageState getCurrentState();
diff --git a/src/main/java/teetime/framework/ThreadService.java b/src/main/java/teetime/framework/ThreadService.java
index de097190d01fbe68e913b394659ef9a747d6163f..4528ed5c90e621ce93fc0a038b46b36add26eafe 100644
--- a/src/main/java/teetime/framework/ThreadService.java
+++ b/src/main/java/teetime/framework/ThreadService.java
@@ -149,7 +149,7 @@ class ThreadService extends AbstractService<ThreadService> {
 	private void abortStages(final Set<Stage> currentTreadableStages) {
 		synchronized (currentTreadableStages) {
 			for (Stage stage : currentTreadableStages) {
-				stage.terminate();
+				stage.abort();
 			}
 		}
 	}
diff --git a/src/test/java/teetime/framework/TerminationTest.java b/src/test/java/teetime/framework/TerminationTest.java
index 10d00f1c2e27bc2c2414601a17104e395077b37d..ac8767608de4dfc61647426a8b7579929dc7fd70 100644
--- a/src/test/java/teetime/framework/TerminationTest.java
+++ b/src/test/java/teetime/framework/TerminationTest.java
@@ -94,6 +94,9 @@ public class TerminationTest {
 		@Override
 		protected void terminate() {}
 
+		@Override
+		protected void abort() {}
+
 	}
 
 	private class Propagator extends AbstractConsumerStage<Integer> {