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 603)
+++ trunk/quest-core-events/src/main/java/de/ugoe/cs/quest/eventcore/guimodel/GUIElementFactory.java	(revision 604)
@@ -12,4 +12,5 @@
 import java.io.IOException;
 import java.io.InputStream;
+import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
 import java.util.Properties;
@@ -100,10 +101,51 @@
                 }
 
-                Class<?>[] parameterTypes = new Class<?>[2];
-                parameterTypes[0] = specification.getClass();
-                parameterTypes[1] = parent.getClass();
-
-                guiElement = (IGUIElement) clazz.getConstructor(parameterTypes).newInstance
-                    (specification, parent);
+                Constructor<?> constructor = null;
+                Class<?> parentClass = (parent == null) ? null : parent.getClass();
+                
+                // search for a constructor, that perfectly matches the types
+                for (Constructor<?> candidate : clazz.getConstructors()) {
+                    if ((parentClass != null) &&
+                        (candidate.getParameterTypes().length == 2) &&
+                        (candidate.getParameterTypes()[0].equals(specification.getClass())) &&
+                        (candidate.getParameterTypes()[1].equals(parentClass)))
+                    {
+                        constructor = candidate;
+                        break;
+                    }
+                    else if (parentClass == null) {
+                        if ((candidate.getParameterTypes().length >= 1) &&
+                            (candidate.getParameterTypes()[0].equals(specification.getClass())))
+                        {
+                            constructor = candidate;
+                            break;
+                        }
+                    }
+                }
+                
+                if (constructor == null) {
+                    // search for an assignable constructor
+                    for (Constructor<?> candidate : clazz.getConstructors()) {
+                        if ((candidate.getParameterTypes().length == 2) &&
+                            (candidate.getParameterTypes()[0].isInstance(specification)) &&
+                            (candidate.getParameterTypes()[1].isInstance(parent)))
+                        {
+                            constructor = candidate;
+                            break;
+                        }
+                    }
+                    
+                }
+                
+                if (constructor != null) {
+                    guiElement = (IGUIElement) constructor.newInstance(specification, parent);
+                }
+                else {
+                    throw new NoSuchMethodException
+                        ("no constructor with two parameters and assignable parameter types for " +
+                         specification.getClass() + " and " +
+                         (parent != null ? parent.getClass() : "null") + " found in class " +
+                         clazz);
+                }
 
                 return guiElement;
