Index: /branches/ralph/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/algorithms/SmithWatermanRepeated.java
===================================================================
--- /branches/ralph/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/algorithms/SmithWatermanRepeated.java	(revision 1574)
+++ /branches/ralph/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/algorithms/SmithWatermanRepeated.java	(revision 1575)
@@ -5,6 +5,8 @@
 import java.util.LinkedList;
 import java.util.List;
+import java.util.logging.Level;
 
 import de.ugoe.cs.autoquest.tasktrees.alignment.matrix.SubstitutionMatrix;
+import de.ugoe.cs.util.console.Console;
 
 public class SmithWatermanRepeated {
@@ -95,6 +97,7 @@
 		for (int j = 1; j < length2; j++) {
 			matrix[0][j].setScore(0);
-			matrix[0][j].setPrevious(matrix[0][j-1]);
-			
+			//We don't need to go back to [0][0] if we reached matrix[0][x], so just end here
+			//matrix[0][j].setPrevious(matrix[0][j-1]);
+			matrix[0][j].setPrevious(null);	
 		}
 		
@@ -219,8 +222,6 @@
 	public void traceback() {
 		MatrixEntry tmp = matrix[length1+1][0];
-		//TODO: Why do we need such long arrays, also, add a check if we reach the limit?
-		int aligned1[] = new int[2*length1+2*length2];
-		int aligned2[] = new int[2*length1+2*length2];
-		System.out.println("Aligned length: " + aligned1.length);
+		int aligned1[] = new int[length1+length2+2];
+		int aligned2[] = new int[length1+length2+2];
 		int count = 0;
 		do
@@ -234,9 +235,12 @@
 			tmp = tmp.getPrevious();
 			count++;
-			System.out.println(count);
+		if (length1+length2+2 == count) {	
+			Console.traceln(Level.WARNING, "Traceback longer than both sequences summed up!");
+			break;
+		}
 			
 		} while(tmp != null);
-
-		//reverse order
+		count--;
+		//reverse order of the alignment
 		int reversed1[] = new int[count];
 		int reversed2[] = new int[count];
