Index: /branches/ralph/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/pal/tree/FengDoolittleNode.java
===================================================================
--- /branches/ralph/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/pal/tree/FengDoolittleNode.java	(revision 1582)
+++ /branches/ralph/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/pal/tree/FengDoolittleNode.java	(revision 1583)
@@ -11,12 +11,12 @@
 
 import java.util.ArrayList;
+import java.util.logging.Level;
 
 import de.ugoe.cs.autoquest.tasktrees.alignment.algorithms.NumberSequence;
 import de.ugoe.cs.autoquest.tasktrees.alignment.pal.misc.Identifier;
+import de.ugoe.cs.util.console.Console;
 
 
 /**
- * data structure for a node (includes branch) in a binary/non-binary
- * rooted/unrooted tree
  *
  * @version $Id: SimpleNode.java,v 1.20 2002/01/14 04:16:53 matt Exp $
@@ -377,5 +377,5 @@
 		
 		if(newNode instanceof FengDoolittleNode) {
-			((FengDoolittleNode) newNode).alignSequences();
+			newNode.setSequences(((FengDoolittleNode) newNode).alignSequences());
 		}
 		
@@ -397,5 +397,6 @@
 
 
-	private void alignSequences() {
+	private ArrayList<NumberSequence> alignSequences() {
+		ArrayList<NumberSequence> alignment = new ArrayList<NumberSequence>();
 		if(this.getChildCount()<3) {
 			
@@ -406,13 +407,32 @@
 			int seqCount2 = node2.getSequences().size();
 			
+			//Align 2 sequences
+			if(seqCount1 == 1 && seqCount2 == 1) {
+			}
+			//Align a sequence to a group
+			else if( seqCount1 > 1 && seqCount2 == 1) {
 			
-			
+			}
+			//Align a sequence to a group
+			else if(seqCount1 == 1 && seqCount2 > 1) {
+				
+			}
+			//Align 2 groups
+			else if((seqCount1 > 1) && (seqCount2 > 1)){
+					
+			}
+			else {
+				Console.traceln(Level.INFO,"No sequences to align while merging two nodes.");
+			}
 		}
 		else {
-			System.out.println("This should never happen, it's a binary tree.");
-		}
-		
-	}
-
+			Console.traceln(Level.WARNING,"More than 2 children! This should never happen, it's a binary tree.");
+		}
+		return alignment;
+	}
+
+	public void setSequences(ArrayList<NumberSequence> alignSequences) {
+		this.sequences = alignSequences;
+	}
 	
 }
Index: /branches/ralph/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/pal/tree/Node.java
===================================================================
--- /branches/ralph/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/pal/tree/Node.java	(revision 1582)
+++ /branches/ralph/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/pal/tree/Node.java	(revision 1583)
@@ -138,4 +138,9 @@
 	void addSequence(NumberSequence numberSequence);
 
+	void setSequences(ArrayList<NumberSequence> alignSequences);
+
+
+
+
 
 	
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 1582)
+++ /branches/ralph/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/SequenceForTaskDetectionRuleAlignment.java	(revision 1583)
@@ -160,4 +160,7 @@
 		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()]; 
 
 		for (int i = 0; i < numberseqs.size(); i++) {
@@ -169,5 +172,5 @@
 					int smithWatermanThreshold = 10;
 
-					SmithWatermanRepeated twoSequences = new SmithWatermanRepeated(
+					alignments[i][j] = new SmithWatermanRepeated(
 							ns1.getSequence(), ns2.getSequence(), submat,
 							smithWatermanThreshold);
@@ -182,5 +185,5 @@
 					
 					// Score of the aligmnment
-					double score = twoSequences.getAlignmentScore();
+					double score = alignments[i][j].getAlignmentScore();
 					// Scores of the sequence being aligned to itself (maximum score)
 					double sSelf1 = sameSequence1.getAlignmentScore();
