Index: /trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/utils/MostSimilarTaskDeterminer.java
===================================================================
--- /trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/utils/MostSimilarTaskDeterminer.java	(revision 1967)
+++ /trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/utils/MostSimilarTaskDeterminer.java	(revision 1968)
@@ -25,8 +25,7 @@
 
 import de.ugoe.cs.autoquest.tasktrees.temporalrelation.TaskComparator;
+import de.ugoe.cs.autoquest.tasktrees.treeifc.DefaultTaskInstanceTraversingVisitor;
 import de.ugoe.cs.autoquest.tasktrees.treeifc.DefaultTaskTraversingVisitor;
 import de.ugoe.cs.autoquest.tasktrees.treeifc.IEventTaskInstance;
-import de.ugoe.cs.autoquest.tasktrees.treeifc.IOptionalInstance;
-import de.ugoe.cs.autoquest.tasktrees.treeifc.ISelectionInstance;
 import de.ugoe.cs.autoquest.tasktrees.treeifc.IStructuringTemporalRelationship;
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITask;
@@ -818,23 +817,31 @@
             long timestamp = Long.MAX_VALUE;
             
+            final List<IEventTaskInstance> eventTaskInstances = new LinkedList<>();
             for (ITaskInstance instance : task.getInstances()) {
-                ITaskInstance eventTaskInstance = instance;
-                
-                do {
-                    if (eventTaskInstance instanceof ITaskInstanceList) {
-                        eventTaskInstance = ((ITaskInstanceList) eventTaskInstance).get(0);
-                    }
-                    else if (eventTaskInstance instanceof ISelectionInstance) {
-                        eventTaskInstance = ((ISelectionInstance) eventTaskInstance).getChild();
-                    }
-                    else if (eventTaskInstance instanceof IOptionalInstance) {
-                        eventTaskInstance = ((IOptionalInstance) eventTaskInstance).getChild();
-                    }
-                }
-                while (!(eventTaskInstance instanceof IEventTaskInstance));
-                
-                if (eventTaskInstance != null) {
+                eventTaskInstances.clear();
+                
+                instance.accept(new DefaultTaskInstanceTraversingVisitor() {
+
+                    @Override
+                    public void visit(IEventTaskInstance eventTaskInstance) {
+                        eventTaskInstances.add(eventTaskInstance);
+                    }
+
+                    @Override
+                    public void visit(ITaskInstanceList taskInstanceList) {
+                        for (ITaskInstance child : taskInstanceList) {
+                            if (eventTaskInstances.size() > 0) {
+                                break;
+                            }
+                            
+                            child.accept(this);
+                        }
+                    }
+                    
+                });
+                
+                if (eventTaskInstances.size() > 0) {
                     long newTimestamp =
-                        ((IEventTaskInstance) eventTaskInstance).getEvent().getTimestamp();
+                        ((IEventTaskInstance) eventTaskInstances.get(0)).getEvent().getTimestamp();
                     
                     if (timestamp > newTimestamp) {
