Index: trunk/autoquest-core-events/src/main/java/de/ugoe/cs/autoquest/eventcore/guimodel/GUIModel.java
===================================================================
--- trunk/autoquest-core-events/src/main/java/de/ugoe/cs/autoquest/eventcore/guimodel/GUIModel.java	(revision 1086)
+++ trunk/autoquest-core-events/src/main/java/de/ugoe/cs/autoquest/eventcore/guimodel/GUIModel.java	(revision 1088)
@@ -163,14 +163,16 @@
 
         for (TreeNode node : allNodes) {
-            for (TreeNode child : node.children) {
-                if (child.guiElement.equals(guiElement)) {
-                    if (parent != null) {
-                        parent = node.guiElement;
-                    }
-                    else {
-                        Console
+            if (node.children != null) {
+                for (TreeNode child : node.children) {
+                    if (child.guiElement.equals(guiElement)) {
+                        if (parent != null) {
+                            parent = node.guiElement;
+                        }
+                        else {
+                            Console
                             .traceln(Level.SEVERE,
                                      "Multiple nodes in the internal GUI model match the same GUI element. "
-                                         + "This should not be the case and the GUI model is probably invalid.");
+                                             + "This should not be the case and the GUI model is probably invalid.");
+                        }
                     }
                 }
@@ -208,4 +210,23 @@
     public Traverser getTraverser() {
         return new Traverser();
+    }
+
+    /**
+     * returns a traverser for the GUI model starting at the given GUI element. Returns null, if
+     * the GUI element is not part of the model.
+     * 
+     * @return a traverser
+     */
+    public Traverser getTraverser(IGUIElement startingAt) {
+        TreeNode node = findNode(startingAt);
+        
+        if (node != null) {
+            Traverser traverser = new Traverser();
+            traverser.navigateTo(node);
+            return traverser;
+        }
+        else {
+            return null;
+        }
     }
 
@@ -616,7 +637,11 @@
          */
         public boolean hasNextSibling() {
-            StackEntry entry = nodeStack.pop();
-            boolean result = nodeStack.peek().treeNode.children.size() > (entry.index + 1);
-            pushChild(entry.index);
+            boolean result = false;
+            if (nodeStack.size() > 1) {
+                StackEntry entry = nodeStack.pop();
+                result = nodeStack.peek().treeNode.children.size() > (entry.index + 1);
+                pushChild(entry.index);
+            }
+            
             return result;
         }
@@ -662,4 +687,31 @@
         }
         
+        /**
+         * <p>
+         * navigates the traverser to the given node in the GUI model
+         * </p>
+         */
+        private boolean navigateTo(TreeNode node) {
+            if (hasFirstChild()) {
+                IGUIElement childElement = firstChild();
+            
+                while (childElement != null) {
+                    if (childElement.equals(node.guiElement)) {
+                        return true;
+                    }
+                    else if (navigateTo(node)) {
+                        return true;
+                    }
+                    else {
+                        childElement = nextSibling();
+                    }
+                }
+            
+                parent();
+            }
+            
+            return false;
+        }
+
         /**
          * <p>
