diff --git a/src/main/java/fi/utu/tech/threadrunner2/assignment/Driver.java b/src/main/java/fi/utu/tech/threadrunner2/assignment/Driver.java
new file mode 100644
index 0000000000000000000000000000000000000000..a8c2522368e6ffa9c998f89a0f0509acfdd5f91e
--- /dev/null
+++ b/src/main/java/fi/utu/tech/threadrunner2/assignment/Driver.java
@@ -0,0 +1,67 @@
+package fi.utu.tech.threadrunner2.assignment;
+
+import java.util.concurrent.BlockingQueue;
+
+import fi.utu.tech.threadrunner2.mediator.ControlSet;
+import fi.utu.tech.threadrunner2.mediator.Mediator;
+import fi.utu.tech.threadrunner2.works.Work;
+
+public class Driver extends Task1UsingThreadDistributor implements Runnable {
+	private Mediator mediator;
+	private Thread[] saikeet;
+	private BlockingQueue<Work> workList;
+	private ControlSet control;
+	
+	public Driver(Thread[] saikeet, ControlSet control, Mediator mediator, BlockingQueue<Work> workList) {
+		this.saikeet=saikeet;
+		this.control=control;
+		this.mediator=mediator;
+		this.workList=workList;
+		for(Thread saie : saikeet) {
+			mediator.registerThread(saie.hashCode(), "Thread");
+		}
+	}
+	
+	public void aja() {
+		 int maara= control.getBlockSize();
+		 int x=0;
+		 for(Thread saie : saikeet) {
+			 mediator.setRunStatus("Running", saie.hashCode());
+			 for( Work item : mediator.getWorkSlice(maara)) {
+				 mediator.setWorkStatus("Calculating", item);
+				 item.work();
+				 mediator.setWorkStatus("Done", item);
+				 mediator.increaseCalculated(saie.hashCode());
+				 
+			 }
+			 
+		 }
+	}
+	public void laske() {//pystyttäisiinkö vaan while notifyAll metodeilla
+		//mediator.registerThread(this.hashCode(), "Jotain1");
+		mediator.setRunStatus("Running", this.hashCode());
+		int maara = control.getBlockSize();
+		workList = mediator.getWorkSlice(maara); //antaa listasta yhden työn. Tämä täytyy antaa tehtäväksi jollekin!
+		for( Work item : workList) {
+			mediator.setWorkStatus("Calculating", item);
+			item.work();
+			mediator.setWorkStatus("Done", item);
+			mediator.increaseCalculated(this.hashCode());
+		}
+		mediator.setRunStatus("Ended", this.hashCode());
+	}
+	public void cordinate() {
+		int myPriority= myThread.getPriority();//Joku mättää
+		for(Thread saie : saikeet) {
+			saie.setPriority(myPriority-1);
+		}
+		while((!((workList = mediator.getWorkSlice(control.getBlockSize())).isEmpty()))) {
+			for(Thread saie : saikeet) {
+				saie.laske();
+			}
+			sleep(100);
+		}
+	}
+	
+	
+}
diff --git a/src/main/java/fi/utu/tech/threadrunner2/assignment/Saie.java b/src/main/java/fi/utu/tech/threadrunner2/assignment/Saie.java
new file mode 100644
index 0000000000000000000000000000000000000000..f3d53c5f7b99442457bb64ef5a9fa17dbf123760
--- /dev/null
+++ b/src/main/java/fi/utu/tech/threadrunner2/assignment/Saie.java
@@ -0,0 +1,42 @@
+package fi.utu.tech.threadrunner2.assignment;
+
+import java.util.concurrent.BlockingQueue;
+
+import fi.utu.tech.threadrunner2.mediator.ControlSet;
+import fi.utu.tech.threadrunner2.mediator.Mediator;
+import fi.utu.tech.threadrunner2.works.Work;
+
+public class Saie extends Thread implements Runnable,Distributor {
+	private Mediator mediator;
+	private Thread[] saikeet;
+	private BlockingQueue<Work> workList;
+	private ControlSet control;
+	private Integer hash;
+	
+	public Saie(Mediator mediator, ControlSet control) {//konstruktori
+		this.mediator=mediator;
+		this.control=control;
+		
+		
+	}
+	public void execute() {
+		this.start();
+	}
+	public void run() {//Tarvitaan tehtävät työt listassa ja
+		
+		for(Work item : mediator.getWorkSlice(control.getBlockSize())) {
+			mediator.setWorkStatus("Running", item);
+			item.work();
+			mediator.setWorkStatus("Done", item);
+			mediator.increaseCalculated(this.hashCode());
+			 
+		}
+
+
+	}
+public Integer annaHash() {
+	return this.hashCode();
+}
+	
+		
+}