Index: branches/ScatterSearch (trunk integration)/HeuristicLab.PluginInfrastructure/3.3/Manager/PluginDescription.cs
===================================================================
--- branches/ScatterSearch (trunk integration)/HeuristicLab.PluginInfrastructure/3.3/Manager/PluginDescription.cs	(revision 8086)
+++ branches/ScatterSearch (trunk integration)/HeuristicLab.PluginInfrastructure/3.3/Manager/PluginDescription.cs	(revision 8331)
@@ -139,4 +139,13 @@
     }
 
+    /// <summary>
+    /// Gets and sets the list of assembly names for this plugin. Assembly names are only available after the plugin has been loaded.
+    /// </summary>
+    private List<string> assemblyNames;
+    public IEnumerable<string> AssemblyNames {
+      get { return assemblyNames; }
+      set { this.assemblyNames = new List<string>(value); }
+    }
+
     internal PluginDescription() {
       pluginState = PluginState.Undefined;
Index: branches/ScatterSearch (trunk integration)/HeuristicLab.PluginInfrastructure/3.3/Manager/PluginValidator.cs
===================================================================
--- branches/ScatterSearch (trunk integration)/HeuristicLab.PluginInfrastructure/3.3/Manager/PluginValidator.cs	(revision 8086)
+++ branches/ScatterSearch (trunk integration)/HeuristicLab.PluginInfrastructure/3.3/Manager/PluginValidator.cs	(revision 8331)
@@ -506,4 +506,6 @@
       foreach (var desc in PluginDescriptionIterator.IterateDependenciesBottomUp(pluginDescriptions
                                                                                 .Where(x => x.PluginState != PluginState.Disabled))) {
+        // store the assembly names so that we can later retrieve the assemblies loaded in the appdomain by name
+        var assemblyNames = new List<string>();
         foreach (string assemblyLocation in desc.AssemblyLocations) {
           if (desc.PluginState != PluginState.Disabled) {
@@ -515,5 +517,7 @@
               // this can still lead to an exception
               // even when the assemby was successfully loaded into the reflection only context before 
-              var asm = Assembly.Load(assemblyName);
+              // when loading the assembly using it's assemblyName it can be loaded from a different location than before (e.g. the GAC)
+              Assembly.Load(assemblyName);
+              assemblyNames.Add(assemblyName);
             }
             catch (BadImageFormatException) {
@@ -535,4 +539,5 @@
           }
         }
+        desc.AssemblyNames = assemblyNames;
       }
     }
@@ -547,10 +552,10 @@
         if (desc.PluginState == PluginState.Enabled) {
           // cannot use ApplicationManager to retrieve types because it is not yet instantiated
-          foreach (string assemblyLocation in desc.AssemblyLocations) {
+          foreach (string assemblyName in desc.AssemblyNames) {
             var asm = (from assembly in assemblies
-                       where string.Equals(Path.GetFullPath(assembly.Location), Path.GetFullPath(assemblyLocation), StringComparison.CurrentCultureIgnoreCase)
+                       where assembly.FullName == assemblyName
                        select assembly)
-                      .Single();
-
+                      .SingleOrDefault();
+            if (asm == null) throw new InvalidPluginException("Could not load assembly " + assemblyName + " for plugin " + desc.Name);
             foreach (Type pluginType in asm.GetTypes()) {
               if (typeof(IPlugin).IsAssignableFrom(pluginType) && !pluginType.IsAbstract && !pluginType.IsInterface && !pluginType.HasElementType) {
Index: branches/ScatterSearch (trunk integration)/HeuristicLab.PluginInfrastructure/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- branches/ScatterSearch (trunk integration)/HeuristicLab.PluginInfrastructure/3.3/Properties/AssemblyInfo.cs.frame	(revision 8086)
+++ branches/ScatterSearch (trunk integration)/HeuristicLab.PluginInfrastructure/3.3/Properties/AssemblyInfo.cs.frame	(revision 8331)
@@ -56,3 +56,3 @@
 //
 [assembly: AssemblyVersion("3.3.0.0")]
-[assembly: AssemblyFileVersion("3.3.6.$WCREV$")]
+[assembly: AssemblyFileVersion("3.3.7.$WCREV$")]
