Index: /trunk/autoquest-htmlmonitor-test/src/test/java/de/ugoe/cs/autoquest/htmlmonitor/HtmlMonitorServerTest.java
===================================================================
--- /trunk/autoquest-htmlmonitor-test/src/test/java/de/ugoe/cs/autoquest/htmlmonitor/HtmlMonitorServerTest.java	(revision 1314)
+++ /trunk/autoquest-htmlmonitor-test/src/test/java/de/ugoe/cs/autoquest/htmlmonitor/HtmlMonitorServerTest.java	(revision 1315)
@@ -614,8 +614,9 @@
         
         if (parent != null) {
-            assertEquals(parent.getId(), element.getParentId());
+            assertNotNull(element.getParent());
+            assertEquals(parent.getId(), element.getParent().getId());
         }
         else {
-            assertNull(element.getParentId());
+            assertNull(element.getParent());
         }
         
Index: /trunk/autoquest-htmlmonitor-test/src/test/java/de/ugoe/cs/autoquest/htmlmonitor/HtmlMonitorTest.java
===================================================================
--- /trunk/autoquest-htmlmonitor-test/src/test/java/de/ugoe/cs/autoquest/htmlmonitor/HtmlMonitorTest.java	(revision 1314)
+++ /trunk/autoquest-htmlmonitor-test/src/test/java/de/ugoe/cs/autoquest/htmlmonitor/HtmlMonitorTest.java	(revision 1315)
@@ -421,5 +421,8 @@
         nodes = guiModel.getChildren(body);
         assertNotNull(nodes);
-        assertEquals(10, nodes.size());
+        
+        // wait for only 9 nodes. The directly used GUI elements are 10, but one (the body) is the
+        // parent of the others. input9 is unused and must, therefore, not be logged.
+        assertEquals(9, nodes.size());
         
         // get input nodes
@@ -429,11 +432,5 @@
             assertTrue(node instanceof HTMLPageElement);
             assertEquals("HTML", node.getPlatform());
-            
-            if (i != 8) {
-                assertTrue(node.isUsed());
-            }
-            else {
-                assertFalse(node.isUsed());
-            }
+            assertTrue(node.isUsed());
 
             assertNotNull(guiModel.getChildren(node));
@@ -464,5 +461,5 @@
         assertEvent(sequence.get(7), 8, MouseClick.class, nodes.get(7), 255, 4);
         assertEvent(sequence.get(8), 9, Scroll.class, body, 0, 0);
-        assertEvent(sequence.get(9), 10, MouseClick.class, nodes.get(9), 516, 154);
+        assertEvent(sequence.get(9), 10, MouseClick.class, nodes.get(8), 516, 154);
 
     }
Index: /trunk/autoquest-htmlmonitor/src/main/java/de/ugoe/cs/autoquest/htmlmonitor/HtmlGUIElement.java
===================================================================
--- /trunk/autoquest-htmlmonitor/src/main/java/de/ugoe/cs/autoquest/htmlmonitor/HtmlGUIElement.java	(revision 1314)
+++ /trunk/autoquest-htmlmonitor/src/main/java/de/ugoe/cs/autoquest/htmlmonitor/HtmlGUIElement.java	(revision 1315)
@@ -113,16 +113,11 @@
     /**
      * <p>
-     * returns the id of the parent GUI element, if any
+     * returns the parent GUI element, if any
      * </p>
      *
-     * @return the id of the parent GUI element, or null, if this element does not have a parent
+     * @return the parent GUI element, or null, if this element does not have a parent
      */
-    String getParentId() {
-        if (parent == null) {
-            return null;
-        }
-        else {
-            return parent.getId();
-        }
+    HtmlGUIElement getParent() {
+        return parent;
     }
 
Index: /trunk/autoquest-htmlmonitor/src/main/java/de/ugoe/cs/autoquest/htmlmonitor/HtmlMonitorOutputWriter.java
===================================================================
--- /trunk/autoquest-htmlmonitor/src/main/java/de/ugoe/cs/autoquest/htmlmonitor/HtmlMonitorOutputWriter.java	(revision 1314)
+++ /trunk/autoquest-htmlmonitor/src/main/java/de/ugoe/cs/autoquest/htmlmonitor/HtmlMonitorOutputWriter.java	(revision 1315)
@@ -204,8 +204,4 @@
         }
         
