Index: /trunk/sources/HeuristicLab 3.3 Tests.vsmdi
===================================================================
--- /trunk/sources/HeuristicLab 3.3 Tests.vsmdi	(revision 8570)
+++ /trunk/sources/HeuristicLab 3.3 Tests.vsmdi	(revision 8571)
@@ -3,40 +3,40 @@
   <TestList name="HeuristicLab.Tests-Samples" id="0aad3ad9-2cb3-41d5-b82b-2da77b8f0a56" parentListId="8c43106b-9dc1-4907-a29f-aa66a61bf5b6">
     <TestLinks>
-      <TestLink id="fc406b79-142c-bb12-8287-0bc768acd728" name="CreateIslandGaTspSampleTest" storage="Heuristiclab.Tests\bin\Heuristiclab.Tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-      <TestLink id="1f743a89-461d-5650-31ba-e68c02f0fbad" name="RunGaVrpSampleTest" storage="Heuristiclab.Tests\bin\Heuristiclab.Tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-      <TestLink id="f8489a03-acca-11d3-53cb-8e24d5f2bc12" name="RunIslandGaTspSampleTest" storage="Heuristiclab.Tests\bin\Heuristiclab.Tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-      <TestLink id="7512aa68-9dbe-f891-d1da-99dc94661142" name="RunEsGriewankSampleTest" storage="Heuristiclab.Tests\bin\Heuristiclab.Tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-      <TestLink id="0f7f90f7-e380-ff65-538e-ae559774092a" name="RunPsoSchwefelSampleTest" storage="Heuristiclab.Tests\bin\Heuristiclab.Tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-      <TestLink id="53547167-fc2b-4954-b200-2cc27b4c4951" name="RunVnsTspSampleTest" storage="Heuristiclab.Tests\bin\Heuristiclab.Tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-      <TestLink id="45db65d6-d6b2-67e4-1bec-293528739529" name="CreateEsGriewankSampleTest" storage="Heuristiclab.Tests\bin\Heuristiclab.Tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-      <TestLink id="e6f3ab8a-1630-560c-c8b9-4e8ce2522172" name="CreateVnsTspSampleTest" storage="Heuristiclab.Tests\bin\Heuristiclab.Tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-      <TestLink id="433a86f1-0126-5281-1c23-90b47f066d94" name="RunGpSymbolicClassificationSampleTest" storage="Heuristiclab.Tests\bin\Heuristiclab.Tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-      <TestLink id="5c5fb63e-d219-6818-bba2-9f66dbe4d727" name="CreateGpSymbolicRegressionSampleTest" storage="Heuristiclab.Tests\bin\Heuristiclab.Tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-      <TestLink id="6c054fba-432a-4fe2-507f-e2083c998056" name="CreatePsoSchwefelSampleTest" storage="Heuristiclab.Tests\bin\Heuristiclab.Tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-      <TestLink id="0b6b45a4-99ea-b020-805a-1652f0f5b5a7" name="CreateSimulatedAnnealingRastriginSampleTest" storage="Heuristiclab.Tests\bin\Heuristiclab.Tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-      <TestLink id="74b708a9-14d0-3cc3-d72e-139d1a27f5ef" name="CreateGaTspSampleTest" storage="Heuristiclab.Tests\bin\Heuristiclab.Tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-      <TestLink id="8bb23f49-5206-4245-08b9-471f543b3e21" name="RunGpSymbolicRegressionSampleTest" storage="Heuristiclab.Tests\bin\Heuristiclab.Tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-      <TestLink id="eec82cf0-dae7-63c8-a469-6dd84d49a935" name="RunGaTspSampleTest" storage="Heuristiclab.Tests\bin\Heuristiclab.Tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-      <TestLink id="77c479e4-8f9a-5474-b026-e5c0811c8eb0" name="CreateLocalSearchKnapsackSampleTest" storage="Heuristiclab.Tests\bin\Heuristiclab.Tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-      <TestLink id="0d883f66-2fc5-99fc-eabb-2dff566104f5" name="CreateTabuSearchTspSampleTest" storage="Heuristiclab.Tests\bin\Heuristiclab.Tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-      <TestLink id="c8ea68e8-b9d7-24cb-5540-655f58da13bf" name="CreateGpArtificialAntSampleTest" storage="Heuristiclab.Tests\bin\Heuristiclab.Tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-      <TestLink id="7d7f6024-f783-1c71-db60-2d6746653109" name="RunSimulatedAnnealingRastriginSampleTest" storage="Heuristiclab.Tests\bin\Heuristiclab.Tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-      <TestLink id="51e968a7-120f-dd28-9514-ad35d3ee66d2" name="CreateGaVrpSampleTest" storage="Heuristiclab.Tests\bin\Heuristiclab.Tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-      <TestLink id="29188193-8d50-0c61-c6fa-4d5b608a72e8" name="RunGpArtificialAntSampleTest" storage="Heuristiclab.Tests\bin\Heuristiclab.Tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-      <TestLink id="95278ae9-832c-bef9-0bbc-4432195e63fa" name="RunTabuSearchTspSampleTest" storage="Heuristiclab.Tests\bin\Heuristiclab.Tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-      <TestLink id="21f1371d-8c47-9588-d8fa-cf45fd1d81eb" name="RunLocalSearchKnapsackSampleTest" storage="Heuristiclab.Tests\bin\Heuristiclab.Tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-      <TestLink id="29257c28-7dfb-f227-00a4-776d74b02a7b" name="CreateGpSymbolicClassificationSampleTest" storage="Heuristiclab.Tests\bin\Heuristiclab.Tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+      <TestLink id="fc406b79-142c-bb12-8287-0bc768acd728" name="CreateIslandGaTspSampleTest" storage="heuristiclab.tests\bin\heuristiclab.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+      <TestLink id="1f743a89-461d-5650-31ba-e68c02f0fbad" name="RunGaVrpSampleTest" storage="heuristiclab.tests\bin\heuristiclab.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+      <TestLink id="f8489a03-acca-11d3-53cb-8e24d5f2bc12" name="RunIslandGaTspSampleTest" storage="heuristiclab.tests\bin\heuristiclab.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+      <TestLink id="7512aa68-9dbe-f891-d1da-99dc94661142" name="RunEsGriewankSampleTest" storage="heuristiclab.tests\bin\heuristiclab.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+      <TestLink id="0f7f90f7-e380-ff65-538e-ae559774092a" name="RunPsoSchwefelSampleTest" storage="heuristiclab.tests\bin\heuristiclab.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+      <TestLink id="53547167-fc2b-4954-b200-2cc27b4c4951" name="RunVnsTspSampleTest" storage="heuristiclab.tests\bin\heuristiclab.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+      <TestLink id="45db65d6-d6b2-67e4-1bec-293528739529" name="CreateEsGriewankSampleTest" storage="heuristiclab.tests\bin\heuristiclab.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+      <TestLink id="433a86f1-0126-5281-1c23-90b47f066d94" name="RunGpSymbolicClassificationSampleTest" storage="heuristiclab.tests\bin\heuristiclab.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+      <TestLink id="5c5fb63e-d219-6818-bba2-9f66dbe4d727" name="CreateGpSymbolicRegressionSampleTest" storage="heuristiclab.tests\bin\heuristiclab.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+      <TestLink id="6c054fba-432a-4fe2-507f-e2083c998056" name="CreatePsoSchwefelSampleTest" storage="heuristiclab.tests\bin\heuristiclab.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+      <TestLink id="7d7f6024-f783-1c71-db60-2d6746653109" name="RunSimulatedAnnealingRastriginSampleTest" storage="heuristiclab.tests\bin\heuristiclab.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+      <TestLink id="0b6b45a4-99ea-b020-805a-1652f0f5b5a7" name="CreateSimulatedAnnealingRastriginSampleTest" storage="heuristiclab.tests\bin\heuristiclab.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+      <TestLink id="74b708a9-14d0-3cc3-d72e-139d1a27f5ef" name="CreateGaTspSampleTest" storage="heuristiclab.tests\bin\heuristiclab.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+      <TestLink id="8bb23f49-5206-4245-08b9-471f543b3e21" name="RunGpSymbolicRegressionSampleTest" storage="heuristiclab.tests\bin\heuristiclab.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+      <TestLink id="eec82cf0-dae7-63c8-a469-6dd84d49a935" name="RunGaTspSampleTest" storage="heuristiclab.tests\bin\heuristiclab.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+      <TestLink id="77c479e4-8f9a-5474-b026-e5c0811c8eb0" name="CreateLocalSearchKnapsackSampleTest" storage="heuristiclab.tests\bin\heuristiclab.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+      <TestLink id="0d883f66-2fc5-99fc-eabb-2dff566104f5" name="CreateTabuSearchTspSampleTest" storage="heuristiclab.tests\bin\heuristiclab.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+      <TestLink id="c8ea68e8-b9d7-24cb-5540-655f58da13bf" name="CreateGpArtificialAntSampleTest" storage="heuristiclab.tests\bin\heuristiclab.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+      <TestLink id="e6f3ab8a-1630-560c-c8b9-4e8ce2522172" name="CreateVnsTspSampleTest" storage="heuristiclab.tests\bin\heuristiclab.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+      <TestLink id="51e968a7-120f-dd28-9514-ad35d3ee66d2" name="CreateGaVrpSampleTest" storage="heuristiclab.tests\bin\heuristiclab.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+      <TestLink id="29188193-8d50-0c61-c6fa-4d5b608a72e8" name="RunGpArtificialAntSampleTest" storage="heuristiclab.tests\bin\heuristiclab.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+      <TestLink id="95278ae9-832c-bef9-0bbc-4432195e63fa" name="RunTabuSearchTspSampleTest" storage="heuristiclab.tests\bin\heuristiclab.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+      <TestLink id="21f1371d-8c47-9588-d8fa-cf45fd1d81eb" name="RunLocalSearchKnapsackSampleTest" storage="heuristiclab.tests\bin\heuristiclab.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+      <TestLink id="29257c28-7dfb-f227-00a4-776d74b02a7b" name="CreateGpSymbolicClassificationSampleTest" storage="heuristiclab.tests\bin\heuristiclab.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
     </TestLinks>
   </TestList>
   <TestList name="HeuristicLab.Problems.Instances.Tests" id="51dc1470-9bbb-4e7b-89f5-4595bacdbc42" parentListId="8c43106b-9dc1-4907-a29f-aa66a61bf5b6">
     <TestLinks>
