diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/CyActivator.java b/src/main/java/de/hhu/ba/yoshikoWrapper/CyActivator.java
index 6af2730eaf81f62175294b854635388ce4a43fd0..fb1b445ca3bd6b423e1723998ecb68d65e7c5a86 100644
--- a/src/main/java/de/hhu/ba/yoshikoWrapper/CyActivator.java
+++ b/src/main/java/de/hhu/ba/yoshikoWrapper/CyActivator.java
@@ -23,6 +23,7 @@ package de.hhu.ba.yoshikoWrapper;
 
 import java.util.Properties;
 
+import de.hhu.ba.yoshikoWrapper.tasks.AlgorithmTask;
 import org.cytoscape.application.CyApplicationManager;
 import org.cytoscape.application.swing.CySwingApplication;
 import org.cytoscape.application.swing.CytoPanelComponent;
diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/core/CyCore.java b/src/main/java/de/hhu/ba/yoshikoWrapper/core/CyCore.java
index e050180f8e2b1be2cf860ef0eb3276b5c93d7cf8..4c297b82c900d093ae142aa4131e1a3d153921b7 100644
--- a/src/main/java/de/hhu/ba/yoshikoWrapper/core/CyCore.java
+++ b/src/main/java/de/hhu/ba/yoshikoWrapper/core/CyCore.java
@@ -21,6 +21,7 @@
  ******************************************************************************/
 package de.hhu.ba.yoshikoWrapper.core;
 
+import java.awt.*;
 import java.util.concurrent.CountDownLatch;
 
 import de.hhu.ba.yoshikoWrapper.swing.components.MainPanel;
@@ -39,10 +40,7 @@ import org.cytoscape.view.presentation.RenderingEngineFactory;
 import org.cytoscape.view.vizmap.VisualMappingFunctionFactory;
 import org.cytoscape.view.vizmap.VisualMappingManager;
 import org.cytoscape.view.vizmap.VisualStyleFactory;
-import org.cytoscape.work.FinishStatus;
-import org.cytoscape.work.ObservableTask;
-import org.cytoscape.work.TaskIterator;
-import org.cytoscape.work.TaskObserver;
+import org.cytoscape.work.*;
 import org.cytoscape.work.swing.DialogTaskManager;
 
 
