diff --git a/src/main/java/teetime/framework/ThreadService.java b/src/main/java/teetime/framework/ThreadService.java
index 88189c89972af18c1be00517a24c5565dee04250..00b4697257bb5cddeabd28069ccdd10638707163 100644
--- a/src/main/java/teetime/framework/ThreadService.java
+++ b/src/main/java/teetime/framework/ThreadService.java
@@ -1,6 +1,7 @@
 package teetime.framework;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.List;
@@ -23,12 +24,12 @@ class ThreadService extends AbstractService<ThreadService> {
 
 	private static final Logger LOGGER = LoggerFactory.getLogger(ThreadService.class);
 
-	private final List<Thread> consumerThreads = new LinkedList<Thread>();
-	private final List<Thread> finiteProducerThreads = new LinkedList<Thread>();
-	private final List<Thread> infiniteProducerThreads = new LinkedList<Thread>();
+	private final List<Thread> consumerThreads = Collections.synchronizedList(new LinkedList<Thread>());
+	private final List<Thread> finiteProducerThreads = Collections.synchronizedList(new LinkedList<Thread>());
+	private final List<Thread> infiniteProducerThreads = Collections.synchronizedList(new LinkedList<Thread>());
 
 	private final SignalingCounter runnableCounter = new SignalingCounter();
-	private final Set<Stage> threadableStages = new HashSet<Stage>();
+	private final Set<Stage> threadableStages = Collections.synchronizedSet(new HashSet<Stage>());
 
 	private final Configuration configuration;
 
@@ -77,17 +78,17 @@ class ThreadService extends AbstractService<ThreadService> {
 			throw new IllegalStateException("No stage was added using the addThreadableStage(..) method. Add at least one stage.");
 		}
 
-		A2InvalidThreadAssignmentCheck checker = new A2InvalidThreadAssignmentCheck(threadableStages);
+		A2InvalidThreadAssignmentCheck checker = new A2InvalidThreadAssignmentCheck(newThreadableStages);
 		checker.check();
 
 		A3PipeInstantiation pipeVisitor = new A3PipeInstantiation();
 		traversor = new Traverser(pipeVisitor, Direction.BOTH);
 		traversor.traverse(startStage);
 
-		A4StageAttributeSetter attributeSetter = new A4StageAttributeSetter(configuration, threadableStages);
+		A4StageAttributeSetter attributeSetter = new A4StageAttributeSetter(configuration, newThreadableStages);
 		attributeSetter.setAttributes();
 
-		for (Stage stage : threadableStages) {
+		for (Stage stage : newThreadableStages) {
 			categorizeThreadableStage(stage);
 		}