Index: trunk/quest-core-events-test/src/test/java/de/ugoe/cs/quest/eventcore/guimodel/AbstractDefaultGUIElementTest.java
===================================================================
--- trunk/quest-core-events-test/src/test/java/de/ugoe/cs/quest/eventcore/guimodel/AbstractDefaultGUIElementTest.java	(revision 680)
+++ trunk/quest-core-events-test/src/test/java/de/ugoe/cs/quest/eventcore/guimodel/AbstractDefaultGUIElementTest.java	(revision 681)
@@ -123,4 +123,9 @@
         }
 
+        @Override
+        public String getStringIdentifier() {
+            return "DUMMY";
+        }
+
     }
 
Index: trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/Event.java
===================================================================
--- trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/Event.java	(revision 680)
+++ trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/Event.java	(revision 681)
@@ -161,5 +161,5 @@
         String id = type.toString();
         if( target!=null ) {
-            id += "." + target.toString();
+            id += "." + target.getStringIdentifier();
         }
         return id;
Index: trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/IEventTarget.java
===================================================================
--- trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/IEventTarget.java	(revision 680)
+++ trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/IEventTarget.java	(revision 681)
@@ -15,3 +15,5 @@
 
     public String getPlatform();
+    
+    public String getStringIdentifier();
 }
Index: trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/KeyboardFocusChange.java
===================================================================
--- trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/KeyboardFocusChange.java	(revision 680)
+++ trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/KeyboardFocusChange.java	(revision 681)
@@ -1,2 +1,3 @@
+
 package de.ugoe.cs.quest.eventcore.gui;
 
@@ -8,5 +9,5 @@
  */
 public class KeyboardFocusChange implements IInteraction {
-    
+
     /**  */
     private static final long serialVersionUID = 1L;
@@ -50,3 +51,26 @@
         return "keyboard focus changed";
     }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#equals(java.lang.Object)
+     */
+    @Override
+    public boolean equals(Object obj) {
+        if (obj instanceof KeyboardFocusChange) {
+            return true;
+        }
+        return false;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#hashCode()
+     */
+    @Override
+    public int hashCode() {
+        return getClass().hashCode();
+    }
 }
Index: trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/MouseButtonDown.java
===================================================================
--- trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/MouseButtonDown.java	(revision 680)
+++ trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/MouseButtonDown.java	(revision 681)
@@ -77,4 +77,27 @@
         return false;
     }
+    
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#equals(java.lang.Object)
+     */
+    @Override
+    public boolean equals(Object obj) {
+        if (obj instanceof MouseButtonDown) {
+            return getButton().equals(((MouseButtonDown) obj).getButton());
+        }
+        return false;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#hashCode()
+     */
+    @Override
+    public int hashCode() {
+        return getButton().hashCode();
+    }
 
 }
Index: trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/MouseButtonInteraction.java
===================================================================
--- trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/MouseButtonInteraction.java	(revision 680)
+++ trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/MouseButtonInteraction.java	(revision 681)
@@ -33,4 +33,26 @@
         return button;
     }
+    
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#equals(java.lang.Object)
+     */
+    @Override
+    public boolean equals(Object obj) {
+        if (obj instanceof MouseButtonInteraction) {
+            return getButton().equals(((MouseButtonInteraction) obj).getButton());
+        }
+        return false;
+    }
 
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#hashCode()
+     */
+    @Override
+    public int hashCode() {
+        return getButton().hashCode();
+    }
 }
Index: trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/MouseButtonUp.java
===================================================================
--- trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/MouseButtonUp.java	(revision 680)
+++ trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/MouseButtonUp.java	(revision 681)
@@ -78,3 +78,25 @@
     }
 
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#equals(java.lang.Object)
+     */
+    @Override
+    public boolean equals(Object obj) {
+        if (obj instanceof MouseButtonUp) {
+            return getButton().equals(((MouseButtonUp) obj).getButton());
+        }
+        return false;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#hashCode()
+     */
+    @Override
+    public int hashCode() {
+        return getButton().hashCode();
+    }
 }
