Index: /branches/autoquest-core-tasktrees-alignment/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/matrix/DifferenceSubstitutionMatrix.java
===================================================================
--- /branches/autoquest-core-tasktrees-alignment/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/matrix/DifferenceSubstitutionMatrix.java	(revision 1701)
+++ /branches/autoquest-core-tasktrees-alignment/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/matrix/DifferenceSubstitutionMatrix.java	(revision 1702)
@@ -29,5 +29,5 @@
 	 * @see de.ugoe.cs.autoquest.plugin.alignment.SubstitutionMatrix#getDistance(int, int)
 	 */
-	public double getScore(int pos1, int pos2) {
+	public float getScore(int pos1, int pos2) {
 		return maxValue - (input1[pos1] - input2[pos2]);
 	}
@@ -49,5 +49,5 @@
 
 	@Override
-	public double getGapPenalty() {
+	public float getGapPenalty() {
 		return -maxValue;
 	}
Index: /branches/autoquest-core-tasktrees-alignment/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/matrix/DummySubstitutionMatrix.java
===================================================================
--- /branches/autoquest-core-tasktrees-alignment/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/matrix/DummySubstitutionMatrix.java	(revision 1701)
+++ /branches/autoquest-core-tasktrees-alignment/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/matrix/DummySubstitutionMatrix.java	(revision 1702)
@@ -9,5 +9,5 @@
 
 	@Override
-	public double getScore(int pos1, int pos2) {
+	public float getScore(int pos1, int pos2) {
 		if(pos1==pos2) {
 			return 1;
@@ -19,5 +19,5 @@
 
 	@Override
-	public double getGapPenalty() {
+	public float getGapPenalty() {
 		return -1;
 	}
Index: /branches/autoquest-core-tasktrees-alignment/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/matrix/DynamicTriangleMatrix.java
===================================================================
--- /branches/autoquest-core-tasktrees-alignment/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/matrix/DynamicTriangleMatrix.java	(revision 1702)
+++ /branches/autoquest-core-tasktrees-alignment/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/matrix/DynamicTriangleMatrix.java	(revision 1702)
@@ -0,0 +1,100 @@
+package de.ugoe.cs.autoquest.tasktrees.alignment.matrix;
+
+import java.util.ArrayList;
+
+//Must be initialized!
+public class DynamicTriangleMatrix implements ITriangleMatrix {
+	
+	private ArrayList<Float> matrix;
+	protected int size;
+	private float initalizationValue;
+	
+	
+	
+	//Increases the size
+	/* (non-Javadoc)
+	 * @see de.ugoe.cs.autoquest.tasktrees.alignment.matrix.ITriangleMatrix#increaseSize(int)
+	 */
+	@Override
+	public void increaseSize(int count) {
+		int oldsize = size;
+		this.size += count;
+		matrix.ensureCapacity(size*(size+1/2));
+		for(int i=0;i<(oldsize*count)+(count*(count+1)/2);i++) {
+			matrix.add(this.initalizationValue);
+		}
+	}
+
+
+	public DynamicTriangleMatrix(int size) {
+		this.size = size;
+		matrix = new ArrayList<Float>();
+		matrix.ensureCapacity(size*(size+1/2));
+	}
+
+	
+	/* (non-Javadoc)
+	 * @see de.ugoe.cs.autoquest.tasktrees.alignment.matrix.ITriangleMatrix#get(int, int)
+	 */
+	@Override
+	public float get(int first, int second) {
+		int row = Math.min(first, second);
+		int col = Math.max(first, second);
+		return matrix.get(row*size-(row*(row+1)/2 - (size-col)));
+		
+	}
+	
+	/* (non-Javadoc)
+	 * @see de.ugoe.cs.autoquest.tasktrees.alignment.matrix.ITriangleMatrix#set(int, int, float)
+	 */
+	@Override
+	public void set(int first, int second, float value) {
+		int row = Math.min(first, second);
+		int col = Math.max(first, second);
+		matrix.set(row*size-(row*(row+1)/2 - (size-col)),value);
+	}
+
+	/* (non-Javadoc)
+	 * @see de.ugoe.cs.autoquest.tasktrees.alignment.matrix.ITriangleMatrix#initialize(float)
+	 */
+	@Override
+	public void initialize(float value) {
+		this.initalizationValue = value;
+		matrix.clear();
+		for (int i=0; i < this.size*(this.size+1)/2; i++) {
+			matrix.add(value);
+		}
+	}
+	
+	
+	/* (non-Javadoc)
+	 * @see de.ugoe.cs.autoquest.tasktrees.alignment.matrix.ITriangleMatrix#toString()
+	 */
+	@Override
+	public String toString() {
+		String result = "";
+		for (int i = 0; i < size; i++) {
+			for(int j = 0; j< size; j++) {
+				if(i<j) {
+					if(Float.isInfinite(this.get(i,j))) {
+						result = result + " -------";
+					}
+					else {
+						result = result + String.format("%+8.2f",this.get(i,j));
+					}
+				}
+				else {
+					result = result + ("        ");
+				}
+			}
+			result = result + "\n";
+		}
+		return result;
+	}
+
+
+	@Override
+	public int size() {
+		return size;
+	}
+}
Index: /branches/autoquest-core-tasktrees-alignment/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/matrix/ITriangleMatrix.java
===================================================================
--- /branches/autoquest-core-tasktrees-alignment/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/matrix/ITriangleMatrix.java	(revision 1702)
+++ /branches/autoquest-core-tasktrees-alignment/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/matrix/ITriangleMatrix.java	(revision 1702)
@@ -0,0 +1,18 @@
+package de.ugoe.cs.autoquest.tasktrees.alignment.matrix;
+
+public interface ITriangleMatrix {
+
+	//Increases the size
+	public abstract void increaseSize(int count) throws Exception;
+
+	public abstract float get(int first, int second);
+
+	public abstract void set(int first, int second, float value);
+
+	public abstract void initialize(float value);
+
+	public abstract String toString();
+
+	public abstract int size();
+
+}
Index: /branches/autoquest-core-tasktrees-alignment/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/matrix/NearbySubstitutionMatrix.java
===================================================================
--- /branches/autoquest-core-tasktrees-alignment/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/matrix/NearbySubstitutionMatrix.java	(revision 1701)
+++ /branches/autoquest-core-tasktrees-alignment/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/matrix/NearbySubstitutionMatrix.java	(revision 1702)
@@ -28,5 +28,5 @@
 	 * @see de.ugoe.cs.autoquest.plugin.alignment.SubstitutionMatrix#getDistance(int, int)
 	 */
-	public double getScore(int pos1, int pos2) {
+	public float getScore(int pos1, int pos2) {
 		int difference = Math.abs(input1[pos1]-input2[pos2]); 
 		if(difference < range) {
@@ -40,5 +40,5 @@
 
 	@Override
-	public double getGapPenalty() {
+	public float getGapPenalty() {
 		return -range-1;
 	}
Index: /branches/autoquest-core-tasktrees-alignment/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/matrix/ObjectDistanceSubstitionMatrix.java
===================================================================
--- /branches/autoquest-core-tasktrees-alignment/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/matrix/ObjectDistanceSubstitionMatrix.java	(revision 1701)
+++ /branches/autoquest-core-tasktrees-alignment/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/matrix/ObjectDistanceSubstitionMatrix.java	(revision 1702)
@@ -16,20 +16,22 @@
 import de.ugoe.cs.util.console.Console;
 
+
+
 public class ObjectDistanceSubstitionMatrix implements SubstitutionMatrix {
 
 	private HashMap<Integer, Integer> idmapping;
-	private TriangleMatrix matrix;
+	private ITriangleMatrix matrix;
 	private HashSet<ITask> uniqueTasks;
-	private double gapPenalty;
+	private float gapPenalty;
 	private int index = 0;
 	private HashMap<Integer, LinkedList<IEventTaskInstance>> etisOfTasks;
 	private boolean calculateNonTaskInstances = true;
+	private int firstRoundMaxIndex = 0;
 
 	private double positiveThreshold;
 
 	public ObjectDistanceSubstitionMatrix(
-			float positiveThreshold, int gapPenalty,
-			boolean calculateNonTaskInstances) {
-		
+		float positiveThreshold, int gapPenalty,
+		boolean calculateNonTaskInstances) {
 		this.positiveThreshold = positiveThreshold;
 		idmapping = new HashMap<Integer, Integer>();
@@ -40,9 +42,9 @@
 	}
 
-	public double getGapPenalty() {
+	public float getGapPenalty() {
 		return gapPenalty;
 	}
 
-	public void setGapPenalty(double gapPenalty) {
+	public void setGapPenalty(float gapPenalty) {
 		this.gapPenalty = gapPenalty;
 	}
@@ -77,10 +79,15 @@
 	//Just Calculate the distance between the new tasks and the matrix.
 	public void update(LinkedList<ITask> newTasks) {
-		matrix.increaseSize(newTasks.size());
+
 		if (this.calculateNonTaskInstances) {
-			Console.traceln(Level.INFO, "searching EventTasks in Tasks");
+			try {
+				matrix.increaseSize(newTasks.size());
+				System.out.println("Subsitution matrix size is now " + matrix.size()*(matrix.size()+1)/2);
+				Console.traceln(Level.INFO, "searching EventTasks in Tasks");
+			} catch (Exception e) {
+				Console.logException(e);
+			}
 			this.updateEventTaskInstances(newTasks);
-		}
-		
+			
 		for(Iterator<ITask> it = newTasks.iterator();it.hasNext();) {
 			int index1 = -1;
@@ -137,14 +144,18 @@
 			}
 		}
+		}
 	}
 
 	public void generate(HashSet<ITask> uniqueTasks) {
 		this.uniqueTasks = uniqueTasks;
-		matrix = new TriangleMatrix(uniqueTasks.size() + 1);
-		matrix.initialize(0);
 		if (this.calculateNonTaskInstances) {
+			matrix = new DynamicTriangleMatrix(uniqueTasks.size() + 1);
 			Console.traceln(Level.INFO, "searching EventTasks in Tasks");
 			searchEventTaskInstances();
 		}
+		else{
+			matrix = new StaticTriangleMatrix(uniqueTasks.size()+1);
+		}
+		matrix.initialize(0);
 		Console.traceln(Level.INFO, "calculating distances");
 		int index1 = -1;
@@ -197,10 +208,16 @@
 					System.out.println("Unknown error");
 				}
-
 				matrix.set(index1, index2, distance);
 
 			}
 		}
-	}
+		this.firstRoundMaxIndex=index;
+	}
+	
+	private void computeDistance(ITask task1, ITask task2) {
+		
+		
+	}
+	
 	
 	
@@ -293,10 +310,14 @@
 	}
 
-	public double getScore(int taskId1, int taskId2) {
+	public float getScore(int taskId1, int taskId2) {
 		if (taskId1 == Constants.GAP_SYMBOL
 				|| taskId1 == Constants.UNMATCHED_SYMBOL
 				|| taskId2 == Constants.GAP_SYMBOL
 				|| taskId2 == Constants.UNMATCHED_SYMBOL) {
-			return 0.0;
+			return 0;
+		} else if(this.calculateNonTaskInstances==false && 	
+				(taskId1>this.firstRoundMaxIndex
+				|| taskId2>this.firstRoundMaxIndex)) {
+			return 0;
 		} else {
 			Integer first = idmapping.get(taskId1);
Index: /branches/autoquest-core-tasktrees-alignment/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/matrix/SubstitutionMatrix.java
===================================================================
--- /branches/autoquest-core-tasktrees-alignment/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/matrix/SubstitutionMatrix.java	(revision 1701)
+++ /branches/autoquest-core-tasktrees-alignment/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/matrix/SubstitutionMatrix.java	(revision 1702)
@@ -11,7 +11,7 @@
 	
 
-	public double getScore(int pos1, int pos2);
+	public float getScore(int pos1, int pos2);
 
-	public double getGapPenalty();
+	public float getGapPenalty();
 
 	public void generate(HashSet<ITask> uniqueTasks);
Index: /branches/autoquest-core-tasktrees-alignment/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/matrix/UPGMAMatrix.java
===================================================================
--- /branches/autoquest-core-tasktrees-alignment/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/matrix/UPGMAMatrix.java	(revision 1701)
+++ /branches/autoquest-core-tasktrees-alignment/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/matrix/UPGMAMatrix.java	(revision 1702)
@@ -3,5 +3,5 @@
 
 
-public class UPGMAMatrix extends TriangleMatrix {
+public class UPGMAMatrix extends StaticTriangleMatrix {
 
 	public UPGMAMatrix(int size) {
Index: /branches/autoquest-core-tasktrees-alignment/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/RuleUtils.java
===================================================================
--- /branches/autoquest-core-tasktrees-alignment/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/RuleUtils.java	(revision 1701)
+++ /branches/autoquest-core-tasktrees-alignment/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/RuleUtils.java	(revision 1702)
@@ -113,4 +113,5 @@
 		
 		// TODO: Debug output
+		/*
 		System.out.println("PRINTING MODEL: ");
 		for (int i = 0; i < subsequence.getSequence().getChildren().size(); i++) {
@@ -140,5 +141,5 @@
 		}
 		System.out.println();
-		
+		*/
 		
 		//TODO: This is dirty!
@@ -151,10 +152,10 @@
 			}
 			ITask tempTask = model.getChildren().get(modelindex);
-			System.out.println("Trying to add " + parent.get(startIndex)
-				+ " to the model instance " + tempTask);
+			//System.out.println("Trying to add " + parent.get(startIndex)
+			//	+ " to the model instance " + tempTask);
 			if (tempTask.getType() == "optionality") {
 						
 					if(((IMarkingTemporalRelationship) tempTask).getMarkedTask() == parent.get(startIndex).getTask()) {
-						System.out.println("Adding OptionalInstance " + parent.get(startIndex) + " to " + tempTask.getType());
+						//System.out.println("Adding OptionalInstance " + parent.get(startIndex) + " to " + tempTask.getType());
 						IOptionalInstance optional = taskFactory.createNewTaskInstance((IOptional) tempTask);
 						taskBuilder.setChild(optional, parent.get(startIndex));
@@ -162,5 +163,5 @@
 					}
 					else {
-						System.out.println("Adding Empty optional, not deleting anything from the input sequence");
+						//System.out.println("Adding Empty optional, not deleting anything from the input sequence");
 						IOptionalInstance optional = taskFactory.createNewTaskInstance((IOptional) tempTask);
 						taskBuilder.addChild(subsequence, optional);
@@ -182,16 +183,16 @@
 					}
 					else if(parent.get(startIndex).getTask().getId() == tmpSel.getChildren().get(0).getId() || parent.get(startIndex).getTask().getId() == tmpSel.getChildren().get(1).getId() ) {
-						System.out.println("Session ID: " + parent.get(startIndex).getTask().getId() + " tmpSel(0): " + tmpSel.getChildren().get(0).getId() + " tmpSel(1): " +tmpSel.getChildren().get(1).getId()  );
+						//System.out.println("Session ID: " + parent.get(startIndex).getTask().getId() + " tmpSel(0): " + tmpSel.getChildren().get(0).getId() + " tmpSel(1): " +tmpSel.getChildren().get(1).getId()  );
 						continue;
 					}
 						
 					for (int k=0;k<selseq.getSequence().getChildren().size();k++) {
-						System.out.println("Trying to add " + parent.get(startIndex) + " to " + selseq);
+						//System.out.println("Trying to add " + parent.get(startIndex) + " to " + selseq);
 						taskBuilder.addChild(selseq,parent.get(startIndex));
 						taskBuilder.removeTaskInstance(parent, startIndex);
 						i++;
-						System.out.println("I:" + i);
-					}
-					System.out.println("Trying to add " + selseq + " to " + tmpSel);
+						//System.out.println("I:" + i);
+					}
+					//System.out.println("Trying to add " + selseq + " to " + tmpSel);
 					taskBuilder.setChild(selection, selseq);
 					taskBuilder.addChild(subsequence, selection);
@@ -201,17 +202,17 @@
 				else
 				{
-					System.out.println("Trying to adding SelectionInstance " + parent.get(startIndex) + " to " + tempTask);
+					//System.out.println("Trying to adding SelectionInstance " + parent.get(startIndex) + " to " + tempTask);
 					taskBuilder.setChild(selection, parent.get(startIndex));
 					taskBuilder.addChild(subsequence,selection);
 				}
 			} else if (tempTask.getType() == "sequence") {
-				System.out.println("Adding SequenceInstance " + parent.get(startIndex) + " to " + tempTask);
+				//System.out.println("Adding SequenceInstance " + parent.get(startIndex) + " to " + tempTask);
 				taskBuilder.addChild(subsequence, parent.get(startIndex));
 			} else if (tempTask.getType() == "iteration") {
-				System.out.println("Adding IterationInstance " + parent.get(startIndex) + " to " + tempTask);
+				//System.out.println("Adding IterationInstance " + parent.get(startIndex) + " to " + tempTask);
 				taskBuilder.addChild(subsequence, parent.get(startIndex));
 			} else {
-				System.out.println("Adding EventInstance " + parent.get(startIndex) + " to " + tempTask);
-				System.out.println("Foo");
+				//System.out.println("Adding EventInstance " + parent.get(startIndex) + " to " + tempTask);
+				//System.out.println("Foo");
 				taskBuilder.addChild(subsequence, parent.get(startIndex));
 			}
Index: /branches/autoquest-core-tasktrees-alignment/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/SequenceForTaskDetectionRuleAlignment.java
===================================================================
--- /branches/autoquest-core-tasktrees-alignment/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/SequenceForTaskDetectionRuleAlignment.java	(revision 1701)
+++ /branches/autoquest-core-tasktrees-alignment/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/SequenceForTaskDetectionRuleAlignment.java	(revision 1702)
@@ -141,9 +141,13 @@
 		// Generate a substitution matrix between all occurring events.
 		Console.traceln(Level.INFO, "generating substitution matrix");
+		Console.traceln(Level.INFO,"Got " + appData.getUniqueTasks().size() + "tasks");
 		appData.getSubmat().generate(appData.getUniqueTasks());
 		
+		
+		Console.traceln(Level.INFO, "Starting main loop");
 		do {
+			Console.traceln(Level.INFO, "Iteration Number: " + iteration);
 			iteration++;
-
+			
 			appData.detectedAndReplacedTasks = false;
 			appData.getStopWatch().start("whole loop");
@@ -642,5 +646,5 @@
 					MatchOccurence oc = it.next();
 					
-					
+					/*
 					if (iteration > 1) {
 					 
@@ -661,5 +665,5 @@
 										.get(j));
 					}
-					}
+					}*/
 					
 					// Check if nothing has been replaced in the sequence we
@@ -773,5 +777,5 @@
 			stopWatch = new StopWatch();
 			result = new RuleApplicationResult();
-			submat= new ObjectDistanceSubstitionMatrix(6,-3,true);
+			submat= new ObjectDistanceSubstitionMatrix(6,-3,false);
 			newTasks = new LinkedList<ITask>();
 		}