-      <TestLink id="e5264222-cc79-4b16-d6fa-8fea9b868c0d" name="GetTSPLIBTSPInstanceTest" storage="Heuristiclab.Tests\bin\Heuristiclab.Tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-      <TestLink id="a4a79e51-0e00-0079-3cda-edacb878ba09" name="TestQAPLIBSolutions" storage="Heuristiclab.Tests\bin\Heuristiclab.Tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-      <TestLink id="fb433926-d43d-7fa9-3158-5a7d2f70b9a3" name="GetTSPLIBCVRPInstanceTest" storage="Heuristiclab.Tests\bin\Heuristiclab.Tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-      <TestLink id="c678a0cb-85a0-69f6-1dea-e61b4536de1e" name="GetElloumiCTAPInstanceTest" storage="Heuristiclab.Tests\bin\Heuristiclab.Tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-      <TestLink id="c048a606-a1e9-4d6a-91d7-febc30e0fead" name="GetQAPLIBInstanceTest" storage="Heuristiclab.Tests\bin\Heuristiclab.Tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-      <TestLink id="2002060f-2c38-f569-90a6-b19efd804446" name="GetCordeauGQAPInstanceTest" storage="Heuristiclab.Tests\bin\Heuristiclab.Tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-      <TestLink id="b3134ddf-d188-708f-0ea7-9eae51d3614a" name="TestQAPLIBInstances" storage="Heuristiclab.Tests\bin\Heuristiclab.Tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-      <TestLink id="48300c6a-c8fa-ea9f-3533-79e6e8046e78" name="GetTSPLIBATSPInstanceTest" storage="Heuristiclab.Tests\bin\Heuristiclab.Tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+      <TestLink id="e5264222-cc79-4b16-d6fa-8fea9b868c0d" name="GetTSPLIBTSPInstanceTest" storage="heuristiclab.tests\bin\heuristiclab.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+      <TestLink id="a4a79e51-0e00-0079-3cda-edacb878ba09" name="TestQAPLIBSolutions" storage="heuristiclab.tests\bin\heuristiclab.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+      <TestLink id="fb433926-d43d-7fa9-3158-5a7d2f70b9a3" name="GetTSPLIBCVRPInstanceTest" storage="heuristiclab.tests\bin\heuristiclab.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+      <TestLink id="c678a0cb-85a0-69f6-1dea-e61b4536de1e" name="GetElloumiCTAPInstanceTest" storage="heuristiclab.tests\bin\heuristiclab.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+      <TestLink id="c048a606-a1e9-4d6a-91d7-febc30e0fead" name="GetQAPLIBInstanceTest" storage="heuristiclab.tests\bin\heuristiclab.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+      <TestLink id="2002060f-2c38-f569-90a6-b19efd804446" name="GetCordeauGQAPInstanceTest" storage="heuristiclab.tests\bin\heuristiclab.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+      <TestLink id="b3134ddf-d188-708f-0ea7-9eae51d3614a" name="TestQAPLIBInstances" storage="heuristiclab.tests\bin\heuristiclab.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+      <TestLink id="48300c6a-c8fa-ea9f-3533-79e6e8046e78" name="GetTSPLIBATSPInstanceTest" storage="heuristiclab.tests\bin\heuristiclab.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
     </TestLinks>
   </TestList>
