Index: trunk/sources/HeuristicLab.PluginInfrastructure/3.3/LightweightApplicationManager.cs
===================================================================
--- trunk/sources/HeuristicLab.PluginInfrastructure/3.3/LightweightApplicationManager.cs	(revision 7283)
+++ trunk/sources/HeuristicLab.PluginInfrastructure/3.3/LightweightApplicationManager.cs	(revision 7492)
@@ -126,8 +126,9 @@
         var assemblyTypes = assembly.GetTypes();
 
-        var buildTypes = from t in assemblyTypes
+        var buildTypes = from t in assembly.GetTypes()
                          where !IsNonDiscoverableType(t)
+                         where onlyInstantiable == false ||
+                               (!t.IsAbstract && !t.IsInterface && !t.HasElementType)
                          where CheckTypeCompatibility(type, t)
-                         where onlyInstantiable == false || (!t.IsAbstract && !t.IsInterface && !t.HasElementType)
                          select BuildType(t, type);
 
@@ -152,6 +153,24 @@
         return true;
       if (type.IsGenericType && other.IsGenericType) {
+        var otherGenericArguments = other.GetGenericArguments();
+        var typeGenericArguments = type.GetGenericArguments();
+
+        //check type arguments count
+        if (otherGenericArguments.Length != typeGenericArguments.Length)
+          return false;
+
+        //check type arguments & constraints
+        int i = 0;
+        foreach (var genericArgument in typeGenericArguments) {
+          if (otherGenericArguments[i].IsGenericParameter) {
+            foreach (var constraint in otherGenericArguments[i].GetGenericParameterConstraints())
+              if (!constraint.IsAssignableFrom(genericArgument)) return false;
+          } else if (genericArgument != otherGenericArguments[i]) return false;
+          i++;
+        }
+        //check types
         try {
-          if (type.IsAssignableFrom(other.GetGenericTypeDefinition().MakeGenericType(type.GetGenericArguments())))
+          var otherGenericTypeDefinition = other.GetGenericTypeDefinition();
+          if (type.IsAssignableFrom(otherGenericTypeDefinition.MakeGenericType(typeGenericArguments)))
             return true;
         }
Index: trunk/sources/HeuristicLab.PluginInfrastructure/3.3/SandboxApplicationManager.cs
===================================================================
--- trunk/sources/HeuristicLab.PluginInfrastructure/3.3/SandboxApplicationManager.cs	(revision 7283)
+++ trunk/sources/HeuristicLab.PluginInfrastructure/3.3/SandboxApplicationManager.cs	(revision 7492)
@@ -267,7 +267,7 @@
       var buildTypes = from t in assembly.GetTypes()
                        where !IsNonDiscoverableType(t)
-                       where CheckTypeCompatibility(type, t)
                        where onlyInstantiable == false ||
                              (!t.IsAbstract && !t.IsInterface && !t.HasElementType)
+                       where CheckTypeCompatibility(type, t)
                        select BuildType(t, type);
 
@@ -286,6 +286,24 @@
         return true;
       if (type.IsGenericType && other.IsGenericType) {
+        var otherGenericArguments = other.GetGenericArguments();
+        var typeGenericArguments = type.GetGenericArguments();
+
+        //check type arguments count
+        if (otherGenericArguments.Length != typeGenericArguments.Length)
+          return false;
+
+        //check type arguments & constraints
+        int i = 0;
+        foreach (var genericArgument in typeGenericArguments) {
+          if (otherGenericArguments[i].IsGenericParameter) {
+            foreach (var constraint in otherGenericArguments[i].GetGenericParameterConstraints())
+              if (!constraint.IsAssignableFrom(genericArgument)) return false;
+          } else if (genericArgument != otherGenericArguments[i]) return false;
+          i++;
+        }
+        //check types
         try {
-          if (type.IsAssignableFrom(other.GetGenericTypeDefinition().MakeGenericType(type.GetGenericArguments())))
+          var otherGenericTypeDefinition = other.GetGenericTypeDefinition();
+          if (type.IsAssignableFrom(otherGenericTypeDefinition.MakeGenericType(typeGenericArguments)))
             return true;
         }