-        if (guiStructure != null) {
-            dumpGuiStructure(guiStructure);
-        }
-        
         for (HtmlEvent event : events) {
             dumpEvent(event);
@@ -226,47 +222,4 @@
     /**
      * <p>
-     * dumps the GUI structure provided by the parameter into the log file. Calls itself
-     * recursively to traverse the GUI structure.
-     * </p>
-     *
-     * @param guiStructure the GUI structure to be logged
-     */
-    private void dumpGuiStructure(HtmlGUIElement guiStructure) {
-        if (!loggedGUIElements.contains(guiStructure)) {
-            outputWriter.print("<component id=\"");
-            outputWriter.print(guiStructure.getId());
-            outputWriter.println("\">");
-        
-            if (guiStructure instanceof HtmlServer) {
-                dumpParam("host", ((HtmlServer) guiStructure).getName());
-                dumpParam("port", ((HtmlServer) guiStructure).getPort());
-            }
-            else if (guiStructure instanceof HtmlDocument) {
-                dumpParam("path", ((HtmlDocument) guiStructure).getPath());
-                dumpParam("query", ((HtmlDocument) guiStructure).getQuery());
-                dumpParam("title", ((HtmlDocument) guiStructure).getTitle());
-            }
-            else if (guiStructure instanceof HtmlPageElement) {
-                dumpParam("tagname", ((HtmlPageElement) guiStructure).getTagName());
-                dumpParam("htmlid", ((HtmlPageElement) guiStructure).getHtmlId());
-                dumpParam("index", ((HtmlPageElement) guiStructure).getIndex());
-            }
-            
-            dumpParam("parent", guiStructure.getParentId());
-        
-            outputWriter.println("</component>");
-        
-            loggedGUIElements.add(guiStructure);
-        }
-        
-        if (guiStructure.getChildren() != null) {
-            for (HtmlGUIElement child : guiStructure.getChildren()) {
-                dumpGuiStructure(child);
-            }
-        }
-    }
-
-    /**
-     * <p>
      * formats a received event and writes it to the log file. One event results in one line
      * in the log file containing all infos of the event.
@@ -276,4 +229,8 @@
      */
     private void dumpEvent(HtmlEvent event) {
+        if (event.getTarget() != null) {
+            ensureGuiElementDumped(event.getTarget());
+        }
+        
         outputWriter.print("<event type=\"");
         outputWriter.print(event.getEventType());
@@ -304,4 +261,50 @@
         
         outputWriter.println("</event>");
+    }
+
+    /**
+     * <p>
+     * dumps a GUI element starting with its parent GUI elements into the log file. Calls itself
+     * recursively to traverse for dumping the parents first.
+     * </p>
+     *
+     * @param guiStructure the GUI structure to be logged
+     */
+    private void ensureGuiElementDumped(HtmlGUIElement guiElement) {
+        if (!loggedGUIElements.contains(guiElement)) {
+            
+            HtmlGUIElement parent = guiElement.getParent();
+            String parentId = null;
+            
+            if (parent != null) {
+                ensureGuiElementDumped(parent);
+                parentId = parent.getId();
+            }
+            
+            outputWriter.print("<component id=\"");
+            outputWriter.print(guiElement.getId());
+            outputWriter.println("\">");
+        
+            if (guiElement instanceof HtmlServer) {
+                dumpParam("host", ((HtmlServer) guiElement).getName());
+                dumpParam("port", ((HtmlServer) guiElement).getPort());
+            }
+            else if (guiElement instanceof HtmlDocument) {
+                dumpParam("path", ((HtmlDocument) guiElement).getPath());
+                dumpParam("query", ((HtmlDocument) guiElement).getQuery());
+                dumpParam("title", ((HtmlDocument) guiElement).getTitle());
+            }
+            else if (guiElement instanceof HtmlPageElement) {
+                dumpParam("tagname", ((HtmlPageElement) guiElement).getTagName());
+                dumpParam("htmlid", ((HtmlPageElement) guiElement).getHtmlId());
+                dumpParam("index", ((HtmlPageElement) guiElement).getIndex());
+            }
+            
+            dumpParam("parent", parentId);
+        
+            outputWriter.println("</component>");
+        
+            loggedGUIElements.add(guiElement);
+        }
     }
 
