Index: trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/UsabilityEvaluator.java
===================================================================
--- trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/UsabilityEvaluator.java	(revision 1293)
+++ trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/UsabilityEvaluator.java	(revision 1319)
@@ -77,5 +77,7 @@
                 rule.callEvaluationMethod(evaluationMethodCaller);
             if (defect.isPresent()) {
-                result.addProblem(defect.get());
+                UsabilityProblemDescription description = defect.get();
+                logUsabilityProblem(description);
+                result.addProblem(description);
             }
         }
@@ -83,3 +85,24 @@
     }
 
+    private void logUsabilityProblem(UsabilityProblemDescription description) {
+        Level level = null;
+        switch (description.getSeverityLevel()) {
+            case NONE:
+                break;
+            case INFO:
+            case LOW:
+                level = Level.INFO;
+                break;
+            case MEDIUM:
+            case HIGH:
+                level = Level.WARNING;
+        }
+        if (level != null) {
+            Console.print(description.getSeverityLevel().toString());
+            Console.print(" : ");
+            Console.println(description.toString());
+            //Console.traceln(level, description.toString());
+        }
+    }
+
 }
Index: trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/result/UsabilityProblemDescription.java
===================================================================
--- trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/result/UsabilityProblemDescription.java	(revision 1293)
+++ trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/result/UsabilityProblemDescription.java	(revision 1319)
@@ -85,4 +85,9 @@
     }
 
+    @Override
+    public String toString() {
+        return this.description;
+    }
+    
     /**
      * <p>
Index: trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/rules/UsabilityMetricsRuleset.java
===================================================================
--- trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/rules/UsabilityMetricsRuleset.java	(revision 1293)
+++ trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/rules/UsabilityMetricsRuleset.java	(revision 1319)
@@ -42,5 +42,5 @@
      * 
      */
-    private UsabilityMetricsRuleset(ITaskModel taskModel) {
+    public UsabilityMetricsRuleset(ITaskModel taskModel) {
         this.metrics = Lists.newArrayList();
         metrics.add(new NoLetterOrDigitRatioMetric(taskModel));
Index: trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/rules/patterns/InteractionPattern.java
===================================================================
--- trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/rules/patterns/InteractionPattern.java	(revision 1293)
+++ trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/rules/patterns/InteractionPattern.java	(revision 1319)
@@ -15,4 +15,6 @@
 package de.ugoe.cs.autoquest.usability.rules.patterns;
 
+import java.util.Collection;
+import java.util.Iterator;
 import java.util.List;
 
@@ -107,4 +109,27 @@
      * 
      * <p>
+     * Returns all tasks of the given task model matching the provided interaction pattern.
+     * </p>
+     * 
+     * @param taskModel
+     *            {@link ITaskModel}, which might contain the interaction pattern
+     * @return all tasks matched
+     */
+    public Collection<ITask> matchingTasks(ITaskModel taskModel) {
+        List<ITask> allConcernedTasks = filterAllConcernedTasksFrom(taskModel);
+        for (Iterator<ITask> iterator = allConcernedTasks.iterator(); iterator.hasNext();) {
+            ITask concernedTask = iterator.next();
+            checkTask(concernedTask);
+            if (this.present)
+                this.present = false;
+            else
+                iterator.remove();
+        }
+        return allConcernedTasks;
+    }
+
+    /**
+     * 
+     * <p>
      * Checks a single {@link ITask} for the interaction pattern.
      * </p>
@@ -114,5 +139,10 @@
      */
     private void checkTask(ITask task) {
+        System.out.println("+++++++++++++++");
+        System.out.println(task);
+        System.out.println(this);
+        System.out.println(this.patternVisitors);
         applyAllVisitors(task);
+        System.out.println("------------");
         if (allVisitorsArePresent()) {
             this.present = true;
@@ -121,4 +151,5 @@
             resetAllVisitors();
         }
+        System.out.println("^^^^^^^^^^^^");
     }
 
@@ -134,5 +165,7 @@
      */
     public boolean containedIn(ITask task) {
+        System.out.println('>');
         checkTask(task);
+        System.out.println("< "+this.present);
         return this.present;
     }
@@ -151,5 +184,7 @@
         Optional<InteractionPatternVisitor> previousVisitor = Optional.absent();
         for (InteractionPatternVisitor visitor : patternVisitors) {
+            System.out.print(visitor+" ");
             if (appliedOnSelectionNode(previousVisitor)) {
+                System.out.println("Selection");
                 for (ITask selection : previousVisitor.get().getRetainedSelectionNodes()) {
                     selection.accept(visitor);
@@ -157,7 +192,9 @@
             }
             else {
+                System.out.println("Normal");
                 previousVisitor = Optional.of(visitor);
                 task.accept(visitor);
             }
+            System.out.println(visitor.isPresent() ? '1' : '0');
         }
     }
@@ -208,5 +245,7 @@
 
             });
-        return Iterables.size(allPresent) == this.patternVisitors.size();
+        int cnt = Iterables.size(allPresent);
+        System.out.printf("%d/%d\n", cnt, this.patternVisitors.size());
+        return cnt == this.patternVisitors.size();
     }
 
