Index: /branches/ralph/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/matrix/BinaryAlignmentStorage.java
===================================================================
--- /branches/ralph/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/matrix/BinaryAlignmentStorage.java	(revision 1583)
+++ /branches/ralph/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/matrix/BinaryAlignmentStorage.java	(revision 1584)
@@ -1,5 +1,37 @@
 package de.ugoe.cs.autoquest.tasktrees.alignment.matrix;
+
+
+import de.ugoe.cs.autoquest.tasktrees.alignment.algorithms.SmithWatermanRepeated;
 
 public class BinaryAlignmentStorage {
 
+    private SmithWatermanRepeated[][] alignments;
+    UPGMAMatrix sequenceDistances;
+   
+    public BinaryAlignmentStorage(int size) {
+    	alignments = new SmithWatermanRepeated[size][size];
+    	sequenceDistances = new UPGMAMatrix(size);
+    	sequenceDistances.initialize(Double.POSITIVE_INFINITY);
+    }
+    
+    public void set(int i,int j,SmithWatermanRepeated sw) {
+    	alignments[i][j] = sw;
+    }
+    
+    public SmithWatermanRepeated get(int i,int j) {
+    	return alignments[i][j];
+    }
+    
+    public void setDistance(int i,int j,double distance) {
+    	sequenceDistances.set(i, j, distance);
+    }
+    
+    public double getDistance(int i,int j) {
+    	return sequenceDistances.get(i,j);
+    }
+    
+    public UPGMAMatrix getDistanceMatrix() {
+    	return sequenceDistances;
+    }
 }
+
Index: /branches/ralph/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/pal/tree/UPGMAAligningTree.java
===================================================================
--- /branches/ralph/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/pal/tree/UPGMAAligningTree.java	(revision 1583)
+++ /branches/ralph/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/pal/tree/UPGMAAligningTree.java	(revision 1584)
@@ -17,4 +17,5 @@
 
 import de.ugoe.cs.autoquest.tasktrees.alignment.algorithms.NumberSequence;
+import de.ugoe.cs.autoquest.tasktrees.alignment.matrix.BinaryAlignmentStorage;
 import de.ugoe.cs.autoquest.tasktrees.alignment.matrix.UPGMAMatrix;
 import de.ugoe.cs.autoquest.tasktrees.alignment.pal.misc.Identifier;
@@ -41,7 +42,7 @@
 	 * @param m distance matrix
 	 */
-	public UPGMAAligningTree(ArrayList<NumberSequence> numberseqs, UPGMAMatrix m)
-	{
-		if (m.size() < 2)
+	public UPGMAAligningTree(ArrayList<NumberSequence> numberseqs, BinaryAlignmentStorage alignments)
+	{
+		if (alignments.getDistanceMatrix().size() < 2)
 		{
 			new IllegalArgumentException("LESS THAN 2 TAXA IN DISTANCE MATRIX");
@@ -49,5 +50,6 @@
 	
 		this.numberseqs = numberseqs;
-		init(m);
+		this.alignments = alignments;
+		init(alignments.getDistanceMatrix());
 
 		while (true)
@@ -73,4 +75,5 @@
 	//
 	private ArrayList<NumberSequence> numberseqs;
+	private BinaryAlignmentStorage alignments;
 	private int numClusters;
 	private int besti, abi;
Index: /branches/ralph/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/SequenceForTaskDetectionRuleAlignment.java
===================================================================
--- /branches/ralph/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/SequenceForTaskDetectionRuleAlignment.java	(revision 1583)
+++ /branches/ralph/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/SequenceForTaskDetectionRuleAlignment.java	(revision 1584)
@@ -26,7 +26,7 @@
 import java.util.logging.Level;
 
-
 import de.ugoe.cs.autoquest.tasktrees.alignment.algorithms.NumberSequence;
 import de.ugoe.cs.autoquest.tasktrees.alignment.algorithms.SmithWatermanRepeated;
+import de.ugoe.cs.autoquest.tasktrees.alignment.matrix.BinaryAlignmentStorage;
 import de.ugoe.cs.autoquest.tasktrees.alignment.matrix.ObjectDistanceSubstitionMatrix;
 import de.ugoe.cs.autoquest.tasktrees.alignment.matrix.UPGMAMatrix;
@@ -158,9 +158,7 @@
 		submat.generate();
 
-		UPGMAMatrix sequenceDistances = new UPGMAMatrix(numberseqs.size());
-		sequenceDistances.initialize(Double.POSITIVE_INFINITY);
-		
-		//Save the alignments so we do not need to recalculate those when aligning them again in feng doolittle algorithm
-		SmithWatermanRepeated[][] alignments = new SmithWatermanRepeated[numberseqs.size()][numberseqs.size()]; 
+	
+		BinaryAlignmentStorage alignments = new BinaryAlignmentStorage(numberseqs.size());
+
 
 		for (int i = 0; i < numberseqs.size(); i++) {
@@ -172,7 +170,7 @@
 					int smithWatermanThreshold = 10;
 
-					alignments[i][j] = new SmithWatermanRepeated(
+					alignments.set(i, j,new SmithWatermanRepeated(
 							ns1.getSequence(), ns2.getSequence(), submat,
-							smithWatermanThreshold);
+							smithWatermanThreshold));
 					SmithWatermanRepeated sameSequence1 = new SmithWatermanRepeated(
 							ns1.getSequence(), ns1.getSequence(), submat,
@@ -185,5 +183,5 @@
 					
 					// Score of the aligmnment
-					double score = alignments[i][j].getAlignmentScore();
+					double score = alignments.get(i,j).getAlignmentScore();
 					// Scores of the sequence being aligned to itself (maximum score)
 					double sSelf1 = sameSequence1.getAlignmentScore();
@@ -201,6 +199,6 @@
 					
 					if(!Double.isInfinite(distance) && !Double.isNaN(distance)) {
-						if(distance < sequenceDistances.get(i, j)) {	
-							sequenceDistances.set(i,j,distance );
+						if(distance < alignments.getDistance(i, j)) {	
+							alignments.setDistance(i,j,distance );
 						}
 					}
@@ -209,5 +207,5 @@
 		}
 		//System.out.println(sequenceDistances.toString());
-		UPGMAAligningTree guidetree = new UPGMAAligningTree(numberseqs, sequenceDistances);
+		UPGMAAligningTree guidetree = new UPGMAAligningTree(numberseqs, alignments);
 		
 	
