Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure.Manager/ApplicationManager.cs
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure.Manager/ApplicationManager.cs	(revision 2494)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure.Manager/ApplicationManager.cs	(revision 2495)
@@ -28,4 +28,5 @@
 using System.Security;
 using System.Linq;
+using System.IO;
 
 namespace HeuristicLab.PluginInfrastructure.Manager {
@@ -75,10 +76,16 @@
       // load all loadable plugins (all dependencies available) into the execution context
       foreach (var desc in PluginDescriptionIterator.IterateInDependencyOrder(plugins.Where(x => x.PluginState != PluginState.Disabled))) {
-        foreach (var plugin in GetInstances<IPlugin>(desc)) {
-          plugin.OnLoad();
-          FirePluginLoaded(plugin.Name);
+        foreach (string assembly in desc.Assemblies) {
+          var asm = Assembly.LoadFrom(assembly);
+
+          // instantiate and load all plugins in this assembly
+          foreach (var plugin in GetInstances<IPlugin>(asm)) {
+            plugin.OnLoad();
+            FirePluginLoaded(plugin.Name);
+          }
         }
         desc.Load();
       }
+
     }
 
@@ -128,4 +135,15 @@
     }
     /// <summary>
+    /// Creates an instance of all types declared in assembly <param name="asm"/> that are subtypes or the same type of the specified type and declared in <paramref name="plugin"/>
+    /// </summary>
+    /// <typeparam name="T">Most general type.</typeparam>
+    /// <param name="asm">Declaring assembly.</param>
+    /// <returns>Enumerable of the created instances.</returns>
+    public IEnumerable<T> GetInstances<T>(Assembly asm) where T : class {
+      return from t in GetTypes(typeof(T), asm)
+             where !t.IsAbstract && !t.IsInterface && !t.HasElementType
+             select (T)Activator.CreateInstance(t);
+    }
+    /// <summary>
     /// Creates an instance of all types that are subtypes or the same type of the specified type
     /// </summary>
@@ -167,9 +185,8 @@
     /// <returns>Enumerable of the discovered types.</returns>
     public IEnumerable<Type> GetTypes(Type type, IPluginDescription pluginDescription) {
-      throw new NotImplementedException();
-      //return from asm in AppDomain.CurrentDomain.GetAssemblies()
-      //       where pluginDescription.Assemblies.Contains(asm.Location)
-      //       from t in GetTypes(type, asm)
-      //       select t;
+      return from asm in AppDomain.CurrentDomain.GetAssemblies()
+             where pluginDescription.Assemblies.Any(asmPath => Path.GetFullPath(asmPath) == Path.GetFullPath(asm.Location))
+             from t in GetTypes(type, asm)
+             select t;
     }
 
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure.Manager/Loader.cs
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure.Manager/Loader.cs	(revision 2494)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure.Manager/Loader.cs	(revision 2495)
@@ -195,7 +195,7 @@
           string pluginFileName = (string)attributeData.ConstructorArguments[0].Value;
           PluginFileType fileType = (PluginFileType)attributeData.ConstructorArguments[1].Value;
-          pluginFiles.Add(PluginDir + "/" + pluginFileName);
+          pluginFiles.Add(Path.Combine(PluginDir, pluginFileName));
           if (fileType == PluginFileType.Assembly) {
-            pluginAssemblies.Add(PluginDir + "/" + pluginFileName);
+            pluginAssemblies.Add(Path.Combine(PluginDir, pluginFileName));
           }
         }
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/ApplicationManager.cs
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/ApplicationManager.cs	(revision 2494)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/ApplicationManager.cs	(revision 2495)
@@ -38,5 +38,5 @@
 
     public static void RegisterApplicationManager(IApplicationManager manager) {
-      if (appManager != null) throw new InvalidOperationException("An control manager has already been set.");
+      if (appManager != null) throw new InvalidOperationException("The application manager has already been set.");
       appManager = manager;
     }
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab/MainForm.cs
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab/MainForm.cs	(revision 2494)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab/MainForm.cs	(revision 2495)
@@ -31,4 +31,5 @@
 using System.Threading;
 using HeuristicLab.PluginInfrastructure.Manager;
+using System.IO;
 
 namespace HeuristicLab {
@@ -44,5 +45,6 @@
 
       abortRequested = false;
-      pluginManager = new PluginManager(HeuristicLab.PluginInfrastructure.Properties.Settings.Default.PluginDir);
+      string pluginPath = Path.GetFullPath(HeuristicLab.PluginInfrastructure.Properties.Settings.Default.PluginDir);
+      pluginManager = new PluginManager(pluginPath);
       SplashScreen splashScreen = new SplashScreen(pluginManager, 1000, "Loading HeuristicLab...");
       splashScreen.Owner = this;