@@ -47,13 +47,15 @@
     <Description>This should be run whenever a new plugin is added or a plugin dependency or an assembly reference is added, updated, or deleted.</Description>
     <TestLinks>
-      <TestLink id="ec4d1ddf-ed6b-9f9e-29a0-d9e558856af1" name="ContentViewAttributeTest" storage="Heuristiclab.Tests\bin\Heuristiclab.Tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-      <TestLink id="202601a9-803a-67b8-a9d5-01dee0738a98" name="InstantiateAllCreatables" storage="Heuristiclab.Tests\bin\Heuristiclab.Tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-      <TestLink id="388c8c97-aaeb-a5f1-f695-656925a69975" name="TestParameterVisibility" storage="Heuristiclab.Tests\bin\Heuristiclab.Tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-      <TestLink id="29ead60b-2ae7-821a-ccc3-e5e4769661b7" name="TestStorableConstructor" storage="Heuristiclab.Tests\bin\Heuristiclab.Tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-      <TestLink id="36916402-ba0c-751d-366b-380dac87dcef" name="CheckPluginDependenciesForReferencedAssemblies" storage="Heuristiclab.Tests\bin\Heuristiclab.Tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-      <TestLink id="3983eb26-fd15-5b88-1fd7-07b363511b10" name="TestCloningConstructor" storage="Heuristiclab.Tests\bin\Heuristiclab.Tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-      <TestLink id="2028e687-d144-bb6f-bb05-ac86eaec07ee" name="TestCloningAllDeepCloneables" storage="Heuristiclab.Tests\bin\Heuristiclab.Tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-      <TestLink id="34ed65f1-46f7-d2e6-64cc-c2d958294d8b" name="CheckReferenceAssembliesForPluginDependencies" storage="Heuristiclab.Tests\bin\Heuristiclab.Tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-      <TestLink id="16b2cf1b-19e9-1b71-7f66-2744c23017a0" name="TestToString" storage="Heuristiclab.Tests\bin\Heuristiclab.Tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+      <TestLink id="0b6f54a2-1543-af9f-b604-0640ef177083" name="BuildTypeTest" storage="heuristiclab.tests\bin\heuristiclab.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+      <TestLink id="ec4d1ddf-ed6b-9f9e-29a0-d9e558856af1" name="ContentViewAttributeTest" storage="heuristiclab.tests\bin\heuristiclab.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+      <TestLink id="202601a9-803a-67b8-a9d5-01dee0738a98" name="InstantiateAllCreatables" storage="heuristiclab.tests\bin\heuristiclab.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+      <TestLink id="388c8c97-aaeb-a5f1-f695-656925a69975" name="TestParameterVisibility" storage="heuristiclab.tests\bin\heuristiclab.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+      <TestLink id="c895df0c-4700-c067-97e4-6bbde15397a5" name="IsSubTypeOfTest" storage="heuristiclab.tests\bin\heuristiclab.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+      <TestLink id="29ead60b-2ae7-821a-ccc3-e5e4769661b7" name="TestStorableConstructor" storage="heuristiclab.tests\bin\heuristiclab.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+      <TestLink id="36916402-ba0c-751d-366b-380dac87dcef" name="CheckPluginDependenciesForReferencedAssemblies" storage="heuristiclab.tests\bin\heuristiclab.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+      <TestLink id="3983eb26-fd15-5b88-1fd7-07b363511b10" name="TestCloningConstructor" storage="heuristiclab.tests\bin\heuristiclab.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+      <TestLink id="2028e687-d144-bb6f-bb05-ac86eaec07ee" name="TestCloningAllDeepCloneables" storage="heuristiclab.tests\bin\heuristiclab.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+      <TestLink id="34ed65f1-46f7-d2e6-64cc-c2d958294d8b" name="CheckReferenceAssembliesForPluginDependencies" storage="heuristiclab.tests\bin\heuristiclab.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+      <TestLink id="16b2cf1b-19e9-1b71-7f66-2744c23017a0" name="TestToString" storage="heuristiclab.tests\bin\heuristiclab.tests.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
     </TestLinks>
   </TestList>