Index: trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/MouseClick.java
===================================================================
--- trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/MouseClick.java	(revision 680)
+++ trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/MouseClick.java	(revision 681)
@@ -78,3 +78,25 @@
     }
 
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#equals(java.lang.Object)
+     */
+    @Override
+    public boolean equals(Object obj) {
+        if (obj instanceof MouseClick) {
+            return getButton().equals(((MouseClick) obj).getButton());
+        }
+        return false;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#hashCode()
+     */
+    @Override
+    public int hashCode() {
+        return getButton().hashCode();
+    }
 }
Index: trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/MouseDoubleClick.java
===================================================================
--- trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/MouseDoubleClick.java	(revision 680)
+++ trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/MouseDoubleClick.java	(revision 681)
@@ -78,3 +78,25 @@
     }
 
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#equals(java.lang.Object)
+     */
+    @Override
+    public boolean equals(Object obj) {
+        if (obj instanceof MouseDoubleClick) {
+            return getButton().equals(((MouseDoubleClick) obj).getButton());
+        }
+        return false;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#hashCode()
+     */
+    @Override
+    public int hashCode() {
+        return getButton().hashCode();
+    }
 }
Index: trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/TextInput.java
===================================================================
--- trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/TextInput.java	(revision 680)
+++ trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/TextInput.java	(revision 681)
@@ -48,4 +48,27 @@
         return false;
     }
+    
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#equals(java.lang.Object)
+     */
+    @Override
+    public boolean equals(Object obj) {
+        if (obj instanceof TextInput) {
+            return true;
+        }
+        return false;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#hashCode()
+     */
+    @Override
+    public int hashCode() {
+        return getClass().hashCode();
+    }
 
 }
Index: trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/TextSelection.java
===================================================================
--- trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/TextSelection.java	(revision 680)
+++ trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/gui/TextSelection.java	(revision 681)
@@ -48,4 +48,27 @@
         return false;
     }
+    
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#equals(java.lang.Object)
+     */
+    @Override
+    public boolean equals(Object obj) {
+        if (obj instanceof TextSelection) {
+            return true;
+        }
+        return false;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#hashCode()
+     */
+    @Override
+    public int hashCode() {
+        return getClass().hashCode();
+    }
 
 }
Index: trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/testutils/DummyGUIElement.java
===================================================================
--- trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/testutils/DummyGUIElement.java	(revision 680)
+++ trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/testutils/DummyGUIElement.java	(revision 681)
@@ -1,2 +1,3 @@
+
 package de.ugoe.cs.quest.tasktrees.testutils;
 
@@ -12,5 +13,5 @@
  */
 public class DummyGUIElement extends AbstractDefaultGUIElement implements IGUIElement {
-    
+
     /**  */
     private static final long serialVersionUID = 1L;
@@ -27,5 +28,7 @@
     }
 
-    /* (non-Javadoc)
+    /*
+     * (non-Javadoc)
+     * 
      * @see de.ugoe.cs.quest.eventcore.IEventTarget#getPlatform()
      */
@@ -33,4 +36,14 @@
     public String getPlatform() {
         return "Dummy";
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.ugoe.cs.quest.eventcore.IEventTarget#getStringIdentifier()
+     */
+    @Override
+    public String getStringIdentifier() {
+        return name;
     }
 
Index: trunk/quest-plugin-guitar/src/main/java/de/ugoe/cs/quest/plugin/guitar/eventcore/GUITAREventTarget.java
===================================================================
--- trunk/quest-plugin-guitar/src/main/java/de/ugoe/cs/quest/plugin/guitar/eventcore/GUITAREventTarget.java	(revision 680)
+++ trunk/quest-plugin-guitar/src/main/java/de/ugoe/cs/quest/plugin/guitar/eventcore/GUITAREventTarget.java	(revision 681)
@@ -1,2 +1,3 @@
+
 package de.ugoe.cs.quest.plugin.guitar.eventcore;
 
@@ -15,23 +16,29 @@
 
     private static final long serialVersionUID = 1L;
-    
+
     String widgetId;
-    
+
     public GUITAREventTarget(String widgetId) {
         this.widgetId = widgetId;
     }
 
-    /* (non-Javadoc)
+    /*
+     * (non-Javadoc)
+     * 
      * @see de.ugoe.cs.quest.eventcore.IEventTarget#getPlatform()
      */
     @Override
     public String getPlatform() {
-        // TODO Auto-generated method stub
-        System.out.println("TODO: implement GUITAREventTarget.getPlatform ");
-        return null;
+        return "GUITAR";
     }
-    
+
+    @Override
+    public String getStringIdentifier() {
+        return this.toString();
+    }
+
     /*
      * (non-Javadoc)
+     * 
      * @see java.lang.Object#toString()
      */
@@ -41,3 +48,35 @@
     }
 
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#equals(java.lang.Object)
+     */
+    @Override
+    public boolean equals(Object obj) {
+        if (obj instanceof GUITAREventTarget) {
+            if (widgetId != null) {
+                return widgetId.equals(((GUITAREventTarget) obj).widgetId);
+            }
+            else {
+                return ((GUITAREventTarget) obj).widgetId == null;
+            }
+        }
+        return false;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#hashCode()
+     */
+    @Override
+    public int hashCode() {
+        int hash = 13;
+        if (widgetId != null) {
+            hash = widgetId.hashCode();
+        }
+        return hash;
+    }
+
 }
