Index: trunk/quest-jfcmonitor/src/main/java/de/ugoe/cs/quest/jfcmonitor/JFCComponent.java
===================================================================
--- trunk/quest-jfcmonitor/src/main/java/de/ugoe/cs/quest/jfcmonitor/JFCComponent.java	(revision 850)
+++ trunk/quest-jfcmonitor/src/main/java/de/ugoe/cs/quest/jfcmonitor/JFCComponent.java	(revision 851)
@@ -4,4 +4,5 @@
 import java.awt.Component;
 import java.awt.Container;
+import java.awt.event.ContainerListener;
 import java.beans.PropertyChangeListener;
 import java.io.File;
@@ -46,4 +47,7 @@
     private static List<PropertyChangeListener> propertyChangeListeners = 
     	new ArrayList<PropertyChangeListener>();
+    
+    private static List<ContainerListener> containerListeners =
+    		new ArrayList<ContainerListener>();
 
     /**
@@ -60,6 +64,16 @@
     }
     
-    public static void addListener(PropertyChangeListener list){
+    public static void addPropertyChangeListener(PropertyChangeListener list){
     	propertyChangeListeners.add(list);
+    }
+    
+    public static void addContainerListener(ContainerListener list){
+    	containerListeners.add(list);
+    }
+    
+    public static boolean isKnown(Component component){
+    	if (knownComponents.containsKey(component))
+    		return true;
+    	return false;
     }
 
@@ -190,4 +204,7 @@
 
         if (component instanceof Container) {
+        	for (ContainerListener listener: containerListeners)
+        		((Container) component).addContainerListener(listener);
+        	
             for (Component childComponent : ((Container) component).getComponents()) {
                 add(childComponent, this);
@@ -223,4 +240,6 @@
         builder.append("  <component");
         if (parent != null){
+        	if (!JFCComponent.isKnown(parent.component))
+        		throw new AssertionError("Referenced parent is not known.");
         	builder.append(" parent=\"" + Integer.toHexString(parent.component.hashCode()) + "\"");
         }
Index: trunk/quest-jfcmonitor/src/main/java/de/ugoe/cs/quest/jfcmonitor/JFCContainerListener.java
===================================================================
--- trunk/quest-jfcmonitor/src/main/java/de/ugoe/cs/quest/jfcmonitor/JFCContainerListener.java	(revision 851)
+++ trunk/quest-jfcmonitor/src/main/java/de/ugoe/cs/quest/jfcmonitor/JFCContainerListener.java	(revision 851)
@@ -0,0 +1,53 @@
+
+package de.ugoe.cs.quest.jfcmonitor;
+
+import java.awt.Component;
+import java.awt.event.ContainerEvent;
+import java.awt.event.ContainerListener;
+
+/**
+ * <p>
+ * A ComponentListener responsible for monitoring adding and removing of GUI components
+ * </p>
+ * 
+ * @author Fabian Glaser
+ * @version 1.0
+ */
+public class JFCContainerListener implements ContainerListener {
+	 /**
+     * <p>
+     * Writer for logging events.
+     * </p>
+     */
+    final private JFCMonitorOutputWriter outputWriter;	
+	
+    /**
+     * <p>
+     * Constructor. Creates a new JFCContainerListener with a given {@link JFCMonitorOutputWriter}, where the
+     * monitored information is logged.
+     * </p>
+     * 
+     * @param outputWriter
+     *            writer for the logged information
+     */
+    public JFCContainerListener(JFCMonitorOutputWriter outputWriter) {
+        this.outputWriter = outputWriter;
+    }
+
+	@Override
+	public void componentAdded(ContainerEvent e) {
+		Component src = e.getChild();
+		if (!JFCComponent.isKnown(src)){
+			JFCComponent.add(src);
+			JFCComponent jfcComponent = JFCComponent.find(src);
+			outputWriter.write(jfcComponent.getXML());
+			outputWriter.write(jfcComponent.printChildren());
+		}		
+	}
+
+	@Override
+	public void componentRemoved(ContainerEvent e) {
+		//System.out.println("Component has been removed...");
+	}
+
+}
Index: trunk/quest-jfcmonitor/src/main/java/de/ugoe/cs/quest/jfcmonitor/JFCNameChangeListener.java
===================================================================
--- trunk/quest-jfcmonitor/src/main/java/de/ugoe/cs/quest/jfcmonitor/JFCNameChangeListener.java	(revision 851)
+++ trunk/quest-jfcmonitor/src/main/java/de/ugoe/cs/quest/jfcmonitor/JFCNameChangeListener.java	(revision 851)
@@ -0,0 +1,48 @@
+/**
+ * 
+ */
+package de.ugoe.cs.quest.jfcmonitor;
+
+import java.awt.Component;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+
+import javax.accessibility.AccessibleContext;
+
+import de.ugoe.cs.util.StringTools;
+
+/**
+ * @author Fabian Glaser
+ *
+ */
+public class JFCNameChangeListener implements PropertyChangeListener {
+	 /**
+     * <p>
+     * Writer for logging events.
+     * </p>
+     */
+    final private JFCMonitorOutputWriter outputWriter;	
+    
+    public JFCNameChangeListener(JFCMonitorOutputWriter outputWriter){
+    	this.outputWriter = outputWriter;
+    }
+	
+	@Override
+	public void propertyChange(PropertyChangeEvent evt) {
+		if (evt.getPropertyName().equals("AccessibleName")){
+			AccessibleContext context = (AccessibleContext) evt.getSource();
+			Component component = (Component) context.getAccessibleParent();
+			StringBuilder builder = new StringBuilder();
+			builder.append("<componentNameChange hash=\"");
+			if (!JFCComponent.isKnown(component)){
+					System.err.println("Referenced component is not known");
+					throw new AssertionError("Referenced component is not known.");
+			}
+			builder.append(Integer.toHexString(component.hashCode()));
+			builder.append("\" newName=\"" + evt.getNewValue());
+			builder.append("\"/>" + StringTools.ENDLINE);
+			outputWriter.write(builder.toString());
+		}		
+	}
+	
+}
Index: trunk/quest-jfcmonitor/src/main/java/de/ugoe/cs/quest/jfcmonitor/NameChangeListener.java
===================================================================
--- trunk/quest-jfcmonitor/src/main/java/de/ugoe/cs/quest/jfcmonitor/NameChangeListener.java	(revision 850)
+++ 	(revision )
@@ -1,44 +1,0 @@
-/**
- * 
- */
-package de.ugoe.cs.quest.jfcmonitor;
-
-import java.awt.Component;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-
-import de.ugoe.cs.util.StringTools;
-
-/**
- * @author Fabian Glaser
- *
- */
-public class NameChangeListener implements PropertyChangeListener {
-	 /**
-     * <p>
-     * Writer for logging events.
-     * </p>
-     */
-    final private JFCMonitorOutputWriter outputWriter;	
-    
-    public NameChangeListener(JFCMonitorOutputWriter outputWriter){
-    	this.outputWriter = outputWriter;
-    }
-	
-	@Override
-	public void propertyChange(PropertyChangeEvent evt) {
-		if (evt.getPropertyName().equals("AccessibleName")){
-			StringBuilder builder = new StringBuilder();
-			builder.append("<componentNameChange hash=\"");
-			outputWriter.write(evt.getSource().toString());
-			if (JFCComponent.find((Component) evt.getSource()) == null)
-					System.err.println("Quelle nicht bekannt");
-			builder.append(Integer.toHexString(evt.getSource().hashCode()));
-			builder.append("\" newName=\"" + evt.getNewValue());
-			builder.append("\"/>" + StringTools.ENDLINE);
-			outputWriter.write(builder.toString());
-		}
-			
-	}
-	
-}
Index: trunk/quest-jfcmonitor/src/main/java/de/ugoe/cs/quest/jfcmonitor/Runner.java
===================================================================
--- trunk/quest-jfcmonitor/src/main/java/de/ugoe/cs/quest/jfcmonitor/Runner.java	(revision 850)
+++ trunk/quest-jfcmonitor/src/main/java/de/ugoe/cs/quest/jfcmonitor/Runner.java	(revision 851)
@@ -64,5 +64,5 @@
         Toolkit.getDefaultToolkit().addAWTEventListener(new WindowMonitor(jfcWriter),
                                                         AWTEvent.WINDOW_EVENT_MASK);
