diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/CyActivator.java b/src/main/java/de/hhu/ba/yoshikoWrapper/CyActivator.java
index 507a0bfb2985b6404ed1ea2ae54718d413ec6b39..82ae5ea73b193238f2f624ad9f77aa92a97e65fd 100644
--- a/src/main/java/de/hhu/ba/yoshikoWrapper/CyActivator.java
+++ b/src/main/java/de/hhu/ba/yoshikoWrapper/CyActivator.java
@@ -3,22 +3,20 @@ package de.hhu.ba.yoshikoWrapper;
 import java.util.Properties;
 
 import org.cytoscape.application.CyApplicationManager;
-import org.cytoscape.application.swing.CyAction;
-import org.cytoscape.application.swing.CySwingApplication;
 import org.cytoscape.application.swing.CytoPanelComponent;
 import org.cytoscape.service.util.AbstractCyActivator;
+import org.cytoscape.work.swing.DialogTaskManager;
 import org.osgi.framework.BundleContext;
 
 import de.hhu.ba.yoshikoWrapper.core.ConfigurationManager;
-import de.hhu.ba.yoshikoWrapper.core.Core;
+import de.hhu.ba.yoshikoWrapper.core.CyCore;
 import de.hhu.ba.yoshikoWrapper.core.YoshikoLoader;
 import de.hhu.ba.yoshikoWrapper.gui.MainPanel;
-import de.hhu.ba.yoshikoWrapper.gui.MainPanelAction;
 import de.hhu.ba.yoshikoWrapper.gui.SolutionsPanel;
 
 
 public class CyActivator extends AbstractCyActivator {
-	
+
 	public CyActivator() {
 		super();
 	}
@@ -38,14 +36,12 @@ public class CyActivator extends AbstractCyActivator {
 			YoshikoLoader.loadLibrary(cm.getProperties().getProperty("pathToYoshiko"));
 		}
 		
-		CyApplicationManager cyApplicationManager = getService(context, CyApplicationManager.class);
-		Core.setApplicationManager(cyApplicationManager);
-		
-		CySwingApplication cytoscapeDesktopService = getService(context,CySwingApplication.class);
-		
+		//Create symbolic links to give other classes access
+		CyCore.cy = getService(context, CyApplicationManager.class);	
+		CyCore.dialogTaskManager = getService(context, DialogTaskManager.class);
 		//main panel and result panel
-		MainPanel mainPanel = new MainPanel();
 		SolutionsPanel solutionsPanel = new SolutionsPanel();
+		MainPanel mainPanel = new MainPanel(solutionsPanel);
 		registerService(context,mainPanel,CytoPanelComponent.class, new Properties());
 		registerService(context,solutionsPanel,CytoPanelComponent.class, new Properties());
 	}
diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/core/Core.java b/src/main/java/de/hhu/ba/yoshikoWrapper/core/AlgorithmTask.java
similarity index 68%
rename from src/main/java/de/hhu/ba/yoshikoWrapper/core/Core.java
rename to src/main/java/de/hhu/ba/yoshikoWrapper/core/AlgorithmTask.java
index 7fb128424d4b5922e08200058cf02885a9048315..e910feb81a7cb62139861ed42ab3f9aeb684eedf 100644
--- a/src/main/java/de/hhu/ba/yoshikoWrapper/core/Core.java
+++ b/src/main/java/de/hhu/ba/yoshikoWrapper/core/AlgorithmTask.java
@@ -1,10 +1,11 @@
 package de.hhu.ba.yoshikoWrapper.core;
 //TODO: ADD LOGGER SYSTEM
 
-import org.cytoscape.application.CyApplicationManager;
 import org.cytoscape.model.CyColumn;
 import org.cytoscape.model.CyNetwork;
 import org.cytoscape.model.CyNode;
+import org.cytoscape.work.AbstractTask;
+import org.cytoscape.work.TaskMonitor;
 import org.slf4j.Logger;
 
 import de.hhu.ba.yoshikoWrapper.logging.YoshikoLogger;
@@ -13,14 +14,23 @@ import de.hhu.ba.yoshikoWrapper.swig.SWIGTYPE_p_std__vectorT_int_t;
 import de.hhu.ba.yoshikoWrapper.swig.SWIGTYPE_p_yskInput__LibraryInput;
 import de.hhu.ba.yoshikoWrapper.swig.SWIGTYPE_p_ysk__ClusterEditingSolutions;
 
