Index: trunk/autoquest-core-tasktrees-test/src/test/java/de/ugoe/cs/autoquest/tasktrees/manager/TaskTreeManagerTest.java
===================================================================
--- trunk/autoquest-core-tasktrees-test/src/test/java/de/ugoe/cs/autoquest/tasktrees/manager/TaskTreeManagerTest.java	(revision 1285)
+++ trunk/autoquest-core-tasktrees-test/src/test/java/de/ugoe/cs/autoquest/tasktrees/manager/TaskTreeManagerTest.java	(revision 1294)
@@ -68,5 +68,5 @@
     public void testOneEventOnOneElement() {
         simulateEvent(new DummyInteraction("bla", 1), new DummyGUIElement("elem1"));
-        new TaskTreeChecker().assertTaskInstanceList
+        new TaskTreeChecker().assertUserSession
             ("UserSession session {" +
              "  Event bla {}" +
@@ -86,5 +86,5 @@
         simulateEvent(new DummyInteraction("ble", 1), eventTarget);
 
-        new TaskTreeChecker().assertTaskInstanceList
+        new TaskTreeChecker().assertUserSession
             ("UserSession session {" +
              "  Event bla {}" +
@@ -114,5 +114,5 @@
         simulateEvent(new DummyInteraction("blum", 1), eventTarget6);
 
-        new TaskTreeChecker(true).assertTaskInstanceList
+        new TaskTreeChecker(true).assertUserSession
             ("UserSession session {" +
              "  Event bla {}" +
@@ -152,5 +152,5 @@
         simulateEvent(new DummyInteraction("blop", 1), eventTarget6);
 
-        new TaskTreeChecker().assertTaskInstanceList
+        new TaskTreeChecker().assertUserSession
             ("UserSession session {" +
              "  Event bla {}" +
@@ -181,5 +181,5 @@
         simulateEvent(event1, eventTarget1);
         simulateEvent(event1, eventTarget1);
-        new TaskTreeChecker().assertTaskInstanceList
+        new TaskTreeChecker().assertUserSession
             ("UserSession session {" +
              "  Iteration iteration1 {" +
@@ -201,5 +201,5 @@
         }
 
-        new TaskTreeChecker().assertTaskInstanceList
+        new TaskTreeChecker().assertUserSession
             ("UserSession session {" +
              "  Iteration iteration1 {" +
@@ -240,5 +240,5 @@
         simulateEvent(event5, eventTarget1);
 
-        new TaskTreeChecker().assertTaskInstanceList
+        new TaskTreeChecker().assertUserSession
             ("UserSession session {" +
              "  Event bli {}" +
@@ -285,5 +285,5 @@
         }
 
-        new TaskTreeChecker(true).assertTaskInstanceList
+        new TaskTreeChecker(true).assertUserSession
             ("UserSession session {" +
              "  Iteration iteration2 {" +
@@ -426,5 +426,5 @@
         simulateEvent(event3, eventTarget1);
         
-        new TaskTreeChecker().assertTaskInstanceList
+        new TaskTreeChecker().assertUserSession
             ("UserSession session {" +
              "  Iteration iteration1 {" +
@@ -459,5 +459,5 @@
         }
 
-        new TaskTreeChecker().assertTaskInstanceList
+        new TaskTreeChecker().assertUserSession
             ("UserSession session {" +
              "  Iteration iteration1 {" +
@@ -540,5 +540,5 @@
         simulateEvent(event6, eventTarget1);
 
-        new TaskTreeChecker().assertTaskInstanceList
+        new TaskTreeChecker().assertUserSession
             ("UserSession session {" +
              "  Event ble {}" +
@@ -610,5 +610,5 @@
         }
 
-        new TaskTreeChecker().assertTaskInstanceList
+        new TaskTreeChecker().assertUserSession
             ("UserSession session {" +
              "  Iteration iteration3 {" +
Index: trunk/autoquest-core-tasktrees-test/src/test/java/de/ugoe/cs/autoquest/tasktrees/taskequality/AbstractComparisonRuleTest.java
===================================================================
--- trunk/autoquest-core-tasktrees-test/src/test/java/de/ugoe/cs/autoquest/tasktrees/taskequality/AbstractComparisonRuleTest.java	(revision 1294)
+++ trunk/autoquest-core-tasktrees-test/src/test/java/de/ugoe/cs/autoquest/tasktrees/taskequality/AbstractComparisonRuleTest.java	(revision 1294)
@@ -0,0 +1,293 @@
+//   Copyright 2012 Georg-August-Universität Göttingen, Germany
+//
+//   Licensed under the Apache License, Version 2.0 (the "License");
+//   you may not use this file except in compliance with the License.
+//   You may obtain a copy of the License at
+//
+//       http://www.apache.org/licenses/LICENSE-2.0
+//
+//   Unless required by applicable law or agreed to in writing, software
+//   distributed under the License is distributed on an "AS IS" BASIS,
+//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//   See the License for the specific language governing permissions and
+//   limitations under the License.
+
+package de.ugoe.cs.autoquest.tasktrees.taskequality;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import de.ugoe.cs.autoquest.eventcore.Event;
+import de.ugoe.cs.autoquest.eventcore.IEventTarget;
+import de.ugoe.cs.autoquest.eventcore.IEventType;
+import de.ugoe.cs.autoquest.tasktrees.treeifc.IEventTask;
+import de.ugoe.cs.autoquest.tasktrees.treeifc.IIteration;
+import de.ugoe.cs.autoquest.tasktrees.treeifc.IIterationInstance;
+import de.ugoe.cs.autoquest.tasktrees.treeifc.IOptional;
+import de.ugoe.cs.autoquest.tasktrees.treeifc.ISelection;
+import de.ugoe.cs.autoquest.tasktrees.treeifc.ISelectionInstance;
+import de.ugoe.cs.autoquest.tasktrees.treeifc.ISequence;
+import de.ugoe.cs.autoquest.tasktrees.treeifc.ISequenceInstance;
+import de.ugoe.cs.autoquest.tasktrees.treeifc.ITask;
+import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskBuilder;
+import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskFactory;
+import de.ugoe.cs.autoquest.tasktrees.treeimpl.TaskBuilder;
+import de.ugoe.cs.autoquest.tasktrees.treeimpl.TaskFactory;
+
+/**
+ * @author Patrick Harms
+ */
+public class AbstractComparisonRuleTest {
+
+    /** */
+    private ITaskFactory taskFactory = new TaskFactory();
+
+    /** */
+    private ITaskBuilder taskBuilder = new TaskBuilder();
+
+    /**
+     *
+     */
+    protected IEventTask createNewEventTask(IEventType eventType, IEventTarget eventTarget) {
+        IEventTask eventTask = taskFactory.createNewEventTask(eventType + " --> " + eventTarget);
+        taskFactory.createNewTaskInstance(eventTask, new Event(eventType, eventTarget));
+        return eventTask;
+    }
+
+    /**
+     *
+     */
+    protected ISequence createNewSequence() {
+        ISequence sequence = taskFactory.createNewSequence();
+        taskFactory.createNewTaskInstance(sequence);
+        return sequence;
+    }
+
+    /**
+     *
+     */
+    protected ISelection createNewSelection() {
+        ISelection selection = taskFactory.createNewSelection();
+        taskFactory.createNewTaskInstance(selection);
+        return selection;
+    }
+
+    /**
+     *
+     */
+    protected IOptional createNewOptional() {
+        IOptional optional = taskFactory.createNewOptional();
+        taskFactory.createNewTaskInstance(optional);
+        return optional;
+    }
+
+    /**
+     *
+     */
+    protected IIteration createNewIteration() {
+        IIteration iteration = taskFactory.createNewIteration();
+        taskFactory.createNewTaskInstance(iteration);
+        return iteration;
+    }
+    
+    /**
+     *
+     */
+    protected void setMarkedTask(IIteration iteration, ITask task) {
+        taskBuilder.setMarkedTask(iteration, task);
+        taskBuilder.addChild((IIterationInstance) iteration.getInstances().iterator().next(),
+                             task.getInstances().iterator().next());
+    }
+
+    /**
+     *
+     */
+    protected void addChild(ISelection selection, ITask task) {
+        taskBuilder.addChild(selection, task);
+        taskBuilder.setChild((ISelectionInstance) selection.getInstances().iterator().next(),
+                             task.getInstances().iterator().next());
+    }
+
+    /**
+     *
+     */
+    protected void addChild(ISequence sequence, ITask task) {
+        taskBuilder.addChild(sequence, task);
+        taskBuilder.addChild((ISequenceInstance) sequence.getInstances().iterator().next(),
+                             task.getInstances().iterator().next());
+    }
+
+    /**
+     *
+     */
+    protected void assertLexicallyEqual(TaskComparisonRule rule, ITask task1, ITask task2) {
+        assertEquals(TaskEquality.LEXICALLY_EQUAL, rule.compare(task1, task2));
+        assertTrue(rule.areLexicallyEqual(task1, task2));
+        assertTrue(rule.areSyntacticallyEqual(task1, task2));
+        assertTrue(rule.areSemanticallyEqual(task1, task2));
+
+        assertEquals(TaskEquality.LEXICALLY_EQUAL, rule.compare(task2, task1));
+        assertTrue(rule.areLexicallyEqual(task2, task1));
+        assertTrue(rule.areSyntacticallyEqual(task2, task1));
+        assertTrue(rule.areSemanticallyEqual(task2, task1));
+        
+        assertEquals(TaskEquality.LEXICALLY_EQUAL,
+                     rule.compare(task1.getInstances().iterator().next(),
+                                  task2.getInstances().iterator().next()));
+        assertTrue(rule.areLexicallyEqual(task1.getInstances().iterator().next(),
+                                          task2.getInstances().iterator().next()));
+        assertTrue(rule.areSyntacticallyEqual(task1.getInstances().iterator().next(),
+                                              task2.getInstances().iterator().next()));
+        assertTrue(rule.areSemanticallyEqual(task1.getInstances().iterator().next(),
+                                             task2.getInstances().iterator().next()));
+
+        assertEquals(TaskEquality.LEXICALLY_EQUAL,
+                     rule.compare(task2.getInstances().iterator().next(),
+                                  task1.getInstances().iterator().next()));
+        assertTrue(rule.areLexicallyEqual(task2.getInstances().iterator().next(),
+                                          task1.getInstances().iterator().next()));
+        assertTrue(rule.areSyntacticallyEqual(task2.getInstances().iterator().next(),
+                                              task1.getInstances().iterator().next()));
+        assertTrue(rule.areSemanticallyEqual(task2.getInstances().iterator().next(),
+                                             task1.getInstances().iterator().next()));
+    }
+
+    /**
+     *
+     */
+    protected void assertSyntacticallyEqual(TaskComparisonRule rule, ITask task1, ITask task2) {
+        assertEquals(TaskEquality.SYNTACTICALLY_EQUAL, rule.compare(task1, task2));
+        assertFalse(rule.areLexicallyEqual(task1, task2));
+        assertTrue(rule.areSyntacticallyEqual(task1, task2));
+        assertTrue(rule.areSemanticallyEqual(task1, task2));
+
+        assertEquals(TaskEquality.SYNTACTICALLY_EQUAL, rule.compare(task2, task1));
+        assertFalse(rule.areLexicallyEqual(task2, task1));
+        assertTrue(rule.areSyntacticallyEqual(task2, task1));
+        assertTrue(rule.areSemanticallyEqual(task2, task1));
+        
+        assertEquals(TaskEquality.SYNTACTICALLY_EQUAL,
+                     rule.compare(task1.getInstances().iterator().next(),
+                                  task2.getInstances().iterator().next()));
+        assertFalse(rule.areLexicallyEqual(task1.getInstances().iterator().next(),
+                                           task2.getInstances().iterator().next()));
+        assertTrue(rule.areSyntacticallyEqual(task1.getInstances().iterator().next(),
+                                              task2.getInstances().iterator().next()));
+        assertTrue(rule.areSemanticallyEqual(task1.getInstances().iterator().next(),
+                                             task2.getInstances().iterator().next()));
+
+        assertEquals(TaskEquality.SYNTACTICALLY_EQUAL,
+                     rule.compare(task2.getInstances().iterator().next(),
+                                  task1.getInstances().iterator().next()));
+        assertFalse(rule.areLexicallyEqual(task2.getInstances().iterator().next(),
+                                           task1.getInstances().iterator().next()));
+        assertTrue(rule.areSyntacticallyEqual(task2.getInstances().iterator().next(),
+                                              task1.getInstances().iterator().next()));
+        assertTrue(rule.areSemanticallyEqual(task2.getInstances().iterator().next(),
+                                             task1.getInstances().iterator().next()));
+    }
+
+    /**
+     *
+     */
+    protected void assertSemanticallyEqual(TaskComparisonRule rule, ITask task1, ITask task2) {
+        assertEquals(TaskEquality.SEMANTICALLY_EQUAL, rule.compare(task1, task2));
+        assertFalse(rule.areLexicallyEqual(task1, task2));
+        assertFalse(rule.areSyntacticallyEqual(task1, task2));
+        assertTrue(rule.areSemanticallyEqual(task1, task2));
+
+        assertEquals(TaskEquality.SEMANTICALLY_EQUAL, rule.compare(task2, task1));
+        assertFalse(rule.areLexicallyEqual(task2, task1));
+        assertFalse(rule.areSyntacticallyEqual(task2, task1));
+        assertTrue(rule.areSemanticallyEqual(task2, task1));
+        
+        assertEquals(TaskEquality.SEMANTICALLY_EQUAL,
+                     rule.compare(task1.getInstances().iterator().next(),
+                                  task2.getInstances().iterator().next()));
+        assertFalse(rule.areLexicallyEqual(task1.getInstances().iterator().next(),
+                                           task2.getInstances().iterator().next()));
+        assertFalse(rule.areSyntacticallyEqual(task1.getInstances().iterator().next(),
+                                               task2.getInstances().iterator().next()));
+        assertTrue(rule.areSemanticallyEqual(task1.getInstances().iterator().next(),
+                                             task2.getInstances().iterator().next()));
+
+        assertEquals(TaskEquality.SEMANTICALLY_EQUAL,
+                     rule.compare(task2.getInstances().iterator().next(),
+                                  task1.getInstances().iterator().next()));
+        assertFalse(rule.areLexicallyEqual(task2.getInstances().iterator().next(),
+                                           task1.getInstances().iterator().next()));
+        assertFalse(rule.areSyntacticallyEqual(task2.getInstances().iterator().next(),
+                                               task1.getInstances().iterator().next()));
+        assertTrue(rule.areSemanticallyEqual(task2.getInstances().iterator().next(),
+                                             task1.getInstances().iterator().next()));
+    }
+
+    /**
+     *
+     */
+    protected void assertUnequal(TaskComparisonRule rule, ITask task1, ITask task2) {
+        assertEquals(TaskEquality.UNEQUAL, rule.compare(task1, task2));
+        assertFalse(rule.areLexicallyEqual(task1, task2));
+        assertFalse(rule.areSyntacticallyEqual(task1, task2));
+        assertFalse(rule.areSemanticallyEqual(task1, task2));
+
+        assertEquals(TaskEquality.UNEQUAL, rule.compare(task2, task1));
+        assertFalse(rule.areLexicallyEqual(task2, task1));
+        assertFalse(rule.areSyntacticallyEqual(task2, task1));
+        assertFalse(rule.areSemanticallyEqual(task2, task1));
+        
+        assertEquals(TaskEquality.UNEQUAL,
+                     rule.compare(task1.getInstances().iterator().next(),
+                                  task2.getInstances().iterator().next()));
+        assertFalse(rule.areLexicallyEqual(task1.getInstances().iterator().next(),
+                                           task2.getInstances().iterator().next()));
+        assertFalse(rule.areSyntacticallyEqual(task1.getInstances().iterator().next(),
+                                               task2.getInstances().iterator().next()));
+        assertFalse(rule.areSemanticallyEqual(task1.getInstances().iterator().next(),
+                                              task2.getInstances().iterator().next()));
+
+        assertEquals(TaskEquality.UNEQUAL,
+                     rule.compare(task2.getInstances().iterator().next(),
+                                  task1.getInstances().iterator().next()));
+        assertFalse(rule.areLexicallyEqual(task2.getInstances().iterator().next(),
+                                           task1.getInstances().iterator().next()));
+        assertFalse(rule.areSyntacticallyEqual(task2.getInstances().iterator().next(),
+                                               task1.getInstances().iterator().next()));
+        assertFalse(rule.areSemanticallyEqual(task2.getInstances().iterator().next(),
+                                              task1.getInstances().iterator().next()));
+    }
+
+    /**
+     *
+     */
+    protected void assertNullEquality(TaskComparisonRule rule, ITask task1, ITask task2) {
+        assertNull(rule.compare(task1, task2));
+        assertFalse(rule.areLexicallyEqual(task1, task2));
+        assertFalse(rule.areSyntacticallyEqual(task1, task2));
+        assertFalse(rule.areSemanticallyEqual(task1, task2));
+
+        assertNull(rule.compare(task2, task1));
+        assertFalse(rule.areLexicallyEqual(task2, task1));
+        assertFalse(rule.areSyntacticallyEqual(task2, task1));
+        assertFalse(rule.areSemanticallyEqual(task2, task1));
+        
+        assertNull(rule.compare(task1.getInstances().iterator().next(),
+                                task2.getInstances().iterator().next()));
+        assertFalse(rule.areLexicallyEqual(task1.getInstances().iterator().next(),
+                                           task2.getInstances().iterator().next()));
+        assertFalse(rule.areSyntacticallyEqual(task1.getInstances().iterator().next(),
+                                               task2.getInstances().iterator().next()));
+        assertFalse(rule.areSemanticallyEqual(task1.getInstances().iterator().next(),
+                                              task2.getInstances().iterator().next()));
+
+        assertNull(rule.compare(task2.getInstances().iterator().next(),
+                                task1.getInstances().iterator().next()));
+        assertFalse(rule.areLexicallyEqual(task2.getInstances().iterator().next(),
+                                           task1.getInstances().iterator().next()));
+        assertFalse(rule.areSyntacticallyEqual(task2.getInstances().iterator().next(),
+                                               task1.getInstances().iterator().next()));
+        assertFalse(rule.areSemanticallyEqual(task2.getInstances().iterator().next(),
+                                              task1.getInstances().iterator().next()));
+    }
+}
Index: trunk/autoquest-core-tasktrees-test/src/test/java/de/ugoe/cs/autoquest/tasktrees/taskequality/EventTaskComparisonRuleTest.java
===================================================================
--- trunk/autoquest-core-tasktrees-test/src/test/java/de/ugoe/cs/autoquest/tasktrees/taskequality/EventTaskComparisonRuleTest.java	(revision 1285)
+++ trunk/autoquest-core-tasktrees-test/src/test/java/de/ugoe/cs/autoquest/tasktrees/taskequality/EventTaskComparisonRuleTest.java	(revision 1294)
@@ -25,6 +25,4 @@
 import de.ugoe.cs.autoquest.tasktrees.taskequality.TaskEquality;
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITask;
-import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskFactory;
-import de.ugoe.cs.autoquest.tasktrees.treeimpl.TaskFactory;
 import de.ugoe.cs.autoquest.test.DummyGUIElement;
 
@@ -32,5 +30,5 @@
  * @author Patrick Harms
  */
-public class EventTaskComparisonRuleTest {
+public class EventTaskComparisonRuleTest extends AbstractComparisonRuleTest {
 
     /**
@@ -39,11 +37,9 @@
     @Test
     public void test_isApplicable_01() {
-        ITaskFactory taskFactory = new TaskFactory();
-
-        EventTaskComparisonRule rule = new EventTaskComparisonRule();
-
-        IEventType eventType1 = new StringEventType("eventType1");
-        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        EventTaskComparisonRule rule = new EventTaskComparisonRule();
+
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
 
         assertTrue(rule.isApplicable(task1, task1));
@@ -55,15 +51,13 @@
     @Test
     public void test_isApplicable_02() {
-        ITaskFactory taskFactory = new TaskFactory();
-
-        EventTaskComparisonRule rule = new EventTaskComparisonRule();
-
-        IEventType eventType1 = new StringEventType("eventType1");
-        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        EventTaskComparisonRule rule = new EventTaskComparisonRule();
+
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
 
         IEventType eventType2 = new StringEventType("eventType2");
         IEventTarget eventTarget2 = new DummyGUIElement("elem2");
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget2);
 
         assertTrue(rule.isApplicable(task1, task2));
@@ -76,13 +70,11 @@
     @Test
     public void test_isApplicable_03() {
-        ITaskFactory taskFactory = new TaskFactory();
-
-        EventTaskComparisonRule rule = new EventTaskComparisonRule();
-
-        IEventType eventType1 = new StringEventType("eventType1");
-        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        EventTaskComparisonRule rule = new EventTaskComparisonRule();
+
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
        
-        ITask selection = taskFactory.createNewSelection();
+        ITask selection = createNewSelection();
 
         assertFalse(rule.isApplicable(task1, selection));
@@ -95,13 +87,11 @@
     @Test
     public void test_isApplicable_04() {
-        ITaskFactory taskFactory = new TaskFactory();
-
-        EventTaskComparisonRule rule = new EventTaskComparisonRule();
-
-        IEventType eventType1 = new StringEventType("eventType1");
-        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
-
-        ITask sequence = taskFactory.createNewSequence();
+        EventTaskComparisonRule rule = new EventTaskComparisonRule();
+
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+
+        ITask sequence = createNewSequence();
 
         assertFalse(rule.isApplicable(task1, sequence));
@@ -114,13 +104,11 @@
     @Test
     public void test_isApplicable_05() {
-        ITaskFactory taskFactory = new TaskFactory();
-
-        EventTaskComparisonRule rule = new EventTaskComparisonRule();
-
-        IEventType eventType1 = new StringEventType("eventType1");
-        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
-
-        ITask iteration = taskFactory.createNewIteration();
+        EventTaskComparisonRule rule = new EventTaskComparisonRule();
+
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+
+        ITask iteration = createNewIteration();
 
         assertFalse(rule.isApplicable(task1, iteration));
@@ -133,13 +121,11 @@
     @Test
     public void test_isApplicable_06() {
-        ITaskFactory taskFactory = new TaskFactory();
-
-        EventTaskComparisonRule rule = new EventTaskComparisonRule();
-
-        IEventType eventType1 = new StringEventType("eventType1");
-        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
-
-        ITask optional = taskFactory.createNewOptional();
+        EventTaskComparisonRule rule = new EventTaskComparisonRule();
+
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+
+        ITask optional = createNewOptional();
 
         assertFalse(rule.isApplicable(task1, optional));
@@ -151,12 +137,122 @@
      */
     @Test
+    public void test_isApplicable_07() {
+        EventTaskComparisonRule rule = new EventTaskComparisonRule();
+
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+
+        assertTrue(rule.isApplicable(task1.getInstances().iterator().next(),
+                                     task1.getInstances().iterator().next()));
+    }
+   
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_08() {
+        EventTaskComparisonRule rule = new EventTaskComparisonRule();
+
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+
+        IEventType eventType2 = new StringEventType("eventType2");
+        IEventTarget eventTarget2 = new DummyGUIElement("elem2");
+        ITask task2 = createNewEventTask(eventType2, eventTarget2);
+
+        assertTrue(rule.isApplicable(task1.getInstances().iterator().next(),
+                                     task2.getInstances().iterator().next()));
+        assertTrue(rule.isApplicable(task2.getInstances().iterator().next(),
+                                     task1.getInstances().iterator().next()));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_09() {
+        EventTaskComparisonRule rule = new EventTaskComparisonRule();
+
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+
+        ITask selection = createNewSelection();
+
+        assertFalse(rule.isApplicable(task1.getInstances().iterator().next(),
+                                      selection.getInstances().iterator().next()));
+        assertFalse(rule.isApplicable(selection.getInstances().iterator().next(),
+                                      task1.getInstances().iterator().next()));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_10() {
+        EventTaskComparisonRule rule = new EventTaskComparisonRule();
+
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+
+        ITask sequence = createNewSequence();
+
+        assertFalse(rule.isApplicable(task1.getInstances().iterator().next(),
+                                      sequence.getInstances().iterator().next()));
+        assertFalse(rule.isApplicable(sequence.getInstances().iterator().next(),
+                                      task1.getInstances().iterator().next()));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_11() {
+        EventTaskComparisonRule rule = new EventTaskComparisonRule();
+
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+
+        ITask iteration = createNewIteration();
+
+        assertFalse(rule.isApplicable(task1.getInstances().iterator().next(),
+                                      iteration.getInstances().iterator().next()));
+        assertFalse(rule.isApplicable(iteration.getInstances().iterator().next(),
+                                      task1.getInstances().iterator().next()));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_12() {
+        EventTaskComparisonRule rule = new EventTaskComparisonRule();
+
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+
+        ITask optional = createNewOptional();
+
+        assertFalse(rule.isApplicable(task1.getInstances().iterator().next(),
+                                      optional.getInstances().iterator().next()));
+        assertFalse(rule.isApplicable(optional.getInstances().iterator().next(),
+                                      task1.getInstances().iterator().next()));
+    }
+
+    /**
+     *
+     */
+    @Test
     public void test_compare_01() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
-        EventTaskComparisonRule rule = new EventTaskComparisonRule();
-        
-        IEventType eventType1 = new StringEventType("eventType1");
-        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        EventTaskComparisonRule rule = new EventTaskComparisonRule();
+        
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         assertEquals(TaskEquality.LEXICALLY_EQUAL, rule.compare(task1, task1));
@@ -171,13 +267,11 @@
     @Test
     public void test_compare_02() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
-        EventTaskComparisonRule rule = new EventTaskComparisonRule();
-        
-        IEventType eventType1 = new StringEventType("eventType1");
-        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
-        
-        ITask task2 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        EventTaskComparisonRule rule = new EventTaskComparisonRule();
+        
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+        
+        ITask task2 = createNewEventTask(eventType1, eventTarget1);
         
         assertEquals(TaskEquality.LEXICALLY_EQUAL, rule.compare(task1, task2));
@@ -197,14 +291,12 @@
     @Test
     public void test_compare_03() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
-        EventTaskComparisonRule rule = new EventTaskComparisonRule();
-        
-        IEventType eventType1 = new StringEventType("eventType1");
-        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        EventTaskComparisonRule rule = new EventTaskComparisonRule();
+        
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventType eventType2 = new StringEventType("eventType2");
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget1);
+        ITask task2 = createNewEventTask(eventType2, eventTarget1);
 
         assertEquals(TaskEquality.UNEQUAL, rule.compare(task1, task2));
@@ -224,14 +316,12 @@
     @Test
     public void test_compare_04() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
-        EventTaskComparisonRule rule = new EventTaskComparisonRule();
-        
-        IEventType eventType1 = new StringEventType("eventType1");
-        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        EventTaskComparisonRule rule = new EventTaskComparisonRule();
+        
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventTarget eventTarget2 = new DummyGUIElement("elem2");
-        ITask task2 = taskFactory.createNewEventTask(eventType1, eventTarget2);
+        ITask task2 = createNewEventTask(eventType1, eventTarget2);
         
         assertEquals(TaskEquality.UNEQUAL, rule.compare(task1, task2));
@@ -252,15 +342,13 @@
     @Test
     public void test_compare_05() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
-        EventTaskComparisonRule rule = new EventTaskComparisonRule();
-        
-        IEventType eventType1 = new StringEventType("eventType1");
-        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        EventTaskComparisonRule rule = new EventTaskComparisonRule();
+        
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventType eventType2 = new StringEventType("eventType2");
         IEventTarget eventTarget2 = new DummyGUIElement("elem2");
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget2);
         
         assertEquals(TaskEquality.UNEQUAL, rule.compare(task1, task2));
@@ -275,3 +363,167 @@
     }
 
+
+    /**
+     *
+     */
+    @Test
+    public void test_compare_06() {
+        EventTaskComparisonRule rule = new EventTaskComparisonRule();
+        
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+        
+        assertEquals(TaskEquality.LEXICALLY_EQUAL,
+                     rule.compare(task1.getInstances().iterator().next(),
+                                  task1.getInstances().iterator().next()));
+        assertTrue(rule.areLexicallyEqual(task1.getInstances().iterator().next(),
+                                          task1.getInstances().iterator().next()));
+        assertTrue(rule.areSyntacticallyEqual(task1.getInstances().iterator().next(),
+                                              task1.getInstances().iterator().next()));
+        assertTrue(rule.areSemanticallyEqual(task1.getInstances().iterator().next(),
+                                             task1.getInstances().iterator().next()));
+    }
+    
+    /**
+     *
+     */
+    @Test
+    public void test_compare_07() {
+        EventTaskComparisonRule rule = new EventTaskComparisonRule();
+        
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+        
+        ITask task2 = createNewEventTask(eventType1, eventTarget1);
+        
+        assertEquals(TaskEquality.LEXICALLY_EQUAL,
+                     rule.compare(task1.getInstances().iterator().next(),
+                                  task2.getInstances().iterator().next()));
+        assertTrue(rule.areLexicallyEqual(task1.getInstances().iterator().next(),
+                                          task2.getInstances().iterator().next()));
+        assertTrue(rule.areSyntacticallyEqual(task1.getInstances().iterator().next(),
+                                              task2.getInstances().iterator().next()));
+        assertTrue(rule.areSemanticallyEqual(task1.getInstances().iterator().next(),
+                                             task2.getInstances().iterator().next()));
+
+        assertEquals(TaskEquality.LEXICALLY_EQUAL,
+                     rule.compare(task2.getInstances().iterator().next(),
+                                  task1.getInstances().iterator().next()));
+        assertTrue(rule.areLexicallyEqual(task2.getInstances().iterator().next(),
+                                          task1.getInstances().iterator().next()));
+        assertTrue(rule.areSyntacticallyEqual(task2.getInstances().iterator().next(),
+                                              task1.getInstances().iterator().next()));
+        assertTrue(rule.areSemanticallyEqual(task2.getInstances().iterator().next(),
+                                             task1.getInstances().iterator().next()));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_compare_08() {
+        EventTaskComparisonRule rule = new EventTaskComparisonRule();
+        
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+        
+        IEventType eventType2 = new StringEventType("eventType2");
+        ITask task2 = createNewEventTask(eventType2, eventTarget1);
+        
+        assertEquals(TaskEquality.UNEQUAL,
+                     rule.compare(task1.getInstances().iterator().next(),
+                                  task2.getInstances().iterator().next()));
+        assertFalse(rule.areLexicallyEqual(task1.getInstances().iterator().next(),
+                                           task2.getInstances().iterator().next()));
+        assertFalse(rule.areSyntacticallyEqual(task1.getInstances().iterator().next(),
+                                               task2.getInstances().iterator().next()));
+        assertFalse(rule.areSemanticallyEqual(task1.getInstances().iterator().next(),
+                                              task2.getInstances().iterator().next()));
+
+        assertEquals(TaskEquality.UNEQUAL,
+                     rule.compare(task2.getInstances().iterator().next(),
+                                  task1.getInstances().iterator().next()));
+        assertFalse(rule.areLexicallyEqual(task2.getInstances().iterator().next(),
+                                           task1.getInstances().iterator().next()));
+        assertFalse(rule.areSyntacticallyEqual(task2.getInstances().iterator().next(),
+                                               task1.getInstances().iterator().next()));
+        assertFalse(rule.areSemanticallyEqual(task2.getInstances().iterator().next(),
+                                              task1.getInstances().iterator().next()));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_compare_09() {
+        EventTaskComparisonRule rule = new EventTaskComparisonRule();
+        
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+        
+        IEventTarget eventTarget2 = new DummyGUIElement("elem2");
+        ITask task2 = createNewEventTask(eventType1, eventTarget2);
+        
+        assertEquals(TaskEquality.UNEQUAL,
+                     rule.compare(task1.getInstances().iterator().next(),
+                                  task2.getInstances().iterator().next()));
+        assertFalse(rule.areLexicallyEqual(task1.getInstances().iterator().next(),
+                                           task2.getInstances().iterator().next()));
+        assertFalse(rule.areSyntacticallyEqual(task1.getInstances().iterator().next(),
+                                               task2.getInstances().iterator().next()));
+        assertFalse(rule.areSemanticallyEqual(task1.getInstances().iterator().next(),
+                                              task2.getInstances().iterator().next()));
+
+        assertEquals(TaskEquality.UNEQUAL,
+                     rule.compare(task2.getInstances().iterator().next(),
+                                  task1.getInstances().iterator().next()));
+        assertFalse(rule.areLexicallyEqual(task2.getInstances().iterator().next(),
+                                           task1.getInstances().iterator().next()));
+        assertFalse(rule.areSyntacticallyEqual(task2.getInstances().iterator().next(),
+                                               task1.getInstances().iterator().next()));
+        assertFalse(rule.areSemanticallyEqual(task2.getInstances().iterator().next(),
+                                              task1.getInstances().iterator().next()));
+    }
+
+
+    /**
+     *
+     */
+    @Test
+    public void test_compare_10() {
+        EventTaskComparisonRule rule = new EventTaskComparisonRule();
+        
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+        
+        IEventType eventType2 = new StringEventType("eventType2");
+        IEventTarget eventTarget2 = new DummyGUIElement("elem2");
+        ITask task2 = createNewEventTask(eventType2, eventTarget2);
+        
+        assertEquals(TaskEquality.UNEQUAL,
+                     rule.compare(task1.getInstances().iterator().next(),
+                                  task2.getInstances().iterator().next()));
+        assertFalse(rule.areLexicallyEqual(task1.getInstances().iterator().next(),
+                                           task2.getInstances().iterator().next()));
+        assertFalse(rule.areSyntacticallyEqual(task1.getInstances().iterator().next(),
+                                               task2.getInstances().iterator().next()));
+        assertFalse(rule.areSemanticallyEqual(task1.getInstances().iterator().next(),
+                                              task2.getInstances().iterator().next()));
+
+        assertEquals(TaskEquality.UNEQUAL,
+                     rule.compare(task2.getInstances().iterator().next(),
+                                  task1.getInstances().iterator().next()));
+        assertFalse(rule.areLexicallyEqual(task2.getInstances().iterator().next(),
+                                           task1.getInstances().iterator().next()));
+        assertFalse(rule.areSyntacticallyEqual(task2.getInstances().iterator().next(),
+                                               task1.getInstances().iterator().next()));
+        assertFalse(rule.areSemanticallyEqual(task2.getInstances().iterator().next(),
+                                              task1.getInstances().iterator().next()));
+    }
+
 }
Index: trunk/autoquest-core-tasktrees-test/src/test/java/de/ugoe/cs/autoquest/tasktrees/taskequality/GUIEventTaskComparisonRuleTest.java
===================================================================
--- trunk/autoquest-core-tasktrees-test/src/test/java/de/ugoe/cs/autoquest/tasktrees/taskequality/GUIEventTaskComparisonRuleTest.java	(revision 1285)
+++ trunk/autoquest-core-tasktrees-test/src/test/java/de/ugoe/cs/autoquest/tasktrees/taskequality/GUIEventTaskComparisonRuleTest.java	(revision 1294)
@@ -42,9 +42,5 @@
 import de.ugoe.cs.autoquest.keyboardmaps.VirtualKey;
 import de.ugoe.cs.autoquest.tasktrees.taskequality.EventTaskComparisonRule;
-import de.ugoe.cs.autoquest.tasktrees.taskequality.GUIEventTaskComparisonRule;
-import de.ugoe.cs.autoquest.tasktrees.taskequality.TaskEquality;
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITask;
-import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskFactory;
-import de.ugoe.cs.autoquest.tasktrees.treeimpl.TaskFactory;
 import de.ugoe.cs.autoquest.test.DummyGUIElement;
 
@@ -52,5 +48,5 @@
  * @author Patrick Harms
  */
-public class GUIEventTaskComparisonRuleTest {
+public class GUIEventTaskComparisonRuleTest extends AbstractComparisonRuleTest {
 
     /**
@@ -59,11 +55,9 @@
     @Test
     public void test_isApplicable_01() {
-        ITaskFactory taskFactory = new TaskFactory();
-
-        EventTaskComparisonRule rule = new EventTaskComparisonRule();
-
-        IEventType eventType1 = new StringEventType("eventType1");
-        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        EventTaskComparisonRule rule = new EventTaskComparisonRule();
+
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
 
         assertTrue(rule.isApplicable(task1, task1));
@@ -75,15 +69,13 @@
     @Test
     public void test_isApplicable_02() {
-        ITaskFactory taskFactory = new TaskFactory();
-
-        EventTaskComparisonRule rule = new EventTaskComparisonRule();
-
-        IEventType eventType1 = new StringEventType("eventType1");
-        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        EventTaskComparisonRule rule = new EventTaskComparisonRule();
+
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
 
         IEventType eventType2 = new StringEventType("eventType2");
         IEventTarget eventTarget2 = new DummyGUIElement("elem2");
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget2);
 
         assertTrue(rule.isApplicable(task1, task2));
@@ -96,15 +88,13 @@
     @Test
     public void test_isApplicable_03() {
-        ITaskFactory taskFactory = new TaskFactory();
-
         EventTaskComparisonRule rule = new EventTaskComparisonRule();
 
         IEventType eventType1 = new KeyboardFocusChange();
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
 
         IEventType eventType2 = new KeyboardFocusChange();
         IEventTarget eventTarget2 = new DummyGUIElement("elem2");
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget2);
 
         assertTrue(rule.isApplicable(task1, task2));
@@ -117,15 +107,13 @@
     @Test
     public void test_isApplicable_04() {
-        ITaskFactory taskFactory = new TaskFactory();
-
         EventTaskComparisonRule rule = new EventTaskComparisonRule();
 
         IEventType eventType1 = new KeyPressed(VirtualKey.LETTER_A);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
 
         IEventType eventType2 = new KeyReleased(VirtualKey.LETTER_B);
         IEventTarget eventTarget2 = new DummyGUIElement("elem2");
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget2);
 
         assertTrue(rule.isApplicable(task1, task2));
@@ -138,15 +126,13 @@
     @Test
     public void test_isApplicable_05() {
-        ITaskFactory taskFactory = new TaskFactory();
-
         EventTaskComparisonRule rule = new EventTaskComparisonRule();
 
         IEventType eventType1 = new KeyTyped(VirtualKey.LETTER_C);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
 
         IEventType eventType2 = new KeyTyped(VirtualKey.LETTER_D);
         IEventTarget eventTarget2 = new DummyGUIElement("elem2");
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget2);
 
         assertTrue(rule.isApplicable(task1, task2));
@@ -159,15 +145,13 @@
     @Test
     public void test_isApplicable_06() {
-        ITaskFactory taskFactory = new TaskFactory();
-
         EventTaskComparisonRule rule = new EventTaskComparisonRule();
 
         IEventType eventType1 = new MouseButtonDown(MouseButtonInteraction.Button.LEFT, 5, 6);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
 
         IEventType eventType2 = new MouseButtonUp(MouseButtonInteraction.Button.MIDDLE, 3, 1);
         IEventTarget eventTarget2 = new DummyGUIElement("elem2");
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget2);
 
         assertTrue(rule.isApplicable(task1, task2));
@@ -180,15 +164,13 @@
     @Test
     public void test_isApplicable_07() {
-        ITaskFactory taskFactory = new TaskFactory();
-
         EventTaskComparisonRule rule = new EventTaskComparisonRule();
 
         IEventType eventType1 = new MouseClick(MouseButtonInteraction.Button.RIGHT, 4, 7);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
 
         IEventType eventType2 = new MouseDoubleClick(MouseButtonInteraction.Button.X, 9, 12);
         IEventTarget eventTarget2 = new DummyGUIElement("elem2");
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget2);
 
         assertTrue(rule.isApplicable(task1, task2));
@@ -201,15 +183,13 @@
     @Test
     public void test_isApplicable_08() {
-        ITaskFactory taskFactory = new TaskFactory();
-
         EventTaskComparisonRule rule = new EventTaskComparisonRule();
 
         IEventType eventType1 = new MouseDragAndDrop(1, 2, 3, 4);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
 
         IEventType eventType2 = new MouseDragAndDrop(5, 6, 7, 8);
         IEventTarget eventTarget2 = new DummyGUIElement("elem2");
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget2);
 
         assertTrue(rule.isApplicable(task1, task2));
@@ -222,15 +202,13 @@
     @Test
     public void test_isApplicable_09() {
-        ITaskFactory taskFactory = new TaskFactory();
-
         EventTaskComparisonRule rule = new EventTaskComparisonRule();
 
         IEventType eventType1 = new Scroll(1, 2);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
 
         IEventType eventType2 = new Scroll(3, 4);
         IEventTarget eventTarget2 = new DummyGUIElement("elem2");
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget2);
 
         assertTrue(rule.isApplicable(task1, task2));
@@ -243,6 +221,4 @@
     @Test
     public void test_isApplicable_10() {
-        ITaskFactory taskFactory = new TaskFactory();
-
         EventTaskComparisonRule rule = new EventTaskComparisonRule();
 
@@ -250,9 +226,9 @@
         IEventType eventType1 = new TextInput("text1", inputEvents);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
 
         IEventType eventType2 = new TextInput("text2", inputEvents);
         IEventTarget eventTarget2 = new DummyGUIElement("elem2");
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget2);
 
         assertTrue(rule.isApplicable(task1, task2));
@@ -265,15 +241,13 @@
     @Test
     public void test_isApplicable_11() {
-        ITaskFactory taskFactory = new TaskFactory();
-
         EventTaskComparisonRule rule = new EventTaskComparisonRule();
 
         IEventType eventType1 = new TextSelection();
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
 
         IEventType eventType2 = new ValueSelection<String>("value");
         IEventTarget eventTarget2 = new DummyGUIElement("elem2");
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget2);
 
         assertTrue(rule.isApplicable(task1, task2));
@@ -286,13 +260,11 @@
     @Test
     public void test_isApplicable_12() {
-        ITaskFactory taskFactory = new TaskFactory();
-
-        EventTaskComparisonRule rule = new EventTaskComparisonRule();
-
-        IEventType eventType1 = new StringEventType("eventType1");
-        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
-
-        ITask selection = taskFactory.createNewSelection();
+        EventTaskComparisonRule rule = new EventTaskComparisonRule();
+
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+
+        ITask selection = createNewSelection();
 
         assertFalse(rule.isApplicable(task1, selection));
@@ -305,13 +277,11 @@
     @Test
     public void test_isApplicable_13() {
-        ITaskFactory taskFactory = new TaskFactory();
-
-        EventTaskComparisonRule rule = new EventTaskComparisonRule();
-
-        IEventType eventType1 = new StringEventType("eventType1");
-        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
-
-        ITask sequence = taskFactory.createNewSequence();
+        EventTaskComparisonRule rule = new EventTaskComparisonRule();
+
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+
+        ITask sequence = createNewSequence();
 
         assertFalse(rule.isApplicable(task1, sequence));
@@ -324,13 +294,11 @@
     @Test
     public void test_isApplicable_14() {
-        ITaskFactory taskFactory = new TaskFactory();
-
-        EventTaskComparisonRule rule = new EventTaskComparisonRule();
-
-        IEventType eventType1 = new StringEventType("eventType1");
-        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
-
-        ITask iteration = taskFactory.createNewIteration();
+        EventTaskComparisonRule rule = new EventTaskComparisonRule();
+
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+
+        ITask iteration = createNewIteration();
 
         assertFalse(rule.isApplicable(task1, iteration));
@@ -343,13 +311,11 @@
     @Test
     public void test_isApplicable_15() {
-        ITaskFactory taskFactory = new TaskFactory();
-
-        EventTaskComparisonRule rule = new EventTaskComparisonRule();
-
-        IEventType eventType1 = new StringEventType("eventType1");
-        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
-
-        ITask optional = taskFactory.createNewOptional();
+        EventTaskComparisonRule rule = new EventTaskComparisonRule();
+
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+
+        ITask optional = createNewOptional();
 
         assertFalse(rule.isApplicable(task1, optional));
@@ -357,4 +323,305 @@
     }
 
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_16() {
+        EventTaskComparisonRule rule = new EventTaskComparisonRule();
+
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+
+        assertTrue(rule.isApplicable(task1.getInstances().iterator().next(),
+                                     task1.getInstances().iterator().next()));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_17() {
+        EventTaskComparisonRule rule = new EventTaskComparisonRule();
+
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+
+        IEventType eventType2 = new StringEventType("eventType2");
+        IEventTarget eventTarget2 = new DummyGUIElement("elem2");
+        ITask task2 = createNewEventTask(eventType2, eventTarget2);
+
+        assertTrue(rule.isApplicable(task1.getInstances().iterator().next(),
+                                     task2.getInstances().iterator().next()));
+        assertTrue(rule.isApplicable(task2.getInstances().iterator().next(),
+                                     task1.getInstances().iterator().next()));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_18() {
+        EventTaskComparisonRule rule = new EventTaskComparisonRule();
+
+        IEventType eventType1 = new KeyboardFocusChange();
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+
+        IEventType eventType2 = new KeyboardFocusChange();
+        IEventTarget eventTarget2 = new DummyGUIElement("elem2");
+        ITask task2 = createNewEventTask(eventType2, eventTarget2);
+
+        assertTrue(rule.isApplicable(task1.getInstances().iterator().next(),
+                                     task2.getInstances().iterator().next()));
+        assertTrue(rule.isApplicable(task2.getInstances().iterator().next(),
+                                     task1.getInstances().iterator().next()));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_19() {
+        EventTaskComparisonRule rule = new EventTaskComparisonRule();
+
+        IEventType eventType1 = new KeyPressed(VirtualKey.LETTER_A);
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+
+        IEventType eventType2 = new KeyReleased(VirtualKey.LETTER_B);
+        IEventTarget eventTarget2 = new DummyGUIElement("elem2");
+        ITask task2 = createNewEventTask(eventType2, eventTarget2);
+
+        assertTrue(rule.isApplicable(task1.getInstances().iterator().next(),
+                                     task2.getInstances().iterator().next()));
+        assertTrue(rule.isApplicable(task2.getInstances().iterator().next(),
+                                     task1.getInstances().iterator().next()));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_20() {
+        EventTaskComparisonRule rule = new EventTaskComparisonRule();
+
+        IEventType eventType1 = new KeyTyped(VirtualKey.LETTER_C);
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+
+        IEventType eventType2 = new KeyTyped(VirtualKey.LETTER_D);
+        IEventTarget eventTarget2 = new DummyGUIElement("elem2");
+        ITask task2 = createNewEventTask(eventType2, eventTarget2);
+
+        assertTrue(rule.isApplicable(task1.getInstances().iterator().next(),
+                                     task2.getInstances().iterator().next()));
+        assertTrue(rule.isApplicable(task2.getInstances().iterator().next(),
+                                     task1.getInstances().iterator().next()));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_21() {
+        EventTaskComparisonRule rule = new EventTaskComparisonRule();
+
+        IEventType eventType1 = new MouseButtonDown(MouseButtonInteraction.Button.LEFT, 5, 6);
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+
+        IEventType eventType2 = new MouseButtonUp(MouseButtonInteraction.Button.MIDDLE, 3, 1);
+        IEventTarget eventTarget2 = new DummyGUIElement("elem2");
+        ITask task2 = createNewEventTask(eventType2, eventTarget2);
+
+        assertTrue(rule.isApplicable(task1.getInstances().iterator().next(),
+                                     task2.getInstances().iterator().next()));
+        assertTrue(rule.isApplicable(task2.getInstances().iterator().next(),
+                                     task1.getInstances().iterator().next()));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_22() {
+        EventTaskComparisonRule rule = new EventTaskComparisonRule();
+
+        IEventType eventType1 = new MouseClick(MouseButtonInteraction.Button.RIGHT, 4, 7);
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+
+        IEventType eventType2 = new MouseDoubleClick(MouseButtonInteraction.Button.X, 9, 12);
+        IEventTarget eventTarget2 = new DummyGUIElement("elem2");
+        ITask task2 = createNewEventTask(eventType2, eventTarget2);
+
+        assertTrue(rule.isApplicable(task1.getInstances().iterator().next(),
+                                     task2.getInstances().iterator().next()));
+        assertTrue(rule.isApplicable(task2.getInstances().iterator().next(),
+                                     task1.getInstances().iterator().next()));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_23() {
+        EventTaskComparisonRule rule = new EventTaskComparisonRule();
+
+        IEventType eventType1 = new MouseDragAndDrop(1, 2, 3, 4);
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+
+        IEventType eventType2 = new MouseDragAndDrop(5, 6, 7, 8);
+        IEventTarget eventTarget2 = new DummyGUIElement("elem2");
+        ITask task2 = createNewEventTask(eventType2, eventTarget2);
+
+        assertTrue(rule.isApplicable(task1.getInstances().iterator().next(),
+                                     task2.getInstances().iterator().next()));
+        assertTrue(rule.isApplicable(task2.getInstances().iterator().next(),
+                                     task1.getInstances().iterator().next()));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_24() {
+        EventTaskComparisonRule rule = new EventTaskComparisonRule();
+
+        IEventType eventType1 = new Scroll(1, 2);
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+
+        IEventType eventType2 = new Scroll(3, 4);
+        IEventTarget eventTarget2 = new DummyGUIElement("elem2");
+        ITask task2 = createNewEventTask(eventType2, eventTarget2);
+
+        assertTrue(rule.isApplicable(task1.getInstances().iterator().next(),
+                                     task2.getInstances().iterator().next()));
+        assertTrue(rule.isApplicable(task2.getInstances().iterator().next(),
+                                     task1.getInstances().iterator().next()));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_25() {
+        EventTaskComparisonRule rule = new EventTaskComparisonRule();
+
+        List<Event> inputEvents = new ArrayList<Event>();
+        IEventType eventType1 = new TextInput("text1", inputEvents);
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+
+        IEventType eventType2 = new TextInput("text2", inputEvents);
+        IEventTarget eventTarget2 = new DummyGUIElement("elem2");
+        ITask task2 = createNewEventTask(eventType2, eventTarget2);
+
+        assertTrue(rule.isApplicable(task1.getInstances().iterator().next(), task2.getInstances().iterator().next()));
+        assertTrue(rule.isApplicable(task2.getInstances().iterator().next(), task1.getInstances().iterator().next()));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_26() {
+        EventTaskComparisonRule rule = new EventTaskComparisonRule();
+
+        IEventType eventType1 = new TextSelection();
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+
+        IEventType eventType2 = new ValueSelection<String>("value");
+        IEventTarget eventTarget2 = new DummyGUIElement("elem2");
+        ITask task2 = createNewEventTask(eventType2, eventTarget2);
+
+        assertTrue(rule.isApplicable(task1.getInstances().iterator().next(),
+                                     task2.getInstances().iterator().next()));
+        assertTrue(rule.isApplicable(task2.getInstances().iterator().next(),
+                                     task1.getInstances().iterator().next()));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_27() {
+        EventTaskComparisonRule rule = new EventTaskComparisonRule();
+
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+
+        ITask selection = createNewSelection();
+
+        assertFalse(rule.isApplicable(task1.getInstances().iterator().next(),
+                                      selection.getInstances().iterator().next()));
+        assertFalse(rule.isApplicable(selection.getInstances().iterator().next(),
+                                      task1.getInstances().iterator().next()));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_28() {
+        EventTaskComparisonRule rule = new EventTaskComparisonRule();
+
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+
+        ITask sequence = createNewSequence();
+
+        assertFalse(rule.isApplicable(task1.getInstances().iterator().next(),
+                                      sequence.getInstances().iterator().next()));
+        assertFalse(rule.isApplicable(sequence.getInstances().iterator().next(),
+                                      task1.getInstances().iterator().next()));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_29() {
+        EventTaskComparisonRule rule = new EventTaskComparisonRule();
+
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+
+        ITask iteration = createNewIteration();
+
+        assertFalse(rule.isApplicable(task1.getInstances().iterator().next(),
+                                      iteration.getInstances().iterator().next()));
+        assertFalse(rule.isApplicable(iteration.getInstances().iterator().next(),
+                                      task1.getInstances().iterator().next()));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_30() {
+        EventTaskComparisonRule rule = new EventTaskComparisonRule();
+
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+
+        ITask optional = createNewOptional();
+
+        assertFalse(rule.isApplicable(task1.getInstances().iterator().next(),
+                                      optional.getInstances().iterator().next()));
+        assertFalse(rule.isApplicable(optional.getInstances().iterator().next(),
+                                      task1.getInstances().iterator().next()));
+    }
+
     /**
      *
@@ -362,11 +629,9 @@
     @Test
     public void test_compare_KeyboardFocusChange_01() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new KeyboardFocusChange();
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
-        
-        assertLexicallyEqual(task1, task1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+        
+        assertLexicallyEqual(new GUIEventTaskComparisonRule(), task1, task1);
     }
 
@@ -376,14 +641,12 @@
     @Test
     public void test_compare_KeyboardFocusChange_02() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new KeyboardFocusChange();
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
 
         IEventType eventType2 = new KeyboardFocusChange();
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget1);
-        
-        assertLexicallyEqual(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget1);
+        
+        assertLexicallyEqual(new GUIEventTaskComparisonRule(), task1, task2);
     }
 
@@ -393,15 +656,13 @@
     @Test
     public void test_compare_KeyboardFocusChange_03() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new KeyboardFocusChange();
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
 
         IEventType eventType2 = new KeyboardFocusChange();
         IEventTarget eventTarget2 = new DummyGUIElement("elem2");
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget2);
-        
-        assertUnequal(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget2);
+        
+        assertUnequal(new GUIEventTaskComparisonRule(), task1, task2);
     }
 
@@ -411,11 +672,9 @@
     @Test
     public void test_compare_KeyPressed_01() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new KeyPressed(VirtualKey.LETTER_A);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
-        
-        assertLexicallyEqual(task1, task1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+        
+        assertLexicallyEqual(new GUIEventTaskComparisonRule(), task1, task1);
     }
 
@@ -425,14 +684,12 @@
     @Test
     public void test_compare_KeyPressed_02() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new KeyPressed(VirtualKey.LETTER_A);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventType eventType2 = new KeyPressed(VirtualKey.LETTER_A);
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget1);
-        
-        assertLexicallyEqual(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget1);
+        
+        assertLexicallyEqual(new GUIEventTaskComparisonRule(), task1, task2);
     }
 
@@ -442,14 +699,12 @@
     @Test
     public void test_compare_KeyPressed_03() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new KeyPressed(VirtualKey.LETTER_A);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventType eventType2 = new KeyPressed(VirtualKey.LETTER_B);
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget1);
-        
-        assertSemanticallyEqual(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget1);
+        
+        assertSemanticallyEqual(new GUIEventTaskComparisonRule(), task1, task2);
     }
 
@@ -459,15 +714,13 @@
     @Test
     public void test_compare_KeyPressed_04() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new KeyPressed(VirtualKey.LETTER_A);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventType eventType2 = new KeyPressed(VirtualKey.LETTER_A);
         IEventTarget eventTarget2 = new DummyGUIElement("elem2");
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget2);
-        
-        assertUnequal(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget2);
+        
+        assertUnequal(new GUIEventTaskComparisonRule(), task1, task2);
     }
     
@@ -477,11 +730,9 @@
     @Test
     public void test_compare_KeyReleased_01() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new KeyReleased(VirtualKey.LETTER_A);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
-        
-        assertLexicallyEqual(task1, task1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+        
+        assertLexicallyEqual(new GUIEventTaskComparisonRule(), task1, task1);
     }
 
@@ -491,14 +742,12 @@
     @Test
     public void test_compare_KeyReleased_02() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new KeyReleased(VirtualKey.LETTER_A);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventType eventType2 = new KeyReleased(VirtualKey.LETTER_A);
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget1);
-        
-        assertLexicallyEqual(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget1);
+        
+        assertLexicallyEqual(new GUIEventTaskComparisonRule(), task1, task2);
     }
 
@@ -508,14 +757,12 @@
     @Test
     public void test_compare_KeyReleased_03() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new KeyReleased(VirtualKey.LETTER_A);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventType eventType2 = new KeyReleased(VirtualKey.LETTER_B);
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget1);
-        
-        assertSemanticallyEqual(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget1);
+        
+        assertSemanticallyEqual(new GUIEventTaskComparisonRule(), task1, task2);
     }
 
@@ -525,15 +772,13 @@
     @Test
     public void test_compare_KeyReleased_04() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new KeyReleased(VirtualKey.LETTER_A);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventType eventType2 = new KeyReleased(VirtualKey.LETTER_A);
         IEventTarget eventTarget2 = new DummyGUIElement("elem2");
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget2);
-        
-        assertUnequal(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget2);
+        
+        assertUnequal(new GUIEventTaskComparisonRule(), task1, task2);
     }
     
@@ -543,11 +788,9 @@
     @Test
     public void test_compare_KeyTyped_01() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new KeyTyped(VirtualKey.LETTER_A);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
-        
-        assertLexicallyEqual(task1, task1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+        
+        assertLexicallyEqual(new GUIEventTaskComparisonRule(), task1, task1);
     }
 
@@ -557,14 +800,12 @@
     @Test
     public void test_compare_KeyTyped_02() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new KeyTyped(VirtualKey.LETTER_A);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventType eventType2 = new KeyTyped(VirtualKey.LETTER_A);
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget1);
-        
-        assertLexicallyEqual(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget1);
+        
+        assertLexicallyEqual(new GUIEventTaskComparisonRule(), task1, task2);
     }
 
@@ -574,14 +815,12 @@
     @Test
     public void test_compare_KeyTyped_03() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new KeyTyped(VirtualKey.LETTER_A);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventType eventType2 = new KeyTyped(VirtualKey.LETTER_B);
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget1);
-        
-        assertSemanticallyEqual(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget1);
+        
+        assertSemanticallyEqual(new GUIEventTaskComparisonRule(), task1, task2);
     }
 
@@ -591,15 +830,13 @@
     @Test
     public void test_compare_KeyTyped_04() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new KeyTyped(VirtualKey.LETTER_A);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventType eventType2 = new KeyTyped(VirtualKey.LETTER_A);
         IEventTarget eventTarget2 = new DummyGUIElement("elem2");
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget2);
-        
-        assertUnequal(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget2);
+        
+        assertUnequal(new GUIEventTaskComparisonRule(), task1, task2);
     }
     
@@ -609,11 +846,9 @@
     @Test
     public void test_compare_MouseButtonDown_01() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new MouseButtonDown(MouseButtonInteraction.Button.LEFT, 1, 2);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
-        
-        assertLexicallyEqual(task1, task1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+        
+        assertLexicallyEqual(new GUIEventTaskComparisonRule(), task1, task1);
     }
 
@@ -623,14 +858,12 @@
     @Test
     public void test_compare_MouseButtonDown_02() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new MouseButtonDown(MouseButtonInteraction.Button.LEFT, 1, 2);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventType eventType2 = new MouseButtonDown(MouseButtonInteraction.Button.LEFT, 1, 2);
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget1);
-        
-        assertLexicallyEqual(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget1);
+        
+        assertLexicallyEqual(new GUIEventTaskComparisonRule(), task1, task2);
     }
 
@@ -640,14 +873,12 @@
     @Test
     public void test_compare_MouseButtonDown_03() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new MouseButtonDown(MouseButtonInteraction.Button.LEFT, 1, 2);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventType eventType2 = new MouseButtonDown(MouseButtonInteraction.Button.LEFT, 1, 3);
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget1);
-        
-        assertSemanticallyEqual(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget1);
+        
+        assertSemanticallyEqual(new GUIEventTaskComparisonRule(), task1, task2);
     }
 
@@ -657,14 +888,12 @@
     @Test
     public void test_compare_MouseButtonDown_04() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new MouseButtonDown(MouseButtonInteraction.Button.LEFT, 1, 2);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventType eventType2 = new MouseButtonDown(MouseButtonInteraction.Button.LEFT, 3, 2);
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget1);
-        
-        assertSemanticallyEqual(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget1);
+        
+        assertSemanticallyEqual(new GUIEventTaskComparisonRule(), task1, task2);
     }
 
@@ -674,14 +903,12 @@
     @Test
     public void test_compare_MouseButtonDown_05() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new MouseButtonDown(MouseButtonInteraction.Button.LEFT, 1, 2);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventType eventType2 = new MouseButtonDown(MouseButtonInteraction.Button.RIGHT, 1, 2);
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget1);
-        
-        assertUnequal(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget1);
+        
+        assertUnequal(new GUIEventTaskComparisonRule(), task1, task2);
     }
     
@@ -691,15 +918,13 @@
     @Test
     public void test_compare_MouseButtonDown_06() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new MouseButtonDown(MouseButtonInteraction.Button.LEFT, 1, 2);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventType eventType2 = new MouseButtonDown(MouseButtonInteraction.Button.LEFT, 1, 2);
         IEventTarget eventTarget2 = new DummyGUIElement("elem2");
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget2);
-        
-        assertUnequal(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget2);
+        
+        assertUnequal(new GUIEventTaskComparisonRule(), task1, task2);
     }
     
@@ -709,11 +934,9 @@
     @Test
     public void test_compare_MouseButtonUp_01() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new MouseButtonUp(MouseButtonInteraction.Button.LEFT, 1, 2);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
-        
-        assertLexicallyEqual(task1, task1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+        
+        assertLexicallyEqual(new GUIEventTaskComparisonRule(), task1, task1);
     }
 
@@ -723,14 +946,12 @@
     @Test
     public void test_compare_MouseButtonUp_02() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new MouseButtonUp(MouseButtonInteraction.Button.LEFT, 1, 2);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventType eventType2 = new MouseButtonUp(MouseButtonInteraction.Button.LEFT, 1, 2);
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget1);
-        
-        assertLexicallyEqual(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget1);
+        
+        assertLexicallyEqual(new GUIEventTaskComparisonRule(), task1, task2);
     }
 
@@ -740,14 +961,12 @@
     @Test
     public void test_compare_MouseButtonUp_03() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new MouseButtonUp(MouseButtonInteraction.Button.LEFT, 1, 2);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventType eventType2 = new MouseButtonUp(MouseButtonInteraction.Button.LEFT, 1, 3);
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget1);
-        
-        assertSemanticallyEqual(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget1);
+        
+        assertSemanticallyEqual(new GUIEventTaskComparisonRule(), task1, task2);
     }
 
@@ -757,14 +976,12 @@
     @Test
     public void test_compare_MouseButtonUp_04() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new MouseButtonUp(MouseButtonInteraction.Button.LEFT, 1, 2);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventType eventType2 = new MouseButtonUp(MouseButtonInteraction.Button.LEFT, 3, 2);
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget1);
-        
-        assertSemanticallyEqual(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget1);
+        
+        assertSemanticallyEqual(new GUIEventTaskComparisonRule(), task1, task2);
     }
 
@@ -774,14 +991,12 @@
     @Test
     public void test_compare_MouseButtonUp_05() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new MouseButtonUp(MouseButtonInteraction.Button.LEFT, 1, 2);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventType eventType2 = new MouseButtonUp(MouseButtonInteraction.Button.RIGHT, 1, 2);
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget1);
-        
-        assertUnequal(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget1);
+        
+        assertUnequal(new GUIEventTaskComparisonRule(), task1, task2);
     }
     
@@ -791,15 +1006,13 @@
     @Test
     public void test_compare_MouseButtonUp_06() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new MouseButtonUp(MouseButtonInteraction.Button.LEFT, 1, 2);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventType eventType2 = new MouseButtonUp(MouseButtonInteraction.Button.LEFT, 1, 2);
         IEventTarget eventTarget2 = new DummyGUIElement("elem2");
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget2);
-        
-        assertUnequal(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget2);
+        
+        assertUnequal(new GUIEventTaskComparisonRule(), task1, task2);
     }
     
@@ -809,11 +1022,9 @@
     @Test
     public void test_compare_MouseClick_01() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new MouseClick(MouseButtonInteraction.Button.LEFT, 1, 2);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
-        
-        assertLexicallyEqual(task1, task1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+        
+        assertLexicallyEqual(new GUIEventTaskComparisonRule(), task1, task1);
     }
 
@@ -823,14 +1034,12 @@
     @Test
     public void test_compare_MouseClick_02() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new MouseClick(MouseButtonInteraction.Button.LEFT, 1, 2);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventType eventType2 = new MouseClick(MouseButtonInteraction.Button.LEFT, 1, 2);
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget1);
-        
-        assertLexicallyEqual(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget1);
+        
+        assertLexicallyEqual(new GUIEventTaskComparisonRule(), task1, task2);
     }
 
@@ -840,14 +1049,12 @@
     @Test
     public void test_compare_MouseClick_03() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new MouseClick(MouseButtonInteraction.Button.LEFT, 1, 2);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventType eventType2 = new MouseClick(MouseButtonInteraction.Button.LEFT, 1, 3);
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget1);
-        
-        assertSemanticallyEqual(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget1);
+        
+        assertSemanticallyEqual(new GUIEventTaskComparisonRule(), task1, task2);
     }
 
@@ -857,14 +1064,12 @@
     @Test
     public void test_compare_MouseClick_04() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new MouseClick(MouseButtonInteraction.Button.LEFT, 1, 2);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventType eventType2 = new MouseClick(MouseButtonInteraction.Button.LEFT, 3, 2);
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget1);
-        
-        assertSemanticallyEqual(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget1);
+        
+        assertSemanticallyEqual(new GUIEventTaskComparisonRule(), task1, task2);
     }
 
@@ -874,14 +1079,12 @@
     @Test
     public void test_compare_MouseClick_05() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new MouseClick(MouseButtonInteraction.Button.LEFT, 1, 2);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventType eventType2 = new MouseClick(MouseButtonInteraction.Button.RIGHT, 1, 2);
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget1);
-        
-        assertUnequal(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget1);
+        
+        assertUnequal(new GUIEventTaskComparisonRule(), task1, task2);
     }
     
@@ -891,15 +1094,13 @@
     @Test
     public void test_compare_MouseClick_06() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new MouseClick(MouseButtonInteraction.Button.LEFT, 1, 2);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventType eventType2 = new MouseClick(MouseButtonInteraction.Button.LEFT, 1, 2);
         IEventTarget eventTarget2 = new DummyGUIElement("elem2");
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget2);
-        
-        assertUnequal(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget2);
+        
+        assertUnequal(new GUIEventTaskComparisonRule(), task1, task2);
     }
     
@@ -909,11 +1110,9 @@
     @Test
     public void test_compare_MouseDoubleClick_01() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new MouseDoubleClick(MouseButtonInteraction.Button.LEFT, 1, 2);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
-        
-        assertLexicallyEqual(task1, task1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+        
+        assertLexicallyEqual(new GUIEventTaskComparisonRule(), task1, task1);
     }
 
@@ -923,14 +1122,12 @@
     @Test
     public void test_compare_MouseDoubleClick_02() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new MouseDoubleClick(MouseButtonInteraction.Button.LEFT, 1, 2);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventType eventType2 = new MouseDoubleClick(MouseButtonInteraction.Button.LEFT, 1, 2);
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget1);
-        
-        assertLexicallyEqual(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget1);
+        
+        assertLexicallyEqual(new GUIEventTaskComparisonRule(), task1, task2);
     }
 
@@ -940,14 +1137,12 @@
     @Test
     public void test_compare_MouseDoubleClick_03() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new MouseDoubleClick(MouseButtonInteraction.Button.LEFT, 1, 2);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventType eventType2 = new MouseDoubleClick(MouseButtonInteraction.Button.LEFT, 1, 3);
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget1);
-        
-        assertSemanticallyEqual(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget1);
+        
+        assertSemanticallyEqual(new GUIEventTaskComparisonRule(), task1, task2);
     }
 
@@ -957,14 +1152,12 @@
     @Test
     public void test_compare_MouseDoubleClick_04() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new MouseDoubleClick(MouseButtonInteraction.Button.LEFT, 1, 2);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventType eventType2 = new MouseDoubleClick(MouseButtonInteraction.Button.LEFT, 3, 2);
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget1);
-        
-        assertSemanticallyEqual(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget1);
+        
+        assertSemanticallyEqual(new GUIEventTaskComparisonRule(), task1, task2);
     }
 
@@ -974,14 +1167,12 @@
     @Test
     public void test_compare_MouseDoubleClick_05() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new MouseDoubleClick(MouseButtonInteraction.Button.LEFT, 1, 2);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventType eventType2 = new MouseDoubleClick(MouseButtonInteraction.Button.RIGHT, 1, 2);
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget1);
-        
-        assertUnequal(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget1);
+        
+        assertUnequal(new GUIEventTaskComparisonRule(), task1, task2);
     }
     
@@ -991,15 +1182,13 @@
     @Test
     public void test_compare_MouseDoubleClick_06() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new MouseDoubleClick(MouseButtonInteraction.Button.LEFT, 1, 2);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventType eventType2 = new MouseDoubleClick(MouseButtonInteraction.Button.LEFT, 1, 2);
         IEventTarget eventTarget2 = new DummyGUIElement("elem2");
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget2);
-        
-        assertUnequal(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget2);
+        
+        assertUnequal(new GUIEventTaskComparisonRule(), task1, task2);
     }
     
@@ -1009,11 +1198,9 @@
     @Test
     public void test_compare_MouseDragAndDrop_01() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new MouseDragAndDrop(1, 2, 3, 4);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
-        
-        assertLexicallyEqual(task1, task1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+        
+        assertLexicallyEqual(new GUIEventTaskComparisonRule(), task1, task1);
     }
 
@@ -1023,14 +1210,12 @@
     @Test
     public void test_compare_MouseDragAndDrop_02() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new MouseDragAndDrop(1, 2, 3, 4);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventType eventType2 = new MouseDragAndDrop(1, 2, 3, 4);
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget1);
-        
-        assertLexicallyEqual(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget1);
+        
+        assertLexicallyEqual(new GUIEventTaskComparisonRule(), task1, task2);
     }
 
@@ -1040,14 +1225,12 @@
     @Test
     public void test_compare_MouseDragAndDrop_03() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new MouseDragAndDrop(1, 2, 3, 4);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventType eventType2 = new MouseDragAndDrop(5, 2, 3, 4);
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget1);
-        
-        assertSemanticallyEqual(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget1);
+        
+        assertSemanticallyEqual(new GUIEventTaskComparisonRule(), task1, task2);
     }
 
@@ -1057,14 +1240,12 @@
     @Test
     public void test_compare_MouseDragAndDrop_04() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new MouseDragAndDrop(1, 2, 3, 4);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventType eventType2 = new MouseDragAndDrop(1, 5, 3, 4);
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget1);
-        
-        assertSemanticallyEqual(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget1);
+        
+        assertSemanticallyEqual(new GUIEventTaskComparisonRule(), task1, task2);
     }
 
@@ -1074,14 +1255,12 @@
     @Test
     public void test_compare_MouseDragAndDrop_05() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new MouseDragAndDrop(1, 2, 3, 4);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventType eventType2 = new MouseDragAndDrop(1, 2, 5, 4);
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget1);
-        
-        assertSemanticallyEqual(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget1);
+        
+        assertSemanticallyEqual(new GUIEventTaskComparisonRule(), task1, task2);
     }
 
@@ -1091,14 +1270,12 @@
     @Test
     public void test_compare_MouseDragAndDrop_06() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new MouseDragAndDrop(1, 2, 3, 4);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventType eventType2 = new MouseDragAndDrop(1, 2, 3, 5);
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget1);
-        
-        assertSemanticallyEqual(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget1);
+        
+        assertSemanticallyEqual(new GUIEventTaskComparisonRule(), task1, task2);
     }
 
@@ -1108,15 +1285,13 @@
     @Test
     public void test_compare_MouseDragAndDrop_07() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new MouseDragAndDrop(1, 2, 3, 4);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventType eventType2 = new MouseDragAndDrop(1, 2, 3, 4);
         IEventTarget eventTarget2 = new DummyGUIElement("elem2");
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget2);
-        
-        assertUnequal(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget2);
+        
+        assertUnequal(new GUIEventTaskComparisonRule(), task1, task2);
     }
 
@@ -1126,11 +1301,9 @@
     @Test
     public void test_compare_Scroll_01() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new Scroll(1, 2);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
-        
-        assertLexicallyEqual(task1, task1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+        
+        assertLexicallyEqual(new GUIEventTaskComparisonRule(), task1, task1);
     }
 
@@ -1140,14 +1313,12 @@
     @Test
     public void test_compare_Scroll_02() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new Scroll(1, 2);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventType eventType2 = new Scroll(1, 2);
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget1);
-        
-        assertLexicallyEqual(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget1);
+        
+        assertLexicallyEqual(new GUIEventTaskComparisonRule(), task1, task2);
     }
 
@@ -1157,14 +1328,12 @@
     @Test
     public void test_compare_Scroll_03() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new Scroll(1, 2);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventType eventType2 = new Scroll(3, 2);
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget1);
-        
-        assertSemanticallyEqual(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget1);
+        
+        assertSemanticallyEqual(new GUIEventTaskComparisonRule(), task1, task2);
     }
 
@@ -1174,14 +1343,12 @@
     @Test
     public void test_compare_Scroll_04() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new Scroll(1, 2);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventType eventType2 = new Scroll(1, 3);
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget1);
-        
-        assertSemanticallyEqual(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget1);
+        
+        assertSemanticallyEqual(new GUIEventTaskComparisonRule(), task1, task2);
     }
 
@@ -1191,15 +1358,13 @@
     @Test
     public void test_compare_Scroll_05() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new Scroll(1, 2);
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventType eventType2 = new Scroll(1, 2);
         IEventTarget eventTarget2 = new DummyGUIElement("elem2");
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget2);
-        
-        assertUnequal(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget2);
+        
+        assertUnequal(new GUIEventTaskComparisonRule(), task1, task2);
     }
     
@@ -1209,6 +1374,4 @@
     @Test
     public void test_compare_TextInput_01() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new StringEventType("eventType1");
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
@@ -1216,7 +1379,7 @@
         textInputEvents1.add(new Event(eventType1, eventTarget1));
         eventType1 = new TextInput("enteredText1", textInputEvents1);
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
-        
-        assertLexicallyEqual(task1, task1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+        
+        assertLexicallyEqual(new GUIEventTaskComparisonRule(), task1, task1);
     }
     
@@ -1226,6 +1389,4 @@
     @Test
     public void test_compare_TextInput_02() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new StringEventType("eventType1");
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
@@ -1233,10 +1394,10 @@
         textInputEvents1.add(new Event(eventType1, eventTarget1));
         eventType1 = new TextInput("enteredText1", textInputEvents1);
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventType eventType2 = new TextInput("enteredText1", textInputEvents1);
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget1);
-
-        assertLexicallyEqual(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget1);
+
+        assertLexicallyEqual(new GUIEventTaskComparisonRule(), task1, task2);
     }
     
@@ -1246,6 +1407,4 @@
     @Test
     public void test_compare_TextInput_03() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new StringEventType("eventType1");
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
@@ -1253,5 +1412,5 @@
         textInputEvents1.add(new Event(eventType1, eventTarget1));
         eventType1 = new TextInput("enteredText1", textInputEvents1);
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventType eventType2 = new StringEventType("eventType2");
@@ -1259,7 +1418,7 @@
         textInputEvents2.add(new Event(eventType2, eventTarget1));
         eventType2 = new TextInput("enteredText1", textInputEvents2);
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget1);
-
-        assertSyntacticallyEqual(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget1);
+
+        assertSyntacticallyEqual(new GUIEventTaskComparisonRule(), task1, task2);
     }
     
@@ -1269,6 +1428,4 @@
     @Test
     public void test_compare_TextInput_04() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new StringEventType("eventType1");
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
@@ -1276,5 +1433,5 @@
         textInputEvents1.add(new Event(eventType1, eventTarget1));
         eventType1 = new TextInput("enteredText1", textInputEvents1);
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventType eventType2 = new StringEventType("eventType2");
@@ -1282,7 +1439,7 @@
         textInputEvents2.add(new Event(eventType2, eventTarget1));
         eventType2 = new TextInput("enteredText2", textInputEvents2);
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget1);
-
-        assertSemanticallyEqual(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget1);
+
+        assertSemanticallyEqual(new GUIEventTaskComparisonRule(), task1, task2);
     }
     
@@ -1292,6 +1449,4 @@
     @Test
     public void test_compare_TextInput_05() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new StringEventType("eventType1");
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
@@ -1299,10 +1454,10 @@
         textInputEvents1.add(new Event(eventType1, eventTarget1));
         eventType1 = new TextInput("enteredText1", textInputEvents1);
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
-        
-        IEventTarget eventTarget2 = new DummyGUIElement("elem2");
-        ITask task2 = taskFactory.createNewEventTask(eventType1, eventTarget2);
-
-        assertUnequal(task1, task2);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+        
+        IEventTarget eventTarget2 = new DummyGUIElement("elem2");
+        ITask task2 = createNewEventTask(eventType1, eventTarget2);
+
+        assertUnequal(new GUIEventTaskComparisonRule(), task1, task2);
     }
 
@@ -1312,11 +1467,9 @@
     @Test
     public void test_compare_TextSelection_01() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new TextSelection();
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
-        
-        assertLexicallyEqual(task1, task1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+        
+        assertLexicallyEqual(new GUIEventTaskComparisonRule(), task1, task1);
     }
 
@@ -1326,14 +1479,12 @@
     @Test
     public void test_compare_TextSelection_02() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new TextSelection();
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
 
         IEventType eventType2 = new TextSelection();
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget1);
-        
-        assertLexicallyEqual(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget1);
+        
+        assertLexicallyEqual(new GUIEventTaskComparisonRule(), task1, task2);
     }
 
@@ -1343,15 +1494,13 @@
     @Test
     public void test_compare_TextSelection_03() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new TextSelection();
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
 
         IEventType eventType2 = new TextSelection();
         IEventTarget eventTarget2 = new DummyGUIElement("elem2");
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget2);
-        
-        assertUnequal(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget2);
+        
+        assertUnequal(new GUIEventTaskComparisonRule(), task1, task2);
     }
 
@@ -1361,11 +1510,9 @@
     @Test
     public void test_compare_ValueSelection_01() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new ValueSelection<String>("value1");
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
-        
-        assertLexicallyEqual(task1, task1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+        
+        assertLexicallyEqual(new GUIEventTaskComparisonRule(), task1, task1);
     }
 
@@ -1375,14 +1522,12 @@
     @Test
     public void test_compare_ValueSelection_02() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new ValueSelection<String>("value1");
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventType eventType2 = new ValueSelection<String>("value1");
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget1);
-        
-        assertLexicallyEqual(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget1);
+        
+        assertLexicallyEqual(new GUIEventTaskComparisonRule(), task1, task2);
     }
 
@@ -1392,14 +1537,12 @@
     @Test
     public void test_compare_ValueSelection_03() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new ValueSelection<String>("value1");
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventType eventType2 = new ValueSelection<String>("value2");
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget1);
-        
-        assertSemanticallyEqual(task1, task2);
+        ITask task2 = createNewEventTask(eventType2, eventTarget1);
+        
+        assertSemanticallyEqual(new GUIEventTaskComparisonRule(), task1, task2);
     }
 
@@ -1409,83 +1552,13 @@
     @Test
     public void test_compare_ValueSelection_04() {
-        ITaskFactory taskFactory = new TaskFactory();
-        
         IEventType eventType1 = new ValueSelection<String>("value1");
         IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
         
         IEventType eventType2 = new ValueSelection<String>("value1");
         IEventTarget eventTarget2 = new DummyGUIElement("elem2");
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget2);
-        
-        assertUnequal(task1, task2);
-    }
-    
-    /**
-     *
-     */
-    private void assertLexicallyEqual(ITask task1, ITask task2) {
-        GUIEventTaskComparisonRule rule = new GUIEventTaskComparisonRule();
-        
-        assertEquals(TaskEquality.LEXICALLY_EQUAL, rule.compare(task1, task2));
-        assertTrue(rule.areLexicallyEqual(task1, task2));
-        assertTrue(rule.areSyntacticallyEqual(task1, task2));
-        assertTrue(rule.areSemanticallyEqual(task1, task2));
-
-        assertEquals(TaskEquality.LEXICALLY_EQUAL, rule.compare(task2, task1));
-        assertTrue(rule.areLexicallyEqual(task2, task1));
-        assertTrue(rule.areSyntacticallyEqual(task2, task1));
-        assertTrue(rule.areSemanticallyEqual(task2, task1));
-    }
-
-    /**
-     *
-     */
-    private void assertSyntacticallyEqual(ITask task1, ITask task2) {
-        GUIEventTaskComparisonRule rule = new GUIEventTaskComparisonRule();
-        
-        assertEquals(TaskEquality.SYNTACTICALLY_EQUAL, rule.compare(task1, task2));
-        assertFalse(rule.areLexicallyEqual(task1, task2));
-        assertTrue(rule.areSyntacticallyEqual(task1, task2));
-        assertTrue(rule.areSemanticallyEqual(task1, task2));
-
-        assertEquals(TaskEquality.SYNTACTICALLY_EQUAL, rule.compare(task2, task1));
-        assertFalse(rule.areLexicallyEqual(task2, task1));
-        assertTrue(rule.areSyntacticallyEqual(task2, task1));
-        assertTrue(rule.areSemanticallyEqual(task2, task1));
-    }
-
-    /**
-     *
-     */
-    private void assertSemanticallyEqual(ITask task1, ITask task2) {
-        GUIEventTaskComparisonRule rule = new GUIEventTaskComparisonRule();
-        
-        assertEquals(TaskEquality.SEMANTICALLY_EQUAL, rule.compare(task1, task2));
-        assertFalse(rule.areLexicallyEqual(task1, task2));
-        assertFalse(rule.areSyntacticallyEqual(task1, task2));
-        assertTrue(rule.areSemanticallyEqual(task1, task2));
-
-        assertEquals(TaskEquality.SEMANTICALLY_EQUAL, rule.compare(task2, task1));
-        assertFalse(rule.areLexicallyEqual(task2, task1));
-        assertFalse(rule.areSyntacticallyEqual(task2, task1));
-        assertTrue(rule.areSemanticallyEqual(task2, task1));
-    }
-
-    /**
-     *
-     */
-    private void assertUnequal(ITask task1, ITask task2) {
-        GUIEventTaskComparisonRule rule = new GUIEventTaskComparisonRule();
-        
-        assertEquals(TaskEquality.UNEQUAL, rule.compare(task1, task2));
-        assertFalse(rule.areLexicallyEqual(task1, task2));
-        assertFalse(rule.areSyntacticallyEqual(task1, task2));
-        assertFalse(rule.areSemanticallyEqual(task1, task2));
-
-        assertEquals(TaskEquality.UNEQUAL, rule.compare(task2, task1));
-        assertFalse(rule.areLexicallyEqual(task2, task1));
-        assertFalse(rule.areSyntacticallyEqual(task2, task1));
-        assertFalse(rule.areSemanticallyEqual(task2, task1));
+        ITask task2 = createNewEventTask(eventType2, eventTarget2);
+        
+        assertUnequal(new GUIEventTaskComparisonRule(), task1, task2);
     }
 }
Index: trunk/autoquest-core-tasktrees-test/src/test/java/de/ugoe/cs/autoquest/tasktrees/taskequality/IterationComparisonRuleTest.java
===================================================================
--- trunk/autoquest-core-tasktrees-test/src/test/java/de/ugoe/cs/autoquest/tasktrees/taskequality/IterationComparisonRuleTest.java	(revision 1285)
+++ trunk/autoquest-core-tasktrees-test/src/test/java/de/ugoe/cs/autoquest/tasktrees/taskequality/IterationComparisonRuleTest.java	(revision 1294)
@@ -23,12 +23,7 @@
 import de.ugoe.cs.autoquest.eventcore.StringEventType;
 import de.ugoe.cs.autoquest.tasktrees.taskequality.IterationComparisonRule;
-import de.ugoe.cs.autoquest.tasktrees.taskequality.TaskEquality;
 import de.ugoe.cs.autoquest.tasktrees.treeifc.IIteration;
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ISelection;
-import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskBuilder;
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITask;
-import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskFactory;
-import de.ugoe.cs.autoquest.tasktrees.treeimpl.TaskBuilder;
-import de.ugoe.cs.autoquest.tasktrees.treeimpl.TaskFactory;
 import de.ugoe.cs.autoquest.test.DummyGUIElement;
 
@@ -36,14 +31,162 @@
  * @author Patrick Harms
  */
-public class IterationComparisonRuleTest {
-
-    /**
-     *
-     */
-    @Test
-    public void test() {
-        ITaskFactory taskFactory = new TaskFactory();
-        ITaskBuilder treeBuilder = new TaskBuilder();
-        
+public class IterationComparisonRuleTest extends AbstractComparisonRuleTest {
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_01() {
+        IterationComparisonRule rule = new IterationComparisonRule();
+        
+        ITask task1 = createNewIteration();
+        
+        assertTrue(rule.isApplicable(task1, task1));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_02() {
+        IterationComparisonRule rule = new IterationComparisonRule();
+
+        ITask task1 = createNewIteration();
+        ITask task2 = createNewIteration();
+        
+        assertTrue(rule.isApplicable(task1, task2));
+        assertTrue(rule.isApplicable(task2, task1));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_03() {
+        IterationComparisonRule rule = new IterationComparisonRule();
+
+        ITask task1 = createNewIteration();
+        ITask task2 = createNewSequence();
+        
+        assertFalse(rule.isApplicable(task1, task2));
+        assertFalse(rule.isApplicable(task2, task1));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_04() {
+        IterationComparisonRule rule = new IterationComparisonRule();
+
+        ITask task1 = createNewIteration();
+        ITask task2 = createNewSelection();
+        
+        assertFalse(rule.isApplicable(task1, task2));
+        assertFalse(rule.isApplicable(task2, task1));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_05() {
+        IterationComparisonRule rule = new IterationComparisonRule();
+
+        ITask task1 = createNewIteration();
+        ITask task2 = createNewOptional();
+        
+        assertFalse(rule.isApplicable(task1, task2));
+        assertFalse(rule.isApplicable(task2, task1));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_06() {
+        IterationComparisonRule rule = new IterationComparisonRule();
+        
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+
+        ITask task1 = createNewIteration();
+        ITask task2 = createNewEventTask(eventType1, eventTarget1);
+        
+        assertFalse(rule.isApplicable(task1, task2));
+        assertFalse(rule.isApplicable(task2, task1));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_compare_01() {
+        IterationComparisonRule rule = new IterationComparisonRule();
+        
+        IIteration iteration1 = createNewIteration();
+        
+        assertLexicallyEqual(rule, iteration1, iteration1);
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_compare_02() {
+        IterationComparisonRule rule = new IterationComparisonRule();
+        
+        IIteration iteration1 = createNewIteration();
+        IIteration iteration2 = createNewIteration();
+        
+        assertLexicallyEqual(rule, iteration1, iteration2);
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_compare_03() {
+        IterationComparisonRule rule = new IterationComparisonRule();
+        
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+        
+        IIteration iteration1 = createNewIteration();
+        IIteration iteration2 = createNewIteration();
+        
+        setMarkedTask(iteration1, task1);
+        
+        assertUnequal(rule, iteration1, iteration2);
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_compare_04() {
+        IterationComparisonRule rule = new IterationComparisonRule();
+        
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+        
+        IIteration iteration1 = createNewIteration();
+        IIteration iteration2 = createNewIteration();
+        
+        setMarkedTask(iteration1, task1);
+        setMarkedTask(iteration2, task1);
+        
+        assertLexicallyEqual(rule, iteration1, iteration2);
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_compare_05() {
         IterationComparisonRule rule = new IterationComparisonRule();
         
@@ -54,60 +197,95 @@
         IEventTarget eventTarget2 = new DummyGUIElement("elem2");
 
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget2);
-        
-        assertFalse(rule.isApplicable(task1, task2));
-        
-        IIteration iteration1 = taskFactory.createNewIteration();
-        assertEquals(TaskEquality.LEXICALLY_EQUAL, rule.compare(iteration1, iteration1));
-
-        IIteration iteration2 = taskFactory.createNewIteration();
-        
-        assertEquals(TaskEquality.LEXICALLY_EQUAL, rule.compare(iteration1, iteration2));
-        assertEquals(TaskEquality.LEXICALLY_EQUAL, rule.compare(iteration2, iteration1));
-        
-        treeBuilder.setMarkedTask(iteration1, task1);
-        
-        assertEquals(TaskEquality.UNEQUAL, rule.compare(iteration1, iteration2));
-        assertEquals(TaskEquality.UNEQUAL, rule.compare(iteration2, iteration1));
-        
-        treeBuilder.setMarkedTask(iteration2, task1);
-        
-        assertEquals(TaskEquality.LEXICALLY_EQUAL, rule.compare(iteration1, iteration2));
-        assertEquals(TaskEquality.LEXICALLY_EQUAL, rule.compare(iteration2, iteration1));
-        
-        treeBuilder.setMarkedTask(iteration1, task2);
-        
-        assertEquals(TaskEquality.UNEQUAL, rule.compare(iteration1, iteration2));
-        assertEquals(TaskEquality.UNEQUAL, rule.compare(iteration2, iteration1));
-        
-        treeBuilder.setMarkedTask(iteration2, task2);
-        
-        assertEquals(TaskEquality.LEXICALLY_EQUAL, rule.compare(iteration1, iteration2));
-        assertEquals(TaskEquality.LEXICALLY_EQUAL, rule.compare(iteration2, iteration1));
-        
-        ISelection selection1 = taskFactory.createNewSelection();
-        treeBuilder.addChild(selection1, task2);
-        treeBuilder.setMarkedTask(iteration1, selection1);
-        
-        assertEquals(TaskEquality.LEXICALLY_EQUAL, rule.compare(iteration1, iteration2));
-        assertEquals(TaskEquality.LEXICALLY_EQUAL, rule.compare(iteration2, iteration1));
-        
-        ISelection selection2 = taskFactory.createNewSelection();
-        treeBuilder.addChild(selection2, task2);
-        treeBuilder.setMarkedTask(iteration2, selection2);
-        
-        assertEquals(TaskEquality.LEXICALLY_EQUAL, rule.compare(iteration1, iteration2));
-        assertEquals(TaskEquality.LEXICALLY_EQUAL, rule.compare(iteration2, iteration1));
-        
-        assertFalse(rule.isApplicable(iteration1, selection1));
-        assertFalse(rule.isApplicable(selection1, iteration1));
-        assertFalse(rule.isApplicable(iteration2, selection1));
-        assertFalse(rule.isApplicable(selection1, iteration2));
-
-        assertFalse(rule.isApplicable(iteration1, selection2));
-        assertFalse(rule.isApplicable(selection2, iteration1));
-        assertFalse(rule.isApplicable(iteration2, selection2));
-        assertFalse(rule.isApplicable(selection2, iteration2));
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+        ITask task2 = createNewEventTask(eventType2, eventTarget2);
+        
+        IIteration iteration1 = createNewIteration();
+        IIteration iteration2 = createNewIteration();
+        
+        setMarkedTask(iteration1, task1);
+        setMarkedTask(iteration1, task2);
+        
+        assertUnequal(rule, iteration1, iteration2);
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_compare_06() {
+        IterationComparisonRule rule = new IterationComparisonRule();
+        
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+        
+        IIteration iteration1 = createNewIteration();
+        IIteration iteration2 = createNewIteration();
+        
+        ISelection selection1 = createNewSelection();
+        addChild(selection1, task1);
+        setMarkedTask(iteration1, selection1);
+        
+        setMarkedTask(iteration2, task1);
+        
+        assertLexicallyEqual(rule, iteration1, iteration2);
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_compare_07() {
+        IterationComparisonRule rule = new IterationComparisonRule();
+        
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+        
+        IIteration iteration1 = createNewIteration();
+        IIteration iteration2 = createNewIteration();
+        
+        ISelection selection1 = createNewSelection();
+        addChild(selection1, task1);
+        setMarkedTask(iteration1, selection1);
+        
+        ISelection selection2 = createNewSelection();
+        addChild(selection2, task1);
+        setMarkedTask(iteration2, selection2);
+        
+        assertLexicallyEqual(rule, iteration1, iteration2);
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_compare_08() {
+        IterationComparisonRule rule = new IterationComparisonRule();
+        
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+
+        IEventType eventType2 = new StringEventType("eventType2");
+        IEventTarget eventTarget2 = new DummyGUIElement("elem2");
+
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+        ITask task2 = createNewEventTask(eventType2, eventTarget2);
+        
+        IIteration iteration1 = createNewIteration();
+        IIteration iteration2 = createNewIteration();
+        
+        ISelection selection1 = createNewSelection();
+        addChild(selection1, task1);
+        addChild(selection1, task2);
+        setMarkedTask(iteration1, selection1);
+
+        ISelection selection2 = createNewSelection();
+        addChild(selection2, task2);
+        setMarkedTask(iteration2, selection2);
+        
+        assertLexicallyEqual(rule, iteration1, iteration2);
     }
 
Index: trunk/autoquest-core-tasktrees-test/src/test/java/de/ugoe/cs/autoquest/tasktrees/taskequality/SelectionComparisonRuleTest.java
===================================================================
--- trunk/autoquest-core-tasktrees-test/src/test/java/de/ugoe/cs/autoquest/tasktrees/taskequality/SelectionComparisonRuleTest.java	(revision 1285)
+++ trunk/autoquest-core-tasktrees-test/src/test/java/de/ugoe/cs/autoquest/tasktrees/taskequality/SelectionComparisonRuleTest.java	(revision 1294)
@@ -22,13 +22,7 @@
 import de.ugoe.cs.autoquest.eventcore.IEventType;
 import de.ugoe.cs.autoquest.eventcore.StringEventType;
-import de.ugoe.cs.autoquest.tasktrees.taskequality.TaskEquality;
 import de.ugoe.cs.autoquest.tasktrees.taskequality.SelectionComparisonRule;
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ISelection;
-import de.ugoe.cs.autoquest.tasktrees.treeifc.ISequence;
-import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskBuilder;
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITask;
-import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskFactory;
-import de.ugoe.cs.autoquest.tasktrees.treeimpl.TaskBuilder;
-import de.ugoe.cs.autoquest.tasktrees.treeimpl.TaskFactory;
 import de.ugoe.cs.autoquest.test.DummyGUIElement;
 
@@ -36,14 +30,161 @@
  * @author Patrick Harms
  */
-public class SelectionComparisonRuleTest {
-
-    /**
-     * 
-     */
-    @Test
-    public void test() {
-        ITaskFactory taskFactory = new TaskFactory();
-        ITaskBuilder treeBuilder = new TaskBuilder();
-        
+public class SelectionComparisonRuleTest extends AbstractComparisonRuleTest {
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_01() {
+        SelectionComparisonRule rule = new SelectionComparisonRule();
+        
+        ITask task1 = createNewSelection();
+        
+        assertTrue(rule.isApplicable(task1, task1));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_02() {
+        SelectionComparisonRule rule = new SelectionComparisonRule();
+
+        ITask task1 = createNewSelection();
+        ITask task2 = createNewSelection();
+        
+        assertTrue(rule.isApplicable(task1, task2));
+        assertTrue(rule.isApplicable(task2, task1));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_03() {
+        SelectionComparisonRule rule = new SelectionComparisonRule();
+
+        ITask task1 = createNewSelection();
+        ITask task2 = createNewSequence();
+        
+        assertFalse(rule.isApplicable(task1, task2));
+        assertFalse(rule.isApplicable(task2, task1));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_04() {
+        SelectionComparisonRule rule = new SelectionComparisonRule();
+
+        ITask task1 = createNewSelection();
+        ITask task2 = createNewIteration();
+        
+        assertFalse(rule.isApplicable(task1, task2));
+        assertFalse(rule.isApplicable(task2, task1));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_05() {
+        SelectionComparisonRule rule = new SelectionComparisonRule();
+
+        ITask task1 = createNewSelection();
+        ITask task2 = createNewOptional();
+        
+        assertFalse(rule.isApplicable(task1, task2));
+        assertFalse(rule.isApplicable(task2, task1));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_06() {
+        SelectionComparisonRule rule = new SelectionComparisonRule();
+        
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+
+        ITask task1 = createNewSelection();
+        ITask task2 = createNewEventTask(eventType1, eventTarget1);
+        
+        assertFalse(rule.isApplicable(task1, task2));
+        assertFalse(rule.isApplicable(task2, task1));
+    }
+
+    /**
+     * 
+     */
+    @Test
+    public void test_compare_01() {
+        SelectionComparisonRule rule = new SelectionComparisonRule();
+        
+        ISelection selection1 = createNewSelection();
+        assertLexicallyEqual(rule, selection1, selection1);
+    }
+
+    /**
+     * 
+     */
+    @Test
+    public void test_compare_02() {
+        SelectionComparisonRule rule = new SelectionComparisonRule();
+        
+        ISelection selection1 = createNewSelection();
+        ISelection selection2 = createNewSelection();
+        
+        assertLexicallyEqual(rule, selection1, selection2);
+    }
+
+    /**
+     * 
+     */
+    @Test
+    public void test_compare_03() {
+        SelectionComparisonRule rule = new SelectionComparisonRule();
+        
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+        
+        ISelection selection1 = createNewSelection();
+        ISelection selection2 = createNewSelection();
+        
+        addChild(selection1, task1);
+        
+        assertUnequal(rule, selection1, selection2);
+    }
+
+    /**
+     * 
+     */
+    @Test
+    public void test_compare_04() {
+        SelectionComparisonRule rule = new SelectionComparisonRule();
+        
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+        
+        ISelection selection1 = createNewSelection();
+        ISelection selection2 = createNewSelection();
+        
+        addChild(selection1, task1);
+        addChild(selection2, task1);
+        
+        assertLexicallyEqual(rule, selection1, selection2);
+    }
+
+    /**
+     * 
+     */
+    @Test
+    public void test_compare_05() {
         SelectionComparisonRule rule = new SelectionComparisonRule();
         
@@ -54,54 +195,44 @@
         IEventTarget eventTarget2 = new DummyGUIElement("elem2");
 
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget2);
-        
-        assertFalse(rule.isApplicable(task1, task2));
-        
-        ISelection selection1 = taskFactory.createNewSelection();
-        assertEquals(TaskEquality.LEXICALLY_EQUAL, rule.compare(selection1, selection1));
-
-        ISelection selection2 = taskFactory.createNewSelection();
-        
-        assertEquals(TaskEquality.LEXICALLY_EQUAL, rule.compare(selection1, selection2));
-        assertEquals(TaskEquality.LEXICALLY_EQUAL, rule.compare(selection2, selection1));
-        
-        treeBuilder.addChild(selection1, task1);
-        
-        assertEquals(TaskEquality.UNEQUAL, rule.compare(selection1, selection2));
-        assertEquals(TaskEquality.UNEQUAL, rule.compare(selection2, selection1));
-        
-        treeBuilder.addChild(selection2, task1);
-        
-        assertEquals(TaskEquality.LEXICALLY_EQUAL, rule.compare(selection1, selection2));
-        assertEquals(TaskEquality.LEXICALLY_EQUAL, rule.compare(selection2, selection1));
-        
-        treeBuilder.addChild(selection1, task2);
-        
-        assertEquals(TaskEquality.UNEQUAL, rule.compare(selection1, selection2));
-        assertEquals(TaskEquality.UNEQUAL, rule.compare(selection2, selection1));
-        
-        treeBuilder.addChild(selection2, task2);
-        
-        assertEquals(TaskEquality.LEXICALLY_EQUAL, rule.compare(selection1, selection2));
-        assertEquals(TaskEquality.LEXICALLY_EQUAL, rule.compare(selection2, selection1));
-        
-        ISelection selection3 = taskFactory.createNewSelection();
-        treeBuilder.addChild(selection3, task2);
-        treeBuilder.addChild(selection3, task1);
-        
-        assertEquals(TaskEquality.LEXICALLY_EQUAL, rule.compare(selection1, selection3));
-        assertEquals(TaskEquality.LEXICALLY_EQUAL, rule.compare(selection3, selection1));
-        
-        assertEquals(TaskEquality.LEXICALLY_EQUAL, rule.compare(selection2, selection3));
-        assertEquals(TaskEquality.LEXICALLY_EQUAL, rule.compare(selection3, selection2));
-
-        ISequence sequence = taskFactory.createNewSequence();
-        assertFalse(rule.isApplicable(selection1, sequence));
-        assertFalse(rule.isApplicable(sequence, selection1));
-        assertFalse(rule.isApplicable(selection2, sequence));
-        assertFalse(rule.isApplicable(sequence, selection2));
-        assertFalse(rule.isApplicable(selection3, sequence));
-        assertFalse(rule.isApplicable(sequence, selection3));
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+        ITask task2 = createNewEventTask(eventType2, eventTarget2);
+        
+        ISelection selection1 = createNewSelection();
+        ISelection selection2 = createNewSelection();
+        
+        addChild(selection1, task1);
+        addChild(selection2, task2);
+        
+        assertUnequal(rule, selection1, selection2);
+    }
+
+    /**
+     * 
+     */
+    @Test
+    public void test_compare_06() {
+        SelectionComparisonRule rule = new SelectionComparisonRule();
+        
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+
+        IEventType eventType2 = new StringEventType("eventType2");
+        IEventTarget eventTarget2 = new DummyGUIElement("elem2");
+
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+        ITask task2 = createNewEventTask(eventType2, eventTarget2);
+        
+        ISelection selection1 = createNewSelection();
+        ISelection selection2 = createNewSelection();
+        
+        addChild(selection1, task1);
+        addChild(selection2, task2);
+        
+        ISelection selection3 = createNewSelection();
+        addChild(selection3, task1);
+        assertLexicallyEqual(rule, selection1, selection3);
+        
+        addChild(selection3, task2);
+        assertLexicallyEqual(rule, selection2, selection3);
     }
 
Index: trunk/autoquest-core-tasktrees-test/src/test/java/de/ugoe/cs/autoquest/tasktrees/taskequality/SequenceComparisonRuleTest.java
===================================================================
--- trunk/autoquest-core-tasktrees-test/src/test/java/de/ugoe/cs/autoquest/tasktrees/taskequality/SequenceComparisonRuleTest.java	(revision 1285)
+++ trunk/autoquest-core-tasktrees-test/src/test/java/de/ugoe/cs/autoquest/tasktrees/taskequality/SequenceComparisonRuleTest.java	(revision 1294)
@@ -22,13 +22,7 @@
 import de.ugoe.cs.autoquest.eventcore.IEventType;
 import de.ugoe.cs.autoquest.eventcore.StringEventType;
-import de.ugoe.cs.autoquest.tasktrees.taskequality.TaskEquality;
 import de.ugoe.cs.autoquest.tasktrees.taskequality.SequenceComparisonRule;
-import de.ugoe.cs.autoquest.tasktrees.treeifc.ISelection;
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ISequence;
-import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskBuilder;
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITask;
-import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskFactory;
-import de.ugoe.cs.autoquest.tasktrees.treeimpl.TaskBuilder;
-import de.ugoe.cs.autoquest.tasktrees.treeimpl.TaskFactory;
 import de.ugoe.cs.autoquest.test.DummyGUIElement;
 
@@ -36,14 +30,161 @@
  * @author Patrick Harms
  */
-public class SequenceComparisonRuleTest {
-
-    /**
-     * 
-     */
-    @Test
-    public void test() {
-        ITaskFactory taskFactory = new TaskFactory();
-        ITaskBuilder treeBuilder = new TaskBuilder();
-        
+public class SequenceComparisonRuleTest extends AbstractComparisonRuleTest {
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_01() {
+        SequenceComparisonRule rule = new SequenceComparisonRule();
+        
+        ITask task1 = createNewSequence();
+        
+        assertTrue(rule.isApplicable(task1, task1));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_02() {
+        SequenceComparisonRule rule = new SequenceComparisonRule();
+
+        ITask task1 = createNewSequence();
+        ITask task2 = createNewSequence();
+        
+        assertTrue(rule.isApplicable(task1, task2));
+        assertTrue(rule.isApplicable(task2, task1));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_03() {
+        SequenceComparisonRule rule = new SequenceComparisonRule();
+
+        ITask task1 = createNewSequence();
+        ITask task2 = createNewSelection();
+        
+        assertFalse(rule.isApplicable(task1, task2));
+        assertFalse(rule.isApplicable(task2, task1));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_04() {
+        SequenceComparisonRule rule = new SequenceComparisonRule();
+
+        ITask task1 = createNewSequence();
+        ITask task2 = createNewIteration();
+        
+        assertFalse(rule.isApplicable(task1, task2));
+        assertFalse(rule.isApplicable(task2, task1));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_05() {
+        SequenceComparisonRule rule = new SequenceComparisonRule();
+
+        ITask task1 = createNewSequence();
+        ITask task2 = createNewOptional();
+        
+        assertFalse(rule.isApplicable(task1, task2));
+        assertFalse(rule.isApplicable(task2, task1));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_06() {
+        SequenceComparisonRule rule = new SequenceComparisonRule();
+        
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+
+        ITask task1 = createNewSequence();
+        ITask task2 = createNewEventTask(eventType1, eventTarget1);
+        
+        assertFalse(rule.isApplicable(task1, task2));
+        assertFalse(rule.isApplicable(task2, task1));
+    }
+
+    /**
+     * 
+     */
+    @Test
+    public void test_compare_01() {
+        SequenceComparisonRule rule = new SequenceComparisonRule();
+        
+        ISequence sequence1 = createNewSequence();
+        assertLexicallyEqual(rule, sequence1, sequence1);
+    }
+
+    /**
+     * 
+     */
+    @Test
+    public void test_compare_02() {
+        SequenceComparisonRule rule = new SequenceComparisonRule();
+        
+        ISequence sequence1 = createNewSequence();
+        ISequence sequence2 = createNewSequence();
+        
+        assertLexicallyEqual(rule, sequence1, sequence2);
+    }
+
+    /**
+     * 
+     */
+    @Test
+    public void test_compare_03() {
+        SequenceComparisonRule rule = new SequenceComparisonRule();
+        
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+        
+        ISequence sequence1 = createNewSequence();
+        ISequence sequence2 = createNewSequence();
+        
+        addChild(sequence1, task1);
+        
+        assertUnequal(rule, sequence1, sequence2);
+    }
+
+    /**
+     * 
+     */
+    @Test
+    public void test_compare_04() {
+        SequenceComparisonRule rule = new SequenceComparisonRule();
+        
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+        
+        ISequence sequence1 = createNewSequence();
+        ISequence sequence2 = createNewSequence();
+        
+        addChild(sequence1, task1);
+        addChild(sequence2, task1);
+        
+        assertLexicallyEqual(rule, sequence1, sequence2);
+    }
+
+    /**
+     * 
+     */
+    @Test
+    public void test_compare_05() {
         SequenceComparisonRule rule = new SequenceComparisonRule();
         
@@ -54,53 +195,72 @@
         IEventTarget eventTarget2 = new DummyGUIElement("elem2");
 
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
-        ITask task2 = taskFactory.createNewEventTask(eventType2, eventTarget2);
-        
-        assertFalse(rule.isApplicable(task1, task2));
-        
-        ISequence sequence1 = taskFactory.createNewSequence();
-        assertEquals(TaskEquality.LEXICALLY_EQUAL, rule.compare(sequence1, sequence1));
-
-        ISequence sequence2 = taskFactory.createNewSequence();
-        
-        assertEquals(TaskEquality.LEXICALLY_EQUAL, rule.compare(sequence1, sequence2));
-        assertEquals(TaskEquality.LEXICALLY_EQUAL, rule.compare(sequence2, sequence1));
-        
-        treeBuilder.addChild(sequence1, task1);
-        
-        assertEquals(TaskEquality.UNEQUAL, rule.compare(sequence1, sequence2));
-        assertEquals(TaskEquality.UNEQUAL, rule.compare(sequence2, sequence1));
-        
-        treeBuilder.addChild(sequence2, task1);
-        
-        assertEquals(TaskEquality.LEXICALLY_EQUAL, rule.compare(sequence1, sequence2));
-        assertEquals(TaskEquality.LEXICALLY_EQUAL, rule.compare(sequence2, sequence1));
-        
-        treeBuilder.addChild(sequence1, task2);
-        
-        assertEquals(TaskEquality.UNEQUAL, rule.compare(sequence1, sequence2));
-        assertEquals(TaskEquality.UNEQUAL, rule.compare(sequence2, sequence1));
-        
-        treeBuilder.addChild(sequence2, task2);
-        
-        assertEquals(TaskEquality.LEXICALLY_EQUAL, rule.compare(sequence1, sequence2));
-        assertEquals(TaskEquality.LEXICALLY_EQUAL, rule.compare(sequence2, sequence1));
-        
-        ISequence sequence3 = taskFactory.createNewSequence();
-        treeBuilder.addChild(sequence3, task2);
-        treeBuilder.addChild(sequence3, task1);
-        
-        assertEquals(TaskEquality.UNEQUAL, rule.compare(sequence1, sequence3));
-        assertEquals(TaskEquality.UNEQUAL, rule.compare(sequence3, sequence1));
-        assertEquals(TaskEquality.UNEQUAL, rule.compare(sequence2, sequence3));
-        assertEquals(TaskEquality.UNEQUAL, rule.compare(sequence3, sequence2));
-
-        ISelection selection = taskFactory.createNewSelection();
-        assertFalse(rule.isApplicable(sequence1, selection));
-        assertFalse(rule.isApplicable(selection, sequence1));
-        assertFalse(rule.isApplicable(sequence2, selection));
-        assertFalse(rule.isApplicable(selection, sequence2));
-        assertFalse(rule.isApplicable(sequence3, selection));
-        assertFalse(rule.isApplicable(selection, sequence3));
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+        ITask task2 = createNewEventTask(eventType2, eventTarget2);
+        
+        ISequence sequence1 = createNewSequence();
+        ISequence sequence2 = createNewSequence();
+        
+        addChild(sequence1, task1);
+        addChild(sequence2, task1);
+        
+        addChild(sequence1, task2);
+        
+        assertUnequal(rule, sequence1, sequence2);
+    }
+
+    /**
+     * 
+     */
+    @Test
+    public void test_compare_06() {
+        SequenceComparisonRule rule = new SequenceComparisonRule();
+        
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+
+        IEventType eventType2 = new StringEventType("eventType2");
+        IEventTarget eventTarget2 = new DummyGUIElement("elem2");
+
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+        ITask task2 = createNewEventTask(eventType2, eventTarget2);
+        
+        ISequence sequence1 = createNewSequence();
+        ISequence sequence2 = createNewSequence();
+        
+        addChild(sequence1, task1);
+        addChild(sequence2, task1);
+        
+        addChild(sequence1, task2);
+        addChild(sequence2, task2);
+        
+        assertLexicallyEqual(rule, sequence1, sequence2);
+    }
+
+    /**
+     * 
+     */
+    @Test
+    public void test_compare_07() {
+        SequenceComparisonRule rule = new SequenceComparisonRule();
+        
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+
+        IEventType eventType2 = new StringEventType("eventType2");
+        IEventTarget eventTarget2 = new DummyGUIElement("elem2");
+
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+        ITask task2 = createNewEventTask(eventType2, eventTarget2);
+        
+        ISequence sequence1 = createNewSequence();
+        ISequence sequence2 = createNewSequence();
+        
+        addChild(sequence1, task1);
+        addChild(sequence1, task2);
+        
+        addChild(sequence2, task2);
+        addChild(sequence2, task1);
+        
+        assertUnequal(rule, sequence1, sequence2);
     }
 
Index: trunk/autoquest-core-tasktrees-test/src/test/java/de/ugoe/cs/autoquest/tasktrees/taskequality/TaskAndIterationComparisonRuleTest.java
===================================================================
--- trunk/autoquest-core-tasktrees-test/src/test/java/de/ugoe/cs/autoquest/tasktrees/taskequality/TaskAndIterationComparisonRuleTest.java	(revision 1285)
+++ trunk/autoquest-core-tasktrees-test/src/test/java/de/ugoe/cs/autoquest/tasktrees/taskequality/TaskAndIterationComparisonRuleTest.java	(revision 1294)
@@ -23,12 +23,7 @@
 import de.ugoe.cs.autoquest.eventcore.StringEventType;
 import de.ugoe.cs.autoquest.tasktrees.taskequality.TaskAndIterationComparisonRule;
-import de.ugoe.cs.autoquest.tasktrees.taskequality.TaskEquality;
 import de.ugoe.cs.autoquest.tasktrees.treeifc.IIteration;
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ISelection;
-import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskBuilder;
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITask;
-import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskFactory;
-import de.ugoe.cs.autoquest.tasktrees.treeimpl.TaskBuilder;
-import de.ugoe.cs.autoquest.tasktrees.treeimpl.TaskFactory;
 import de.ugoe.cs.autoquest.test.DummyGUIElement;
 
@@ -36,38 +31,258 @@
  * @author Patrick Harms
  */
-public class TaskAndIterationComparisonRuleTest {
-
-    /**
-     *
-     */
-    @Test
-    public void test() {
-        ITaskFactory taskFactory = new TaskFactory();
-        ITaskBuilder treeBuilder = new TaskBuilder();
-        
-        TaskAndIterationComparisonRule rule = new TaskAndIterationComparisonRule();
-        
-        IEventType eventType1 = new StringEventType("eventType1");
-        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
-        
-        assertNull(rule.compare(task1, task1));
-        
-        IIteration iteration1 = taskFactory.createNewIteration();
-        assertNull(rule.compare(iteration1, iteration1));
-        assertNull(rule.compare(task1, iteration1));
-        assertNull(rule.compare(iteration1, task1));
-
-        treeBuilder.setMarkedTask(iteration1, task1);
-        
-        assertEquals(TaskEquality.LEXICALLY_EQUAL, rule.compare(iteration1, task1));
-        assertEquals(TaskEquality.LEXICALLY_EQUAL, rule.compare(task1, iteration1));
-        
-        ISelection selection1 = taskFactory.createNewSelection();
-        treeBuilder.addChild(selection1, task1);
-        treeBuilder.setMarkedTask(iteration1, selection1);
-        
-        assertEquals(TaskEquality.LEXICALLY_EQUAL, rule.compare(iteration1, task1));
-        assertEquals(TaskEquality.LEXICALLY_EQUAL, rule.compare(task1, iteration1));
+public class TaskAndIterationComparisonRuleTest extends AbstractComparisonRuleTest {
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_01() {
+        TaskAndIterationComparisonRule rule = new TaskAndIterationComparisonRule();
+        
+        ITask task1 = createNewSequence();
+        
+        assertFalse(rule.isApplicable(task1, task1));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_02() {
+        TaskAndIterationComparisonRule rule = new TaskAndIterationComparisonRule();
+        
+        ITask task1 = createNewSelection();
+        
+        assertFalse(rule.isApplicable(task1, task1));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_03() {
+        TaskAndIterationComparisonRule rule = new TaskAndIterationComparisonRule();
+        
+        ITask task1 = createNewIteration();
+        
+        assertFalse(rule.isApplicable(task1, task1));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_04() {
+        TaskAndIterationComparisonRule rule = new TaskAndIterationComparisonRule();
+        
+        ITask task1 = createNewOptional();
+        
+        assertFalse(rule.isApplicable(task1, task1));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_05() {
+        TaskAndIterationComparisonRule rule = new TaskAndIterationComparisonRule();
+        
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+        
+        assertFalse(rule.isApplicable(task1, task1));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_06() {
+        TaskAndIterationComparisonRule rule = new TaskAndIterationComparisonRule();
+
+        ITask task1 = createNewIteration();
+        ITask task2 = createNewSequence();
+        
+        assertTrue(rule.isApplicable(task1, task2));
+        assertTrue(rule.isApplicable(task2, task1));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_07() {
+        TaskAndIterationComparisonRule rule = new TaskAndIterationComparisonRule();
+
+        ITask task1 = createNewIteration();
+        ITask task2 = createNewSelection();
+        
+        assertTrue(rule.isApplicable(task1, task2));
+        assertTrue(rule.isApplicable(task2, task1));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_08() {
+        TaskAndIterationComparisonRule rule = new TaskAndIterationComparisonRule();
+
+        ITask task1 = createNewIteration();
+        ITask task2 = createNewOptional();
+        
+        assertTrue(rule.isApplicable(task1, task2));
+        assertTrue(rule.isApplicable(task2, task1));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_09() {
+        TaskAndIterationComparisonRule rule = new TaskAndIterationComparisonRule();
+
+        ITask task1 = createNewIteration();
+        
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+
+        ITask task2 = createNewEventTask(eventType1, eventTarget1);
+        
+        assertTrue(rule.isApplicable(task1, task2));
+        assertTrue(rule.isApplicable(task2, task1));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_10() {
+        TaskAndIterationComparisonRule rule = new TaskAndIterationComparisonRule();
+
+        ITask task1 = createNewSequence();
+        ITask task2 = createNewSelection();
+        
+        assertFalse(rule.isApplicable(task1, task2));
+        assertFalse(rule.isApplicable(task2, task1));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_11() {
+        TaskAndIterationComparisonRule rule = new TaskAndIterationComparisonRule();
+
+        ITask task1 = createNewSequence();
+        ITask task2 = createNewOptional();
+        
+        assertFalse(rule.isApplicable(task1, task2));
+        assertFalse(rule.isApplicable(task2, task1));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_12() {
+        TaskAndIterationComparisonRule rule = new TaskAndIterationComparisonRule();
+
+        ITask task1 = createNewSequence();
+        
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+
+        ITask task2 = createNewEventTask(eventType1, eventTarget1);
+        
+        assertFalse(rule.isApplicable(task1, task2));
+        assertFalse(rule.isApplicable(task2, task1));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_13() {
+        TaskAndIterationComparisonRule rule = new TaskAndIterationComparisonRule();
+
+        ITask task1 = createNewSelection();
+        ITask task2 = createNewOptional();
+        
+        assertFalse(rule.isApplicable(task1, task2));
+        assertFalse(rule.isApplicable(task2, task1));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_14() {
+        TaskAndIterationComparisonRule rule = new TaskAndIterationComparisonRule();
+
+        ITask task1 = createNewSelection();
+        
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+
+        ITask task2 = createNewEventTask(eventType1, eventTarget1);
+        
+        assertFalse(rule.isApplicable(task1, task2));
+        assertFalse(rule.isApplicable(task2, task1));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_compare_01() {
+        TaskAndIterationComparisonRule rule = new TaskAndIterationComparisonRule();
+        
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+        
+        IIteration iteration1 = createNewIteration();
+        
+        assertNullEquality(rule, iteration1, task1);
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_compare_02() {
+        TaskAndIterationComparisonRule rule = new TaskAndIterationComparisonRule();
+        
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+        
+        IIteration iteration1 = createNewIteration();
+        setMarkedTask(iteration1, task1);
+        
+        assertLexicallyEqual(rule, task1, iteration1);
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_compare_03() {
+        TaskAndIterationComparisonRule rule = new TaskAndIterationComparisonRule();
+        
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+        
+        IIteration iteration1 = createNewIteration();
+        
+        ISelection selection1 = createNewSelection();
+        addChild(selection1, task1);
+        setMarkedTask(iteration1, selection1);
+        
+        assertLexicallyEqual(rule, task1, iteration1);
     }
 
Index: trunk/autoquest-core-tasktrees-test/src/test/java/de/ugoe/cs/autoquest/tasktrees/taskequality/TaskAndSelectionComparisonRuleTest.java
===================================================================
--- trunk/autoquest-core-tasktrees-test/src/test/java/de/ugoe/cs/autoquest/tasktrees/taskequality/TaskAndSelectionComparisonRuleTest.java	(revision 1285)
+++ trunk/autoquest-core-tasktrees-test/src/test/java/de/ugoe/cs/autoquest/tasktrees/taskequality/TaskAndSelectionComparisonRuleTest.java	(revision 1294)
@@ -23,11 +23,6 @@
 import de.ugoe.cs.autoquest.eventcore.StringEventType;
 import de.ugoe.cs.autoquest.tasktrees.taskequality.TaskAndSelectionComparisonRule;
-import de.ugoe.cs.autoquest.tasktrees.taskequality.TaskEquality;
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ISelection;
-import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskBuilder;
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITask;
-import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskFactory;
-import de.ugoe.cs.autoquest.tasktrees.treeimpl.TaskBuilder;
-import de.ugoe.cs.autoquest.tasktrees.treeimpl.TaskFactory;
 import de.ugoe.cs.autoquest.test.DummyGUIElement;
 
@@ -35,39 +30,238 @@
  * @author Patrick Harms
  */
-public class TaskAndSelectionComparisonRuleTest {
-
-    /**
-     *
-     */
-    @Test
-    public void test() {
-        ITaskFactory taskFactory = new TaskFactory();
-        ITaskBuilder treeBuilder = new TaskBuilder();
-        
-        TaskAndSelectionComparisonRule rule = new TaskAndSelectionComparisonRule();
-        
-        IEventType eventType1 = new StringEventType("eventType1");
-        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
-        ITask task1 = taskFactory.createNewEventTask(eventType1, eventTarget1);
-        
-        assertNull(rule.compare(task1, task1));
-        
-        ISelection selection1 = taskFactory.createNewSelection();
-        assertNull(rule.compare(selection1, selection1));
-        assertNull(rule.compare(task1, selection1));
-        assertNull(rule.compare(selection1, task1));
-
-        treeBuilder.addChild(selection1, task1);
-        
-        assertEquals(TaskEquality.LEXICALLY_EQUAL, rule.compare(selection1, task1));
-        assertEquals(TaskEquality.LEXICALLY_EQUAL, rule.compare(task1, selection1));
-        
-        selection1 = taskFactory.createNewSelection();
-        ISelection selection2 = taskFactory.createNewSelection();
-        treeBuilder.addChild(selection2, task1);
-        treeBuilder.addChild(selection1, selection2);
-        
-        assertEquals(TaskEquality.LEXICALLY_EQUAL, rule.compare(selection1, task1));
-        assertEquals(TaskEquality.LEXICALLY_EQUAL, rule.compare(task1, selection1));
+public class TaskAndSelectionComparisonRuleTest extends AbstractComparisonRuleTest {
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_01() {
+        TaskAndSelectionComparisonRule rule = new TaskAndSelectionComparisonRule();
+        
+        ITask task1 = createNewSequence();
+        
+        assertFalse(rule.isApplicable(task1, task1));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_02() {
+        TaskAndSelectionComparisonRule rule = new TaskAndSelectionComparisonRule();
+        
+        ITask task1 = createNewSelection();
+        
+        assertFalse(rule.isApplicable(task1, task1));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_03() {
+        TaskAndSelectionComparisonRule rule = new TaskAndSelectionComparisonRule();
+        
+        ITask task1 = createNewIteration();
+        
+        assertFalse(rule.isApplicable(task1, task1));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_04() {
+        TaskAndSelectionComparisonRule rule = new TaskAndSelectionComparisonRule();
+        
+        ITask task1 = createNewOptional();
+        
+        assertFalse(rule.isApplicable(task1, task1));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_05() {
+        TaskAndSelectionComparisonRule rule = new TaskAndSelectionComparisonRule();
+        
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+        
+        assertFalse(rule.isApplicable(task1, task1));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_06() {
+        TaskAndSelectionComparisonRule rule = new TaskAndSelectionComparisonRule();
+
+        ITask task1 = createNewSelection();
+        ITask task2 = createNewSequence();
+        
+        assertTrue(rule.isApplicable(task1, task2));
+        assertTrue(rule.isApplicable(task2, task1));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_07() {
+        TaskAndSelectionComparisonRule rule = new TaskAndSelectionComparisonRule();
+
+        ITask task1 = createNewSelection();
+        ITask task2 = createNewIteration();
+        
+        assertTrue(rule.isApplicable(task1, task2));
+        assertTrue(rule.isApplicable(task2, task1));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_08() {
+        TaskAndSelectionComparisonRule rule = new TaskAndSelectionComparisonRule();
+
+        ITask task1 = createNewSelection();
+        ITask task2 = createNewOptional();
+        
+        assertTrue(rule.isApplicable(task1, task2));
+        assertTrue(rule.isApplicable(task2, task1));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_09() {
+        TaskAndSelectionComparisonRule rule = new TaskAndSelectionComparisonRule();
+
+        ITask task1 = createNewSelection();
+        
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+
+        ITask task2 = createNewEventTask(eventType1, eventTarget1);
+        
+        assertTrue(rule.isApplicable(task1, task2));
+        assertTrue(rule.isApplicable(task2, task1));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_10() {
+        TaskAndSelectionComparisonRule rule = new TaskAndSelectionComparisonRule();
+
+        ITask task1 = createNewSequence();
+        ITask task2 = createNewIteration();
+        
+        assertFalse(rule.isApplicable(task1, task2));
+        assertFalse(rule.isApplicable(task2, task1));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_11() {
+        TaskAndSelectionComparisonRule rule = new TaskAndSelectionComparisonRule();
+
+        ITask task1 = createNewSequence();
+        ITask task2 = createNewOptional();
+        
+        assertFalse(rule.isApplicable(task1, task2));
+        assertFalse(rule.isApplicable(task2, task1));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_12() {
+        TaskAndSelectionComparisonRule rule = new TaskAndSelectionComparisonRule();
+
+        ITask task1 = createNewSequence();
+        
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+
+        ITask task2 = createNewEventTask(eventType1, eventTarget1);
+        
+        assertFalse(rule.isApplicable(task1, task2));
+        assertFalse(rule.isApplicable(task2, task1));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_13() {
+        TaskAndSelectionComparisonRule rule = new TaskAndSelectionComparisonRule();
+
+        ITask task1 = createNewIteration();
+        ITask task2 = createNewOptional();
+        
+        assertFalse(rule.isApplicable(task1, task2));
+        assertFalse(rule.isApplicable(task2, task1));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_isApplicable_14() {
+        TaskAndSelectionComparisonRule rule = new TaskAndSelectionComparisonRule();
+
+        ITask task1 = createNewIteration();
+        
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+
+        ITask task2 = createNewEventTask(eventType1, eventTarget1);
+        
+        assertFalse(rule.isApplicable(task1, task2));
+        assertFalse(rule.isApplicable(task2, task1));
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_compare_01() {
+        TaskAndSelectionComparisonRule rule = new TaskAndSelectionComparisonRule();
+        
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+        
+        ISelection selection1 = createNewSelection();
+        
+        assertNullEquality(rule, task1, selection1);
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void test_compare_02() {
+        TaskAndSelectionComparisonRule rule = new TaskAndSelectionComparisonRule();
+        
+        IEventType eventType1 = new StringEventType("eventType1");
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        ITask task1 = createNewEventTask(eventType1, eventTarget1);
+        
+        ISelection selection1 = createNewSelection();
+        addChild(selection1, task1);
+        
+        assertLexicallyEqual(rule, task1, selection1);
     }
 
Index: trunk/autoquest-core-tasktrees-test/src/test/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/AbstractTemporalRelationshipTC.java
===================================================================
--- trunk/autoquest-core-tasktrees-test/src/test/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/AbstractTemporalRelationshipTC.java	(revision 1285)
+++ trunk/autoquest-core-tasktrees-test/src/test/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/AbstractTemporalRelationshipTC.java	(revision 1294)
@@ -33,4 +33,5 @@
 import de.ugoe.cs.autoquest.tasktrees.TaskTreeValidator;
 import de.ugoe.cs.autoquest.tasktrees.taskequality.TaskEquality;
+import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskInstance;
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskInstanceList;
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskBuilder;
@@ -74,9 +75,9 @@
      *
      */
-    protected void applyRule(Class<? extends ITaskInstanceListScopeRule> ruleClass,
-                             String                                      inputSpec,
-                             String                                      expectedOutputSpec)
+    protected void applyRule(Class<? extends ITaskInstanceScopeRule> ruleClass,
+                             String                                  inputSpec,
+                             String                                  expectedOutputSpec)
     {
-        ITaskInstanceListScopeRule rule = null;
+        ITaskInstanceScopeRule rule = null;
         
         CONSTRUCTOR_ITERATION:
@@ -100,5 +101,5 @@
             
             try {
-                rule = (ITaskInstanceListScopeRule) constructor.newInstance(parameters.toArray());
+                rule = (ITaskInstanceScopeRule) constructor.newInstance(parameters.toArray());
             }
             catch (IllegalArgumentException e) {
@@ -127,7 +128,7 @@
         RuleApplicationStatus status;
         
-        ITaskInstanceList inputList = decoder.decode(inputSpec);
-        
-        Stack<ITaskInstanceList> toBeAppliedOn = new Stack<ITaskInstanceList>();
+        ITaskInstance inputList = (ITaskInstance) decoder.decode(inputSpec);
+        
+        Stack<ITaskInstance> toBeAppliedOn = new Stack<ITaskInstance>();
         toBeAppliedOn.push(inputList);
         
@@ -156,7 +157,7 @@
         while ((!toBeAppliedOn.isEmpty()) || (status == RuleApplicationStatus.FINISHED));
 
-        ITaskInstanceList expectedList = decoder.decode(expectedOutputSpec);
-        
-        new TaskTreeChecker().assertTaskInstanceListsEqual(expectedList, inputList);
+        ITaskInstance expectedList = (ITaskInstance) decoder.decode(expectedOutputSpec);
+        
+        new TaskTreeChecker().assertTaskInstancesEqual(expectedList, inputList);
     }
 
Index: trunk/autoquest-core-tasktrees-test/src/test/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/TaskInstanceTrieTest.java
===================================================================
--- trunk/autoquest-core-tasktrees-test/src/test/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/TaskInstanceTrieTest.java	(revision 1285)
+++ trunk/autoquest-core-tasktrees-test/src/test/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/TaskInstanceTrieTest.java	(revision 1294)
@@ -1510,9 +1510,9 @@
         int order = 3;
         
-        TaskInstanceTrieTester tester = new TaskInstanceTrieTester(1000, 1000000, order);
-
-        long start = System.currentTimeMillis();
-        fixture.trainSessions(Arrays.asList(tester.userSession), order);
-        System.out.println("testing session with 1000000 task instances and 1000 symbols took " +
+        TaskInstanceTrieTester tester = new TaskInstanceTrieTester(1000, 100000, order);
+
+        long start = System.currentTimeMillis();
+        fixture.trainSessions(Arrays.asList(tester.userSession), order);
+        System.out.println("testing session with 100000 task instances and 1000 symbols took " +
                            (System.currentTimeMillis() - start) + "ms");
         
Index: trunk/autoquest-core-tasktrees-test/src/test/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/TaskSymbolBucketedMapTest.java
===================================================================
--- trunk/autoquest-core-tasktrees-test/src/test/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/TaskSymbolBucketedMapTest.java	(revision 1285)
+++ trunk/autoquest-core-tasktrees-test/src/test/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/TaskSymbolBucketedMapTest.java	(revision 1294)
@@ -28,5 +28,8 @@
 import org.junit.Test;
 
+import de.ugoe.cs.autoquest.eventcore.Event;
 import de.ugoe.cs.autoquest.tasktrees.taskequality.TaskEquality;
+import de.ugoe.cs.autoquest.tasktrees.treeifc.IEventTask;
+import de.ugoe.cs.autoquest.tasktrees.treeifc.IEventTaskInstance;
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITask;
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskFactory;
@@ -60,6 +63,6 @@
     @Test
     public void testSymbolMap_1() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
         
         assertNotNull(symbolMap);
@@ -69,6 +72,6 @@
     @Test
     public void testSymbolMap_2() {
-        TaskSymbolBucketedMap<String> symbolMap1 =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        TaskSymbolBucketedMap<String> symbolMap1 = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
         
         ITaskInstance taskInstance = createTaskInstance("symbol");
@@ -89,6 +92,6 @@
     @Test
     public void testAddSymbol_1() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
             
         ITaskInstance taskInstance = createTaskInstance("symbol");
@@ -102,6 +105,6 @@
     @Test
     public void testAddSymbol_2() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
         
         int entryCount = 2000;
@@ -122,6 +125,6 @@
     @Test
     public void testAddSymbol_3() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
         
         int entryCount = 2000;
@@ -148,6 +151,6 @@
     @Test(expected = java.lang.IllegalArgumentException.class)
     public void testAddSymbol_4() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
             
         symbolMap.addSymbol(null, null);
@@ -156,6 +159,6 @@
     @Test
     public void testSize_1() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
             
         assertEquals(0, symbolMap.size());
@@ -164,6 +167,6 @@
     @Test
     public void testSize_2() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
             
         symbolMap.addSymbol(createTaskInstance("symbol1"), "value1");
@@ -174,6 +177,6 @@
     @Test
     public void testSize_3() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
         
         int entryCount = 2000;
@@ -188,6 +191,6 @@
     @Test
     public void testSize_4() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
         
         int entryCount = 2000;
@@ -207,6 +210,6 @@
     @Test
     public void testSize_5() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
         
         int entryCount = 2000;
@@ -225,6 +228,6 @@
     @Test
     public void testIsEmpty_1() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
             
         assertTrue(symbolMap.isEmpty());
@@ -233,6 +236,6 @@
     @Test
     public void testIsEmpty_2() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
             
         symbolMap.addSymbol(createTaskInstance("symbol1"), "value1");
@@ -243,6 +246,6 @@
     @Test
     public void testIsEmpty_3() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
         
         int entryCount = 2000;
@@ -257,6 +260,6 @@
     @Test
     public void testIsEmpty_4() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
         
         int entryCount = 2000;
@@ -276,6 +279,6 @@
     @Test
     public void testIsEmpty_5() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
         
         int entryCount = 2000;
@@ -294,6 +297,6 @@
     @Test
     public void testContainsSymbol_1() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
             
         assertFalse(symbolMap.containsSymbol(createTaskInstance("symbol")));
@@ -302,6 +305,6 @@
     @Test
     public void testContainsSymbol_2() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
             
         symbolMap.addSymbol(createTaskInstance("symbol1"), "value1");
@@ -312,6 +315,6 @@
     @Test
     public void testContainsSymbol_3() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
         
         int entryCount = 2000;
@@ -328,6 +331,6 @@
     @Test
     public void testContainsSymbol_4() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
         
         int entryCount = 2000;
@@ -349,6 +352,6 @@
     @Test
     public void testContainsSymbol_5() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
         
         int entryCount = 2000;
@@ -377,6 +380,6 @@
     @Test(expected = java.lang.IllegalArgumentException.class)
     public void testContainsSymbol_6() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
             
         symbolMap.containsSymbol(null);
@@ -385,6 +388,6 @@
     @Test
     public void testGetValue_1() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
             
         assertNull(symbolMap.getValue(createTaskInstance("symbol")));
@@ -393,6 +396,6 @@
     @Test
     public void testGetValue_2() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
             
         symbolMap.addSymbol(createTaskInstance("symbol1"), "value1");
@@ -403,6 +406,6 @@
     @Test
     public void testGetValue_3() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
             
         symbolMap.addSymbol(createTaskInstance("symbol1"), null);
@@ -413,6 +416,6 @@
     @Test
     public void testGetValue_4() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
         
         int entryCount = 2000;
@@ -429,6 +432,6 @@
     @Test
     public void testGetValue_5() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
         
         int entryCount = 2000;
@@ -455,6 +458,6 @@
     @Test
     public void testGetValue_6() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
         
         int entryCount = 2000;
@@ -483,6 +486,6 @@
     @Test(expected = java.lang.IllegalArgumentException.class)
     public void testGetValue_7() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
             
         symbolMap.getValue(null);
@@ -491,6 +494,6 @@
     @Test
     public void testRemoveSymbol_1() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
             
         assertNull(symbolMap.removeSymbol(createTaskInstance("symbol")));
@@ -499,6 +502,6 @@
     @Test
     public void testRemoveSymbol_2() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
             
         symbolMap.addSymbol(createTaskInstance("symbol1"), "value1");
@@ -510,6 +513,6 @@
     @Test
     public void testRemoveSymbol_3() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
             
         symbolMap.addSymbol(createTaskInstance("symbol1"), null);
@@ -521,6 +524,6 @@
     @Test
     public void testRemoveSymbol_4() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
         
         int entryCount = 2000;
@@ -539,6 +542,6 @@
     @Test
     public void testRemoveSymbol_5() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
         
         int entryCount = 2000;
@@ -567,6 +570,6 @@
     @Test
     public void testRemoveSymbol_6() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
         
         int entryCount = 2000;
@@ -597,6 +600,6 @@
     @Test(expected = java.lang.IllegalArgumentException.class)
     public void testRemoveSymbol_7() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
             
         symbolMap.removeSymbol(null);
@@ -605,6 +608,6 @@
     @Test
     public void testGetSymbols_1() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
             
         assertNotNull(symbolMap.getSymbols());
@@ -614,6 +617,6 @@
     @Test
     public void testGetSymbols_2() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
          
         ITaskInstance task = createTaskInstance("symbol1");
@@ -627,6 +630,6 @@
     @Test
     public void testGetSymbols_3() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
             
         ITaskInstance task = createTaskInstance("symbol1");
@@ -640,6 +643,6 @@
     @Test
     public void testGetSymbols_4() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
         Set<ITaskInstance> expectedSymbols = new HashSet<ITaskInstance>();
         
@@ -667,6 +670,6 @@
     @Test
     public void testGetSymbols_5() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
         Set<ITaskInstance> expectedSymbols = new HashSet<ITaskInstance>();
         
@@ -701,6 +704,6 @@
     @Test
     public void testGetSymbols_6() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
         List<ITaskInstance> expectedSymbols = new ArrayList<ITaskInstance>();
         
@@ -732,6 +735,6 @@
     @Test
     public void testGetValues_1() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
             
         assertNotNull(symbolMap.getValues());
@@ -741,6 +744,6 @@
     @Test
     public void testGetValues_2() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
             
         symbolMap.addSymbol(createTaskInstance("symbol1"), "value1");
@@ -753,6 +756,6 @@
     @Test
     public void testGetValues_3() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
             
         symbolMap.addSymbol(createTaskInstance("symbol1"), null);
@@ -765,6 +768,6 @@
     @Test
     public void testGetValues_4() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
         Set<String> expectedValues = new HashSet<String>();
         
@@ -791,6 +794,6 @@
     @Test
     public void testGetValues_5() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
         Set<String> expectedValues = new HashSet<String>();
         
@@ -823,6 +826,6 @@
     @Test
     public void testGetValues_6() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
         Set<String> expectedValues = new HashSet<String>();
         
@@ -854,6 +857,6 @@
     @Test
     public void testClear_1() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
         
         symbolMap.clear();
@@ -863,6 +866,6 @@
     @Test
     public void testClear_2() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
             
         symbolMap.addSymbol(createTaskInstance("symbol1"), "value1");
@@ -874,6 +877,6 @@
     @Test
     public void testClear_3() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
             
         symbolMap.addSymbol(createTaskInstance("symbol1"), null);
@@ -885,6 +888,6 @@
     @Test
     public void testClear_4() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
         
         int entryCount = 2000;
@@ -900,6 +903,6 @@
     @Test
     public void testClear_5() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
         
         int entryCount = 2000;
@@ -920,6 +923,6 @@
     @Test
     public void testClear_6() {
-        SymbolMap<ITaskInstance, String> symbolMap =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
         
         int entryCount = 2000;
@@ -939,9 +942,9 @@
     @Test
     public void testEquals_1() {
-        SymbolMap<ITaskInstance, String> symbolMap1 =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
-        
-        SymbolMap<ITaskInstance, String> symbolMap2 =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap1 = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        
+        SymbolMap<ITaskInstance, String> symbolMap2 = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
         
         assertTrue(symbolMap1.equals(symbolMap2));
@@ -950,9 +953,9 @@
     @Test
     public void testEquals_2() {
-        SymbolMap<ITaskInstance, String> symbolMap1 =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
-            
-        SymbolMap<ITaskInstance, String> symbolMap2 =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap1 = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
+            
+        SymbolMap<ITaskInstance, String> symbolMap2 = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
             
         symbolMap1.addSymbol(createTaskInstance("symbol1"), "value1");
@@ -963,9 +966,9 @@
     @Test
     public void testEquals_3() {
-        SymbolMap<ITaskInstance, String> symbolMap1 =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
-            
-        SymbolMap<ITaskInstance, String> symbolMap2 =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap1 = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
+            
+        SymbolMap<ITaskInstance, String> symbolMap2 = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
         
         ITaskInstance task = createTaskInstance("symbol1");
@@ -978,9 +981,9 @@
     @Test
     public void testEquals_4() {
-        SymbolMap<ITaskInstance, String> symbolMap1 =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap1 = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
                 
-        SymbolMap<ITaskInstance, String> symbolMap2 =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap2 = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
         
         int entryCount = 1000;
@@ -997,9 +1000,9 @@
     @Test
     public void testEquals_5() {
-        SymbolMap<ITaskInstance, String> symbolMap1 =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap1 = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
                
-        SymbolMap<ITaskInstance, String> symbolMap2 =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap2 = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
         
         int entryCount = 1000;
@@ -1024,9 +1027,9 @@
     @Test
     public void testEquals_6() {
-        SymbolMap<ITaskInstance, String> symbolMap1 =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap1 = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
                 
-        SymbolMap<ITaskInstance, String> symbolMap2 =
-            new TaskSymbolBucketedMap<String>(new TaskComparator(TaskEquality.SEMANTICALLY_EQUAL));
+        SymbolMap<ITaskInstance, String> symbolMap2 = new TaskSymbolBucketedMap<String>
+            (new TaskInstanceComparator(TaskEquality.SEMANTICALLY_EQUAL));
         
         int entryCount = 1000;
@@ -1052,22 +1055,21 @@
     
     /**
-     * <p>
-     * TODO: comment
-     * </p>
      *
-     * @param string
-     * @return
      */
     private ITaskInstance createTaskInstance(String id) {
         ITask task = tasks.get(id);
-        
+        Event event = null;
+       
         if (task == null) {
-            task = taskFactory.createNewEventTask
-                (new DummyInteraction(id, 0), new DummyGUIElement("default"));
-            
+            event = new Event(new DummyInteraction(id, 0), new DummyGUIElement("default"));
+            task = taskFactory.createNewEventTask(event.toString());
+           
             tasks.put(id, task);
         }
-        
-        return taskFactory.createNewTaskInstance(task);
+        else {
+            event = ((IEventTaskInstance) task.getInstances().iterator().next()).getEvent();
+        }
+       
+        return taskFactory.createNewTaskInstance((IEventTask) task, event);
     }
 
Index: trunk/autoquest-core-tasktrees-test/src/test/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/TaskSymbolIdentityMapTest.java
===================================================================
--- trunk/autoquest-core-tasktrees-test/src/test/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/TaskSymbolIdentityMapTest.java	(revision 1285)
+++ trunk/autoquest-core-tasktrees-test/src/test/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/TaskSymbolIdentityMapTest.java	(revision 1294)
@@ -28,4 +28,7 @@
 import org.junit.Test;
 
+import de.ugoe.cs.autoquest.eventcore.Event;
+import de.ugoe.cs.autoquest.tasktrees.treeifc.IEventTask;
+import de.ugoe.cs.autoquest.tasktrees.treeifc.IEventTaskInstance;
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITask;
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskFactory;
@@ -1054,23 +1057,23 @@
                            " took " + (System.currentTimeMillis() - start));
     }
+    
     /**
-     * <p>
-     * TODO: comment
-     * </p>
      *
-     * @param string
-     * @return
      */
     private ITaskInstance createTaskInstance(String id) {
         ITask task = tasks.get(id);
+        Event event = null;
         
         if (task == null) {
-            task = taskFactory.createNewEventTask
-                (new DummyInteraction(id, 0), new DummyGUIElement("default"));
+            event = new Event(new DummyInteraction(id, 0), new DummyGUIElement("default"));
+            task = taskFactory.createNewEventTask(event.toString());
             
             tasks.put(id, task);
         }
-        
-        return taskFactory.createNewTaskInstance(task);
+        else {
+            event = ((IEventTaskInstance) task.getInstances().iterator().next()).getEvent();
+        }
+        
+        return taskFactory.createNewTaskInstance((IEventTask) task, event);
     }
 
Index: trunk/autoquest-core-tasktrees-test/src/test/java/de/ugoe/cs/autoquest/tasktrees/treeimpl/TaskModelTest.java
===================================================================
--- trunk/autoquest-core-tasktrees-test/src/test/java/de/ugoe/cs/autoquest/tasktrees/treeimpl/TaskModelTest.java	(revision 1285)
+++ trunk/autoquest-core-tasktrees-test/src/test/java/de/ugoe/cs/autoquest/tasktrees/treeimpl/TaskModelTest.java	(revision 1294)
@@ -24,11 +24,17 @@
 import org.junit.Test;
 
+import de.ugoe.cs.autoquest.eventcore.Event;
 import de.ugoe.cs.autoquest.eventcore.IEventTarget;
 import de.ugoe.cs.autoquest.eventcore.IEventType;
 import de.ugoe.cs.autoquest.tasktrees.treeifc.IEventTask;
+import de.ugoe.cs.autoquest.tasktrees.treeifc.IEventTaskInstance;
 import de.ugoe.cs.autoquest.tasktrees.treeifc.IIteration;
+import de.ugoe.cs.autoquest.tasktrees.treeifc.IIterationInstance;
 import de.ugoe.cs.autoquest.tasktrees.treeifc.IOptional;
+import de.ugoe.cs.autoquest.tasktrees.treeifc.IOptionalInstance;
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ISelection;
+import de.ugoe.cs.autoquest.tasktrees.treeifc.ISelectionInstance;
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ISequence;
+import de.ugoe.cs.autoquest.tasktrees.treeifc.ISequenceInstance;
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITask;
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskInstance;
@@ -45,8 +51,5 @@
 
 /**
- * TODO comment
- * 
- * @version $Revision: $ $Date: 02.04.2012$
- * @author 2012, last modified by $Author: patrick$
+ *
  */
 public class TaskModelTest {
@@ -69,5 +72,5 @@
         IEventTarget eventTarget = new DummyGUIElement("elem");
         
-        IEventTask task = taskFactory.createNewEventTask(eventType, eventTarget);
+        IEventTask task = createNewEventTask(eventType, eventTarget);
         
         assertNotNull(task);
@@ -76,6 +79,7 @@
         assertTrue(task.equals(task));
         
-        assertEquals(eventType, task.getEventType());
-        assertEquals(eventTarget, task.getEventTarget());
+        IEventTaskInstance instance = (IEventTaskInstance) task.getInstances().iterator().next();
+        assertEquals(eventType, instance.getEvent().getType());
+        assertEquals(eventTarget, instance.getEvent().getTarget());
     }
 
@@ -88,6 +92,6 @@
         IEventTarget eventTarget = new DummyGUIElement("elem");
         
-        IEventTask task1 = taskFactory.createNewEventTask(eventType, eventTarget);
-        IEventTask task2 = taskFactory.createNewEventTask(eventType, eventTarget);
+        IEventTask task1 = createNewEventTask(eventType, eventTarget);
+        IEventTask task2 = createNewEventTask(eventType, eventTarget);
         
         // the tasks will not be equal as they should have a different id
@@ -103,7 +107,7 @@
         IEventTarget eventTarget = new DummyGUIElement("elem");
         
-        IEventTask task = taskFactory.createNewEventTask(eventType, eventTarget);
-        ITaskInstance taskInstance1 = taskFactory.createNewTaskInstance(task);
-        ITaskInstance taskInstance2 = taskFactory.createNewTaskInstance(task);
+        IEventTask task = createNewEventTask(eventType, eventTarget);
+        ITaskInstance taskInstance1 = createNewTaskInstance(task);
+        ITaskInstance taskInstance2 = createNewTaskInstance(task);
         
         assertFalse(taskInstance1.equals(taskInstance2));
@@ -133,5 +137,5 @@
         IEventTarget eventTarget = new DummyGUIElement("elem");
         
-        IEventTask child = taskFactory.createNewEventTask(eventType, eventTarget);
+        IEventTask child = createNewEventTask(eventType, eventTarget);
 
         ISequence task = taskFactory.createNewSequence();
@@ -152,9 +156,9 @@
         IEventTarget eventTarget = new DummyGUIElement("elem");
         
-        IEventTask child1 = taskFactory.createNewEventTask(eventType, eventTarget);
-        IEventTask child2 = taskFactory.createNewEventTask(eventType, eventTarget);
-        IEventTask child3 = taskFactory.createNewEventTask(eventType, eventTarget);
-        IEventTask child4 = taskFactory.createNewEventTask(eventType, eventTarget);
-        IEventTask child5 = taskFactory.createNewEventTask(eventType, eventTarget);
+        IEventTask child1 = createNewEventTask(eventType, eventTarget);
+        IEventTask child2 = createNewEventTask(eventType, eventTarget);
+        IEventTask child3 = createNewEventTask(eventType, eventTarget);
+        IEventTask child4 = createNewEventTask(eventType, eventTarget);
+        IEventTask child5 = createNewEventTask(eventType, eventTarget);
 
         ISequence task = taskFactory.createNewSequence();
@@ -198,5 +202,5 @@
         IEventTarget eventTarget = new DummyGUIElement("elem");
         
-        IEventTask child = taskFactory.createNewEventTask(eventType, eventTarget);
+        IEventTask child = createNewEventTask(eventType, eventTarget);
 
         ISelection task = taskFactory.createNewSelection();
@@ -217,9 +221,9 @@
         IEventTarget eventTarget = new DummyGUIElement("elem");
         
-        IEventTask child1 = taskFactory.createNewEventTask(eventType, eventTarget);
-        IEventTask child2 = taskFactory.createNewEventTask(eventType, eventTarget);
-        IEventTask child3 = taskFactory.createNewEventTask(eventType, eventTarget);
-        IEventTask child4 = taskFactory.createNewEventTask(eventType, eventTarget);
-        IEventTask child5 = taskFactory.createNewEventTask(eventType, eventTarget);
+        IEventTask child1 = createNewEventTask(eventType, eventTarget);
+        IEventTask child2 = createNewEventTask(eventType, eventTarget);
+        IEventTask child3 = createNewEventTask(eventType, eventTarget);
+        IEventTask child4 = createNewEventTask(eventType, eventTarget);
+        IEventTask child5 = createNewEventTask(eventType, eventTarget);
 
         ISelection task = taskFactory.createNewSelection();
@@ -262,5 +266,5 @@
         IEventTarget eventTarget = new DummyGUIElement("elem");
         
-        IEventTask child = taskFactory.createNewEventTask(eventType, eventTarget);
+        IEventTask child = createNewEventTask(eventType, eventTarget);
 
         IIteration task = taskFactory.createNewIteration();
@@ -279,6 +283,6 @@
         IEventTarget eventTarget = new DummyGUIElement("elem");
         
-        IEventTask child1 = taskFactory.createNewEventTask(eventType, eventTarget);
-        IEventTask child2 = taskFactory.createNewEventTask(eventType, eventTarget);
+        IEventTask child1 = createNewEventTask(eventType, eventTarget);
+        IEventTask child2 = createNewEventTask(eventType, eventTarget);
 
         IIteration task = taskFactory.createNewIteration();
@@ -312,5 +316,5 @@
         IEventTarget eventTarget = new DummyGUIElement("elem");
         
-        IEventTask child = taskFactory.createNewEventTask(eventType, eventTarget);
+        IEventTask child = createNewEventTask(eventType, eventTarget);
 
         IOptional task = taskFactory.createNewOptional();
@@ -329,6 +333,6 @@
         IEventTarget eventTarget = new DummyGUIElement("elem");
         
-        IEventTask child1 = taskFactory.createNewEventTask(eventType, eventTarget);
-        IEventTask child2 = taskFactory.createNewEventTask(eventType, eventTarget);
+        IEventTask child1 = createNewEventTask(eventType, eventTarget);
+        IEventTask child2 = createNewEventTask(eventType, eventTarget);
 
         IOptional task = taskFactory.createNewOptional();
@@ -348,7 +352,7 @@
         IEventTarget eventTarget = new DummyGUIElement("elem");
         
-        IEventTask task = taskFactory.createNewEventTask(eventType, eventTarget);
-        
-        ITaskInstance taskInstance = taskFactory.createNewTaskInstance(task);
+        IEventTask task = createNewEventTask(eventType, eventTarget);
+        
+        IEventTaskInstance taskInstance = createNewTaskInstance(task);
         
         assertNotNull(taskInstance);
@@ -356,6 +360,4 @@
         assertTrue(taskInstance.equals(taskInstance));
         assertFalse(taskInstance.equals(task));
-        assertNotNull(taskInstance.getChildren());
-        assertEquals(0, taskInstance.getChildren().size());
     }
 
@@ -368,26 +370,10 @@
         IEventTarget eventTarget = new DummyGUIElement("elem");
         
-        IEventTask task = taskFactory.createNewEventTask(eventType, eventTarget);
-        
-        ITaskInstance taskInstance1 = taskFactory.createNewTaskInstance(task);
-        ITaskInstance taskInstance2 = taskFactory.createNewTaskInstance(task);
+        IEventTask task = createNewEventTask(eventType, eventTarget);
+        
+        ITaskInstance taskInstance1 = createNewTaskInstance(task);
+        ITaskInstance taskInstance2 = createNewTaskInstance(task);
         
         assertFalse(taskInstance1.equals(taskInstance2));
-    }
-
-    /**
-     *
-     */
-    @Test(expected=IllegalArgumentException.class)
-    public void test_EventTaskInstance_03() throws Exception {
-        IEventType eventType = new DummyInteraction("interaction", 1);
-        IEventTarget eventTarget = new DummyGUIElement("elem");
-        
-        IEventTask task = taskFactory.createNewEventTask(eventType, eventTarget);
-        
-        ITaskInstance taskInstance1 = taskFactory.createNewTaskInstance(task);
-        ITaskInstance taskInstance2 = taskFactory.createNewTaskInstance(task);
-        
-        taskBuilder.addChild(taskInstance1, taskInstance2);
     }
 
@@ -400,10 +386,10 @@
         IEventTarget eventTarget = new DummyGUIElement("elem");
         
-        IEventTask task = taskFactory.createNewEventTask(eventType, eventTarget);
+        IEventTask task = createNewEventTask(eventType, eventTarget);
         
         ISequence sequence = taskFactory.createNewSequence();
         
-        ITaskInstance taskInstance = taskFactory.createNewTaskInstance(task);
-        ITaskInstance sequenceInstance = taskFactory.createNewTaskInstance(sequence);
+        ITaskInstance taskInstance = createNewTaskInstance(task);
+        ISequenceInstance sequenceInstance = createNewTaskInstance(sequence);
         
         taskBuilder.addChild(sequenceInstance, taskInstance);
@@ -418,17 +404,16 @@
         IEventTarget eventTarget = new DummyGUIElement("elem");
         
-        IEventTask task = taskFactory.createNewEventTask(eventType, eventTarget);
+        IEventTask task = createNewEventTask(eventType, eventTarget);
         
         ISequence sequence = taskFactory.createNewSequence();
         taskBuilder.addChild(sequence, task);
         
-        ITaskInstance taskInstance = taskFactory.createNewTaskInstance(task);
-        ITaskInstance sequenceInstance = taskFactory.createNewTaskInstance(sequence);
+        ITaskInstance taskInstance = createNewTaskInstance(task);
+        ISequenceInstance sequenceInstance = createNewTaskInstance(sequence);
         
         taskBuilder.addChild(sequenceInstance, taskInstance);
         
-        assertNotNull(sequenceInstance.getChildren());
-        assertEquals(1, sequenceInstance.getChildren().size());
-        assertEquals(taskInstance, sequenceInstance.getChildren().get(0));
+        assertEquals(1, sequenceInstance.size());
+        assertEquals(taskInstance, sequenceInstance.get(0));
     }
 
@@ -441,9 +426,9 @@
         IEventTarget eventTarget = new DummyGUIElement("elem");
         
-        IEventTask task1 = taskFactory.createNewEventTask(eventType, eventTarget);
-        IEventTask task2 = taskFactory.createNewEventTask(eventType, eventTarget);
-        IEventTask task3 = taskFactory.createNewEventTask(eventType, eventTarget);
-        IEventTask task4 = taskFactory.createNewEventTask(eventType, eventTarget);
-        IEventTask task5 = taskFactory.createNewEventTask(eventType, eventTarget);
+        IEventTask task1 = createNewEventTask(eventType, eventTarget);
+        IEventTask task2 = createNewEventTask(eventType, eventTarget);
+        IEventTask task3 = createNewEventTask(eventType, eventTarget);
+        IEventTask task4 = createNewEventTask(eventType, eventTarget);
+        IEventTask task5 = createNewEventTask(eventType, eventTarget);
         
         ISequence sequence = taskFactory.createNewSequence();
@@ -454,10 +439,10 @@
         taskBuilder.addChild(sequence, task5);
         
-        ITaskInstance taskInstance1 = taskFactory.createNewTaskInstance(task1);
-        ITaskInstance taskInstance2 = taskFactory.createNewTaskInstance(task2);
-        ITaskInstance taskInstance3 = taskFactory.createNewTaskInstance(task3);
-        ITaskInstance taskInstance4 = taskFactory.createNewTaskInstance(task4);
-        ITaskInstance taskInstance5 = taskFactory.createNewTaskInstance(task5);
-        ITaskInstance sequenceInstance = taskFactory.createNewTaskInstance(sequence);
+        ITaskInstance taskInstance1 = createNewTaskInstance(task1);
+        ITaskInstance taskInstance2 = createNewTaskInstance(task2);
+        ITaskInstance taskInstance3 = createNewTaskInstance(task3);
+        ITaskInstance taskInstance4 = createNewTaskInstance(task4);
+        ITaskInstance taskInstance5 = createNewTaskInstance(task5);
+        ISequenceInstance sequenceInstance = createNewTaskInstance(sequence);
         
         taskBuilder.addChild(sequenceInstance, taskInstance1);
@@ -467,11 +452,10 @@
         taskBuilder.addChild(sequenceInstance, taskInstance5);
         
-        assertNotNull(sequenceInstance.getChildren());
-        assertEquals(5, sequenceInstance.getChildren().size());
-        assertEquals(taskInstance1, sequenceInstance.getChildren().get(0));
-        assertEquals(taskInstance2, sequenceInstance.getChildren().get(1));
-        assertEquals(taskInstance3, sequenceInstance.getChildren().get(2));
-        assertEquals(taskInstance4, sequenceInstance.getChildren().get(3));
-        assertEquals(taskInstance5, sequenceInstance.getChildren().get(4));
+        assertEquals(5, sequenceInstance.size());
+        assertEquals(taskInstance1, sequenceInstance.get(0));
+        assertEquals(taskInstance2, sequenceInstance.get(1));
+        assertEquals(taskInstance3, sequenceInstance.get(2));
+        assertEquals(taskInstance4, sequenceInstance.get(3));
+        assertEquals(taskInstance5, sequenceInstance.get(4));
     }
 
@@ -484,12 +468,12 @@
         IEventTarget eventTarget = new DummyGUIElement("elem");
         
-        IEventTask task = taskFactory.createNewEventTask(eventType, eventTarget);
+        IEventTask task = createNewEventTask(eventType, eventTarget);
         
         ISelection selection = taskFactory.createNewSelection();
         
-        ITaskInstance taskInstance = taskFactory.createNewTaskInstance(task);
-        ITaskInstance selectionInstance = taskFactory.createNewTaskInstance(selection);
-        
-        taskBuilder.addChild(selectionInstance, taskInstance);
+        ITaskInstance taskInstance = createNewTaskInstance(task);
+        ISelectionInstance selectionInstance = createNewTaskInstance(selection);
+        
+        taskBuilder.setChild(selectionInstance, taskInstance);
     }
 
@@ -502,32 +486,31 @@
         IEventTarget eventTarget = new DummyGUIElement("elem");
         
-        IEventTask task = taskFactory.createNewEventTask(eventType, eventTarget);
+        IEventTask task = createNewEventTask(eventType, eventTarget);
         
         ISelection selection = taskFactory.createNewSelection();
         taskBuilder.addChild(selection, task);
         
-        ITaskInstance taskInstance = taskFactory.createNewTaskInstance(task);
-        ITaskInstance selectionInstance = taskFactory.createNewTaskInstance(selection);
-        
-        taskBuilder.addChild(selectionInstance, taskInstance);
-        
-        assertNotNull(selectionInstance.getChildren());
-        assertEquals(1, selectionInstance.getChildren().size());
-        assertEquals(taskInstance, selectionInstance.getChildren().get(0));
-    }
-
-    /**
-     *
-     */
-    @Test(expected=IllegalArgumentException.class)
+        ITaskInstance taskInstance = createNewTaskInstance(task);
+        ISelectionInstance selectionInstance = createNewTaskInstance(selection);
+        
+        taskBuilder.setChild(selectionInstance, taskInstance);
+        
+        assertNotNull(selectionInstance.getChild());
+        assertEquals(taskInstance, selectionInstance.getChild());
+    }
+
+    /**
+     *
+     */
+    @Test
     public void test_SelectionInstance_03() throws Exception {
         IEventType eventType = new DummyInteraction("interaction", 1);
         IEventTarget eventTarget = new DummyGUIElement("elem");
         
-        IEventTask task1 = taskFactory.createNewEventTask(eventType, eventTarget);
-        IEventTask task2 = taskFactory.createNewEventTask(eventType, eventTarget);
-        IEventTask task3 = taskFactory.createNewEventTask(eventType, eventTarget);
-        IEventTask task4 = taskFactory.createNewEventTask(eventType, eventTarget);
-        IEventTask task5 = taskFactory.createNewEventTask(eventType, eventTarget);
+        IEventTask task1 = createNewEventTask(eventType, eventTarget);
+        IEventTask task2 = createNewEventTask(eventType, eventTarget);
+        IEventTask task3 = createNewEventTask(eventType, eventTarget);
+        IEventTask task4 = createNewEventTask(eventType, eventTarget);
+        IEventTask task5 = createNewEventTask(eventType, eventTarget);
         
         ISelection selection = taskFactory.createNewSelection();
@@ -538,10 +521,12 @@
         taskBuilder.addChild(selection, task5);
         
-        ITaskInstance taskInstance1 = taskFactory.createNewTaskInstance(task1);
-        ITaskInstance taskInstance2 = taskFactory.createNewTaskInstance(task2);
-        ITaskInstance selectionInstance = taskFactory.createNewTaskInstance(selection);
-        
-        taskBuilder.addChild(selectionInstance, taskInstance1);
-        taskBuilder.addChild(selectionInstance, taskInstance2);
+        ITaskInstance taskInstance1 = createNewTaskInstance(task1);
+        ITaskInstance taskInstance2 = createNewTaskInstance(task2);
+        ISelectionInstance selectionInstance = createNewTaskInstance(selection);
+        
+        taskBuilder.setChild(selectionInstance, taskInstance1);
+        taskBuilder.setChild(selectionInstance, taskInstance2);
+        
+        assertEquals(taskInstance2, selectionInstance.getChild());
     }
 
@@ -554,10 +539,10 @@
         IEventTarget eventTarget = new DummyGUIElement("elem");
         
-        IEventTask task = taskFactory.createNewEventTask(eventType, eventTarget);
+        IEventTask task = createNewEventTask(eventType, eventTarget);
         
         IIteration iteration = taskFactory.createNewIteration();
         
-        ITaskInstance taskInstance = taskFactory.createNewTaskInstance(task);
-        ITaskInstance iterationInstance = taskFactory.createNewTaskInstance(iteration);
+        ITaskInstance taskInstance = createNewTaskInstance(task);
+        IIterationInstance iterationInstance = createNewTaskInstance(iteration);
         
         taskBuilder.addChild(iterationInstance, taskInstance);
@@ -572,17 +557,16 @@
         IEventTarget eventTarget = new DummyGUIElement("elem");
         
-        IEventTask task = taskFactory.createNewEventTask(eventType, eventTarget);
+        IEventTask task = createNewEventTask(eventType, eventTarget);
         
         IIteration iteration = taskFactory.createNewIteration();
         taskBuilder.setMarkedTask(iteration, task);
         
-        ITaskInstance taskInstance = taskFactory.createNewTaskInstance(task);
-        ITaskInstance iterationInstance = taskFactory.createNewTaskInstance(iteration);
+        ITaskInstance taskInstance = createNewTaskInstance(task);
+        IIterationInstance iterationInstance = createNewTaskInstance(iteration);
         
         taskBuilder.addChild(iterationInstance, taskInstance);
         
-        assertNotNull(iterationInstance.getChildren());
-        assertEquals(1, iterationInstance.getChildren().size());
-        assertEquals(taskInstance, iterationInstance.getChildren().get(0));
+        assertEquals(1, iterationInstance.size());
+        assertEquals(taskInstance, iterationInstance.get(0));
     }
 
@@ -595,6 +579,6 @@
         IEventTarget eventTarget = new DummyGUIElement("elem");
         
-        IEventTask task1 = taskFactory.createNewEventTask(eventType, eventTarget);
-        IEventTask task2 = taskFactory.createNewEventTask(eventType, eventTarget);
+        IEventTask task1 = createNewEventTask(eventType, eventTarget);
+        IEventTask task2 = createNewEventTask(eventType, eventTarget);
         
         IIteration iteration = taskFactory.createNewIteration();
@@ -602,6 +586,6 @@
         taskBuilder.setMarkedTask(iteration, task2);
         
-        ITaskInstance taskInstance1 = taskFactory.createNewTaskInstance(task1);
-        ITaskInstance iterationInstance = taskFactory.createNewTaskInstance(iteration);
+        ITaskInstance taskInstance1 = createNewTaskInstance(task1);
+        IIterationInstance iterationInstance = createNewTaskInstance(iteration);
         
         taskBuilder.addChild(iterationInstance, taskInstance1);
@@ -616,6 +600,6 @@
         IEventTarget eventTarget = new DummyGUIElement("elem");
         
-        IEventTask task1 = taskFactory.createNewEventTask(eventType, eventTarget);
-        IEventTask task2 = taskFactory.createNewEventTask(eventType, eventTarget);
+        IEventTask task1 = createNewEventTask(eventType, eventTarget);
+        IEventTask task2 = createNewEventTask(eventType, eventTarget);
         
         IIteration iteration = taskFactory.createNewIteration();
@@ -623,12 +607,11 @@
         taskBuilder.setMarkedTask(iteration, task2);
         
-        ITaskInstance taskInstance2 = taskFactory.createNewTaskInstance(task2);
-        ITaskInstance iterationInstance = taskFactory.createNewTaskInstance(iteration);
+        ITaskInstance taskInstance2 = createNewTaskInstance(task2);
+        IIterationInstance iterationInstance = createNewTaskInstance(iteration);
         
         taskBuilder.addChild(iterationInstance, taskInstance2);
         
-        assertNotNull(iterationInstance.getChildren());
-        assertEquals(1, iterationInstance.getChildren().size());
-        assertEquals(taskInstance2, iterationInstance.getChildren().get(0));
+        assertEquals(1, iterationInstance.size());
+        assertEquals(taskInstance2, iterationInstance.get(0));
     }
 
@@ -641,12 +624,12 @@
         IEventTarget eventTarget = new DummyGUIElement("elem");
         
-        IEventTask task = taskFactory.createNewEventTask(eventType, eventTarget);
+        IEventTask task = createNewEventTask(eventType, eventTarget);
         
         IOptional optional = taskFactory.createNewOptional();
         
-        ITaskInstance taskInstance = taskFactory.createNewTaskInstance(task);
-        ITaskInstance optionalInstance = taskFactory.createNewTaskInstance(optional);
-        
-        taskBuilder.addChild(optionalInstance, taskInstance);
+        ITaskInstance taskInstance = createNewTaskInstance(task);
+        IOptionalInstance optionalInstance = createNewTaskInstance(optional);
+        
+        taskBuilder.setChild(optionalInstance, taskInstance);
     }
 
@@ -659,17 +642,16 @@
         IEventTarget eventTarget = new DummyGUIElement("elem");
         
-        IEventTask task = taskFactory.createNewEventTask(eventType, eventTarget);
+        IEventTask task = createNewEventTask(eventType, eventTarget);
         
         IOptional optional = taskFactory.createNewOptional();
         taskBuilder.setMarkedTask(optional, task);
         
-        ITaskInstance taskInstance = taskFactory.createNewTaskInstance(task);
-        ITaskInstance optionalInstance = taskFactory.createNewTaskInstance(optional);
-        
-        taskBuilder.addChild(optionalInstance, taskInstance);
-        
-        assertNotNull(optionalInstance.getChildren());
-        assertEquals(1, optionalInstance.getChildren().size());
-        assertEquals(taskInstance, optionalInstance.getChildren().get(0));
+        ITaskInstance taskInstance = createNewTaskInstance(task);
+        IOptionalInstance optionalInstance = createNewTaskInstance(optional);
+        
+        taskBuilder.setChild(optionalInstance, taskInstance);
+        
+        assertNotNull(optionalInstance.getChild());
+        assertEquals(taskInstance, optionalInstance.getChild());
     }
 
@@ -682,6 +664,6 @@
         IEventTarget eventTarget = new DummyGUIElement("elem");
         
-        IEventTask task1 = taskFactory.createNewEventTask(eventType, eventTarget);
-        IEventTask task2 = taskFactory.createNewEventTask(eventType, eventTarget);
+        IEventTask task1 = createNewEventTask(eventType, eventTarget);
+        IEventTask task2 = createNewEventTask(eventType, eventTarget);
         
         IOptional optional = taskFactory.createNewOptional();
@@ -689,8 +671,8 @@
         taskBuilder.setMarkedTask(optional, task2);
         
-        ITaskInstance taskInstance1 = taskFactory.createNewTaskInstance(task1);
-        ITaskInstance optionalInstance = taskFactory.createNewTaskInstance(optional);
-        
-        taskBuilder.addChild(optionalInstance, taskInstance1);
+        ITaskInstance taskInstance1 = createNewTaskInstance(task1);
+        IOptionalInstance optionalInstance = createNewTaskInstance(optional);
+        
+        taskBuilder.setChild(optionalInstance, taskInstance1);
     }
 
@@ -703,6 +685,6 @@
         IEventTarget eventTarget = new DummyGUIElement("elem");
         
-        IEventTask task1 = taskFactory.createNewEventTask(eventType, eventTarget);
-        IEventTask task2 = taskFactory.createNewEventTask(eventType, eventTarget);
+        IEventTask task1 = createNewEventTask(eventType, eventTarget);
+        IEventTask task2 = createNewEventTask(eventType, eventTarget);
         
         IOptional optional = taskFactory.createNewOptional();
@@ -710,12 +692,11 @@
         taskBuilder.setMarkedTask(optional, task2);
         
-        ITaskInstance taskInstance2 = taskFactory.createNewTaskInstance(task2);
-        ITaskInstance optionalInstance = taskFactory.createNewTaskInstance(optional);
-        
-        taskBuilder.addChild(optionalInstance, taskInstance2);
-        
-        assertNotNull(optionalInstance.getChildren());
-        assertEquals(1, optionalInstance.getChildren().size());
-        assertEquals(taskInstance2, optionalInstance.getChildren().get(0));
+        ITaskInstance taskInstance2 = createNewTaskInstance(task2);
+        IOptionalInstance optionalInstance = createNewTaskInstance(optional);
+        
+        taskBuilder.setChild(optionalInstance, taskInstance2);
+        
+        assertNotNull(optionalInstance.getChild());
+        assertEquals(taskInstance2, optionalInstance.getChild());
     }
 
@@ -740,9 +721,9 @@
         IEventTarget eventTarget = new DummyGUIElement("elem");
         
-        IEventTask task = taskFactory.createNewEventTask(eventType, eventTarget);
+        IEventTask task = createNewEventTask(eventType, eventTarget);
         
         IUserSession userSession = taskFactory.createUserSession();
         
-        ITaskInstance taskInstance = taskFactory.createNewTaskInstance(task);
+        ITaskInstance taskInstance = createNewTaskInstance(task);
         
         taskBuilder.addExecutedTask(userSession, taskInstance);
@@ -761,5 +742,5 @@
         IEventTarget eventTarget = new DummyGUIElement("elem");
         
-        IEventTask task = taskFactory.createNewEventTask(eventType, eventTarget);
+        IEventTask task = createNewEventTask(eventType, eventTarget);
         ISequence sequence = taskFactory.createNewSequence();
         ISelection selection = taskFactory.createNewSelection();
@@ -772,14 +753,14 @@
         taskBuilder.setMarkedTask(optional, task);
         
-        ITaskInstance taskInstance = taskFactory.createNewTaskInstance(task);
-        ITaskInstance sequenceInstance = taskFactory.createNewTaskInstance(sequence);
-        ITaskInstance selectionInstance = taskFactory.createNewTaskInstance(selection);
-        ITaskInstance iterationInstance = taskFactory.createNewTaskInstance(iteration);
-        ITaskInstance optionalInstance = taskFactory.createNewTaskInstance(optional);
-        
-        taskBuilder.addChild(sequenceInstance, taskFactory.createNewTaskInstance(task));
-        taskBuilder.addChild(selectionInstance, taskFactory.createNewTaskInstance(task));
-        taskBuilder.addChild(iterationInstance, taskFactory.createNewTaskInstance(task));
-        taskBuilder.addChild(optionalInstance, taskFactory.createNewTaskInstance(task));
+        ITaskInstance taskInstance = createNewTaskInstance(task);
+        ISequenceInstance sequenceInstance = createNewTaskInstance(sequence);
+        ISelectionInstance selectionInstance = createNewTaskInstance(selection);
+        IIterationInstance iterationInstance = createNewTaskInstance(iteration);
+        IOptionalInstance optionalInstance = createNewTaskInstance(optional);
+        
+        taskBuilder.addChild(sequenceInstance, createNewTaskInstance(task));
+        taskBuilder.setChild(selectionInstance, createNewTaskInstance(task));
+        taskBuilder.addChild(iterationInstance, createNewTaskInstance(task));
+        taskBuilder.setChild(optionalInstance, createNewTaskInstance(task));
         
         IUserSession userSession = taskFactory.createUserSession();
@@ -823,5 +804,6 @@
             }
             
-            ITaskInstance taskInstance = instantiateTask(task, noOfMaxChildren);
+            ISequenceInstance sequenceInstance =
+                (ISequenceInstance) instantiateTask(task, noOfMaxChildren);
             
             System.err.println("  creating user session");
@@ -829,5 +811,5 @@
             IUserSession session = taskFactory.createUserSession();
             
-            for (ITaskInstance child : taskInstance.getChildren()) {
+            for (ITaskInstance child : sequenceInstance) {
                 taskBuilder.addExecutedTask(session, child);
             }
@@ -836,11 +818,11 @@
             sessions.add(session);
             
-            ITaskModel taskTree = taskFactory.createTaskModel(sessions);
+            ITaskModel taskModel = taskFactory.createTaskModel(sessions);
 
             System.err.println("  validating task tree");
             Map<ITask, ITaskInfo> actualTaskInfos = new HashMap<ITask, ITaskInfo>();
             
-            for (ITask currentTask : taskTree.getTasks()) {
-                actualTaskInfos.put(currentTask, taskTree.getTaskInfo(currentTask));
+            for (ITask currentTask : taskModel.getTasks()) {
+                actualTaskInfos.put(currentTask, taskModel.getTaskInfo(currentTask));
             }
             
@@ -988,5 +970,5 @@
         Thread.sleep(2);
         long id = System.currentTimeMillis();
-        IEventTask task = taskFactory.createNewEventTask
+        IEventTask task = createNewEventTask
             (new DummyInteraction("interaction" + id, 1), new DummyGUIElement("elem" + id));
 
@@ -1064,5 +1046,10 @@
         
         for (int i = 0; i < noOfChildren; i++) {
-            ITask child = createTaskTree(maxNoOfChildren, maxDepth - 1, taskInfos);
+            ITask child;
+            do {
+                child = createTaskTree(maxNoOfChildren, maxDepth - 1, taskInfos);
+            }
+            while (child instanceof ISelection);
+            
             taskBuilder.addChild(selection, child);
         }
@@ -1099,5 +1086,10 @@
         IIteration iteration = taskFactory.createNewIteration();
 
-        ITask child = createTaskTree(maxNoOfChildren, maxDepth - 1, taskInfos);
+        ITask child;
+        do {
+            child = createTaskTree(maxNoOfChildren, maxDepth - 1, taskInfos);
+        }
+        while ((child instanceof IOptional) || (child instanceof IIteration));
+        
         taskBuilder.setMarkedTask(iteration, child);
 
@@ -1133,5 +1125,10 @@
         IOptional optional = taskFactory.createNewOptional();
 
-        ITask child = createTaskTree(maxNoOfChildren, maxDepth - 1, taskInfos);
+        ITask child;
+        do {
+            child = createTaskTree(maxNoOfChildren, maxDepth - 1, taskInfos);
+        }
+        while (child instanceof IOptional);
+        
         taskBuilder.setMarkedTask(optional, child);
 
@@ -1193,9 +1190,10 @@
      */
     private ITaskInstance instantiateTask(ITask task, int maxIterationCount) throws Exception {
-        ITaskInstance instance = taskFactory.createNewTaskInstance(task);
+        ITaskInstance instance = createNewTaskInstance(task);
 
         if (task instanceof ISequence) {
             for (ITask child : ((ISequence) task).getChildren()) {
-                taskBuilder.addChild(instance, instantiateTask(child, maxIterationCount));
+                taskBuilder.addChild
+                    ((ISequenceInstance) instance, instantiateTask(child, maxIterationCount));
             }
         }
@@ -1203,5 +1201,6 @@
             List<ITask> children = ((ISelection) task).getChildren();
             int index = randomize(children.size());
-            taskBuilder.addChild(instance, instantiateTask(children.get(index), maxIterationCount));
+            taskBuilder.setChild((ISelectionInstance) instance,
+                                 instantiateTask(children.get(index),maxIterationCount));
         }
         else if (task instanceof IIteration) {
@@ -1210,5 +1209,6 @@
             
             for (int i = 0; i < count; i++) {
-                taskBuilder.addChild(instance, instantiateTask(child, maxIterationCount));
+                taskBuilder.addChild
+                    ((IIterationInstance) instance, instantiateTask(child, maxIterationCount));
             }
         }
@@ -1217,5 +1217,6 @@
             
             if (randomize(1) == 0) {
-                taskBuilder.addChild(instance, instantiateTask(child, maxIterationCount));
+                taskBuilder.setChild((IOptionalInstance) instance,
+                                     instantiateTask(child, maxIterationCount));
             }
         }
@@ -1244,3 +1245,73 @@
         return value + min;
     }
+    
+    /**
+     *
+     */
+    protected IEventTask createNewEventTask(IEventType eventType, IEventTarget eventTarget) {
+        IEventTask eventTask = taskFactory.createNewEventTask(eventType + " --> " + eventTarget);
+        taskFactory.createNewTaskInstance(eventTask, new Event(eventType, eventTarget));
+        return eventTask;
+    }
+
+    /**
+     *
+     */
+    private ITaskInstance createNewTaskInstance(ITask task) {
+        if (task instanceof IEventTask) {
+            return createNewTaskInstance((IEventTask) task);
+        }
+        else if (task instanceof ISequence) {
+            return createNewTaskInstance((ISequence) task);
+        }
+        else if (task instanceof ISelection) {
+            return createNewTaskInstance((ISelection) task);
+        }
+        else if (task instanceof IIteration) {
+            return createNewTaskInstance((IIteration) task);
+        }
+        else if (task instanceof IOptional) {
+            return createNewTaskInstance((IOptional) task);
+        }
+        
+        throw new IllegalArgumentException("unknown type of task");
+    }
+
+    /**
+     *
+     */
+    private IEventTaskInstance createNewTaskInstance(IEventTask task) {
+        IEventTaskInstance existingInstance =
+            (IEventTaskInstance) task.getInstances().iterator().next();
+        return taskFactory.createNewTaskInstance(task, existingInstance.getEvent());
+    }
+
+    /**
+     *
+     */
+    private ISequenceInstance createNewTaskInstance(ISequence task) {
+        return taskFactory.createNewTaskInstance(task);
+    }
+
+    /**
+     *
+     */
+    private ISelectionInstance createNewTaskInstance(ISelection task) {
+        return taskFactory.createNewTaskInstance(task);
+    }
+
+    /**
+     *
+     */
+    private IIterationInstance createNewTaskInstance(IIteration task) {
+        return taskFactory.createNewTaskInstance(task);
+    }
+
+    /**
+     *
+     */
+    private IOptionalInstance createNewTaskInstance(IOptional task) {
+        return taskFactory.createNewTaskInstance(task);
+    }
+
 }
