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 826)
+++ trunk/quest-jfcmonitor/src/main/java/de/ugoe/cs/quest/jfcmonitor/JFCComponent.java	(revision 842)
@@ -23,5 +23,5 @@
  * </p>
  * 
- * @author Steffen Herbold
+ * @author Steffen Herbold, Fabian Glaser
  * @version 1.0
  */
@@ -199,8 +199,9 @@
         setTitle();
         StringBuilder builder = new StringBuilder();
-        if (parent != null) {
-            builder.append(parent.getXML());
-        }
-        builder.append("  <component>" + StringTools.ENDLINE);
+        builder.append("  <component");
+        if (parent != null){
+        	builder.append(" parent=" + Integer.toHexString(parent.component.hashCode()));
+        }
+        builder.append(">"+ StringTools.ENDLINE);
         builder.append("   <param name=\"title\" value=\"" + title + "\" />" + StringTools.ENDLINE);
         builder.append("   <param name=\"class\" value=\"" + componentClass + "\" />" +
@@ -212,4 +213,19 @@
         builder.append("  </component>" + StringTools.ENDLINE);
         return builder.toString();
+    }
+    
+    /**
+     * <p>
+     * Returns an XML representation of the components children.
+     * </p>
+     * @return XML representation of children
+     */
+    public String printChildren(){
+    	StringBuilder builder = new StringBuilder();
+        for (JFCComponent child: children){
+            	builder.append(child.getXML());
+            	builder.append(child.printChildren());
+        }
+    	return builder.toString();
     }
 
Index: trunk/quest-jfcmonitor/src/main/java/de/ugoe/cs/quest/jfcmonitor/JFCListener.java
===================================================================
--- trunk/quest-jfcmonitor/src/main/java/de/ugoe/cs/quest/jfcmonitor/JFCListener.java	(revision 826)
+++ trunk/quest-jfcmonitor/src/main/java/de/ugoe/cs/quest/jfcmonitor/JFCListener.java	(revision 842)
@@ -8,6 +8,4 @@
 import java.awt.event.KeyEvent;
 import java.awt.event.MouseEvent;
-import java.io.IOException;
-import java.io.OutputStreamWriter;
 
 import de.ugoe.cs.util.StringTools;
@@ -19,5 +17,5 @@
  * </p>
  * 
- * @author Steffen Herbold
+ * @author Steffen Herbold, Fabian Glaser
  * @version 1.0
  */
@@ -29,9 +27,9 @@
      * </p>
      */
-    final private OutputStreamWriter outputWriter;
+    final private JFCMonitorOutputWriter outputWriter;
 
     /**
      * <p>
-     * Constructor. Creates a new JFCListener with a given {@link OutputStreamWriter}, where the
+     * Constructor. Creates a new JFCListener with a given {@link JFCMonitorOutputWriter}, where the
      * monitored information is logged.
      * </p>
@@ -40,13 +38,6 @@
      *            writer for the logged information
      */
-    public JFCListener(OutputStreamWriter outputWriter) {
+    public JFCListener(JFCMonitorOutputWriter outputWriter) {
         this.outputWriter = outputWriter;
-        try {
-            outputWriter.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + StringTools.ENDLINE);
-            outputWriter.write("<sessions>" + StringTools.ENDLINE);
-        }
-        catch (IOException e) {
-            System.err.println("JFCMONITOR -- Failure writing to log: " + e.getMessage());
-        }
     }
 
@@ -98,11 +89,5 @@
         }
         if (builder.length() > 0 && outputWriter != null) {
-            try {
-                outputWriter.write(builder.toString());
-                outputWriter.flush();
-            }
-            catch (IOException e) {
-                System.err.println("JFCMONITOR -- Failure writing to log: " + e.getMessage());
-            }
+            outputWriter.write(builder.toString());
         }
     }
@@ -119,15 +104,13 @@
      */
     private void addSourceInfo(StringBuilder builder, AWTEvent event) {
-        builder.append(" <source>" + StringTools.ENDLINE);
+        builder.append(" <source");
+        if (event.getSource() instanceof Component) {
+            Component source = (Component) event.getSource();
+            builder.append(" hash=" + Integer.toHexString(source.hashCode()));
+        }  
+        builder.append(">" + StringTools.ENDLINE);
         builder.append("  <param name=\"toString\" value=\"" +
             StringTools.xmlEntityReplacement(event.getSource().toString()) + "\" />" +
             StringTools.ENDLINE);
-        if (event.getSource() instanceof Component) {
-            Component source = (Component) event.getSource();
-            JFCComponent jfcComponent = JFCComponent.find(source);
-            if (jfcComponent != null) {
-                builder.append(jfcComponent.getXML());
-            }
-        }
         builder.append(" </source>" + StringTools.ENDLINE);
     }
