Index: trunk/autoquest-ui-swt/src/main/java/de/ugoe/cs/autoquest/ui/swt/AbstractInsertEventComposite.java
===================================================================
--- trunk/autoquest-ui-swt/src/main/java/de/ugoe/cs/autoquest/ui/swt/AbstractInsertEventComposite.java	(revision 2128)
+++ trunk/autoquest-ui-swt/src/main/java/de/ugoe/cs/autoquest/ui/swt/AbstractInsertEventComposite.java	(revision 2146)
@@ -18,13 +18,13 @@
 
 import de.ugoe.cs.autoquest.eventcore.Event;
-import de.ugoe.cs.autoquest.eventcore.guimodel.GUIModel;
+import de.ugoe.cs.autoquest.eventcore.IHierarchicalEventTargetModel;
 
 abstract public class AbstractInsertEventComposite extends Composite {
 
-    protected GUIModel guiModel;
+    protected IHierarchicalEventTargetModel<?> eventTargetModel;
 
-    public AbstractInsertEventComposite(Composite parent, int style, GUIModel guiModel) {
+    public AbstractInsertEventComposite(Composite parent, int style, IHierarchicalEventTargetModel<?> eventTargetModel) {
         super(parent, style);
-        this.guiModel = guiModel;
+        this.eventTargetModel = eventTargetModel;
     }
 
Index: trunk/autoquest-ui-swt/src/main/java/de/ugoe/cs/autoquest/ui/swt/EditSequenceDialog.java
===================================================================
--- trunk/autoquest-ui-swt/src/main/java/de/ugoe/cs/autoquest/ui/swt/EditSequenceDialog.java	(revision 2128)
+++ trunk/autoquest-ui-swt/src/main/java/de/ugoe/cs/autoquest/ui/swt/EditSequenceDialog.java	(revision 2146)
@@ -32,5 +32,5 @@
 
 import de.ugoe.cs.autoquest.eventcore.Event;
-import de.ugoe.cs.autoquest.eventcore.guimodel.GUIModel;
+import de.ugoe.cs.autoquest.eventcore.IHierarchicalEventTargetModel;
 
 public class EditSequenceDialog extends Dialog {
@@ -43,5 +43,5 @@
 
     private java.util.List<Event> sequence;
-    private GUIModel guiModel;
+    private IHierarchicalEventTargetModel<?> eventTargetModel;
 
     /**
@@ -51,8 +51,8 @@
      * @param style
      */
-    public EditSequenceDialog(Shell parent, int style, GUIModel guiModel) {
+    public EditSequenceDialog(Shell parent, int style, IHierarchicalEventTargetModel<?> eventTargetModel) {
         super(parent, style);
         setText("SWT Dialog");
-        this.guiModel = guiModel;
+        this.eventTargetModel = eventTargetModel;
     }
 
@@ -206,5 +206,5 @@
 
     private void openInsertDialog(int position) {
-        if (guiModel == null) {
+        if (eventTargetModel == null) {
             MessageBox messageBox = new MessageBox(shell, SWT.ERROR);
             messageBox.setMessage("Operation not supported!\nOnly works for GUI sequences.");
@@ -212,5 +212,7 @@
             messageBox.open();
         } else {
-            InsertAssertionDialog insertDialog = new InsertAssertionDialog(shell, SWT.NONE, guiModel);
+            InsertAssertionDialog insertDialog =
+                new InsertAssertionDialog(shell, SWT.NONE, eventTargetModel);
+            
             Event event = insertDialog.open();
             if (event != null) {
Index: trunk/autoquest-ui-swt/src/main/java/de/ugoe/cs/autoquest/ui/swt/GuiModelTabComposite.java
===================================================================
--- trunk/autoquest-ui-swt/src/main/java/de/ugoe/cs/autoquest/ui/swt/GuiModelTabComposite.java	(revision 2128)
+++ trunk/autoquest-ui-swt/src/main/java/de/ugoe/cs/autoquest/ui/swt/GuiModelTabComposite.java	(revision 2146)
@@ -25,4 +25,6 @@
 import org.eclipse.swt.widgets.List;
 
+import de.ugoe.cs.autoquest.eventcore.IHierarchicalEventTarget;
+import de.ugoe.cs.autoquest.eventcore.IHierarchicalEventTargetModel;
 import de.ugoe.cs.autoquest.eventcore.guimodel.GUIModel;
 import de.ugoe.cs.util.console.GlobalDataContainer;
@@ -52,5 +54,5 @@
      * </p>
      */
-    private void createContents() {
+    private <T extends IHierarchicalEventTarget> void createContents() {
         setLayout(new GridLayout(5, false));
 
@@ -68,8 +70,12 @@
                 }
                 String modelName = selectedStrings[0];
-                GUIModel model = (GUIModel) GlobalDataContainer.getInstance().getData(modelName);
+                
+                @SuppressWarnings("unchecked")
+                IHierarchicalEventTargetModel<T> model =
+                    (IHierarchicalEventTargetModel<T>) GlobalDataContainer.getInstance().getData(modelName);
 
-                ShowGuiModelDialog showGuiModelDialog =
-                    new ShowGuiModelDialog(getShell(), SWT.NONE, model, modelName);
+                ShowGuiModelDialog<T> showGuiModelDialog =
+                    new ShowGuiModelDialog<T>(getShell(), SWT.NONE, model, modelName);
+                
                 showGuiModelDialog.open();
             }
Index: trunk/autoquest-ui-swt/src/main/java/de/ugoe/cs/autoquest/ui/swt/InsertAssertionDialog.java
===================================================================
--- trunk/autoquest-ui-swt/src/main/java/de/ugoe/cs/autoquest/ui/swt/InsertAssertionDialog.java	(revision 2128)
+++ trunk/autoquest-ui-swt/src/main/java/de/ugoe/cs/autoquest/ui/swt/InsertAssertionDialog.java	(revision 2146)
@@ -31,5 +31,5 @@
 
 import de.ugoe.cs.autoquest.eventcore.Event;
-import de.ugoe.cs.autoquest.eventcore.guimodel.GUIModel;
+import de.ugoe.cs.autoquest.eventcore.IHierarchicalEventTargetModel;
 
 public class InsertAssertionDialog extends Dialog {
@@ -41,5 +41,5 @@
 
     List<AbstractInsertEventComposite> insertEventComposites;
-    GUIModel guiModel;
+    IHierarchicalEventTargetModel<?> eventTargetModel;
 
     /**
@@ -49,8 +49,8 @@
      * @param style
      */
-    public InsertAssertionDialog(Shell parent, int style, GUIModel guiModel) {
+    public InsertAssertionDialog(Shell parent, int style, IHierarchicalEventTargetModel<?> eventTargetModel) {
         super(parent, style);
         setText("SWT Dialog");
-        this.guiModel = guiModel;
+        this.eventTargetModel = eventTargetModel;
     }
 
@@ -90,5 +90,5 @@
         tbtmTextEquals.setText("TextEquals");
         AbstractInsertEventComposite compTextEquals =
-            new InsertTextEquals(tabFolder, SWT.NO_BACKGROUND, guiModel);
+            new InsertTextEquals(tabFolder, SWT.NO_BACKGROUND, eventTargetModel);
         tbtmTextEquals.setControl(compTextEquals);
         insertEventComposites.add(compTextEquals);
@@ -97,5 +97,5 @@
         tbtmFileEquals.setText("FileEquals");
         AbstractInsertEventComposite compFileEquals =
-            new InsertFileEquals(tabFolder, SWT.NO_BACKGROUND, guiModel);
+            new InsertFileEquals(tabFolder, SWT.NO_BACKGROUND, eventTargetModel);
         tbtmFileEquals.setControl(compFileEquals);
         insertEventComposites.add(compFileEquals);
Index: trunk/autoquest-ui-swt/src/main/java/de/ugoe/cs/autoquest/ui/swt/InsertFileEquals.java
===================================================================
--- trunk/autoquest-ui-swt/src/main/java/de/ugoe/cs/autoquest/ui/swt/InsertFileEquals.java	(revision 2128)
+++ trunk/autoquest-ui-swt/src/main/java/de/ugoe/cs/autoquest/ui/swt/InsertFileEquals.java	(revision 2146)
@@ -27,5 +27,5 @@
 import de.ugoe.cs.autoquest.assertions.FileEqualsReplay;
 import de.ugoe.cs.autoquest.eventcore.Event;
-import de.ugoe.cs.autoquest.eventcore.guimodel.GUIModel;
+import de.ugoe.cs.autoquest.eventcore.IHierarchicalEventTargetModel;
 
 import org.eclipse.swt.events.SelectionAdapter;
@@ -46,6 +46,6 @@
      * @param style
      */
-    public InsertFileEquals(Composite parent, int style, GUIModel guiModel) {
-        super(parent, style, guiModel);
+    public InsertFileEquals(Composite parent, int style, IHierarchicalEventTargetModel<?> eventTargetModel) {
+        super(parent, style, eventTargetModel);
         setLayout(new GridLayout(3, false));
 
Index: trunk/autoquest-ui-swt/src/main/java/de/ugoe/cs/autoquest/ui/swt/InsertTextEquals.java
===================================================================
--- trunk/autoquest-ui-swt/src/main/java/de/ugoe/cs/autoquest/ui/swt/InsertTextEquals.java	(revision 2128)
+++ trunk/autoquest-ui-swt/src/main/java/de/ugoe/cs/autoquest/ui/swt/InsertTextEquals.java	(revision 2146)
@@ -31,6 +31,6 @@
 import de.ugoe.cs.autoquest.eventcore.Event;
 import de.ugoe.cs.autoquest.eventcore.IEventTarget;
-import de.ugoe.cs.autoquest.eventcore.guimodel.GUIModel;
-import de.ugoe.cs.autoquest.eventcore.guimodel.IGUIElement;
+import de.ugoe.cs.autoquest.eventcore.IHierarchicalEventTarget;
+import de.ugoe.cs.autoquest.eventcore.IHierarchicalEventTargetModel;
 
 import org.eclipse.swt.events.SelectionAdapter;
@@ -47,6 +47,6 @@
      * @param style
      */
-    public InsertTextEquals(Composite parent, int style, GUIModel guiModel) {
-        super(parent, style, guiModel);
+    public InsertTextEquals(Composite parent, int style, IHierarchicalEventTargetModel<?> eventTargetModel) {
+        super(parent, style, eventTargetModel);
         setLayout(new GridLayout(3, false));
 
@@ -60,5 +60,5 @@
         guiTree = new Tree(this, SWT.BORDER);
         guiTree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1));
-        buildGuiTree();
+        buildGuiTree(eventTargetModel);
         new Label(this, SWT.NONE);
 
@@ -109,19 +109,22 @@
     }
 
-    private void buildGuiTree() {
-        for (IGUIElement element : guiModel.getRootElements()) {
+    private <T extends IHierarchicalEventTarget> void buildGuiTree(IHierarchicalEventTargetModel<T> eventTargetModel) {
+        for (T element : eventTargetModel.getRootElements()) {
             TreeItem child = new TreeItem(guiTree, SWT.NULL);
             child.setText(element.toString());
             child.setData(element);
-            buildGuiTree(child, guiModel.getChildren(element));
+            buildGuiTree(child, eventTargetModel.getChildren(element), eventTargetModel);
         }
     }
 
-    private void buildGuiTree(TreeItem currentParent, List<IGUIElement> elements) {
-        for (IGUIElement element : elements) {
+    private <T extends IHierarchicalEventTarget> void buildGuiTree(TreeItem                         currentParent,
+                                                                   List<T>                          list,
+                                                                   IHierarchicalEventTargetModel<T> eventTargetModel)
+    {
+        for (T element : list) {
             TreeItem child = new TreeItem(currentParent, SWT.NULL);
             child.setText(element.toString());
             child.setData(element);
-            buildGuiTree(child, guiModel.getChildren(element));
+            buildGuiTree(child, eventTargetModel.getChildren(element), eventTargetModel);
         }
     }
Index: trunk/autoquest-ui-swt/src/main/java/de/ugoe/cs/autoquest/ui/swt/SequencesDialog.java
===================================================================
--- trunk/autoquest-ui-swt/src/main/java/de/ugoe/cs/autoquest/ui/swt/SequencesDialog.java	(revision 2128)
+++ trunk/autoquest-ui-swt/src/main/java/de/ugoe/cs/autoquest/ui/swt/SequencesDialog.java	(revision 2146)
@@ -29,5 +29,5 @@
 import de.ugoe.cs.autoquest.SequenceInstanceOf;
 import de.ugoe.cs.autoquest.eventcore.Event;
-import de.ugoe.cs.autoquest.eventcore.guimodel.GUIModel;
+import de.ugoe.cs.autoquest.eventcore.IHierarchicalEventTargetModel;
 import de.ugoe.cs.util.console.GlobalDataContainer;
 
@@ -41,5 +41,5 @@
     private List sequenceList;
     private Collection<java.util.List<Event>> sequences;
-    private GUIModel guiModel;
+    private IHierarchicalEventTargetModel<?> eventTargetModel;
 
     protected Shell shell;
@@ -99,5 +99,5 @@
                 else {
                     EditSequenceDialog editSequenceDialog =
-                        new EditSequenceDialog(shell, SWT.NONE, guiModel);
+                        new EditSequenceDialog(shell, SWT.NONE, eventTargetModel);
                     int counter = 0;
                     java.util.List<Event> selectedSequence = null;
@@ -143,7 +143,7 @@
             Object targetObject =
                 GlobalDataContainer.getInstance().getData(sequencesName + "_targets");
-            guiModel = null;
-            if (targetObject instanceof GUIModel) {
-                guiModel = (GUIModel) targetObject;
+            eventTargetModel = null;
+            if (targetObject instanceof IHierarchicalEventTargetModel) {
+                eventTargetModel = (IHierarchicalEventTargetModel<?>) targetObject;
             }
         }
Index: trunk/autoquest-ui-swt/src/main/java/de/ugoe/cs/autoquest/ui/swt/ShowGuiModelDialog.java
===================================================================
--- trunk/autoquest-ui-swt/src/main/java/de/ugoe/cs/autoquest/ui/swt/ShowGuiModelDialog.java	(revision 2128)
+++ trunk/autoquest-ui-swt/src/main/java/de/ugoe/cs/autoquest/ui/swt/ShowGuiModelDialog.java	(revision 2146)
@@ -28,4 +28,6 @@
 import org.eclipse.swt.widgets.TreeItem;
 
+import de.ugoe.cs.autoquest.eventcore.IHierarchicalEventTarget;
+import de.ugoe.cs.autoquest.eventcore.IHierarchicalEventTargetModel;
 import de.ugoe.cs.autoquest.eventcore.guimodel.GUIModel;
 import de.ugoe.cs.autoquest.eventcore.guimodel.IGUIElement;
@@ -34,12 +36,12 @@
 import org.eclipse.swt.widgets.Label;
 
-public class ShowGuiModelDialog extends Dialog {
+public class ShowGuiModelDialog<T extends IHierarchicalEventTarget> extends Dialog {
 
     protected Shell shell;
-    private Tree guiTree;
-
-    protected GUIModel model;
-
-    public ShowGuiModelDialog(Shell parent, int style, GUIModel model, String modelName) {
+    private Tree targetTree;
+
+    protected IHierarchicalEventTargetModel<T> model;
+
+    public ShowGuiModelDialog(Shell parent, int style, IHierarchicalEventTargetModel<T> model, String modelName) {
         super(parent, style);
         setText("GUI Model " + modelName);
@@ -66,8 +68,8 @@
         shell.setLayout(new GridLayout(4, false));
 
-        guiTree = new Tree(shell, SWT.BORDER | SWT.MULTI);
-        guiTree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 4, 1));
-
-        buildGuiTree();
+        targetTree = new Tree(shell, SWT.BORDER | SWT.MULTI);
+        targetTree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 4, 1));
+
+        buildTargetTree();
 
         Button btnExpandAll = new Button(shell, SWT.NONE);
@@ -75,5 +77,5 @@
             @Override
             public void widgetSelected(SelectionEvent e) {
-                expandAll(guiTree, true);
+                expandAll(targetTree, true);
             }
         });
@@ -84,28 +86,30 @@
             @Override
             public void widgetSelected(SelectionEvent e) {
-                expandAll(guiTree, false);
+                expandAll(targetTree, false);
             }
         });
         btnCollapseAll.setText("Collapse all");
         
-        Button btnCondense = new Button(shell, SWT.NONE);
-        btnCondense.addSelectionListener(new SelectionAdapter() {
-            @Override
-            public void widgetSelected(SelectionEvent e) {
-                model.condenseModel();
-                guiTree.removeAll();
-                buildGuiTree();
-            }
-        });
-        btnCondense.setText("Condense");
-        
-        Button btnMerge = new Button(shell, SWT.NONE);
-        btnMerge.addSelectionListener(new SelectionAdapter() {
-            @Override
-            public void widgetSelected(SelectionEvent e) {
-                mergeSelectedNode(guiTree);
-            }
-        });
-        btnMerge.setText("Merge nodes");
+        if (model instanceof GUIModel) {
+            Button btnCondense = new Button(shell, SWT.NONE);
+            btnCondense.addSelectionListener(new SelectionAdapter() {
+                @Override
+                public void widgetSelected(SelectionEvent e) {
+                    ((GUIModel) model).condenseModel();
+                    targetTree.removeAll();
+                    buildTargetTree();
+                }
+            });
+            btnCondense.setText("Condense");
+
+            Button btnMerge = new Button(shell, SWT.NONE);
+            btnMerge.addSelectionListener(new SelectionAdapter() {
+                @Override
+                public void widgetSelected(SelectionEvent e) {
+                    mergeSelectedNode(targetTree);
+                }
+            });
+            btnMerge.setText("Merge nodes");
+        }
         
         //new Label(shell, SWT.NONE);
@@ -116,21 +120,23 @@
     }
 
-    private void buildGuiTree() {
-        GUIModel.Traverser traverser = model.getTraverser();
-        
-        IGUIElement root = traverser.firstChild();
+    private void buildTargetTree() {
+        IHierarchicalEventTargetModel.Traverser<T> traverser =  model.getTraverser();
+        
+        IHierarchicalEventTarget root = traverser.firstChild();
         
         while (root != null) {
-            TreeItem child = new TreeItem(guiTree, SWT.NULL);
+            TreeItem child = new TreeItem(targetTree, SWT.NULL);
             child.setText(root.toString());
             child.setData(root);
-            buildGuiTree(child, traverser);
+            buildTargetTree(child, traverser);
             root = traverser.nextSibling();
         }
     }
 
-    private void buildGuiTree(TreeItem currentParent, GUIModel.Traverser traverser) {
+    private void buildTargetTree(TreeItem                                   currentParent,
+                                 IHierarchicalEventTargetModel.Traverser<T> traverser)
+    {
         if (traverser.hasFirstChild()) {
-            IGUIElement childElement = traverser.firstChild();
+            T childElement = traverser.firstChild();
         
             while (childElement != null) {
@@ -138,5 +144,5 @@
                 child.setText(childElement.toString());
                 child.setData(childElement);
-                buildGuiTree(child, traverser);
+                buildTargetTree(child, traverser);
                 childElement = traverser.nextSibling();
             }
@@ -159,4 +165,5 @@
     }
     
+    @SuppressWarnings("unchecked")
     private void mergeSelectedNode(Tree tree) {
         TreeItem[] selectedNodes = tree.getSelection();
@@ -184,7 +191,9 @@
             IGUIElement firstElement = (IGUIElement) selectedNodes[0].getData();
             for( int i=1 ; i<selectedNodes.length ; i++ ) {
-                model.mergeGUIElements(firstElement, (IGUIElement) selectedNodes[i].getData());
-            }
-        } catch( IllegalArgumentException e) {
+                ((GUIModel) model).mergeEventTargets
+                    (firstElement, (IGUIElement) selectedNodes[i].getData());
+            }
+        }
+        catch( IllegalArgumentException e) {
             Console.logException(e);
         }
@@ -193,10 +202,10 @@
         if (firstParent != null) {
             firstParent.removeAll();
-            buildGuiTree(firstParent, model.getTraverser((IGUIElement) firstParent.getData()));
+            buildTargetTree(firstParent, model.getTraverser((T) firstParent.getData()));
             firstParent.setExpanded(true);
         }
         else {
-            guiTree.removeAll();
-            buildGuiTree();
+            targetTree.removeAll();
+            buildTargetTree();
         }
     }