-        JFCComponent.addListener(new NameChangeListener(jfcWriter));
+        JFCComponent.addPropertyChangeListener(new JFCNameChangeListener(jfcWriter));
 
         if (stdOutputWrite) {
@@ -80,5 +80,6 @@
                 Toolkit.getDefaultToolkit().addAWTEventListener(new WindowMonitor(stdJfcWriter),
                         AWTEvent.WINDOW_EVENT_MASK);
-                JFCComponent.addListener(new NameChangeListener(stdJfcWriter));
+                JFCComponent.addPropertyChangeListener(new JFCNameChangeListener(stdJfcWriter));
+                JFCComponent.addContainerListener(new JFCContainerListener(stdJfcWriter));
             }
             catch (UnsupportedEncodingException e) {
Index: trunk/quest-jfcmonitor/src/main/java/de/ugoe/cs/quest/jfcmonitor/WindowMonitor.java
===================================================================
--- trunk/quest-jfcmonitor/src/main/java/de/ugoe/cs/quest/jfcmonitor/WindowMonitor.java	(revision 850)
+++ trunk/quest-jfcmonitor/src/main/java/de/ugoe/cs/quest/jfcmonitor/WindowMonitor.java	(revision 851)
@@ -60,8 +60,4 @@
                 }
                 break;
-            case WindowEvent.WINDOW_CLOSED:
-                window = ((WindowEvent) event).getWindow();
-                JFCComponent.remove(window);
-                break;
             default:
                 break;