@@ -218,4 +257,5 @@
      */
     private void resetAllVisitors() {
+        System.out.println("+RESET+");
         for (InteractionPatternVisitor visitor : this.patternVisitors) {
             visitor.reset();
Index: trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/rules/patterns/InteractionPatternVisitor.java
===================================================================
--- trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/rules/patterns/InteractionPatternVisitor.java	(revision 1293)
+++ trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/rules/patterns/InteractionPatternVisitor.java	(revision 1319)
@@ -20,10 +20,13 @@
 
 import com.google.common.base.Splitter;
+import com.google.common.collect.Iterables;
 import com.google.common.collect.Lists;
 
+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.eventcore.StringEventType;
 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.IOptional;
@@ -31,4 +34,5 @@
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ISequence;
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITask;
+import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskInstance;
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskVisitor;
 import de.ugoe.cs.autoquest.test.DummyGUIElement;
@@ -67,8 +71,11 @@
     public void visit(IEventTask event) {
         if (!this.present && isEventVisitor()) {
-        	boolean matchesEventType = matchesEventType(event.getEventType());
-        	boolean matchesEventTarget = matchesEventTarget(event.getEventTarget());
+                Event eventRepresentative = ((IEventTaskInstance) event.getInstances().iterator().next()).getEvent();
+        	boolean matchesEventType = matchesEventType(eventRepresentative.getType());
+        	boolean matchesEventTarget = matchesEventTarget(eventRepresentative.getTarget());
         	this.present = eventTarget != null ? matchesEventType && matchesEventTarget : matchesEventType;
         }
+        System.out.printf("%s [%s, %s, %s]: %s\n", event, this.eventType, this.eventTarget, this.taskType, this.present);
+        System.out.println(this.getClass().getSimpleName() + " "+ this.hashCode());
     }
 
Index: trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/taskmodel/filter/types/EventTargetFilter.java
===================================================================
--- trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/taskmodel/filter/types/EventTargetFilter.java	(revision 1293)
+++ trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/taskmodel/filter/types/EventTargetFilter.java	(revision 1319)
@@ -24,5 +24,7 @@
 import de.ugoe.cs.autoquest.plugin.html.guimodel.HTMLText;
 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.ITaskInstance;
 
 /**
@@ -85,5 +87,7 @@
             @Override
             public IEventTarget apply(ITask task) {
-                return ((IEventTask) task).getEventTarget();
+                // XXX: Use the type of the first instance provided
+                ITaskInstance firstInstance = task.getInstances().iterator().next();
+                return ((IEventTaskInstance) firstInstance).getEvent().getTarget();
             }
         };
Index: trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/taskmodel/filter/types/EventTypeFilter.java
===================================================================
--- trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/taskmodel/filter/types/EventTypeFilter.java	(revision 1293)
+++ trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/taskmodel/filter/types/EventTypeFilter.java	(revision 1319)
@@ -28,5 +28,7 @@
 import de.ugoe.cs.autoquest.eventcore.gui.TextInput;
 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.ITaskInstance;
 
 /**
@@ -97,5 +99,7 @@
             @Override
             public IEventType apply(ITask task) {
-                return ((IEventTask) task).getEventType();
+                // XXX: Use the type of the first instance provided
+                ITaskInstance firstInstance = task.getInstances().iterator().next();
+                return ((IEventTaskInstance) firstInstance).getEvent().getType();
             }
         };
Index: trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/util/NullTask.java
===================================================================
--- trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/util/NullTask.java	(revision 1293)
+++ trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/util/NullTask.java	(revision 1319)
@@ -15,7 +15,11 @@
 package de.ugoe.cs.autoquest.usability.util;
 
+import java.util.Collection;
+import java.util.Collections;
+
 import org.apache.commons.lang.StringUtils;
 
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITask;
+import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskInstance;
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskVisitor;
 
@@ -91,3 +95,9 @@
     }
 
+    @Override
+    public Collection<ITaskInstance> getInstances() {
+        // return nothing
+        return Collections.emptyList();
+    }
+
 }
Index: trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/util/TextInputUtil.java
===================================================================
--- trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/util/TextInputUtil.java	(revision 1293)
+++ trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/util/TextInputUtil.java	(revision 1319)
@@ -26,6 +26,7 @@
 
 import de.ugoe.cs.autoquest.eventcore.gui.TextInput;
-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.ITaskInstance;
 
 /**
@@ -45,5 +46,5 @@
      * 
      * <p>
-     * Returns all entered words and signs of text input events.
+     * Returns all entered words and signs of all instances of text input events.
      * </p>
      * 
@@ -56,7 +57,14 @@
         List<Iterable<String>> allTextInputs = Lists.newArrayList();
         for (ITask taskWithTextInput : tasksWithTextInputEvents) {
-            TextInput textInput = (TextInput) ((IEventTask) taskWithTextInput).getEventType();
-            allTextInputs.add(splitTextIntoWordsAndSigns(textInput.getEnteredText()));
+            System.out.print("+");
+            for (ITaskInstance instance : taskWithTextInput.getInstances()) {
+                System.out.print(".");
+                TextInput textInput =
+                    (TextInput) ((IEventTaskInstance) instance).getEvent().getType();
+                allTextInputs.add(splitTextIntoWordsAndSigns(textInput.getEnteredText()));
+            }
+            System.out.println("");
         }
+        System.out.println(allTextInputs);
         return HashMultiset.create(Iterables.concat(allTextInputs));
     }