Index: /trunk/sources/HeuristicLab.PluginInfrastructure/3.3/HeuristicLab.PluginInfrastructure-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.PluginInfrastructure/3.3/HeuristicLab.PluginInfrastructure-3.3.csproj	(revision 8570)
+++ /trunk/sources/HeuristicLab.PluginInfrastructure/3.3/HeuristicLab.PluginInfrastructure-3.3.csproj	(revision 8571)
@@ -272,4 +272,5 @@
     <Compile Include="Main.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="TypeExtensions.cs" />
     <None Include="Advanced\DeploymentService\GenerateServiceClients.cmd" />
     <None Include="app.config">
Index: /trunk/sources/HeuristicLab.PluginInfrastructure/3.3/LightweightApplicationManager.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginInfrastructure/3.3/LightweightApplicationManager.cs	(revision 8570)
+++ /trunk/sources/HeuristicLab.PluginInfrastructure/3.3/LightweightApplicationManager.cs	(revision 8571)
@@ -75,5 +75,6 @@
       foreach (Type t in GetTypes(type)) {
         object instance = null;
-        try { instance = Activator.CreateInstance(t); } catch { }
+        try { instance = Activator.CreateInstance(t); }
+        catch { }
         if (instance != null) instances.Add(instance);
       }
@@ -127,59 +128,21 @@
         var assemblyTypes = assembly.GetTypes();
 
