Index: trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/taskequality/GUIEventTaskComparisonRule.java
===================================================================
--- trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/taskequality/GUIEventTaskComparisonRule.java	(revision 2120)
+++ trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/taskequality/GUIEventTaskComparisonRule.java	(revision 2126)
@@ -43,4 +43,5 @@
 import de.ugoe.cs.autoquest.eventcore.guimodel.IText;
 import de.ugoe.cs.autoquest.eventcore.guimodel.IToolTip;
+import de.ugoe.cs.autoquest.tasktrees.treeifc.IEventTask;
 import de.ugoe.cs.autoquest.tasktrees.treeifc.IEventTaskInstance;
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITask;
@@ -68,18 +69,22 @@
     @Override
     public boolean isApplicable(ITask task1, ITask task2) {
-        for (ITaskInstance instance : task1.getInstances()) {
-            if ((!(instance instanceof IEventTaskInstance)) ||
-                (!(((IEventTaskInstance) instance).getEvent().getType() instanceof IInteraction)))
-            {
-                return false;
-            }
-        }
-        
-        for (ITaskInstance instance : task2.getInstances()) {
-            if ((!(instance instanceof IEventTaskInstance)) ||
-                (!(((IEventTaskInstance) instance).getEvent().getType() instanceof IInteraction)))
-            {
-                return false;
-            }
+        if (!(task1 instanceof IEventTask)) {
+            return false;
+        }
+        
+        if (!(task2 instanceof IEventTask)) {
+            return false;
+        }
+        
+        IEventTaskInstance instance1 = (IEventTaskInstance) task1.getInstances().iterator().next();
+        
+        if (!(instance1.getEvent().getType() instanceof IInteraction)) {
+            return false;
+        }
+        
+        IEventTaskInstance instance2 = (IEventTaskInstance) task2.getInstances().iterator().next();
+        
+        if (!(instance2.getEvent().getType() instanceof IInteraction)) {
+            return false;
         }
         
@@ -178,4 +183,16 @@
         Collection<ITaskInstance> taskInstances1 = task1.getInstances();
         Collection<ITaskInstance> taskInstances2 = task2.getInstances();
+        
+        if (taskInstances1.size() > taskInstances2.size()) {
+            // it may be the case, that all instances of first task match already the first instance
+            // of the second task. In this case, the below for loops would iterate of all instances
+            // of the first task but the internal loop would always break. But if the first task
+            // has many more instances than the second task, performing the comparison the other
+            // way around would result in less comparisons. Hence, we switch the task instance lists
+            // to have fewer comparisons.
+            Collection<ITaskInstance> tmp = taskInstances1;
+            taskInstances1 = taskInstances2;
+            taskInstances2 = tmp;
+        }
         
         TaskEquality checkedEquality =
Index: trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/utils/SimilarTasks.java
===================================================================
--- trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/utils/SimilarTasks.java	(revision 2120)
+++ trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/utils/SimilarTasks.java	(revision 2126)
@@ -1301,10 +1301,12 @@
      */
     private boolean isInefficientAction(ITask task) {
-        ITaskInstance inst = task.getInstances().iterator().next();
-        
-        if ((inst instanceof IEventTaskInstance) &&
-            (((IEventTaskInstance) inst).getEvent().getType() instanceof Scroll))
-        {
-            return true;
+        if (task instanceof IEventTask) {
+            IEventTaskInstance inst = (IEventTaskInstance) task.getInstances().iterator().next();
+            if (inst.getEvent().getType() instanceof Scroll) {
+                return true;
+            }
+            else {
+                return false;
+            }
         }
         else if (task instanceof IMarkingTemporalRelationship) {
Index: trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/treeimpl/Task.java
===================================================================
--- trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/treeimpl/Task.java	(revision 2120)
+++ trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/treeimpl/Task.java	(revision 2126)
@@ -81,5 +81,12 @@
      * </p>
      */
-    private Collection<ITaskInstance> instances = new HashSet<ITaskInstance>();
+    private final Collection<ITaskInstance> instances = new HashSet<ITaskInstance>();
+    
+    /**
+     * <p>
+     * the unmodifiable view on the instances of this task
+     * </p>
+     */
+    private final Collection<ITaskInstance> unmodifiableInstances;
     
     /**
@@ -107,4 +114,6 @@
             throw new IllegalArgumentException("type must not be null");
         }
+        
+        unmodifiableInstances = Collections.unmodifiableCollection(instances);
     }
 
@@ -154,5 +163,5 @@
     @Override
     public Collection<ITaskInstance> getInstances() {
-        return Collections.unmodifiableCollection(instances);
+        return unmodifiableInstances;
     }
 
