diff --git a/src/main/java/teetime/framework/ThreadService.java b/src/main/java/teetime/framework/ThreadService.java
index 3197606ed3e6eaa18bf8b6e6c070b859d3465d74..3e27f69b6e01a1c8f8a7524241995e0b3e0346cc 100644
--- a/src/main/java/teetime/framework/ThreadService.java
+++ b/src/main/java/teetime/framework/ThreadService.java
@@ -137,8 +137,10 @@ class ThreadService extends AbstractService<ThreadService> {
 	}
 
 	private void sendStartingSignal(final Set<Stage> newThreadableStages) {
-		for (Stage stage : newThreadableStages) {
-			((TeeTimeThread) stage.getOwningThread()).sendStartingSignal();
+		synchronized (newThreadableStages) {
+			for (Stage stage : newThreadableStages) {
+				((TeeTimeThread) stage.getOwningThread()).sendStartingSignal();
+			}
 		}
 	}
 
@@ -149,8 +151,14 @@ class ThreadService extends AbstractService<ThreadService> {
 
 	@Override
 	void onTerminate() {
-		for (Stage stage : threadableStages) {
-			stage.terminate();
+		abortStages(threadableStages);
+	}
+
+	private void abortStages(final Set<Stage> currentTreadableStages) {
+		synchronized (currentTreadableStages) {
+			for (Stage stage : currentTreadableStages) {
+				stage.terminate();
+			}
 		}
 	}