Index: /trunk/autoquest-plugin-html/src/main/java/de/ugoe/cs/autoquest/plugin/html/AbstractDefaultLogParser.java
===================================================================
--- /trunk/autoquest-plugin-html/src/main/java/de/ugoe/cs/autoquest/plugin/html/AbstractDefaultLogParser.java	(revision 1264)
+++ /trunk/autoquest-plugin-html/src/main/java/de/ugoe/cs/autoquest/plugin/html/AbstractDefaultLogParser.java	(revision 1265)
@@ -23,4 +23,5 @@
 import java.util.Collection;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
@@ -129,5 +130,5 @@
     public AbstractDefaultLogParser() {
         sequences = new LinkedList<List<Event>>();
-        guiElementTree = new GUIElementTree<String>();
+        guiElementTree = new GUIElementTree<String>(new GUIModel(false));
         guiElementBuffer = new LinkedList<BufferEntry>();
         eventBuffer = new LinkedList<BufferEntry>();
@@ -192,4 +193,8 @@
         }
         
+        // we parse a new file. So clear the buffers.
+        guiElementBuffer.clear();
+        eventBuffer.clear();
+        
         if (inputSource != null) {
             inputSource.setSystemId("file://" + file.getAbsolutePath());
@@ -219,4 +224,12 @@
             }
         }
+        
+        if (guiElementBuffer.size() > 0) {
+            Console.println(guiElementBuffer.size() + " GUI elements not processed");
+        }
+        
+        if (eventBuffer.size() > 0) {
+            Console.printerrln(eventBuffer.size() + " events not processed");
+        }
     }
 
@@ -300,5 +313,5 @@
         }
         else if (qName.equals("component") && (currentGUIElementId != null)) {
-            guiElementBuffer.add(new BufferEntry(currentGUIElementId, currentParameters));
+            guiElementBuffer.add(0, new BufferEntry(currentGUIElementId, currentParameters));
 
             processGUIElements();
@@ -385,10 +398,14 @@
         do {
             processedElement = false;
-            // search for the next GUI element that can be processed
-            for (int i = 0; i < guiElementBuffer.size(); i++) {
-                BufferEntry entry = guiElementBuffer.get(i);
+            
+            // search for the next GUI element that can be processed (use an iterator on the 
+            // linked list, as this is most effective)
+            Iterator<BufferEntry> iterator = guiElementBuffer.iterator();
+            while (iterator.hasNext()) {
+                BufferEntry entry = iterator.next();
                 processedElement = handleGUIElement(entry.id, entry.parameters);
+
                 if (processedElement) {
-                    guiElementBuffer.remove(i);
+                    iterator.remove();
                     processedElements++;
                     break;
@@ -421,5 +438,7 @@
                 
                 if ((entry != null) && (entry.id != null) && (entry.parameters != null)) {
+                    
                     processedEvent = handleEvent(entry.id, entry.parameters);
+
                     if (processedEvent) {
                         eventBuffer.remove(0);
Index: /trunk/autoquest-plugin-html/src/main/java/de/ugoe/cs/autoquest/plugin/html/HTMLLogTextInputPseudomizer.java
===================================================================
--- /trunk/autoquest-plugin-html/src/main/java/de/ugoe/cs/autoquest/plugin/html/HTMLLogTextInputPseudomizer.java	(revision 1264)
+++ /trunk/autoquest-plugin-html/src/main/java/de/ugoe/cs/autoquest/plugin/html/HTMLLogTextInputPseudomizer.java	(revision 1265)
@@ -222,16 +222,35 @@
         EventEntry newEvent = new EventEntry(type, parameters, timestamp);
         
-        boolean added = false;
-        for (int i = 0; i < sortedEvents.size(); i++) {
-            if (sortedEvents.get(i).timestamp > newEvent.timestamp) {
-                sortedEvents.add(i, newEvent);
-                added = true;
+        int start = 0;
+        int end = sortedEvents.size();
+        int center = 0;
+        long centerTimestamp;
+        
+        while (start != end) {
+            center = start + ((end - start) / 2);
+            
+            if ((center != start) || (center != end)) {
+                centerTimestamp = sortedEvents.get(center).timestamp;
+            
+                if (centerTimestamp < newEvent.timestamp) {
+                    start = Math.max(center, start + 1);
+                }
+                else if (centerTimestamp > newEvent.timestamp) {
+                    end = Math.min(center, end - 1);
+                }
+                else {
+                    // add the event directly where the center is, as the timestamps of the center
+                    // and the new event are equal
+                    start = end = center;
+                    break;
+                }
+            }
+            else {
+                // add the event to the position denoted by the add index
                 break;
             }
         }
         
-        if (!added) {
-            sortedEvents.add(newEvent);
-        }
+        sortedEvents.add(start, newEvent);
         
         if ("onchange".equals(type)) {
