diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/graphModel/YoshikoResult.java b/src/main/java/de/hhu/ba/yoshikoWrapper/graphModel/YoshikoResult.java
index d3e12368aac998179d019fafc1bb016e4f2af7be..47f1c4dd49dff15317072a6eda3b8834c9733887 100644
--- a/src/main/java/de/hhu/ba/yoshikoWrapper/graphModel/YoshikoResult.java
+++ b/src/main/java/de/hhu/ba/yoshikoWrapper/graphModel/YoshikoResult.java
@@ -22,6 +22,8 @@
 package de.hhu.ba.yoshikoWrapper.graphModel;
 
 import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
 
 import org.cytoscape.model.CyNetwork;
 
@@ -36,21 +38,21 @@ public class YoshikoResult{
 
 	private CyNetwork originalGraph;
 
-	private ArrayList<YoshikoSolution> solutions;
+	private HashMap<Long,YoshikoSolution> solutions;
 
 	private SolutionFlags flags;
 
 	private int id;
 
 	public YoshikoResult(CyNetwork net, SolutionFlags flags) {
-		solutions = new ArrayList<YoshikoSolution>();
+		solutions = new HashMap<Long,YoshikoSolution>();
 		this.originalGraph = net;
 		this.flags = flags;
 		ResultList.add(this);
 	}
 
 	public void delete() {
-		for (YoshikoSolution s: solutions) {
+		for (YoshikoSolution s: solutions.values()) {
 			s.delete();
 		}
 		ResultList.remove(this.id);
@@ -59,7 +61,7 @@ public class YoshikoResult{
 	//___________SETTER GETTER_____________//
 
 	/**
-	 * @return the flags asspciated with this result
+	 * @return the flags associated with this result
 	 */
 	public SolutionFlags getFlags() {
 		return flags;
@@ -67,15 +69,13 @@ public class YoshikoResult{
 
 
 	public void addSolution(YoshikoSolution solution) {
-		solutions.add(solution);
+		solutions.put(solution.getId(),solution);
 	}
 
-
-	public ArrayList<YoshikoSolution> getSolutions() {
-		return solutions;
+	public Collection<YoshikoSolution> getSolutions() {
+		return solutions.values();
 	}
 
-
 	public CyNetwork getOriginalGraph() {
 		return originalGraph;
 	}
diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/graphModel/YoshikoSolution.java b/src/main/java/de/hhu/ba/yoshikoWrapper/graphModel/YoshikoSolution.java
index 542cce2a728bd40503573b4951e4b17117eedb55..bf8eb5e9593860b31072e143eafc8337150d25a0 100644
--- a/src/main/java/de/hhu/ba/yoshikoWrapper/graphModel/YoshikoSolution.java
+++ b/src/main/java/de/hhu/ba/yoshikoWrapper/graphModel/YoshikoSolution.java
@@ -21,11 +21,11 @@
  ******************************************************************************/
 package de.hhu.ba.yoshikoWrapper.graphModel;
 
-import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Comparator;
 import java.util.HashMap;
 import java.util.List;
 
-import javax.swing.JOptionPane;
 
 import org.cytoscape.model.CyNetwork;
 import org.cytoscape.model.CyNode;
@@ -43,7 +43,7 @@ public class YoshikoSolution {
 	private HashMap<YoshikoCluster, CyNode> metaGraphMap;
 
 
-	public ArrayList<YoshikoCluster> clusters;
+	private HashMap<Long,YoshikoCluster> clusters;
 
 	private final long id;
 
@@ -51,15 +51,39 @@ public class YoshikoSolution {
 
 
 	public YoshikoSolution(YoshikoResult yoshikoResult, long id) {
-		clusters = new ArrayList<YoshikoCluster>();
+		clusters = new HashMap<Long,YoshikoCluster>();
 		this.result = yoshikoResult;
 		this.id = id;
 	}
 
+	public void delete() {
+		for (YoshikoCluster c: clusters.values()) {
+			c.delete();
+		}
+		if (this.metaGraph != null) {
+			CyCore.networkManager.destroyNetwork(metaGraph);
+		}
+	}
+
+	public void highlightInMetaGraph(YoshikoCluster yoshikoCluster) {
+		try {
+			List<CyRow> allRows = metaGraph.getDefaultNodeTable().getAllRows();
+			for (CyRow r: allRows) {
+				r.set("selected", false);
+			}
+
+			metaGraph.getRow(metaGraphMap.get(yoshikoCluster)).set("selected", true);
+		}
+		catch (Exception e) {
+			logger.warn("The graph doesn't exist anymore, can't highlight nodes!");
+		}
+
+	}
+
 	//_____________GETTER / SETTER ________________//
 
-	public ArrayList<YoshikoCluster> getClusters() {
-		return clusters;
+	public Collection<YoshikoCluster> getClusters() {
+		return clusters.values();
 	}
 
 	/**
@@ -73,15 +97,6 @@ public class YoshikoSolution {
 		return result.getOriginalGraph();
 	}
 
-	public void delete() {
-		for (YoshikoCluster c: clusters) {
-			c.delete();
-		}
-		if (this.metaGraph != null) {
-			CyCore.networkManager.destroyNetwork(metaGraph);
-		}
-	}
-
 	public void setMetaGraph(CyNetwork metaGraph, HashMap<YoshikoCluster, CyNode> map) {
 		this.metaGraph = metaGraph;
 		this.metaGraphMap = map;
@@ -91,19 +106,9 @@ public class YoshikoSolution {
 		return metaGraph;
 	}
 
-	public void highlightInMetaGraph(YoshikoCluster yoshikoCluster) {
-		try {
-			List<CyRow> allRows = metaGraph.getDefaultNodeTable().getAllRows();
-			for (CyRow r: allRows) {
-				r.set("selected", false);
-			}
-
-			metaGraph.getRow(metaGraphMap.get(yoshikoCluster)).set("selected", true);
-		}
-		catch (Exception e) {
-			logger.warn("The graph doesn't exist anymore, can't highlight nodes!");
-		}
-
+	public void addCluster(YoshikoCluster cluster) {
+		clusters.put(cluster.getID(), cluster);
 	}
 
+
 }
diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/swing/components/SolutionTab.java b/src/main/java/de/hhu/ba/yoshikoWrapper/swing/components/SolutionTab.java
index e8e92cf4f5d83908ccd7058653a685c152cc8af6..de0ebdcd3f79c8843963b2301bee32c437967b80 100644
--- a/src/main/java/de/hhu/ba/yoshikoWrapper/swing/components/SolutionTab.java
+++ b/src/main/java/de/hhu/ba/yoshikoWrapper/swing/components/SolutionTab.java
@@ -30,6 +30,7 @@ import java.awt.event.ActionListener;
 import java.awt.event.ItemEvent;
 import java.awt.event.ItemListener;
 import java.util.ArrayList;
+import java.util.List;
 
 import javax.swing.GroupLayout;
 import javax.swing.GroupLayout.Alignment;
@@ -114,7 +115,9 @@ public class SolutionTab extends JPanel {
 		clusterViewList = new ClusterViewList();
 
 		//Build CV list
-		for (YoshikoCluster c: solution.clusters) {
+		List<YoshikoCluster> list = new ArrayList<YoshikoCluster>(solution.getClusters());
+		list.sort(YoshikoCluster.lessThanComparator);
+		for (YoshikoCluster c: list) {
 			ClusterView clusterView = new ClusterView(c);
 			clusterViewList.add(clusterView);
 		}
@@ -124,7 +127,7 @@ public class SolutionTab extends JPanel {
 
 		scrollPane = new JScrollPane(clusterViewList);
 
-		clusterCount = new JLabel(LocalizationManager.get("clusterFound")+" "+s.clusters.size());
+		clusterCount = new JLabel(LocalizationManager.get("clusterFound")+" "+s.getClusters().size());
 
 		createClusterView = new JButton(LocalizationManager.get("createClusterView"));
 		createMetaGraph = new JButton(LocalizationManager.get("createMetaGraph"));
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 375fc06930088a9e2ee16dbfce11efc21c48600f..8f7299e3bf46ccaafbff8b6c06bc045fac50e7af 100644
--- a/src/main/java/de/hhu/ba/yoshikoWrapper/tasks/AlgorithmTask.java
+++ b/src/main/java/de/hhu/ba/yoshikoWrapper/tasks/AlgorithmTask.java
@@ -219,10 +219,10 @@ public class AlgorithmTask extends AbstractTask implements ObservableTask {
 					net.getRow(node).set(columnName, ""+(k+1)); //Add Cluster ID in table (Remove in final version?)
 				}
 				//Register clusters with solution for further reference
-				solution.clusters.add(cluster);
+				solution.addCluster(cluster);
 			}
 			//Sort clusters by size, descending as the biggest clusters are usually the most relevant
-			solution.clusters.sort(YoshikoCluster.lessThanComparator);
+			//solution.sortClusters(YoshikoCluster.lessThanComparator);
 			//Register solution with c_result for further reference
 			result.addSolution(solution);
 		}
diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/tasks/CreateMetaGraphTask.java b/src/main/java/de/hhu/ba/yoshikoWrapper/tasks/CreateMetaGraphTask.java
index 18a7ef2c43abdd207719515269c18d4a33adb274..1f24dea291ab3a44cd99620a3e77873ec348e0d3 100644
--- a/src/main/java/de/hhu/ba/yoshikoWrapper/tasks/CreateMetaGraphTask.java
+++ b/src/main/java/de/hhu/ba/yoshikoWrapper/tasks/CreateMetaGraphTask.java
@@ -2,6 +2,7 @@ package de.hhu.ba.yoshikoWrapper.tasks;
 
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Iterator;
 
 import org.cytoscape.model.CyEdge;
 import org.cytoscape.model.CyNetwork;
@@ -103,10 +104,13 @@ public class CreateMetaGraphTask extends AbstractTask{
 
 		taskMonitor.setStatusMessage(LocalizationManager.get("metaGraph_edges"));
 
-		for (int x = 0; x <solution.getClusters().size(); x ++) {
-			YoshikoCluster c1 = solution.getClusters().get(x);
-			for (int y = x; y <solution.getClusters().size(); y ++) {
-				YoshikoCluster c2 = solution.getClusters().get(y);
+		Iterator<YoshikoCluster> it1 = solution.getClusters().iterator();
+		Iterator<YoshikoCluster> it2 = solution.getClusters().iterator();
+
+		while (it1.hasNext()) {
+			YoshikoCluster c1 = it1.next();
+			while(it2.hasNext()) {
+				YoshikoCluster c2 = it2.next();
 
 				if(isTerminated) {
 					throw new Exception("Terminated by user!");
diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/tasks/GetClustersTask.java b/src/main/java/de/hhu/ba/yoshikoWrapper/tasks/GetClustersTask.java
new file mode 100644
index 0000000000000000000000000000000000000000..78888ae59398abce065e4db6c3ba544c0b9305dc
--- /dev/null
+++ b/src/main/java/de/hhu/ba/yoshikoWrapper/tasks/GetClustersTask.java
@@ -0,0 +1,49 @@
+package de.hhu.ba.yoshikoWrapper.tasks;
+
+import java.util.ArrayList;
+
+import org.cytoscape.work.ObservableTask;
+import org.cytoscape.work.TaskMonitor;
+import org.cytoscape.work.Tunable;
+
+import de.hhu.ba.yoshikoWrapper.core.ResultList;
+import de.hhu.ba.yoshikoWrapper.graphModel.YoshikoCluster;
+import de.hhu.ba.yoshikoWrapper.graphModel.YoshikoResult;
+import de.hhu.ba.yoshikoWrapper.graphModel.YoshikoSolution;
+
+public class GetClustersTask implements ObservableTask {
+
+	@Tunable(description="The result ID for which the solutions should be displayed", context="nogui")
+	public int resultID = -1;
+
+	@Tunable(description="The solution ID for which the solutions should be displayed", context="nogui")
+	public int solutionID = -1;
+
+	private ArrayList<YoshikoCluster> clusters;
+
+	@Override
+	public void run(TaskMonitor taskMonitor) throws Exception {
+		YoshikoResult result = ResultList.get(resultID);
+		if (result == null) {
+			throw new Exception("No result with ID: "+resultID+" was found!"); //TODO: Localization
+		}
+	}
+
+	@Override
+	public void cancel() {
+		// TODO Auto-generated method stub
+
+	}
+
+	@SuppressWarnings("unchecked")
+	@Override
+	public <R> R getResults(Class<? extends R> type) {
+		if (type.equals(String.class)) {
+			String ret = "";
+
+			return (R) ret;
+		}
+		return null;
+	}
+
+}
diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/tasks/GetSolutionsTask.java b/src/main/java/de/hhu/ba/yoshikoWrapper/tasks/GetSolutionsTask.java
index c356698bf06ea4a8554ceb57d0590ee77d5d3f22..318cc18dd7188c77c1cee7ce8074b3ac8941cbdb 100644
--- a/src/main/java/de/hhu/ba/yoshikoWrapper/tasks/GetSolutionsTask.java
+++ b/src/main/java/de/hhu/ba/yoshikoWrapper/tasks/GetSolutionsTask.java
@@ -1,6 +1,7 @@
 package de.hhu.ba.yoshikoWrapper.tasks;
 
 import java.util.ArrayList;
+import java.util.Collection;
 
 import org.cytoscape.work.ObservableTask;
 import org.cytoscape.work.TaskMonitor;
@@ -15,7 +16,7 @@ public class GetSolutionsTask implements ObservableTask {
 	@Tunable(description="The result ID for which the solutions should be displayed", context="nogui")
 	public int resultID = -1;
 
-	private ArrayList<YoshikoSolution> solutions;
+	private Collection<YoshikoSolution> solutions;
 
 	@Override
 	public void run(TaskMonitor taskMonitor) throws Exception {
@@ -38,7 +39,7 @@ public class GetSolutionsTask implements ObservableTask {
 		if (type.equals(String.class)) {
 			String ret = "";
 			for (YoshikoSolution s: solutions) {
-				ret+="Solution ["+s.getId()+"]: "+s.getClusters().size()+" clusters\n";
+				ret+="Solution[ID="+s.getId()+"]: "+s.getClusters().size()+" clusters\n";
 			}
 			return (R) ret;
 		}