Index: trunk/quest-jfcmonitor/src/main/java/de/ugoe/cs/quest/jfcmonitor/JFCMonitorOutputWriter.java
===================================================================
--- trunk/quest-jfcmonitor/src/main/java/de/ugoe/cs/quest/jfcmonitor/JFCMonitorOutputWriter.java	(revision 842)
+++ trunk/quest-jfcmonitor/src/main/java/de/ugoe/cs/quest/jfcmonitor/JFCMonitorOutputWriter.java	(revision 842)
@@ -0,0 +1,53 @@
+package de.ugoe.cs.quest.jfcmonitor;
+
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+
+import de.ugoe.cs.util.StringTools;
+/**
+ * <p>
+ * This class is used as wrapper for writers for JFCMonitor logs. 
+ * </p>
+ * @author Fabian Glaser
+ * @version 1.0
+ *
+ */
+public class JFCMonitorOutputWriter{
+	 /**
+     * <p>
+     * Writer for logging events.
+     * </p>
+     */
+    final private OutputStreamWriter outputWriter;
+    
+    /**
+     * <p>
+     * Constructor. Creates a new JFCMonitorOutputWriter with a given {@link OutputStreamWriter}, where the
+     * monitored information is written to. It writes log header information on construction to 
+     * given OutputStreamWriter.  
+     * </p>
+     * 
+     * @param outputWriter
+     *            writer for the logged information
+     */
+    
+    public JFCMonitorOutputWriter(OutputStreamWriter outputWriter) {
+        this.outputWriter = outputWriter;
+        try {
+            outputWriter.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + StringTools.ENDLINE);
+            outputWriter.write("<sessions>" + StringTools.ENDLINE);
+        }
+        catch (IOException e) {
+            System.err.println("JFCMONITOR -- Failure writing to log: " + e.getMessage());
+        }
+    }
+    
+    public void write(String str){
+    	try {
+			outputWriter.write(str);
+			outputWriter.flush();
+		} catch (IOException e) {
+	        System.err.println("JFCMONITOR -- Failure writing to log: " + e.getMessage());
+		}
+    }
+}
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 826)
+++ trunk/quest-jfcmonitor/src/main/java/de/ugoe/cs/quest/jfcmonitor/Runner.java	(revision 842)
@@ -20,5 +20,5 @@
  * </p>
  * 
- * @author Steffen Herbold
+ * @author Steffen Herbold, Fabian Glaser
  * @version 1.0
  */
@@ -50,5 +50,5 @@
             // the writer is not closed explicitly!
             fis = new FileOutputStream(logfileName, true);
-            writer = new OutputStreamWriter(fis, "UTF-16");
+            writer = new OutputStreamWriter(fis, "UTF-8");
         }
         catch (IOException e) {
@@ -57,9 +57,10 @@
         }
 
-        AWTEventListener listenerFile = new JFCListener(writer);
+        JFCMonitorOutputWriter jfcWriter = new JFCMonitorOutputWriter(writer);
+        AWTEventListener listenerFile = new JFCListener(jfcWriter);
         Toolkit.getDefaultToolkit().addAWTEventListener(listenerFile, AWTEvent.KEY_EVENT_MASK);
         Toolkit.getDefaultToolkit().addAWTEventListener(listenerFile, AWTEvent.MOUSE_EVENT_MASK);
         Toolkit.getDefaultToolkit().addAWTEventListener(listenerFile, FocusEvent.FOCUS_EVENT_MASK);
-        Toolkit.getDefaultToolkit().addAWTEventListener(new WindowMonitor(),
+        Toolkit.getDefaultToolkit().addAWTEventListener(new WindowMonitor(jfcWriter),
                                                         AWTEvent.WINDOW_EVENT_MASK);
 
@@ -67,5 +68,7 @@
             AWTEventListener listenerStdOut;
             try {
-                listenerStdOut = new JFCListener(new OutputStreamWriter(System.out, "UTF-8"));
+            	OutputStreamWriter stdOutputWriter = new OutputStreamWriter(System.out, "UTF-8");
+            	JFCMonitorOutputWriter stdJfcWriter = new JFCMonitorOutputWriter(stdOutputWriter);
+                listenerStdOut = new JFCListener(stdJfcWriter);
                 Toolkit.getDefaultToolkit().addAWTEventListener(listenerStdOut,
                                                                 AWTEvent.KEY_EVENT_MASK);
@@ -74,4 +77,6 @@
                 Toolkit.getDefaultToolkit().addAWTEventListener(listenerStdOut,
                                                                 FocusEvent.FOCUS_EVENT_MASK);
+                Toolkit.getDefaultToolkit().addAWTEventListener(new WindowMonitor(stdJfcWriter),
+                        AWTEvent.WINDOW_EVENT_MASK);
             }
             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 826)
+++ trunk/quest-jfcmonitor/src/main/java/de/ugoe/cs/quest/jfcmonitor/WindowMonitor.java	(revision 842)
@@ -12,8 +12,28 @@
  * </p>
  * 
- * @author Steffen Herbold
+ * @author Steffen Herbold, Fabian Glaser
  * @version 1.0
  */
 public class WindowMonitor implements AWTEventListener {
+	 /**
+     * <p>
+     * Writer for logging events.
+     * </p>
+     */
+    final private JFCMonitorOutputWriter outputWriter;	
+	
+    /**
+     * <p>
+     * Constructor. Creates a new WindowMonitor with a given {@link JFCMonitorOutputWriter}, where the
+     * monitored information is logged.
+     * </p>
+     * 
+     * @param outputWriter
+     *            writer for the logged information
+     */
+    public WindowMonitor(JFCMonitorOutputWriter outputWriter) {
+        this.outputWriter = outputWriter;
+    }
+	
 
     /**
@@ -34,4 +54,9 @@
                 window = ((WindowEvent) event).getWindow();
                 JFCComponent.add(window);
+                JFCComponent jfcComponent = JFCComponent.find(window);
+                if (jfcComponent != null) {
+                    outputWriter.write(jfcComponent.getXML());
+                    outputWriter.write(jfcComponent.printChildren());
+                }
                 break;
             case WindowEvent.WINDOW_CLOSED:
