Index: /trunk/sources/HeuristicLab.PluginInfrastructure/3.3/Manager/PluginValidator.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginInfrastructure/3.3/Manager/PluginValidator.cs	(revision 5627)
+++ /trunk/sources/HeuristicLab.PluginInfrastructure/3.3/Manager/PluginValidator.cs	(revision 5628)
@@ -117,6 +117,8 @@
       CheckPluginDependencyCycles(pluginDescriptions);
 
-      // recursively check if all necessary plugins are available and not disabled
-      // disable plugins with missing or disabled dependencies
+      // 1st time recursively check if all necessary plugins are available and not disabled
+      // disable plugins with missing or disabled dependencies 
+      // to prevent that plugins with missing dependencies are loaded into the execution context
+      // in the next step
       CheckPluginDependencies(pluginDescriptions);
 
@@ -124,4 +126,8 @@
       // disables plugins that are not loaded correctly
       CheckExecutionContextLoad(pluginDescriptions);
+
+      // 2nd time recursively check if all necessary plugins have been loaded successfully and not disabled
+      // disable plugins with for which dependencies could not be loaded successfully
+      CheckPluginDependencies(pluginDescriptions);
 
       // mark all plugins as enabled that were not disabled in CheckPluginFiles, CheckPluginAssemblies, 
@@ -500,21 +506,23 @@
                                                                                 .Where(x => x.PluginState != PluginState.Disabled))) {
         foreach (string assemblyLocation in desc.AssemblyLocations) {
-          try {
-            // now load the assemblies into the execution context  
-            // this can still lead to an exception
-            // even when the assembly was successfully loaded into the reflection only context before 
-            var asm = Assembly.LoadFrom(assemblyLocation);
-          }
-          catch (BadImageFormatException) {
-            desc.Disable(Path.GetFileName(assemblyLocation) + " is not a valid assembly.");
-          }
-          catch (FileLoadException) {
-            desc.Disable("Can't load file " + Path.GetFileName(assemblyLocation));
-          }
-          catch (FileNotFoundException) {
-            desc.Disable("File " + Path.GetFileName(assemblyLocation) + " is missing.");
-          }
-          catch (SecurityException) {
-            desc.Disable("File " + Path.GetFileName(assemblyLocation) + " can't be loaded because of security constraints.");
+          if (desc.PluginState != PluginState.Disabled) {
+            try {
+              // now load the assemblies into the execution context  
+              // this can still lead to an exception
+              // even when the assembly was successfully loaded into the reflection only context before 
+              var asm = Assembly.LoadFrom(assemblyLocation);
+            }
+            catch (BadImageFormatException) {
+              desc.Disable(Path.GetFileName(assemblyLocation) + " is not a valid assembly.");
+            }
+            catch (FileLoadException) {
+              desc.Disable("Can't load file " + Path.GetFileName(assemblyLocation));
+            }
+            catch (FileNotFoundException) {
+              desc.Disable("File " + Path.GetFileName(assemblyLocation) + " is missing.");
+            }
+            catch (SecurityException) {
+              desc.Disable("File " + Path.GetFileName(assemblyLocation) + " can't be loaded because of security constraints.");
+            }
           }
         }
@@ -533,6 +541,6 @@
           foreach (string assemblyLocation in desc.AssemblyLocations) {
             var asm = (from assembly in assemblies
-                      where string.Equals(Path.GetFullPath(assembly.Location), Path.GetFullPath(assemblyLocation), StringComparison.CurrentCultureIgnoreCase)
-                      select assembly)
+                       where string.Equals(Path.GetFullPath(assembly.Location), Path.GetFullPath(assemblyLocation), StringComparison.CurrentCultureIgnoreCase)
+                       select assembly)
                       .Single();
 