Index: trunk/quest-plugin-guitar/src/main/java/de/ugoe/cs/quest/plugin/guitar/eventcore/GUITAREventType.java
===================================================================
--- trunk/quest-plugin-guitar/src/main/java/de/ugoe/cs/quest/plugin/guitar/eventcore/GUITAREventType.java	(revision 680)
+++ trunk/quest-plugin-guitar/src/main/java/de/ugoe/cs/quest/plugin/guitar/eventcore/GUITAREventType.java	(revision 681)
@@ -1,2 +1,3 @@
+
 package de.ugoe.cs.quest.plugin.guitar.eventcore;
 
@@ -16,12 +17,14 @@
     /**  */
     private static final long serialVersionUID = 1L;
-    
+
     String guitarEventId;
-    
+
     public GUITAREventType(String eventId) {
         this.guitarEventId = eventId;
     }
-    
-    /* (non-Javadoc)
+
+    /*
+     * (non-Javadoc)
+     * 
      * @see de.ugoe.cs.quest.eventcore.IEventType#getName()
      */
@@ -30,7 +33,8 @@
         return "GUITAREventType";
     }
-    
+
     /*
      * (non-Javadoc)
+     * 
      * @see java.lang.Object#toString()
      */
@@ -40,3 +44,35 @@
     }
 
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#equals(java.lang.Object)
+     */
+    @Override
+    public boolean equals(Object obj) {
+        if (obj instanceof GUITAREventType) {
+            if (guitarEventId != null) {
+                return guitarEventId.equals(((GUITAREventType) obj).guitarEventId);
+            }
+            else {
+                return ((GUITAREventType) obj).guitarEventId == null;
+            }
+        }
+        return false;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#hashCode()
+     */
+    @Override
+    public int hashCode() {
+        int hash = 37;
+        if (guitarEventId != null) {
+            hash = guitarEventId.hashCode();
+        }
+        return hash;
+    }
+
 }
Index: trunk/quest-plugin-jfc/src/main/java/de/ugoe/cs/quest/plugin/jfc/guimodel/JFCGUIElement.java
===================================================================
--- trunk/quest-plugin-jfc/src/main/java/de/ugoe/cs/quest/plugin/jfc/guimodel/JFCGUIElement.java	(revision 680)
+++ trunk/quest-plugin-jfc/src/main/java/de/ugoe/cs/quest/plugin/jfc/guimodel/JFCGUIElement.java	(revision 681)
@@ -92,9 +92,20 @@
      */
     @Override
+    public String getStringIdentifier() {
+        String str = this.toString();
+        if( getParent()!=null ) {
+            return getParent().getStringIdentifier() + "->" + str;
+        }
+        return str;
+    }
+    
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#toString()
+     */
+    @Override
     public String toString() {
         String str = getElementDescriptor() + "(" + getName() + ", " + getElementHash() + "," + getIcon() + "," + getIndex() +")";
-        if( getParent()!=null ) {
-            return getParent().toString() + "->" + str;
-        }
         return str;
     }