-        var buildTypes = from t in assembly.GetTypes()
-                         where CheckTypeCompatibility(type, t)
-                         where !IsNonDiscoverableType(t)
-                         where onlyInstantiable == false ||
-                               (!t.IsAbstract && !t.IsInterface && !t.HasElementType)
-                         select BuildType(t, type);
+        var matchingTypes = from assemblyType in assembly.GetTypes()
+                            let t = assemblyType.BuildType(type)
+                            where t != null
+                            where t.IsSubTypeOf(type)
+                            where !t.IsNonDiscoverableType()
+                            where onlyInstantiable == false || (!t.IsAbstract && !t.IsInterface && !t.HasElementType)
+                            where includeGenericTypeDefinitions || !t.IsGenericTypeDefinition
+                            select t;
 
-        return from t in buildTypes
-               where includeGenericTypeDefinitions || !t.IsGenericTypeDefinition
-               select t;
-      } catch (TypeLoadException) {
-        return Enumerable.Empty<Type>();
-      } catch (ReflectionTypeLoadException) {
+        return matchingTypes;
+      }
+      catch (TypeLoadException) {
         return Enumerable.Empty<Type>();
       }
-    }
-
-    private static bool IsNonDiscoverableType(Type t) {
-      return t.GetCustomAttributes(typeof(NonDiscoverableTypeAttribute), false).Any();
-    }
-
-    private static bool CheckTypeCompatibility(Type type, Type other) {
-      if (type.IsAssignableFrom(other))
-        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 {
-          var otherGenericTypeDefinition = other.GetGenericTypeDefinition();
-          if (type.IsAssignableFrom(otherGenericTypeDefinition.MakeGenericType(typeGenericArguments)))
-            return true;
-        } catch (Exception) { }
+      catch (ReflectionTypeLoadException) {
+        return Enumerable.Empty<Type>();
       }
-      return false;
-    }
-    private static Type BuildType(Type type, Type protoType) {
-      if (type.IsGenericType && protoType.IsGenericType)
-        return type.GetGenericTypeDefinition().MakeGenericType(protoType.GetGenericArguments());
-      else
-        return type;
     }
 
