Index: trunk/EventBenchCore/src/de/ugoe/cs/eventbench/data/Event.java
===================================================================
--- trunk/EventBenchCore/src/de/ugoe/cs/eventbench/data/Event.java	(revision 361)
+++ trunk/EventBenchCore/src/de/ugoe/cs/eventbench/data/Event.java	(revision 373)
@@ -97,15 +97,10 @@
 			Event<?> otherEvent = (Event<?>) other;
 			if (otherEvent.canEqual(this)) {
-				if (type != null && target != null) {
+				if (type != null) {
 					return type.equals(otherEvent.type)
-							&& target.equals(otherEvent.target);
-				} else if (type != null && target == null) {
-					return type.equals(otherEvent.type)
-							&& otherEvent.target == null;
-				} else if (type == null && target != null) {
+							&& targetEquals(otherEvent.target);
+				} else {
 					return otherEvent.type == null
-							&& target.equals(otherEvent.target);
-				} else {
-					return otherEvent.type == null && otherEvent.target == null;
+							&& targetEquals(otherEvent.target);
 				}
 			} else {
@@ -287,3 +282,28 @@
 		return true;
 	}
+
+	/**
+	 * <p>
+	 * This function is used by {@link #equals(Object)} to determine if the
+	 * targets of both events are equal. The standard implementation provided by
+	 * this class performs a String comparison between the target strings.
+	 * </p>
+	 * <p>
+	 * Subclasses can override this method to implemented more sophisticated
+	 * means for the target comparison, e.g., to account for changes in the
+	 * title of a widget.
+	 * </p>
+	 * 
+	 * @param otherTarget
+	 * @return
+	 */
+	protected boolean targetEquals(String otherTarget) {
+		boolean retVal;
+		if (target != null) {
+			retVal = target.equals(otherTarget);
+		} else {
+			retVal = (otherTarget == null);
+		}
+		return retVal;
+	}
 }