Index: trunk/quest-plugin-mfc/src/main/java/de/ugoe/cs/quest/plugin/mfc/guimodel/MFCGUIElement.java
===================================================================
--- trunk/quest-plugin-mfc/src/main/java/de/ugoe/cs/quest/plugin/mfc/guimodel/MFCGUIElement.java	(revision 680)
+++ trunk/quest-plugin-mfc/src/main/java/de/ugoe/cs/quest/plugin/mfc/guimodel/MFCGUIElement.java	(revision 681)
@@ -78,4 +78,13 @@
         ((MFCGUIElementSpec) super.getSpecification()).update(furtherSpec);
     }
+    
+    @Override
+    public String getStringIdentifier() {
+        String str = this.toString();
+        if( getParent()!=null ) {
+            return getParent().getStringIdentifier() + "->" + str;
+        }
+        return str;
+    }
 
     /* (non-Javadoc)
Index: trunk/quest-plugin-php/src/main/java/de/ugoe/cs/quest/plugin/php/eventcore/PHPEventTarget.java
===================================================================
--- trunk/quest-plugin-php/src/main/java/de/ugoe/cs/quest/plugin/php/eventcore/PHPEventTarget.java	(revision 680)
+++ trunk/quest-plugin-php/src/main/java/de/ugoe/cs/quest/plugin/php/eventcore/PHPEventTarget.java	(revision 681)
@@ -1,2 +1,3 @@
+
 package de.ugoe.cs.quest.plugin.php.eventcore;
 
@@ -49,4 +50,9 @@
     }
 
+    @Override
+    public String getStringIdentifier() {
+        return this.toString();
+    }
+
     /*
      * (non-Javadoc)
@@ -59,3 +65,35 @@
     }
 
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#equals()
+     */
+    @Override
+    public boolean equals(Object obj) {
+        if (obj instanceof PHPEventTarget) {
+            if (path != null) {
+                return path.equals(((PHPEventTarget) obj).path);
+            }
+            else {
+                return ((PHPEventTarget) obj).path == null;
+            }
+        }
+        return false;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#hashCode()
+     */
+    @Override
+    public int hashCode() {
+        int hash = 3;
+        if (path != null) {
+            hash = path.hashCode();
+        }
+        return hash;
+    }
+
 }
Index: trunk/quest-plugin-php/src/main/java/de/ugoe/cs/quest/plugin/php/eventcore/PHPEventType.java
===================================================================
--- trunk/quest-plugin-php/src/main/java/de/ugoe/cs/quest/plugin/php/eventcore/PHPEventType.java	(revision 680)
+++ trunk/quest-plugin-php/src/main/java/de/ugoe/cs/quest/plugin/php/eventcore/PHPEventType.java	(revision 681)
@@ -1,2 +1,3 @@
+
 package de.ugoe.cs.quest.plugin.php.eventcore;
 
@@ -27,5 +28,5 @@
      * </p>
      */
-    private String path;
+    private final String path;
 
     /**
@@ -34,5 +35,5 @@
      * </p>
      */
-    private List<String> postVars;
+    private final List<String> postVars;
 
     /**
@@ -41,5 +42,5 @@
      * </p>
      */
-    private List<String> getVars;
+    private final List<String> getVars;
 
     /**
@@ -89,3 +90,40 @@
     }
 
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#equals(java.lang.Object)
+     */
+    @Override
+    public boolean equals(Object obj) {
+        if (obj instanceof PHPEventType) {
+            PHPEventType other = (PHPEventType) obj;
+            return ((path == null && other.path == null) || path.equals(other.path)) &&
+                ((postVars == null && other.postVars == null) || postVars.equals(other.postVars)) &&
+                ((getVars == null && other.getVars == null) || getVars.equals(other.getVars));
+        }
+        return false;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#hashCode()
+     */
+    @Override
+    public int hashCode() {
+        int hash = 17;
+        int multiplier = 7;
+        if (path != null) {
+            hash = hash * multiplier + path.hashCode();
+        }
+        if (postVars != null) {
+            hash = hash * multiplier + postVars.hashCode();
+        }
+        if (getVars != null) {
+            hash = hash * multiplier + getVars.hashCode();
+        }
+        return hash;
+    }
+
 }