-public class Core {
+public class AlgorithmTask extends AbstractTask {
 	
 	
 	//Symbolic links
-	private static CyApplicationManager cy;
 	private static Logger logger = YoshikoLogger.getInstance().getLogger();
 
-	public static void performYoshiko(
+	//Parameters
+	private double insertionCostDefault;
+	private double deletionCostDefault;
+	private CyColumn permanentColumn;
+	private CyColumn forbiddenColumn;
+	private CyColumn weightColumn;
+	private int timeLimit;
+	private CyNetwork net;
+
+	public AlgorithmTask(
+			CyNetwork net,
 			int timeLimit,
 			CyColumn weightColumn,
 			CyColumn permanentColumn,
@@ -29,10 +39,22 @@ public class Core {
 			double deletionCostDefault
 			) 
 	{
+		this.net = net;
+		this.timeLimit = timeLimit;
+		this.weightColumn = weightColumn;
+		this.permanentColumn = permanentColumn;
+		this.forbiddenColumn = forbiddenColumn;
+		this.insertionCostDefault = insertionCostDefault;
+		this.deletionCostDefault = deletionCostDefault;
+	}
+
+	@Override
+	public void run(TaskMonitor taskMonitor) throws Exception {
+		taskMonitor.setTitle(LocalizationManager.yoshikoStrings().getString("yoshTask"));
+		taskMonitor.setProgress(0.0);
 		//Get current network
-		CyNetwork currentNetwork = cy.getCurrentNetwork();
-		if (currentNetwork == null) {
-			logger.warn("There is no network loaded. You need to load a network first!");
+		if (net == null) {
+			logger.warn("CoreAlgorithm called on a net that is NULL!");
 			return;
 		}
 		
@@ -40,24 +62,27 @@ public class Core {
 		LibraryInterface.setTimeLimit(timeLimit);
 
 		//Create a node map to identify nodes and eges in the solution
-		NodeMap nodeMap  = new NodeMap(currentNetwork);
+		NodeMap nodeMap  = new NodeMap(net);
+		taskMonitor.setProgress(0.1);
 
 		//Generate an input instance from the network
 		SWIGTYPE_p_yskInput__LibraryInput input = NetworkParser.parseNetwork(
-				currentNetwork,
+				net,
 				nodeMap,
 				weightColumn,
 				permanentColumn, 
 				forbiddenColumn,
 				deletionCostDefault
 				);
-		
+		taskMonitor.setProgress(0.2);
+
 		//Set the default value for insertion cost
 		LibraryInterface.LibraryInput_setDefaultInsertionCost(input, insertionCostDefault);
 
 		//Call Yoshiko <<< Algorithm is performed here
 		SWIGTYPE_p_ysk__ClusterEditingSolutions solutions = LibraryInterface.processLibraryInput(input);
-		
+		taskMonitor.setProgress(0.9);
+
 		
 		long numberOfSolutions = LibraryInterface.ClusterEditingSolutions_getNumberOfSolutions(solutions);
 		System.out.println("Found: "+numberOfSolutions+" solutions!");
@@ -66,8 +91,8 @@ public class Core {
 		for (long i=0;i<numberOfSolutions;i++) {
 			System.out.println("Processing solution "+(i+1)+" of "+numberOfSolutions);
 			String columnName = "YOSHIKO_SOLUTION_"+(i+1);
-			currentNetwork.getDefaultNodeTable().deleteColumn(columnName);
-			currentNetwork.getDefaultNodeTable().createColumn(columnName, String.class, false);
+			net.getDefaultNodeTable().deleteColumn(columnName);
+			net.getDefaultNodeTable().createColumn(columnName, String.class, false);
 			long numberOfClusters = LibraryInterface.ClusterEditingSolutions_getNumberOfClusters(solutions, i);
 			for (long k=0;k<numberOfClusters;k++) {
 				System.out.println("Processing cluster "+(k+1)+" of "+numberOfClusters);
@@ -81,23 +106,12 @@ public class Core {
 						System.out.println("FATAL ERROR: Node was not previously mapped!");
 						return;
 					}
-					currentNetwork.getRow(node).set(columnName, ""+(k+1));
+					net.getRow(node).set(columnName, ""+(k+1));
 				}
 			}
 		}
 		
 		LibraryInterface.delete_LibraryInput(input);		
+		taskMonitor.setProgress(1.0);
 	}
-	
-	
-	//SETTER / GETTER METHODS
-	
-	public static void setApplicationManager(CyApplicationManager cyApplicationManager) {
-		cy = cyApplicationManager;
-	}
-
-	public static CyApplicationManager getApplicationManager() {
-		return cy;
-	}
-
 }
diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/core/CyCore.java b/src/main/java/de/hhu/ba/yoshikoWrapper/core/CyCore.java
new file mode 100644
index 0000000000000000000000000000000000000000..47fac47bd1342b3cdda37ab605ca00b4deb44e83
--- /dev/null
+++ b/src/main/java/de/hhu/ba/yoshikoWrapper/core/CyCore.java
@@ -0,0 +1,9 @@
+package de.hhu.ba.yoshikoWrapper.core;
+
+import org.cytoscape.application.CyApplicationManager;
+import org.cytoscape.work.swing.DialogTaskManager;
+
+public class CyCore {
+	public static CyApplicationManager cy;
+	public static DialogTaskManager dialogTaskManager;
+}
diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/ColumnMapper.java b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/ColumnMapper.java
index 6744a35ae3980ffe826ed6161ad7ecda2961c028..f87c73981536d8b1dc260540794c851a1268d658 100644
--- a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/ColumnMapper.java
+++ b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/ColumnMapper.java
@@ -8,18 +8,15 @@ import javax.swing.JButton;
 import javax.swing.JCheckBox;
 import javax.swing.JComboBox;
 
-import org.cytoscape.application.CyApplicationManager;
 import org.cytoscape.model.CyColumn;
 import org.cytoscape.model.CyNetwork;
 
-import de.hhu.ba.yoshikoWrapper.core.Core;
+import de.hhu.ba.yoshikoWrapper.core.CyCore;
 
 @SuppressWarnings("serial") //will never be serialized
 public class ColumnMapper extends ComfortPanel{
 	
-	//Symbolic links
-	private CyApplicationManager cy;
-	
+
 	//Swing components
 	private JComboBox<CyColumn> editingCostMapper;
 	private JComboBox<CyColumn> permanentMapper;
@@ -33,7 +30,6 @@ public class ColumnMapper extends ComfortPanel{
 	
 	public ColumnMapper() {
 		this.setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));
-		cy = Core.getApplicationManager();
 
 		//SWING COMPONENTS
 		editingCostMapper = new JComboBox<CyColumn>();
@@ -64,7 +60,7 @@ public class ColumnMapper extends ComfortPanel{
 	
 	public void updateValues() {
 		
-		CyNetwork net = cy.getCurrentNetwork();
+		CyNetwork net = CyCore.cy.getCurrentNetwork();
 
 		if (net != null) { //Check if a network is loaded
 	
diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/MainPanel.java b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/MainPanel.java
index ac0b3fbbaac9cac320d48cab213a95d4e02261ae..f3705081dfdfe04c91e7bc4fb9e53d82dd81a14f 100644
--- a/src/main/java/de/hhu/ba/yoshikoWrapper/gui/MainPanel.java
+++ b/src/main/java/de/hhu/ba/yoshikoWrapper/gui/MainPanel.java
@@ -13,7 +13,11 @@ import javax.swing.JRadioButton;
 
 import org.cytoscape.application.swing.CytoPanelComponent;
 import org.cytoscape.application.swing.CytoPanelName;
-import de.hhu.ba.yoshikoWrapper.core.Core;
+import org.cytoscape.work.AbstractTask;
+import org.cytoscape.work.TaskIterator;
+
+import de.hhu.ba.yoshikoWrapper.core.AlgorithmTask;
+import de.hhu.ba.yoshikoWrapper.core.CyCore;
 import de.hhu.ba.yoshikoWrapper.core.YoshikoLoader;
 
 /**This class describes the Swing Panel that the user interacts with in cytoscape
@@ -41,13 +45,18 @@ public class MainPanel extends ComfortPanel implements CytoPanelComponent {
 	private final JCheckBox useTriangleCutsBox;
 	private final JCheckBox usePartitionCutsBox;
 	
-
-
+	//SYMBOLIC LINKS
+	private final SolutionsPanel solutionsPanel;
+	
 	/**
 	 * Main constructor, creates a new Panel and initializes subcomponents
+	 * @param solPanel 
 	 */
-	public MainPanel() {
+	public MainPanel(SolutionsPanel solPanel) {
+		
+		this.solutionsPanel = solPanel;
 		
+		//SWING INIT
 		this.setLayout(new BoxLayout(this,BoxLayout.PAGE_AXIS));
 		
 		//Initialize Swing components
@@ -71,7 +80,8 @@ public class MainPanel extends ComfortPanel implements CytoPanelComponent {
 			@Override
 			public void actionPerformed(ActionEvent e) {
 				if (YoshikoLoader.isLibraryLoaded()){
-					Core.performYoshiko(
+					AbstractTask yoshiko = new AlgorithmTask(
+							CyCore.cy.getCurrentNetwork(),
 							timeLimitSetter.getTimeLimit(), 
 							ecPanel.getWeightColumn(),
 							ecPanel.getPermanentColumn(),
@@ -79,7 +89,8 @@ public class MainPanel extends ComfortPanel implements CytoPanelComponent {
 							ecPanel.getDefaultInsertionCost(),
 							ecPanel.getDefaultDeletionCost()
 							);
-
+					CyCore.dialogTaskManager.execute(new TaskIterator(1,yoshiko));
+					solutionsPanel.setVisible(true);
 				}
 			}
 			
diff --git a/src/main/resources/YoshikoStrings.properties b/src/main/resources/YoshikoStrings.properties
index 9d773a7796479c3d758c9bc4b19244b128f537b0..b919c85a9d2e7916543055251f88a188ff472d25 100644
--- a/src/main/resources/YoshikoStrings.properties
+++ b/src/main/resources/YoshikoStrings.properties
@@ -1,3 +1,4 @@
 resultsPanelTitle = Yoshiko Results
 yoshVersion = Yoshiko Version
-resolveLibPath = Resolve Yoshiko Library Path
\ No newline at end of file
+resolveLibPath = Resolve Yoshiko Library Path
+yoshTask = Performing Yoshiko Algorithm
\ No newline at end of file