Index: /trunk/sources/HeuristicLab.PluginInfrastructure/3.3/SandboxApplicationManager.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginInfrastructure/3.3/SandboxApplicationManager.cs	(revision 8570)
+++ /trunk/sources/HeuristicLab.PluginInfrastructure/3.3/SandboxApplicationManager.cs	(revision 8571)
@@ -261,56 +261,14 @@
     /// <returns>Enumerable of the discovered types.</returns>
     private static IEnumerable<Type> GetTypes(Type type, Assembly assembly, bool onlyInstantiable, bool includeGenericTypeDefinitions) {
-      var buildTypes = from t in assembly.GetTypes()
-                       where CheckTypeCompatibility(type, t)
-                       where !IsNonDiscoverableType(t)
-                       where onlyInstantiable == false ||
-                             (!t.IsAbstract && !t.IsInterface && !t.HasElementType)
-                       select BuildType(t, type);
-
-      return from t in buildTypes
-             where includeGenericTypeDefinitions || !t.IsGenericTypeDefinition
-             select t;
-    }
-
-
-    private static bool IsNonDiscoverableType(Type t) {
-      return t.GetCustomAttributes(typeof(NonDiscoverableTypeAttribute), false).Any();
-    }
-
-    private static bool CheckTypeCompatibility(Type type, Type other) {
-      if (type.IsAssignableFrom(other))
-        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 {
-          var otherGenericTypeDefinition = other.GetGenericTypeDefinition();
-          if (type.IsAssignableFrom(otherGenericTypeDefinition.MakeGenericType(typeGenericArguments)))
-            return true;
-        }
-        catch (Exception) { }
-      }
-      return false;
-    }
-    private static Type BuildType(Type type, Type protoType) {
-      if (type.IsGenericType && protoType.IsGenericType)
-        return type.GetGenericTypeDefinition().MakeGenericType(protoType.GetGenericArguments());
-      else
-        return type;
+      var matchingTypes = from assemblyType in assembly.GetTypes()
+                          let t = assemblyType.BuildType(type)
+                          where t != null
+                          where t.IsSubTypeOf(type)
+                          where !t.IsNonDiscoverableType()
+                          where onlyInstantiable == false || (!t.IsAbstract && !t.IsInterface && !t.HasElementType)
+                          where includeGenericTypeDefinitions || !t.IsGenericTypeDefinition
+                          select t;
+
+      return matchingTypes;
     }
 