@@ -71,7 +69,11 @@ public class CyCore {
 	public static CommandExecutorTaskFactory commandExecutorTaskFactory;
 	//
 
+	//ugly passing of variables
 	public static MainPanel mainPanel;
+	public static TaskMonitor taskMonitor;
+	public static Window statusWindow;
+
 	//Convenience
 //	public static String getConfig(String key) {
 //		return cm.getProperties().getProperty(key);
@@ -83,18 +85,6 @@ public class CyCore {
 	 * @throws InterruptedException
 	 */
 	public static synchronized void runAndWait(TaskIterator taskIterator) throws InterruptedException {
-		CountDownLatch blockLatch = new CountDownLatch(1);
-		dialogTaskManager.execute(taskIterator,new TaskObserver() {
-
-			@Override
-			public void taskFinished(ObservableTask task) {}
-
-			@Override
-			public void allFinished(FinishStatus finishStatus) {
-				blockLatch.countDown();
-			}
-
-		});
-		blockLatch.await();
+		dialogTaskManager.execute(taskIterator);
 	}
 }
diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/swing/components/MainPanel.java b/src/main/java/de/hhu/ba/yoshikoWrapper/swing/components/MainPanel.java
index 5686aa630b89e073e00e9d9faffba53ea4313815..190eab57aaea2bc0dbca6410b87512257783d449 100644
--- a/src/main/java/de/hhu/ba/yoshikoWrapper/swing/components/MainPanel.java
+++ b/src/main/java/de/hhu/ba/yoshikoWrapper/swing/components/MainPanel.java
@@ -235,6 +235,8 @@ public class MainPanel extends JPanel implements CytoPanelComponent {
 			popupLevel.setModalExclusionType(ModalExclusionType.APPLICATION_EXCLUDE);
 			statusWindow.setModalityType(ModalityType.MODELESS);
 			statusWindow.setAlwaysOnTop(false);
+
+			CyCore.statusWindow = statusWindow;
 			//SWING BLACK MAGIC
 
 			CommandTaskFactory commandTaskFactory = new CommandTaskFactory(YoshikoCommand.PERFORM_ALGORITHM);
diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/tasks/AlgorithmTask.java b/src/main/java/de/hhu/ba/yoshikoWrapper/tasks/AlgorithmTask.java
index 64712e16f638b101c9f423f8fbf59f67d8347d0c..86b039fd0b6a10be83ea136e835bdfa07a609273 100644
--- a/src/main/java/de/hhu/ba/yoshikoWrapper/tasks/AlgorithmTask.java
+++ b/src/main/java/de/hhu/ba/yoshikoWrapper/tasks/AlgorithmTask.java
@@ -22,36 +22,20 @@
 package de.hhu.ba.yoshikoWrapper.tasks;
 
 import java.awt.Window;
-import java.util.Properties;
 
-import de.hhu.ba.yoshikoWrapper.swing.components.MainPanel;
 import de.hhu.ba.yoshikoWrapper.yoshikoAlgorithm.YoshikoAlgoritmController;
-import org.cytoscape.application.swing.CytoPanel;
-import org.cytoscape.application.swing.CytoPanelName;
-import org.cytoscape.model.CyNetwork;
-import org.cytoscape.model.CyNode;
-import org.cytoscape.model.CyTable;
-import org.cytoscape.service.util.CyServiceRegistrar;
-import org.cytoscape.view.layout.CyLayoutAlgorithm;
 import org.cytoscape.work.AbstractTask;
 import org.cytoscape.work.ContainsTunables;
-import org.cytoscape.work.ObservableTask;
 import org.cytoscape.work.TaskMonitor;
-import org.cytoscape.work.TunableValidator;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
 import org.slf4j.Logger;
 
-import de.hhu.ba.yoshikoWrapper.core.CyCore;
-import de.hhu.ba.yoshikoWrapper.core.LocalizationManager;
 import de.hhu.ba.yoshikoWrapper.core.ParameterSet;
 import de.hhu.ba.yoshikoWrapper.graphModel.YoshikoResult;
 import de.hhu.ba.yoshikoWrapper.logging.YoshikoLogger;
 import de.hhu.ba.yoshikoWrapper.swing.components.ResultPanel;
 
 
-public class AlgorithmTask extends AbstractTask implements ObservableTask, TunableValidator {
+public class AlgorithmTask extends AbstractTask {
 
 	//Constants
 	private static final String SOLUTION_COLUMN_PREFIX = "yoshikoSolution_"; //TODO: Make customizable?
@@ -91,11 +75,9 @@ public class AlgorithmTask extends AbstractTask implements ObservableTask, Tunab
 	}
 
 	@Override
-	public void run(TaskMonitor taskMonitor) throws Exception {
+	public void run(final TaskMonitor taskMonitor) throws Exception {
 		//TODO: Improve setProgress values
-
-		taskMonitor.setTitle(LocalizationManager.get("yoshTask"));
-		taskMonitor.setProgress(0.0);
+		taskMonitor.setTitle("yoshTask");
 
 		//Check current network
 		if (parameterSet.net == null) {
@@ -103,8 +85,11 @@ public class AlgorithmTask extends AbstractTask implements ObservableTask, Tunab
 			throw new Exception("CoreAlgorithm called on a net that is NULL!"); //TODO: Localize
 		}
 
-		YoshikoAlgoritmController yoshikoAlgoritmController = new YoshikoAlgoritmController(parameterSet);
+		YoshikoAlgoritmController yoshikoAlgoritmController = new YoshikoAlgoritmController(parameterSet, taskMonitor);
 		yoshikoAlgoritmController.controllAlgorithm();
+		taskMonitor.setProgress(1);
+
+
 
 
 /*
@@ -166,7 +151,7 @@ public class AlgorithmTask extends AbstractTask implements ObservableTask, Tunab
 	}
 
 
-
+/*
 	@SuppressWarnings("unchecked")
 	@Override
 	public <R> R getResults(Class<? extends R> type) {
@@ -176,10 +161,10 @@ public class AlgorithmTask extends AbstractTask implements ObservableTask, Tunab
 		}
 		return null;
 	}
-
+*//*
 	@Override
 	public ValidationState getValidationState(Appendable errMsg) {
 		//In order to validate the arguments for this task we simply check the ParameterSet
 		return parameterSet.getValidationState(errMsg);
-	}
+	}*/
 }
diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/yoshikoAlgorithm/ClusteringAlgorithm.java b/src/main/java/de/hhu/ba/yoshikoWrapper/yoshikoAlgorithm/ClusteringAlgorithm.java
index 35fa265661fa06e77111572846ed898448efdc99..c085be2e853e3f05f9468563b3514beba354a58b 100644
--- a/src/main/java/de/hhu/ba/yoshikoWrapper/yoshikoAlgorithm/ClusteringAlgorithm.java
+++ b/src/main/java/de/hhu/ba/yoshikoWrapper/yoshikoAlgorithm/ClusteringAlgorithm.java
@@ -1,6 +1,8 @@
 package de.hhu.ba.yoshikoWrapper.yoshikoAlgorithm;
 
 
+import org.cytoscape.work.TaskMonitor;
+
 import java.util.ArrayList;
 import java.util.List;
 
@@ -10,28 +12,37 @@ public class ClusteringAlgorithm {
     private double clusteringCost;
     private YoshikoEdge[][] edgeArray;
     private int numberOfNodes;
-    List<Integer> nodeList;
-    List<List<Integer>> clusters;
+    private List<Integer> nodeList;
+    private List<List<Integer>> clusters;
     int k=-1;
-    int nodeInClusters;
+    private int nodeInClusters;
+    private TaskMonitor taskMonitor;
 
 
-    public ClusteringAlgorithm(YoshikoEdge[][] edgeArray){
+    public ClusteringAlgorithm(YoshikoEdge[][] edgeArray, TaskMonitor taskMonitor){
         this.edgeArray = edgeArray;
         numberOfNodes = edgeArray.length;
         clusters = new ArrayList<>();
+        this.taskMonitor = taskMonitor;
         clusteringCost = 0;
     }
 
     public List<List<Integer>> runClusteringAlgorithm(){
         initializeQueue();
+        double initialBHeapSize = bHeap.size();
 
         if (k < 0) {
             while (bHeap.size() > 0) {
+                double progress = (initialBHeapSize-bHeap.size())/initialBHeapSize;
+                taskMonitor.setProgress(progress);
+
                 workHeap();
             }
         }else {
             while (numberOfNodes-nodeInClusters > k) {
+                double progress = (initialBHeapSize-bHeap.size())/initialBHeapSize;
+                taskMonitor.setProgress(progress);
+
                 workHeap();
             }
         }
@@ -129,7 +140,6 @@ public class ClusteringAlgorithm {
 
 
     private void workHeap(){
-        System.out.println(bHeap.size());
         YoshikoEdge e=bHeap.popMax();
 
 
@@ -172,8 +182,6 @@ public class ClusteringAlgorithm {
         addInfluenceOfVertexOnIcfIcp(e.source);
 
         putInCluster(e);
-
-        System.out.println("perm");
     }
 
     private void mergeVertexes(YoshikoEdge e){
@@ -323,7 +331,6 @@ public class ClusteringAlgorithm {
 
         e.weight=Double.NEGATIVE_INFINITY;
         bHeap.remove(e);
-        System.out.println("rm");
     }
 
     private void editInfluenzeOfForbiddenEdge(YoshikoEdge forbiddenEdge){
diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/yoshikoAlgorithm/YoshikoAlgoritmController.java b/src/main/java/de/hhu/ba/yoshikoWrapper/yoshikoAlgorithm/YoshikoAlgoritmController.java
index 8bec067ef5febf51b2a5d6e7a8c4505c6dc2e028..a9bbb96ac360ec009f75b6d13a56a7c07d100237 100644
--- a/src/main/java/de/hhu/ba/yoshikoWrapper/yoshikoAlgorithm/YoshikoAlgoritmController.java
+++ b/src/main/java/de/hhu/ba/yoshikoWrapper/yoshikoAlgorithm/YoshikoAlgoritmController.java
@@ -2,6 +2,7 @@ package de.hhu.ba.yoshikoWrapper.yoshikoAlgorithm;
 
 import de.hhu.ba.yoshikoWrapper.core.ParameterSet;
 import org.cytoscape.model.CyNetwork;
+import org.cytoscape.work.TaskMonitor;
 
 import java.util.List;
 
@@ -10,24 +11,28 @@ public class YoshikoAlgoritmController {
     private int k;
     private CyNetwork network;
     private ParameterSet parameterSet;
+    private TaskMonitor taskMonitor;
 
-    public YoshikoAlgoritmController(ParameterSet parameterSet){
+    public YoshikoAlgoritmController(ParameterSet parameterSet, TaskMonitor taskMonitor){
          this.parameterSet = parameterSet;
          this.network = parameterSet.net;
          this.k = parameterSet.clusterCount;
+         this.taskMonitor = taskMonitor;
     }
 
     public void controllAlgorithm(){
         GraphTranslator translator = new GraphTranslator(parameterSet);
         YoshikoEdge[][] edgeArray = translator.translateGraph();
 
-        ClusteringAlgorithm clusteringAlgorithm = new ClusteringAlgorithm(edgeArray);
+        ClusteringAlgorithm clusteringAlgorithm = new ClusteringAlgorithm(edgeArray, taskMonitor);
         clusteringAlgorithm.k = k;
 
         List<List<Integer>> clusters;
 
+        taskMonitor.setStatusMessage("Clustering the Graph");
         clusters = clusteringAlgorithm.runClusteringAlgorithm();
 
+        taskMonitor.setStatusMessage("Makeing new Graph");
         translator.makeCytoscapeGraph(clusters);
     }