Index: /trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/TextInput.java
===================================================================
--- /trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/TextInput.java	(revision 750)
+++ /trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/TextInput.java	(revision 751)
@@ -15,4 +15,6 @@
  */
 public class TextInput implements IInteraction {
+    
+    public enum TextEquality {LEXICAL, SYNTACTICAL, SEMANTICAL};
 
     /**  */
@@ -24,4 +26,6 @@
     /** the text input events that caused the entering of the text */
     private List<Event> textInputEvents;
+    
+    private final TextEquality equalityType;
 
     /**
@@ -34,6 +38,20 @@
      */
     public TextInput(String enteredText, List<Event> textInputEvents) {
+        this(enteredText, textInputEvents, TextEquality.LEXICAL);
+    }
+    
+    /**
+     * <p>
+     * TODO: comment
+     * </p>
+     *
+     * @param enteredText
+     * @param textInputEvents
+     * @param equalityType
+     */
+    public TextInput(String enteredText, List<Event> textInputEvents, TextEquality equalityType) {
         this.enteredText = enteredText;
         this.textInputEvents = textInputEvents;
+        this.equalityType = equalityType;
     }
 
@@ -100,7 +118,15 @@
         }
         else if (obj instanceof TextInput) {
-            return
-                enteredText.equals(((TextInput) obj).enteredText) &&
-                textInputEvents.equals(((TextInput) obj).textInputEvents);
+            switch (equalityType)
+            {
+                case LEXICAL:
+                    return textInputEvents.equals(((TextInput) obj).textInputEvents);
+                case SYNTACTICAL:
+                    return enteredText.equals(((TextInput) obj).enteredText);
+                case SEMANTICAL:
+                    return true;
+                default:
+                    throw new AssertionError("reached source code that should be unreachable");
+            }
         }
         return false;
@@ -114,5 +140,12 @@
     @Override
     public int hashCode() {
-        return getClass().hashCode() + enteredText.hashCode() + textInputEvents.size();
+        int hashCode = getClass().hashCode();
+        if( equalityType==TextEquality.LEXICAL) {
+            hashCode += enteredText.hashCode() + textInputEvents.size();
+        }
+        else if( equalityType==TextEquality.SYNTACTICAL) {
+            hashCode += enteredText.hashCode();
+        }
+        return hashCode;
     }
 
Index: /trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/TextInputDetector.java
===================================================================
--- /trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/TextInputDetector.java	(revision 750)
+++ /trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/TextInputDetector.java	(revision 751)
@@ -11,4 +11,5 @@
 import de.ugoe.cs.quest.eventcore.gui.KeyPressed;
 import de.ugoe.cs.quest.eventcore.gui.KeyReleased;
+import de.ugoe.cs.quest.eventcore.gui.TextInput.TextEquality;
 import de.ugoe.cs.quest.eventcore.guimodel.ITextArea;
 import de.ugoe.cs.quest.eventcore.guimodel.ITextField;
@@ -34,4 +35,14 @@
     /** the keys pressed in parallel */
     List<VirtualKey> pressedKeys = new ArrayList<VirtualKey>();
+    
+    private final TextEquality textEqualityType;
+    
+    public TextInputDetector() {
+        this(TextEquality.LEXICAL);
+    }
+    
+    public TextInputDetector(TextEquality textEqualityType) {
+        this.textEqualityType = textEqualityType;
+    }
 
     /**
@@ -156,5 +167,5 @@
         
         if ((enteredText != null) && (!"".equals(enteredText))) {
-            TextInput textInput = new TextInput(enteredText, textInputEvents);
+            TextInput textInput = new TextInput(enteredText, textInputEvents, textEqualityType);
             return new Event(textInput, eventTarget);
         }
Index: /trunk/quest-ui-core/src/main/java/de/ugoe/cs/quest/commands/sequences/CMDdetectTextInputEvents.java
===================================================================
--- /trunk/quest-ui-core/src/main/java/de/ugoe/cs/quest/commands/sequences/CMDdetectTextInputEvents.java	(revision 750)
+++ /trunk/quest-ui-core/src/main/java/de/ugoe/cs/quest/commands/sequences/CMDdetectTextInputEvents.java	(revision 751)
@@ -10,6 +10,8 @@
 import de.ugoe.cs.quest.SequenceInstanceOf;
 import de.ugoe.cs.quest.eventcore.Event;
+import de.ugoe.cs.quest.eventcore.gui.TextInput.TextEquality;
 import de.ugoe.cs.quest.eventcore.gui.TextInputDetector;
 import de.ugoe.cs.util.console.Command;
+import de.ugoe.cs.util.console.Console;
 import de.ugoe.cs.util.console.GlobalDataContainer;
 
@@ -31,5 +33,5 @@
     @Override
     public String help() {
-        return "detectTextInputEvents <sequences> {<new sequences>}";
+        return "detectTextInputEvents <sequences> {<new sequences>} {<textEqualityType>}";
     }
 
@@ -44,4 +46,5 @@
         String sequencesName;
         String newSequencesName;
+        String textEqualityTypeString = "LEXICAL";
         try {
             sequencesName = (String) parameters.get(0);
@@ -51,4 +54,7 @@
             else {
                 newSequencesName = sequencesName;
+            }
+            if( parameters.size() > 2) {
+                textEqualityTypeString = (String) parameters.get(2);
             }
         }
@@ -67,4 +73,13 @@
             return;
         }
+        
+        TextEquality textEqualityType = null;
+        try {
+            textEqualityType = TextEquality.valueOf(textEqualityTypeString);
+        }
+        catch (IllegalArgumentException e) {
+            Console.printerrln("Invalid mode. Only LEXICAL, SYNTACTICAL, and SEMANTICAL are allowed values!");
+            return;
+        }
 
         sequences = (Collection<List<Event>>) dataObject;
@@ -73,5 +88,5 @@
        
         for (List<Event> sequence : sequences) {
-            newSequences.add(new TextInputDetector().detectTextInputs(sequence));
+            newSequences.add(new TextInputDetector(textEqualityType).detectTextInputs(sequence));
         }
 