Index: /trunk/sources/HeuristicLab.PluginInfrastructure/3.3/TypeExtensions.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginInfrastructure/3.3/TypeExtensions.cs	(revision 8571)
+++ /trunk/sources/HeuristicLab.PluginInfrastructure/3.3/TypeExtensions.cs	(revision 8571)
@@ -0,0 +1,129 @@
+﻿#region License Information
+
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+
+namespace HeuristicLab.PluginInfrastructure {
+  internal static class TypeExtensions {
+    internal static bool IsNonDiscoverableType(this Type t) {
+      return t.GetCustomAttributes(typeof(NonDiscoverableTypeAttribute), false).Any();
+    }
+
+    /// <summary>
+    /// Constructs a concrete type from a given proto type.
+    /// </summary>
+    /// <param name="type"></param>
+    /// <param name="protoType"></param>
+    /// <returns>The constructed type, a generic type definition or null, if a type construction is not possible</returns>
+    /// <remarks>This method does not work with nested generic types</remarks>
+    internal static Type BuildType(this Type type, Type protoType) {
+      if (type == null || protoType == null) throw new ArgumentNullException();
+
+      if (!type.IsGenericTypeDefinition) return type;
+      if (protoType.IsGenericTypeDefinition) return type;
+      if (!protoType.IsGenericType) return type;
+
+      var typeGenericArguments = type.GetGenericArguments();
+      var protoTypeGenericArguments = protoType.GetGenericArguments();
+      if (typeGenericArguments.Length != protoTypeGenericArguments.Length) return null;
+
+      for (int i = 0; i < typeGenericArguments.Length; i++) {
+        var typeGenericArgument = typeGenericArguments[i];
+        var protoTypeGenericArgument = protoTypeGenericArguments[i];
+
+        //check class contraint on generic type parameter 
+        if (typeGenericArgument.GenericParameterAttributes.HasFlag(GenericParameterAttributes.ReferenceTypeConstraint))
+          if (!protoTypeGenericArgument.IsClass && !protoTypeGenericArgument.IsInterface && !protoType.IsArray) return null;
+
+        //check default constructor constraint on generic type parameter 
+        if (typeGenericArgument.GenericParameterAttributes.HasFlag(GenericParameterAttributes.DefaultConstructorConstraint))
+          if (!protoTypeGenericArgument.IsValueType && protoTypeGenericArgument.GetConstructor(Type.EmptyTypes) == null) return null;
+
+        //check type restrictions on generic type parameter
+        foreach (var constraint in typeGenericArgument.GetGenericParameterConstraints())
+          if (!constraint.IsAssignableFrom(protoTypeGenericArgument)) return null;
+      }
+
+      try {
+        return type.MakeGenericType(protoTypeGenericArguments);
+      }
+      catch (Exception) {
+        return null;
+      }
+    }
+
+    internal static bool IsSubTypeOf(this Type subType, Type baseType) {
+      if (baseType.IsAssignableFrom(subType)) return true;
+      if (!baseType.IsGenericType) return false;
+
+      if (RecursiveCheckGenericTypes(baseType, subType)) return true;
+      IEnumerable<Type> implementedInterfaces = subType.GetInterfaces().Where(t => t.IsGenericType);
+      foreach (var implementedInterface in implementedInterfaces.Where(i => i.IsGenericType)) {
+        if (baseType.CheckGenericTypes(implementedInterface)) return true;
+      }
+
+      return false;
+    }
+
+    private static bool RecursiveCheckGenericTypes(Type baseType, Type subType) {
+      if (!baseType.IsGenericType) return false;
+      if (!subType.IsGenericType) return false;
+      if (baseType.CheckGenericTypes(subType)) return true;
+      if (subType.BaseType == null) return false;
+
+      return RecursiveCheckGenericTypes(baseType, subType.BaseType);
+    }
+
+    private static bool CheckGenericTypes(this Type baseType, Type subType) {
+      var baseTypeGenericTypeDefinition = baseType.GetGenericTypeDefinition();
+      var subTypeGenericTypeDefinition = subType.GetGenericTypeDefinition();
+      if (baseTypeGenericTypeDefinition != subTypeGenericTypeDefinition) return false;
+      var baseTypeGenericArguments = baseType.GetGenericArguments();
+      var subTypeGenericArguments = subType.GetGenericArguments();
+
+      for (int i = 0; i < baseTypeGenericArguments.Length; i++) {
+        var baseTypeGenericArgument = baseTypeGenericArguments[i];
+        var subTypeGenericArgument = subTypeGenericArguments[i];
+
+        if (baseTypeGenericArgument.IsGenericParameter ^ subTypeGenericArgument.IsGenericParameter) return false;
+        if (baseTypeGenericArgument.IsAssignableFrom(subTypeGenericArgument)) continue;
+        if (!baseTypeGenericArgument.IsGenericParameter && !subTypeGenericArgument.IsGenericParameter) return false;
+
+        if (baseTypeGenericArgument.GenericParameterAttributes.HasFlag(GenericParameterAttributes.ReferenceTypeConstraint) &&
+            !subTypeGenericArgument.GenericParameterAttributes.HasFlag(GenericParameterAttributes.ReferenceTypeConstraint)) return false;
+        if (baseTypeGenericArgument.GenericParameterAttributes.HasFlag(GenericParameterAttributes.DefaultConstructorConstraint) &&
+            !subTypeGenericArgument.GenericParameterAttributes.HasFlag(GenericParameterAttributes.DefaultConstructorConstraint)) return false;
+        if (baseTypeGenericArgument.GenericParameterAttributes.HasFlag(GenericParameterAttributes.NotNullableValueTypeConstraint) &&
+            !subTypeGenericArgument.GenericParameterAttributes.HasFlag(GenericParameterAttributes.NotNullableValueTypeConstraint)) return false;
+
+        foreach (var baseTypeGenericParameterConstraint in baseTypeGenericArgument.GetGenericParameterConstraints()) {
+          if (!subTypeGenericArgument.GetGenericParameterConstraints().Any(t => baseTypeGenericParameterConstraint.IsAssignableFrom(t))) return false;
+        }
+      }
+      return true;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Tests/HeuristicLab.PluginInfraStructure-3.3/TypeDiscoveryTest.cs
===================================================================
--- /trunk/sources/HeuristicLab.Tests/HeuristicLab.PluginInfraStructure-3.3/TypeDiscoveryTest.cs	(revision 8571)
+++ /trunk/sources/HeuristicLab.Tests/HeuristicLab.PluginInfraStructure-3.3/TypeDiscoveryTest.cs	(revision 8571)
@@ -0,0 +1,76 @@
+﻿using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Parameters;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Problems.DataAnalysis;
+using HeuristicLab_33.Tests;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+
+namespace HeuristicLab.PluginInfraStructure.Tests {
+  /// <summary>
+  /// Summary description for TypeDiscoveryTest
+  /// </summary>
+  [TestClass]
+  public class TypeDiscoveryTest {
+    public TypeDiscoveryTest() { }
+
+    private TestContext testContextInstance;
+
+    /// <summary>
+    ///Gets or sets the test context which provides
+    ///information about and functionality for the current test run.
+    ///</summary>
+    public TestContext TestContext {
+      get { return testContextInstance; }
+      set { testContextInstance = value; }
+    }
+
+    public static void MyClassInitialize(TestContext testContext) {
+      PluginLoader.Assemblies.Any();
+    }
+
+    [TestMethod]
+    public void IsSubTypeOfTest() {
+      Assert.IsTrue(typeof(int).IsSubTypeOf(typeof(object)));
+      Assert.IsTrue(typeof(IntValue).IsSubTypeOf(typeof(IItem)));
+      Assert.IsTrue(typeof(List<int>).IsSubTypeOf(typeof(object)));
+
+      Assert.IsTrue(typeof(List<int>).IsSubTypeOf(typeof(IList)));
+      Assert.IsTrue(typeof(List<>).IsSubTypeOf(typeof(IList)));
+
+      Assert.IsTrue(typeof(IList<IItem>).IsSubTypeOf(typeof(IList<IItem>)));
+      Assert.IsTrue(typeof(List<IntValue>).IsSubTypeOf(typeof(IList<IItem>)));
+      Assert.IsTrue(typeof(List<IntValue>).IsSubTypeOf(typeof(List<IItem>)));
+      Assert.IsFalse(typeof(ItemList<>).IsSubTypeOf(typeof(IList<IItem>)));
+      Assert.IsFalse(typeof(ItemList<>).IsSubTypeOf(typeof(List<IItem>)));
+
+      Assert.IsFalse(typeof(List<int>).IsSubTypeOf(typeof(List<>)));
+      Assert.IsTrue(typeof(List<>).IsSubTypeOf(typeof(IList<>)));
+      Assert.IsTrue(typeof(ItemList<>).IsSubTypeOf(typeof(IList<>)));
+      Assert.IsTrue(typeof(NamedItemCollection<>).IsSubTypeOf(typeof(IItemCollection<>)));
+      Assert.IsFalse(typeof(List<IntValue>).IsSubTypeOf(typeof(IList<>)));
+    }
+
+    [TestMethod]
+    public void BuildTypeTest() {
+      Assert.AreEqual(typeof(List<>).BuildType(typeof(List<>)), typeof(List<>));
+      Assert.AreEqual(typeof(List<int>).BuildType(typeof(List<>)), typeof(List<int>));
+      Assert.AreEqual(typeof(List<>).BuildType(typeof(List<int>)), typeof(List<int>));
+
+      Assert.AreEqual(typeof(ICollection<>).BuildType(typeof(List<>)), typeof(ICollection<>));
+      Assert.AreEqual(typeof(ICollection<int>).BuildType(typeof(List<>)), typeof(ICollection<int>));
+      Assert.AreEqual(typeof(ICollection<>).BuildType(typeof(List<int>)), typeof(ICollection<int>));
+
+      Assert.AreEqual(typeof(ItemCollection<>).BuildType(typeof(ICollection<int>)), null);
+      Assert.AreEqual(typeof(ItemCollection<>).BuildType(typeof(Dictionary<IItem, IItem>)), null);
+      Assert.AreEqual(typeof(ItemCollection<>).BuildType(typeof(ICollection<IItem>)), typeof(ItemCollection<IItem>));
+
+      Assert.AreEqual(typeof(FixedValueParameter<>).BuildType(typeof(ItemCollection<DataAnalysisProblemData>)), null);
+      Assert.AreEqual(typeof(IFixedValueParameter<>).BuildType(typeof(ItemCollection<DoubleValue>)), typeof(IFixedValueParameter<DoubleValue>));
+      Assert.AreEqual(typeof(IFixedValueParameter<>).BuildType(typeof(ItemCollection<IItem>)), typeof(IFixedValueParameter<IItem>));
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Tests/HeuristicLab.Tests.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Tests/HeuristicLab.Tests.csproj	(revision 8570)
+++ /trunk/sources/HeuristicLab.Tests/HeuristicLab.Tests.csproj	(revision 8571)
@@ -355,4 +355,5 @@
     <Compile Include="HeuristicLab.Persistence-3.3\UseCases.cs" />
     <Compile Include="HeuristicLab.PluginInfraStructure-3.3\InstallationManagerTest.cs" />
+    <Compile Include="HeuristicLab.PluginInfraStructure-3.3\TypeDiscoveryTest.cs" />
     <Compile Include="HeuristicLab.Problems.DataAnalysis-3.4\OnlineCalculatorPerformanceTest.cs" />
     <Compile Include="HeuristicLab.Problems.DataAnalysis-3.4\StatisticCalculatorsTest.cs" />
