Index: trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/guimodel/AbstractDefaultGUIElement.java
===================================================================
--- trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/guimodel/AbstractDefaultGUIElement.java	(revision 597)
+++ trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/guimodel/AbstractDefaultGUIElement.java	(revision 603)
@@ -21,4 +21,7 @@
     private IGUIElementSpec specification;
 
+    /** the reference to the parent element */
+    private IGUIElement parent;
+
     /**
      * <p>
@@ -28,6 +31,7 @@
      * @param specification
      */
-    public AbstractDefaultGUIElement(IGUIElementSpec specification) {
+    public AbstractDefaultGUIElement(IGUIElementSpec specification, IGUIElement parent) {
         this.specification = specification;
+        this.parent = parent;
     }
 
@@ -42,4 +46,12 @@
     }
 
+    /* (non-Javadoc)
+     * @see de.ugoe.cs.quest.eventcore.guimodel.IGUIElement#getParent()
+     */
+    @Override
+    public IGUIElement getParent() {
+        return parent;
+    }
+
     /*
      * (non-Javadoc)
@@ -47,19 +59,18 @@
      * @see GUIElement#equals(GUIElement)
      */
-    public boolean equals(IGUIElement other) {
-        if (this == other)
-        {
-            return true;
-        }
-        
-        if (!this.getClass().isInstance(other)) {
-            return false;
-        }
-        
-        AbstractDefaultGUIElement otherElem = (AbstractDefaultGUIElement) other;
-        
-        return
-            ((otherElem.specification == specification) ||
-             ((specification != null) && specification.equals(otherElem.specification)));
+    public final boolean equals(Object other) {
+        // implement final, as GUI elments are all singletons and the equal only if they are the
+        // same object
+        return super.equals(other);
+    }
+
+    /* (non-Javadoc)
+     * @see java.lang.Object#hashCode()
+     */
+    @Override
+    public final int hashCode() {
+        // implement final, as GUI elments are all singletons and the equal only if they are the
+        // same object
+        return super.hashCode();
     }
 
Index: trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/guimodel/GUIElementFactory.java
===================================================================
--- trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/guimodel/GUIElementFactory.java	(revision 597)
+++ trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/guimodel/GUIElementFactory.java	(revision 603)
@@ -81,5 +81,5 @@
      */
     @Override
-    public IGUIElement instantiateGUIElement(IGUIElementSpec specification)
+    public IGUIElement instantiateGUIElement(IGUIElementSpec specification, IGUIElement parent)
         throws GUIModelConfigurationException
     {
@@ -100,9 +100,10 @@
                 }
 
-                Class<?>[] parameterTypes = new Class<?>[1];
+                Class<?>[] parameterTypes = new Class<?>[2];
                 parameterTypes[0] = specification.getClass();
-
-                guiElement =
-                    (IGUIElement) clazz.getConstructor(parameterTypes).newInstance(specification);
+                parameterTypes[1] = parent.getClass();
+
+                guiElement = (IGUIElement) clazz.getConstructor(parameterTypes).newInstance
+                    (specification, parent);
 
                 return guiElement;
@@ -177,5 +178,7 @@
      * @return
      */
-    private synchronized Properties getMappingsFromConfiguration() {
+    private synchronized Properties getMappingsFromConfiguration()
+        throws GUIModelConfigurationException
+    {
         if (mappingsFromConfiguration != null) {
             return mappingsFromConfiguration;
@@ -185,22 +188,33 @@
             
             File mappingsFolder = new File("data/guimappings");
-            for( File mappingsFile : mappingsFolder.listFiles()) {
-                if(!mappingsFile.isDirectory() && mappingsFile.getName().startsWith("guimapping") && mappingsFile.getName().endsWith(".txt")) {
-                    InputStream inStream;
-                    try {
-                        inStream = new FileInputStream(mappingsFile);
-                        mappingsFromConfiguration.load(inStream);
-                        inStream.close();
-                    }
-                    catch (FileNotFoundException e1) {
-                        // TODO Auto-generated catch block
-                        e1.printStackTrace();
-                    }
-                    catch (IOException e) {
-                        Logger.getLogger(this.getClass().getName()).warning
-                            ("invalid GUI mappings files " + mappingsFile.getName());
+            File[] children = mappingsFolder.listFiles();
+            
+            if (children != null) {
+                for (File mappingsFile : children) {
+                    if (!mappingsFile.isDirectory() &&
+                        mappingsFile.getName().startsWith("guimapping") &&
+                        mappingsFile.getName().endsWith(".txt"))
+                    {
+                        InputStream inStream;
+                        try {
+                            inStream = new FileInputStream(mappingsFile);
+                            mappingsFromConfiguration.load(inStream);
+                            inStream.close();
+                        }
+                        catch (FileNotFoundException e) {
+                            throw new GUIModelConfigurationException
+                                ("could not read mapping configuration file " + mappingsFile, e);
+                        }
+                        catch (IOException e) {
+                            throw new GUIModelConfigurationException
+                                ("could not read mapping configuration file " + mappingsFile, e);
+                        }
                     }
                 }
             }
+            else {
+                throw new GUIModelConfigurationException
+                    ("no GUI mappings file provided in folder " + mappingsFolder);
+            }
 
             return mappingsFromConfiguration;
Index: trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/guimodel/GUIModel.java
===================================================================
--- trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/guimodel/GUIModel.java	(revision 597)
+++ trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/guimodel/GUIModel.java	(revision 603)
@@ -8,4 +8,5 @@
 
 import java.util.ArrayList;
+import java.util.LinkedList;
 import java.util.List;
 
@@ -41,5 +42,5 @@
         throws GUIModelException
     {
-        List<IGUIElementSpec> remainingPath = new ArrayList<IGUIElementSpec>();
+        List<IGUIElementSpec> remainingPath = new LinkedList<IGUIElementSpec>();
         
         for (IGUIElementSpec spec : guiElementPath)
@@ -138,7 +139,8 @@
         // if we get here, the corresponding path does not exist yet. So create it
         if (matchingChildren.size() == 0) {
-            matchingChildren.add
-                (parentNode.addChild
-                     (guiElementFactory.instantiateGUIElement(specToIntegrateElementFor)));
+            IGUIElement newElement = guiElementFactory.instantiateGUIElement
+                (specToIntegrateElementFor, parentNode.guiElement);
+            
+            matchingChildren.add(parentNode.addChild(newElement));
         }
         else if (matchingChildren.size() > 1) {
Index: trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/guimodel/IGUIElement.java
===================================================================
--- trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/guimodel/IGUIElement.java	(revision 597)
+++ trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/guimodel/IGUIElement.java	(revision 603)
@@ -30,9 +30,16 @@
      * TODO comment
      * </p>
+     */
+    public IGUIElement getParent();
+
+    /**
+     * <p>
+     * TODO comment
+     * </p>
      *  
      * @param other
      * @return
      */
-    public boolean equals(IGUIElement other);
+    public boolean equals(Object other);
 
     /**
Index: trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/guimodel/IGUIElementFactory.java
===================================================================
--- trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/guimodel/IGUIElementFactory.java	(revision 597)
+++ trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/guimodel/IGUIElementFactory.java	(revision 603)
@@ -24,5 +24,5 @@
      * @return
      */
-    public IGUIElement instantiateGUIElement(IGUIElementSpec specification)
+    public IGUIElement instantiateGUIElement(IGUIElementSpec specification, IGUIElement parent)
         throws GUIModelConfigurationException;
     
