Index: anches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure.GUI/PluginAction.cs
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure.GUI/PluginAction.cs	(revision 2474)
+++ 	(revision )
@@ -1,70 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 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.Text;
-using System.Diagnostics;
-
-namespace HeuristicLab.PluginInfrastructure.GUI {
-  [Flags]
-  enum ManagerAction {
-    Install = 1,
-    Remove = 2,
-    None = 4,
-    Any = Install | Remove
-  };
-
-  class PluginAction {
-    private ManagerAction action;
-
-    public ManagerAction Action {
-      get { return action; }
-      set { action = value; }
-    }
-
-    private List<PluginTag> hull;
-
-    public List<PluginTag> Hull {
-      get { return hull; }
-      set { hull = value; }
-    }
-
-    private PluginTag plugin;
-
-    public PluginTag Plugin {
-      get { return plugin; }
-      set { plugin = value; }
-    }
-
-    public string GetInverseActionString() {
-      switch(action) {
-        case ManagerAction.Install:
-          return "Don't install";
-        case ManagerAction.Remove:
-          return "Keep";
-        default:
-          // this method is not defined for actions other than "Install" and "Remove"
-          throw new InvalidOperationException();
-      }
-    }
-  }
-}
Index: anches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure.GUI/PluginDescription.cs
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure.GUI/PluginDescription.cs	(revision 2474)
+++ 	(revision )
@@ -1,62 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 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.Text;
-using System.Xml;
-
-namespace HeuristicLab.PluginInfrastructure.GUI {
-  class PluginDescription {
-    private string name;
-    public string Name {
-      get { return name; }
-      set { name = value; }
-    }
-    private Version version;
-    public Version Version {
-      get { return version; }
-      set { version = value; }
-    }
-    private DateTime buildDate;
-    public DateTime BuildDate {
-      get { return buildDate; }
-      set { buildDate = value; }
-    }
-
-    private List<string> dependencies = new List<string>();
-    public List<string> Dependencies {
-      get { return dependencies; }
-    }
-
-    private PluginSource source;
-    public PluginSource Source {
-      get { return source; }
-    }
-
-    public PluginDescription(string name, Version version, DateTime buildDate, PluginSource source) {
-      this.name = name;
-      this.version = version;
-      this.source = source;
-      this.buildDate = buildDate;
-    }
-  }
-}
Index: anches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure.GUI/PluginTag.cs
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure.GUI/PluginTag.cs	(revision 2474)
+++ 	(revision )
@@ -1,235 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 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.Text;
-
-namespace HeuristicLab.PluginInfrastructure.GUI {
-
-  [Flags]
-  enum PluginState { 
-    Installed = 1,
-    Available = 2,
-    Upgradeable = 4,
-    Disabled = 8,
-  };
-
-  class PluginTag {
-    private PluginInfo plugin;
-    public PluginInfo Plugin {
-      get { return plugin; }
-    }
-
-    private PluginDescription pluginDescription;
-    internal PluginDescription PluginDescription {
-      get { return pluginDescription; }
-      set { 
-        pluginDescription = value;
-        pluginDependencies = GeneratePluginDependencies(pluginDescription);
-        pluginDetails = GeneratePluginDetails(pluginDescription);
-      }
-    }
-
-    private PluginDescription upgradePluginDescription;
-    public PluginDescription UpgradePluginDescription {
-      get { return upgradePluginDescription; }
-      set {
-        upgradePluginDescription = value;
-        pluginDependencies = GeneratePluginDependencies(upgradePluginDescription);
-        pluginDetails = GenerateUpgradeDetails(upgradePluginDescription);
-        state = PluginState.Upgradeable;
-      }
-    }
-
-    private string pluginName;
-    public string PluginName {
-      get { return pluginName; }
-      set { pluginName = value; }
-    }
-
-    private Version pluginVersion;
-    public Version PluginVersion {
-      get { return pluginVersion; }
-      set { pluginVersion = value; }
-    }
-    private DateTime pluginBuildDate;
-    public DateTime PluginBuildDate {
-      get { return pluginBuildDate; }
-      set { pluginBuildDate = value; }
-    }
-
-    private string pluginDetails;
-    private List<string> pluginDependencies;
-    private List<PluginTag> allTags;
-
-    private PluginState state;
-    public PluginState State {
-      get { return state; }
-      set { state = value; }
-    }
-
-    private string message;
-    public string Message {
-      get { return message; }
-    }
-
-    public List<PluginTag> hull = new List<PluginTag>();
-
-    public PluginTag(List<PluginTag> allTags, PluginInfo plugin, PluginState state) {
-      this.plugin = plugin;
-      this.state = state;
-      this.allTags = allTags;
-      this.pluginName = plugin.Name;
-      this.pluginVersion = plugin.Version;
-      this.pluginBuildDate = plugin.BuildDate;
-      this.message = plugin.Message;
-      pluginDetails = GeneratePluginDetails(plugin);
-      pluginDependencies = GeneratePluginDependencies(plugin);
-    }
-
-    public PluginTag(List<PluginTag> allTags, PluginDescription plugin, PluginState state) {
-      this.pluginDescription = plugin;
-      this.state = state;
-      this.allTags = allTags;
-      this.pluginName = plugin.Name;
-      this.pluginVersion = plugin.Version;
-      this.pluginBuildDate = plugin.BuildDate;
-      pluginDetails = GeneratePluginDetails(plugin);
-      pluginDependencies = GeneratePluginDependencies(plugin);
-    }
-
-
-
-    private string GeneratePluginDetails(PluginInfo plugin) {
-      string filenames = "";
-      foreach (string filename in plugin.Files) {
-        filenames += filename + "\n";
-      }
-      string dependencies = "";
-      foreach (PluginInfo dependency in plugin.Dependencies) {
-        dependencies += dependency.Name + " (" + dependency.Version + ")\n";
-      }
-      string dependents = "";
-      PluginManager.Manager.GetDependentPlugins(plugin).ForEach(delegate(PluginInfo dependentPlugin) {
-        dependents += dependentPlugin.Name + " (" + dependentPlugin.Version + ")\n";
-      });
-      return "Plugin: " + plugin.Name + "\n" +
-      "Version: " + plugin.Version + "\n" +
-      "Build: " +plugin.BuildDate + "\n\n" +
-      (dependencies.Length != 0 ? "Requires: \n" + dependencies + "\n" : "") +
-      (dependents.Length != 0 ? "Used by:\n" + dependents + "\n" : "") +
-      (filenames.Length != 0 ? "Files:\n" + filenames + "\n" : "") + message;
-      ;
-    }
-
-    private string GeneratePluginDetails(PluginDescription plugin) {
-      string dependencies = "";
-      foreach (string dependency in plugin.Dependencies) {
-        dependencies += dependency + "\n";
-      }
-      return "plugin: " + plugin.Name + "\n" +
-      "Version: " + plugin.Version + "\n" +
-      "Build: "+plugin.BuildDate +"\n" +
-      "Installed from: " + plugin.Source + "\n" +
-      "Requires: \n" + dependencies;
-    }
-
-    private string GenerateUpgradeDetails(PluginDescription upgrade) {
-      string dependencies = "";
-      foreach(string dependency in upgrade.Dependencies) {
-        dependencies += dependency + "\n";
-      }
-      return "plugin: " + upgrade.Name + "\n" +
-      "Current version: " + plugin.Version + " ("+plugin.BuildDate+") will be upgraded to new version: " + upgrade.Version + " ("+upgrade.BuildDate+")\n"+
-      "Upgraded from: " + upgrade.Source + "\n" +
-      "Requires: \n" + dependencies;
-    }
-
-    private List<string> GeneratePluginDependencies(PluginInfo plugin) {
-      List<string> dependencies = new List<string>();
-      plugin.Dependencies.ForEach(delegate(PluginInfo dependency) {
-        dependencies.Add(dependency.Name);
-      });
-      return dependencies;
-    }
-
-    private List<string> GeneratePluginDependencies(PluginDescription plugin) {
-      return new List<string>(plugin.Dependencies);
-    }
-
-    internal string GetPluginDetails() {
-      return pluginDetails;
-    }
-
-    internal List<PluginTag> GetDependentTags() {
-      List<PluginTag> dependentTags = new List<PluginTag>();
-      foreach(PluginTag tag in allTags) {
-        if (tag.pluginDependencies.Contains(pluginName)) {
-          if (!dependentTags.Contains(tag)) {
-            dependentTags.Add(tag);
-
-            tag.GetDependentTags().ForEach(delegate(PluginTag dependentTag) {
-              if (!dependentTags.Contains(dependentTag)) {
-                dependentTags.Add(dependentTag);
-              }
-            });
-          }
-        }
-      }
-      return dependentTags;
-    }
-
-    internal List<PluginTag> GetDependencyTags() {
-      List<PluginTag> dependencyTags = new List<PluginTag>();
-      foreach(PluginTag tag in allTags) {
-        if (pluginDependencies.Contains(tag.pluginName)) {
-          if (!dependencyTags.Contains(tag)) {
-            dependencyTags.Add(tag);
-
-            tag.GetDependencyTags().ForEach(delegate(PluginTag dependencyTag) {
-              if (!dependencyTags.Contains(dependencyTag)) {
-                dependencyTags.Add(dependencyTag);
-              }
-            });
-          }
-        }
-      };
-      return dependencyTags;
-    }
-
-    internal bool UpgradeAvailable() {
-      return UpgradePluginDescription != null;
-    }
-
-    public override bool Equals(object obj) {
-      if (obj == null || !(obj is PluginTag)) return false;
-      PluginTag other = (PluginTag)obj;
-      return other.pluginName == pluginName && other.pluginVersion == pluginVersion;
-    }
-
-    public override int GetHashCode() {
-      if(pluginVersion != null) {
-        return pluginName.GetHashCode() + pluginVersion.GetHashCode();
-      } else return pluginName.GetHashCode();
-    }
-  }
-}
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure.Manager/HeuristicLab.PluginInfrastructure.Manager.csproj
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure.Manager/HeuristicLab.PluginInfrastructure.Manager.csproj	(revision 2475)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure.Manager/HeuristicLab.PluginInfrastructure.Manager.csproj	(revision 2475)
@@ -0,0 +1,59 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>a687a63d-d039-4b62-9de0-71f8ef480e57</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.PluginInfrastructure.Manager</RootNamespace>
+    <AssemblyName>HeuristicLab.PluginInfrastructure.Manager</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Class1.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure.Manager/Manager.cs
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure.Manager/Manager.cs	(revision 2475)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure.Manager/Manager.cs	(revision 2475)
@@ -0,0 +1,26 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.PluginInfrastructure.Manager {
+  public class Manager {
+    public void InstallPlugin(string name) {
+      throw new NotImplementedException();
+    }
+
+    public void RemovePlugin(string name) {
+      throw new NotImplementedException();
+    }
+
+    public IEnumeration<PluginDescription> InstalledPlugins {
+      get {
+        throw new NotImplementedException();
+      }
+    }
+
+    public PluginDescription GetPluginDescription(string name) {
+      throw new NotImplementedException();
+    }
+  }
+}
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure.Manager/PluginAction.cs
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure.Manager/PluginAction.cs	(revision 2475)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure.Manager/PluginAction.cs	(revision 2475)
@@ -0,0 +1,70 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Text;
+using System.Diagnostics;
+
+namespace HeuristicLab.PluginInfrastructure.Manager {
+  [Flags]
+  enum ManagerAction {
+    Install = 1,
+    Remove = 2,
+    None = 4,
+    Any = Install | Remove
+  };
+
+  class PluginAction {
+    private ManagerAction action;
+
+    public ManagerAction Action {
+      get { return action; }
+      set { action = value; }
+    }
+
+    private List<PluginTag> hull;
+
+    public List<PluginTag> Hull {
+      get { return hull; }
+      set { hull = value; }
+    }
+
+    private PluginTag plugin;
+
+    public PluginTag Plugin {
+      get { return plugin; }
+      set { plugin = value; }
+    }
+
+    public string GetInverseActionString() {
+      switch (action) {
+        case ManagerAction.Install:
+          return "Don't install";
+        case ManagerAction.Remove:
+          return "Keep";
+        default:
+          // this method is not defined for actions other than "Install" and "Remove"
+          throw new InvalidOperationException();
+      }
+    }
+  }
+}
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure.Manager/PluginDescription.cs
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure.Manager/PluginDescription.cs	(revision 2475)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure.Manager/PluginDescription.cs	(revision 2475)
@@ -0,0 +1,62 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Text;
+using System.Xml;
+
+namespace HeuristicLab.PluginInfrastructure.Manager {
+  class PluginDescription {
+    private string name;
+    public string Name {
+      get { return name; }
+      set { name = value; }
+    }
+    private Version version;
+    public Version Version {
+      get { return version; }
+      set { version = value; }
+    }
+    private DateTime buildDate;
+    public DateTime BuildDate {
+      get { return buildDate; }
+      set { buildDate = value; }
+    }
+
+    private List<string> dependencies = new List<string>();
+    public List<string> Dependencies {
+      get { return dependencies; }
+    }
+
+    private PluginSource source;
+    public PluginSource Source {
+      get { return source; }
+    }
+
+    public PluginDescription(string name, Version version, DateTime buildDate, PluginSource source) {
+      this.name = name;
+      this.version = version;
+      this.source = source;
+      this.buildDate = buildDate;
+    }
+  }
+}
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure.Manager/PluginTag.cs
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure.Manager/PluginTag.cs	(revision 2475)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure.Manager/PluginTag.cs	(revision 2475)
@@ -0,0 +1,235 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Text;
+
+namespace HeuristicLab.PluginInfrastructure.Manager {
+
+  [Flags]
+  enum PluginState {
+    Installed = 1,
+    Available = 2,
+    Upgradeable = 4,
+    Disabled = 8,
+  };
+
+  class PluginTag {
+    private PluginInfo plugin;
+    public PluginInfo Plugin {
+      get { return plugin; }
+    }
+
+    private PluginDescription pluginDescription;
+    internal PluginDescription PluginDescription {
+      get { return pluginDescription; }
+      set {
+        pluginDescription = value;
+        pluginDependencies = GeneratePluginDependencies(pluginDescription);
+        pluginDetails = GeneratePluginDetails(pluginDescription);
+      }
+    }
+
+    private PluginDescription upgradePluginDescription;
+    public PluginDescription UpgradePluginDescription {
+      get { return upgradePluginDescription; }
+      set {
+        upgradePluginDescription = value;
+        pluginDependencies = GeneratePluginDependencies(upgradePluginDescription);
+        pluginDetails = GenerateUpgradeDetails(upgradePluginDescription);
+        state = PluginState.Upgradeable;
+      }
+    }
+
+    private string pluginName;
+    public string PluginName {
+      get { return pluginName; }
+      set { pluginName = value; }
+    }
+
+    private Version pluginVersion;
+    public Version PluginVersion {
+      get { return pluginVersion; }
+      set { pluginVersion = value; }
+    }
+    private DateTime pluginBuildDate;
+    public DateTime PluginBuildDate {
+      get { return pluginBuildDate; }
+      set { pluginBuildDate = value; }
+    }
+
+    private string pluginDetails;
+    private List<string> pluginDependencies;
+    private List<PluginTag> allTags;
+
+    private PluginState state;
+    public PluginState State {
+      get { return state; }
+      set { state = value; }
+    }
+
+    private string message;
+    public string Message {
+      get { return message; }
+    }
+
+    public List<PluginTag> hull = new List<PluginTag>();
+
+    public PluginTag(List<PluginTag> allTags, PluginInfo plugin, PluginState state) {
+      this.plugin = plugin;
+      this.state = state;
+      this.allTags = allTags;
+      this.pluginName = plugin.Name;
+      this.pluginVersion = plugin.Version;
+      this.pluginBuildDate = plugin.BuildDate;
+      this.message = plugin.Message;
+      pluginDetails = GeneratePluginDetails(plugin);
+      pluginDependencies = GeneratePluginDependencies(plugin);
+    }
+
+    public PluginTag(List<PluginTag> allTags, PluginDescription plugin, PluginState state) {
+      this.pluginDescription = plugin;
+      this.state = state;
+      this.allTags = allTags;
+      this.pluginName = plugin.Name;
+      this.pluginVersion = plugin.Version;
+      this.pluginBuildDate = plugin.BuildDate;
+      pluginDetails = GeneratePluginDetails(plugin);
+      pluginDependencies = GeneratePluginDependencies(plugin);
+    }
+
+
+
+    private string GeneratePluginDetails(PluginInfo plugin) {
+      string filenames = "";
+      foreach (string filename in plugin.Files) {
+        filenames += filename + "\n";
+      }
+      string dependencies = "";
+      foreach (PluginInfo dependency in plugin.Dependencies) {
+        dependencies += dependency.Name + " (" + dependency.Version + ")\n";
+      }
+      string dependents = "";
+      PluginManager.Manager.GetDependentPlugins(plugin).ForEach(delegate(PluginInfo dependentPlugin) {
+        dependents += dependentPlugin.Name + " (" + dependentPlugin.Version + ")\n";
+      });
+      return "Plugin: " + plugin.Name + "\n" +
+      "Version: " + plugin.Version + "\n" +
+      "Build: " + plugin.BuildDate + "\n\n" +
+      (dependencies.Length != 0 ? "Requires: \n" + dependencies + "\n" : "") +
+      (dependents.Length != 0 ? "Used by:\n" + dependents + "\n" : "") +
+      (filenames.Length != 0 ? "Files:\n" + filenames + "\n" : "") + message;
+      ;
+    }
+
+    private string GeneratePluginDetails(PluginDescription plugin) {
+      string dependencies = "";
+      foreach (string dependency in plugin.Dependencies) {
+        dependencies += dependency + "\n";
+      }
+      return "plugin: " + plugin.Name + "\n" +
+      "Version: " + plugin.Version + "\n" +
+      "Build: " + plugin.BuildDate + "\n" +
+      "Installed from: " + plugin.Source + "\n" +
+      "Requires: \n" + dependencies;
+    }
+
+    private string GenerateUpgradeDetails(PluginDescription upgrade) {
+      string dependencies = "";
+      foreach (string dependency in upgrade.Dependencies) {
+        dependencies += dependency + "\n";
+      }
+      return "plugin: " + upgrade.Name + "\n" +
+      "Current version: " + plugin.Version + " (" + plugin.BuildDate + ") will be upgraded to new version: " + upgrade.Version + " (" + upgrade.BuildDate + ")\n" +
+      "Upgraded from: " + upgrade.Source + "\n" +
+      "Requires: \n" + dependencies;
+    }
+
+    private List<string> GeneratePluginDependencies(PluginInfo plugin) {
+      List<string> dependencies = new List<string>();
+      plugin.Dependencies.ForEach(delegate(PluginInfo dependency) {
+        dependencies.Add(dependency.Name);
+      });
+      return dependencies;
+    }
+
+    private List<string> GeneratePluginDependencies(PluginDescription plugin) {
+      return new List<string>(plugin.Dependencies);
+    }
+
+    internal string GetPluginDetails() {
+      return pluginDetails;
+    }
+
+    internal List<PluginTag> GetDependentTags() {
+      List<PluginTag> dependentTags = new List<PluginTag>();
+      foreach (PluginTag tag in allTags) {
+        if (tag.pluginDependencies.Contains(pluginName)) {
+          if (!dependentTags.Contains(tag)) {
+            dependentTags.Add(tag);
+
+            tag.GetDependentTags().ForEach(delegate(PluginTag dependentTag) {
+              if (!dependentTags.Contains(dependentTag)) {
+                dependentTags.Add(dependentTag);
+              }
+            });
+          }
+        }
+      }
+      return dependentTags;
+    }
+
+    internal List<PluginTag> GetDependencyTags() {
+      List<PluginTag> dependencyTags = new List<PluginTag>();
+      foreach (PluginTag tag in allTags) {
+        if (pluginDependencies.Contains(tag.pluginName)) {
+          if (!dependencyTags.Contains(tag)) {
+            dependencyTags.Add(tag);
+
+            tag.GetDependencyTags().ForEach(delegate(PluginTag dependencyTag) {
+              if (!dependencyTags.Contains(dependencyTag)) {
+                dependencyTags.Add(dependencyTag);
+              }
+            });
+          }
+        }
+      };
+      return dependencyTags;
+    }
+
+    internal bool UpgradeAvailable() {
+      return UpgradePluginDescription != null;
+    }
+
+    public override bool Equals(object obj) {
+      if (obj == null || !(obj is PluginTag)) return false;
+      PluginTag other = (PluginTag)obj;
+      return other.pluginName == pluginName && other.pluginVersion == pluginVersion;
+    }
+
+    public override int GetHashCode() {
+      if (pluginVersion != null) {
+        return pluginName.GetHashCode() + pluginVersion.GetHashCode();
+      } else return pluginName.GetHashCode();
+    }
+  }
+}
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure.Manager/Properties/AssemblyInfo.cs
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure.Manager/Properties/AssemblyInfo.cs	(revision 2475)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure.Manager/Properties/AssemblyInfo.cs	(revision 2475)
@@ -0,0 +1,36 @@
+﻿using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.PluginInfrastructure.Manager")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab.PluginInfrastructure.Manager")]
+[assembly: AssemblyCopyright("Copyright ©  2009")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("a687a63d-d039-4b62-9de0-71f8ef480e57")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
Index: anches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/AssemblyBuildDateAttribute.cs
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/AssemblyBuildDateAttribute.cs	(revision 2474)
+++ 	(revision )
@@ -1,55 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 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.Text;
-using System.Globalization;
-
-namespace HeuristicLab.PluginInfrastructure {
-  /// <summary>
-  /// Attribute of an assembly when it was built.
-  /// </summary>
-  [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = false)]
-  public class AssemblyBuildDateAttribute : Attribute {
-    private DateTime buildDate;
-    /// <summary>
-    /// Gets or sets the date when the assembly has been built.
-    /// </summary>
-    public DateTime BuildDate {
-      get { return buildDate; }
-      set { buildDate = value; }
-    }
-    /// <summary>
-    /// Initializes a new instance of <see cref="AssemblyBuildDateAttribute"/> with the given 
-    /// <paramref name="timeStamp"/> as build date.
-    /// </summary>
-    /// <exception cref="FormatException">Thrown when the time stamp could not be parsed as build date.</exception>
-    /// <param name="timeStamp">The build date of the assembly.</param>
-    public AssemblyBuildDateAttribute(string timeStamp)
-      : base() {
-
-      if(!DateTime.TryParse(timeStamp, out buildDate)) {
-        throw new FormatException("Can't parse AssemblyBuildDate " + timeStamp);
-      }
-    }
-  }
-}
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Attributes/ApplicationDescriptionAttribute.cs
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Attributes/ApplicationDescriptionAttribute.cs	(revision 2475)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Attributes/ApplicationDescriptionAttribute.cs	(revision 2475)
@@ -0,0 +1,110 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Text;
+
+namespace HeuristicLab.PluginInfrastructure {
+  /// <summary>
+  /// This attribute can be used to specify meta data for applications. 
+  /// For example to specify name, version and description of applications.
+  /// </summary>
+  [AttributeUsage(AttributeTargets.Class)]
+  public class ApplicationDescriptionAttribute : System.Attribute {
+    private string name;
+    /// <summary>
+    /// Gets or sets the name of the application.
+    /// </summary>
+    public string Name {
+      get { return name; }
+      set { name = value; }
+    }
+
+    private string version;
+    /// <summary>
+    /// Gets or sets the version of the application.
+    /// </summary>
+    public string Version {
+      get { return version; }
+      set { version = value; }
+    }
+
+    private string description;
+    /// <summary>
+    /// Gets or sets the description of the application.
+    /// </summary>
+    public string Description {
+      get { return description; }
+      set { description = value; }
+    }
+
+    private bool restartOnErrors;
+    /// <summary>
+    /// Gets or sets the boolean flag whether the plugin should be automatically restarted when it is closed because of an exception (for services).
+    /// </summary>
+    public bool RestartOnErrors {
+      get { return restartOnErrors; }
+      set { restartOnErrors = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ApplicationDescriptionAttribute"/>.
+    /// <param name="name">Name of the application</param>
+    /// </summary>
+    public ApplicationDescriptionAttribute(string name)
+      : this(name, "") {
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ApplicationDescriptionAttribute"/>.
+    /// <param name="name">Name of the application</param>
+    /// <param name="description">Description of the application</param>
+    /// </summary>
+    public ApplicationDescriptionAttribute(string name, string description)
+      : this(name, description, "") {
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ApplicationDescriptionAttribute"/>.
+    /// <param name="name">Name of the application</param>
+    /// <param name="description">Description of the application</param>
+    /// <param name="version">Version string of the application</param>
+    /// </summary>
+    public ApplicationDescriptionAttribute(string name, string description, string version)
+      : this(name, description, version, false) {
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ApplicationDescriptionAttribute"/>.
+    /// <param name="name">Name of the application</param>
+    /// <param name="description">Description of the application</param>
+    /// <param name="version">Version string of the application</param>
+    /// <param name="restartOnErrors">Flag that indicates if the application should be restarted on exceptions (for services)</param>
+    /// </summary>
+    public ApplicationDescriptionAttribute(string name, string description, string version, bool restartOnErrors) {
+      this.name = name;
+      this.version = version;
+      this.description = description;
+      this.restartOnErrors = restartOnErrors;
+    }
+  }
+}
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Attributes/AssemblyBuildDateAttribute.cs
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Attributes/AssemblyBuildDateAttribute.cs	(revision 2475)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Attributes/AssemblyBuildDateAttribute.cs	(revision 2475)
@@ -0,0 +1,55 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Text;
+using System.Globalization;
+
+namespace HeuristicLab.PluginInfrastructure {
+  /// <summary>
+  /// Build date attribute. Allows to declare the build date of assemblies.
+  /// </summary>
+  [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = false)]
+  public class AssemblyBuildDateAttribute : Attribute {
+    private DateTime buildDate;
+    /// <summary>
+    /// Gets or sets the build date.
+    /// </summary>
+    public DateTime BuildDate {
+      get { return buildDate; }
+      set { buildDate = value; }
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="AssemblyBuildDateAttribute"/> with the given 
+    /// <paramref name="timeStamp"/> as build date.
+    /// </summary>
+    /// <exception cref="FormatException">Thrown when the time stamp could not be parsed as build date.</exception>
+    /// <param name="timeStamp">The build date of the assembly.</param>
+    public AssemblyBuildDateAttribute(string timeStamp)
+      : base() {
+
+      if(!DateTime.TryParse(timeStamp, out buildDate)) {
+        throw new FormatException("Can't parse AssemblyBuildDate " + timeStamp);
+      }
+    }
+  }
+}
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Attributes/PluginDependencyAttribute.cs
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Attributes/PluginDependencyAttribute.cs	(revision 2475)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Attributes/PluginDependencyAttribute.cs	(revision 2475)
@@ -0,0 +1,50 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Text;
+
+namespace HeuristicLab.PluginInfrastructure {
+  /// <summary>
+  /// This attribute can be used to declare that an plugin depends on a another plugin.
+  /// </summary>
+  [AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]
+  public sealed class PluginDependencyAttribute : System.Attribute {
+    private string dependency;
+
+    /// <summary>
+    /// Gets or sets the name of the plugin that is needed to load a plugin.
+    /// </summary>
+    public string Dependency {
+      get { return dependency; }
+      set { dependency = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="PluginDependencyAttribute"/>.
+    /// <param name="dependency">The name of the plugin that is needed to load a plugin.</param>
+    /// </summary>
+    public PluginDependencyAttribute(string dependency) {
+      this.dependency = dependency;
+    }
+  }
+}
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Attributes/PluginDescriptionAttribute.cs
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Attributes/PluginDescriptionAttribute.cs	(revision 2475)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Attributes/PluginDescriptionAttribute.cs	(revision 2475)
@@ -0,0 +1,89 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Text;
+
+namespace HeuristicLab.PluginInfrastructure {
+  /// <summary>
+  /// This attribute can be used to specify meta data for plugins. 
+  /// For example to specify name, version and description of plugins.
+  /// </summary>
+  [AttributeUsage(AttributeTargets.Class)]
+  public class PluginDescriptionAttribute : System.Attribute {
+    private string name;
+    /// <summary>
+    /// Gets or sets the name of the plugin.
+    /// </summary>
+    public string Name {
+      get { return name; }
+      set { name = value; }
+    }
+
+    private string version;
+    /// <summary>
+    /// Gets or sets the version of the plugin.
+    /// </summary>
+    public string Version {
+      get { return version; }
+      set { version = value; }
+    }
+
+    private string description;
+    /// <summary>
+    /// Gets or sets the description of the plugin.
+    /// </summary>
+    public string Description {
+      get { return description; }
+      set { description = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="PluginDescriptionAttribute"/>.
+    /// <param name="name">Name of the plugin</param>
+    /// </summary>
+    public PluginDescriptionAttribute(string name)
+      : this(name, "") {
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="PluginDescriptionAttribute"/>.
+    /// <param name="name">Name of the plugin</param>
+    /// <param name="description">Description of the plugin</param>
+    /// </summary>
+    public PluginDescriptionAttribute(string name, string description)
+      : this(name, description, "") {
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="PluginDescriptionAttribute"/>.
+    /// <param name="name">Name of the plugin</param>
+    /// <param name="description">Description of the plugin</param>
+    /// <param name="version">Version string of the plugin</param>
+    /// </summary>
+    public PluginDescriptionAttribute(string name, string description, string version) {
+      this.name = name;
+      this.version = version;
+      this.description = description;
+    }
+  }
+}
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Attributes/PluginFileAttribute.cs
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Attributes/PluginFileAttribute.cs	(revision 2475)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Attributes/PluginFileAttribute.cs	(revision 2475)
@@ -0,0 +1,73 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Text;
+
+namespace HeuristicLab.PluginInfrastructure {
+  /// <summary>
+  /// Enumerator of available file types for a plugin.
+  /// </summary>
+  public enum PluginFileType {
+    Assembly,
+    Executable,
+    Data,
+    License
+  };
+
+  /// <summary>
+  /// PluginFileAttribute can be used to declare which files make up an plugin.
+  /// Multiple files can be associated to an plugin. Each file should be associated to only one plugin.
+  /// </summary>
+  [AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]
+  public class PluginFileAttribute : System.Attribute {
+    private string filename;
+
+    /// <summary>
+    /// Gets or sets the filename of the plugin.
+    /// </summary>
+    public string Filename {
+      get { return filename; }
+      set { filename = value; }
+    }
+
+    private PluginFileType filetype = PluginFileType.Data;
+
+    /// <summary>
+    /// Gets or sets the filetype of the plugin file.
+    /// </summary>
+    public PluginFileType Filetype {
+      get { return filetype; }
+      set { filetype = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="PluginFileAttribute"/>.
+    /// <param name="filename">Name of the file</param>
+    /// <param name="type">Type of the file (Assembly, Executable, Data, License)</param>
+    /// </summary>
+    public PluginFileAttribute(string filename, PluginFileType type) {
+      this.filename = filename;
+      this.filetype = type;
+    }
+  }
+}
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/BaseClasses/ApplicationBase.cs
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/BaseClasses/ApplicationBase.cs	(revision 2474)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/BaseClasses/ApplicationBase.cs	(revision 2475)
@@ -29,53 +29,22 @@
   /// Default implementation for the IApplication interface.
   /// </summary>
-  public abstract class ApplicationBase : IApplication {
-    private string name;
-    private Version version;
-    private string description;
-    private bool autoRestart;
-
+  internal abstract class ApplicationBase : IApplication {
     /// <summary>
     /// Initializes a new instance of <see cref="ApplicationBase"/>.
     /// </summary>
-    public ApplicationBase() {
-      ReadAttributes();
-    }
+    public ApplicationBase() { }
 
-    private void ReadAttributes() {
-      object[] pluginAttributes = this.GetType().GetCustomAttributes(typeof(ClassInfoAttribute), false);
+    private ApplicationDescriptionAttribute ApplicationDescriptionAttribute {
+      get {
+        object[] appDescAttributes = this.GetType().GetCustomAttributes(typeof(ApplicationDescriptionAttribute), false);
 
-      // exactly one attribute of the type ClassInfoAttribute must be given
-      if(pluginAttributes.Length != 1) {
-        throw new InvalidPluginException();
-      }
-
-      // after the assertion we are sure that the array access will not fail
-      ClassInfoAttribute pluginAttribute = (ClassInfoAttribute)pluginAttributes[0];
-      if(pluginAttribute != null) {
-        // if the plugin name is not explicitly set in the attribute then the default plugin name is the FullName of the type
-        if(pluginAttribute.Name != null) {
-          this.name = pluginAttribute.Name;
-        } else {
-          this.name = this.GetType().FullName;
+        // exactly one attribute of the type ClassInfoAttribute must be given
+        if (appDescAttributes.Length != 1) {
+          throw new InvalidPluginException("Found multiple ApplicationDescriptionAttributes on type " + this.GetType());
         }
 
-        // if the version is not explicitly set in the attribute then the version of the assembly is used as default
-        if(pluginAttribute.Version != null) {
-          this.version = new Version(pluginAttribute.Version);
-        } else {
-          this.version = this.GetType().Assembly.GetName().Version;
-        }
-
-        // if the description is not explicitly set in the attribute then the name of name of the application is used as default
-        if(pluginAttribute.Description != null) {
-          this.description = pluginAttribute.Description;
-        } else {
-          this.description = name;
-        }
-
-        this.autoRestart = pluginAttribute.AutoRestart;
+        return (ApplicationDescriptionAttribute)appDescAttributes[0];
       }
     }
-
 
     #region IApplication Members
@@ -85,5 +54,5 @@
     /// </summary>
     public string Name {
-      get { return name; }
+      get { return ApplicationDescriptionAttribute.Name; }
     }
 
@@ -92,5 +61,13 @@
     /// </summary>
     public Version Version {
-      get { return version; }
+      get {
+        var appDescAttribute = ApplicationDescriptionAttribute;
+        // if the version is not explicitly set in the attribute then the version of the assembly is used as default
+        if (string.IsNullOrEmpty(appDescAttribute.Version)) {
+          return this.GetType().Assembly.GetName().Version;
+        } else {
+          return new Version(appDescAttribute.Version);
+        }
+      }
     }
 
@@ -99,12 +76,22 @@
     /// </summary>
     public string Description {
-      get { return description; }
+      get {
+        var appDescAttribute = ApplicationDescriptionAttribute;
+        // if the description is not explicitly set in the attribute then the name of the application is used as default
+        if (string.IsNullOrEmpty(appDescAttribute.Description)) {
+          return appDescAttribute.Name;
+        } else {
+          return appDescAttribute.Description;
+        }
+      }
     }
 
     /// <summary>
-    /// Gets the boolean flag whether the application should automatically get restarted.
+    /// Gets the boolean flag whether the application should by restarted after exceptions.
     /// </summary>
-    public bool AutoRestart {
-      get { return autoRestart; }
+    public bool RestartOnErrors {
+      get {
+        return ApplicationDescriptionAttribute.RestartOnErrors;
+      }
     }
 
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/BaseClasses/PluginBase.cs
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/BaseClasses/PluginBase.cs	(revision 2474)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/BaseClasses/PluginBase.cs	(revision 2475)
@@ -25,4 +25,5 @@
 using System.Reflection;
 using System.Diagnostics;
+using System.Linq;
 
 namespace HeuristicLab.PluginInfrastructure {
@@ -31,105 +32,66 @@
   /// </summary>
   public abstract class PluginBase : IPlugin {
-    private string name;
-    private Version version;
-    private string[] files;
-    private string description;
-
     /// <summary>
     /// Initializes a new instance of <see cref="PluginBase"/>.
     /// </summary>
-    public PluginBase() {
-      ReadAttributes();
-    }
+    public PluginBase() { }
 
-    private void ReadAttributes() {
-      object[] pluginAttributes = this.GetType().GetCustomAttributes(typeof(ClassInfoAttribute), false);
-
-      // exactly one attribute of the type ClassInfoAttribute must be given
-      if (pluginAttributes.Length != 1) {
-        throw new InvalidPluginException();
-      }
-
-      // after the assertion we are sure that the array access will not fail
-      ClassInfoAttribute pluginAttribute = (ClassInfoAttribute)pluginAttributes[0];
-
-      // if the plugin name is not explicitly set in the attribute then the default plugin name is the FullName of the type
-      if (pluginAttribute != null && pluginAttribute.Name != null) {
-        this.name = pluginAttribute.Name;
-      } else {
-        this.name = this.GetType().FullName;
-      }
-
-      // if the version is not explicitly set in the attribute then the version of the assembly is used as default
-      if (pluginAttribute != null && pluginAttribute.Version != null) {
-        this.version = new Version(pluginAttribute.Version);
-      } else {
-        this.version = this.GetType().Assembly.GetName().Version;
-      }
-
-      // if the description is not explicitly set in the attribute then the name of name of the plugin is used as default
-      if (pluginAttribute != null && pluginAttribute.Description != null) {
-        this.description = pluginAttribute.Description;
-      } else {
-        this.description = name;
-      }
-
-      // get all attributes of type PluginFileAttribute, multiple usage is possible
-      PluginFileAttribute[] fileAttributes = (PluginFileAttribute[])this.GetType().GetCustomAttributes(typeof(PluginFileAttribute), false);
-
-      // exctract the file names from the attributes
-      this.files = new string[fileAttributes.Length];
-      int i = 0;
-      foreach (PluginFileAttribute fileAttr in fileAttributes) {
-        files[i++] = fileAttr.Filename;
+    private PluginDescriptionAttribute PluginDescriptionAttribute {
+      get {
+        object[] pluginAttributes = this.GetType().GetCustomAttributes(typeof(PluginDescriptionAttribute), false);
+        // exactly one attribute of the type PluginDescriptionAttribute must be given
+        if (pluginAttributes.Length != 1) {
+          throw new InvalidPluginException("Found multiple PluginDescriptionAttributes on type " + this.GetType());
+        }
+        return (PluginDescriptionAttribute)pluginAttributes[0];
       }
     }
 
     #region IPlugin Members
-    /// <summary>
-    /// Gets the name of the plugin.
-    /// </summary>
+    /// <inheritdoc />
     public string Name {
       get {
-        return name;
+        return PluginDescriptionAttribute.Name;
       }
     }
 
-    /// <summary>
-    /// Gets the version of the plugin.
-    /// </summary>
+    /// <inheritdoc />
     public Version Version {
       get {
-        return version;
+        var pluginAttribute = PluginDescriptionAttribute;
+        // if the version is not set in the attribute then the version of the assembly is used as default
+        if (string.IsNullOrEmpty(pluginAttribute.Version)) {
+          return this.GetType().Assembly.GetName().Version;
+        } else {
+          return new Version(pluginAttribute.Version);
+        }
       }
     }
 
-    /// <summary>
-    /// Gets the description of the plugin.
-    /// </summary>
+    /// <inheritdoc />
     public string Description {
       get {
-        return description;
+        var pluginAttribute = PluginDescriptionAttribute;
+        // if the description is not explicitly set in the attribute then the name of the plugin is used as default
+        if (string.IsNullOrEmpty(pluginAttribute.Description)) {
+          return pluginAttribute.Name;
+        } else {
+          return pluginAttribute.Description;
+        }
       }
     }
 
     /// <inheritdoc/>
-    public  string[] Files {
+    public IEnumerable<string> FileNames {
       get {
-        return files;
+        // get all attributes of type PluginFileAttribute, multiple usage is possible
+        return from x in this.GetType().GetCustomAttributes(typeof(PluginFileAttribute), false)
+               let pluginFileAttr = (PluginFileAttribute)x
+               select pluginFileAttr.Filename;
       }
     }
 
-    /// <inhertidoc>
+    /// <inhertitdoc>
     public virtual void OnLoad() { }
-    /// <inhertidoc>
-    public virtual void OnInstall() { }
-    /// <inhertidoc>
-    public virtual void OnDelete() { }
-    /// <inhertidoc>
-    public virtual void OnPreUpdate() { }
-    /// <inhertidoc>
-    public virtual void OnPostUpdate() { }
-
     #endregion
 
Index: anches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/ClassInfoAttribute.cs
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/ClassInfoAttribute.cs	(revision 2474)
+++ 	(revision )
@@ -1,74 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 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.Text;
-
-namespace HeuristicLab.PluginInfrastructure {
-  /// <summary>
-  /// This attribute can be used to specify meta data for classes. 
-  /// For example to specify name, version and description of applications or plugins.
-  /// </summary>
-  [AttributeUsage(AttributeTargets.Class)]
-  public class ClassInfoAttribute : System.Attribute {
-    private string name;
-    /// <summary>
-    /// Gets or sets the name of the plugin to which the assembly belongs to.
-    /// </summary>
-    public string Name {
-      get { return name; }
-      set { name = value; }
-    }
-
-    private string version;
-    /// <summary>
-    /// Gets or sets the version of the plugin.
-    /// </summary>
-    public string Version {
-      get { return version; }
-      set { version = value; }
-    }
-
-    private string description;
-    /// <summary>
-    /// Gets or sets the description of the plugin.
-    /// </summary>
-    public string Description {
-      get { return description; }
-      set { description = value; }
-    }
-
-    private bool autoRestart;
-    /// <summary>
-    /// Gets or sets the boolean flag whether the plugin should be automatically restarted.
-    /// </summary>
-    public bool AutoRestart {
-      get { return autoRestart; }
-      set { autoRestart = value; }
-    }
-
-    /// <summary>
-    /// Initializes a new instance of <see cref="ClassInfoAttribute"/>.
-    /// </summary>
-    public ClassInfoAttribute() {}
-  }
-}
Index: anches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/DependencyAttribute.cs
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/DependencyAttribute.cs	(revision 2474)
+++ 	(revision )
@@ -1,48 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 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.Text;
-
-namespace HeuristicLab.PluginInfrastructure {
-  /// <summary>
-  /// This attribute can be used to specify that an assembly depends on a different plugin.
-  /// </summary>
-  [AttributeUsage(AttributeTargets.Class,AllowMultiple=true)]
-  public sealed class DependencyAttribute : System.Attribute {
-    private string dependency;
-
-    /// <summary>
-    /// Gets or sets the name of the plugin that is needed to load the assembly.
-    /// </summary>
-    public string Dependency {
-      get { return dependency; }
-      set { dependency = value; }
-    }
-
-    /// <summary>
-    /// Initializes a new instance of <see cref="DependencyAttribute"/>.
-    /// </summary>
-    public DependencyAttribute() {
-    }
-  }
-}
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/HeuristicLab.PluginInfrastructure.csproj
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/HeuristicLab.PluginInfrastructure.csproj	(revision 2474)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/HeuristicLab.PluginInfrastructure.csproj	(revision 2475)
@@ -19,4 +19,5 @@
     <UpgradeBackupLocation>
     </UpgradeBackupLocation>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
@@ -75,4 +76,7 @@
   <ItemGroup>
     <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
     <Reference Include="System.Data" />
     <Reference Include="System.Deployment" />
@@ -83,8 +87,11 @@
   <ItemGroup>
     <Compile Include="ApplicationInfo.cs" />
-    <Compile Include="AssemblyBuildDateAttribute.cs" />
+    <Compile Include="Attributes\ApplicationDescriptionAttribute.cs" />
+    <Compile Include="Attributes\AssemblyBuildDateAttribute.cs" />
+    <Compile Include="Attributes\PluginDependencyAttribute.cs" />
+    <Compile Include="Attributes\PluginDescriptionAttribute.cs" />
+    <Compile Include="Attributes\PluginFileAttribute.cs" />
     <Compile Include="BaseClasses\ApplicationBase.cs" />
     <Compile Include="BaseClasses\PluginBase.cs" />
-    <Compile Include="ClassInfoAttribute.cs" />
     <Compile Include="Interfaces\IApplication.cs" />
     <Compile Include="Interfaces\IControl.cs" />
@@ -93,8 +100,6 @@
     <Compile Include="PluginManager.cs" />
     <Compile Include="PluginManagerActionEventArgs.cs" />
-    <Compile Include="DependencyAttribute.cs" />
     <Compile Include="Interfaces\IPlugin.cs" />
     <Compile Include="DiscoveryService.cs" />
-    <Compile Include="PluginFileAttribute.cs" />
     <Compile Include="PluginInfo.cs" />
     <Compile Include="Loader.cs" />
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Interfaces/IApplication.cs
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Interfaces/IApplication.cs	(revision 2474)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Interfaces/IApplication.cs	(revision 2475)
@@ -29,5 +29,5 @@
     Version Version { get; }
     string Description { get;}
-    bool AutoRestart { get; }
+    bool RestartOnErrors { get; }
     void Run();
   }
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Interfaces/IPlugin.cs
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Interfaces/IPlugin.cs	(revision 2474)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Interfaces/IPlugin.cs	(revision 2475)
@@ -30,40 +30,25 @@
   /// assemblies of the plugin. Plugin developers can use the properties of this interface to store
   /// plugin data (name, version, files, update location ...).
-  /// The methods OnLoad(), OnInstall(), OnDelete(), OnPreUpdate(), OnPostUpdate() are called by the framework
-  /// when the corresponding actions are executed. This mechanism allows that the plugin reacts to such
-  /// events. For instance to store plugin specific settings.
+  /// The method OnLoad() is called by the framework when the plugin is loaded (application start).
   /// </summary>
-  interface IPlugin {
+  internal interface IPlugin {
+    /// <summary>
+    /// Gets the name of the plugin.
+    /// </summary>
     string Name { get; }
+    /// <summary>
+    /// Gets the version of the plugin.
+    /// </summary>
     Version Version { get; }
     /// <summary>
-    /// a list of all files that are bundled with this plugin including all assembly files (*.dll)
+    /// Gets all file names that are bundled with this plugin including all assembly files (*.dll)
     /// </summary>
-    string[] Files { get; }
-
+    IEnumerable<string> FileNames { get; }
 
     /// <summary>
     /// Called by the framework whenever the plugin is loaded.
-    /// Plugins are loaded once at startup and then each time a new application is started from the starter.
+    /// Plugins are loaded when a new application is started from the starter.
     /// </summary>
     void OnLoad();
-    /// <summary>
-    /// called by the framework after the plugin was successfully installed
-    /// </summary>
-    void OnInstall();
-    /// <summary>
-    /// called by the framework before the files of the plugin are deleted
-    /// </summary>
-    void OnDelete();
-    /// <summary>
-    /// called by the framework before the files of the plugin are deleted for an update
-    /// OnPreUpdate() is sent only to the old instance of the plugin
-    /// </summary>
-    void OnPreUpdate();
-    /// <summary>
-    /// called by the framework after the updated files for the plugin have been installed
-    /// OnPostUpdate() is sent only to the new updated instance of the plugin
-    /// </summary>
-    void OnPostUpdate();
   }
 }
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/InvalidPluginException.cs
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/InvalidPluginException.cs	(revision 2474)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/InvalidPluginException.cs	(revision 2475)
@@ -28,5 +28,6 @@
   /// Exception class for invalid plugins.
   /// </summary>
-  class InvalidPluginException : Exception {
+  internal class InvalidPluginException : Exception {
+    public InvalidPluginException(string message) : base(message) { }
   }
 }
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Loader.cs
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Loader.cs	(revision 2474)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Loader.cs	(revision 2475)
@@ -127,5 +127,5 @@
         info.Version = application.Version;
         info.Description = application.Description;
-        info.AutoRestart = application.AutoRestart;
+        info.AutoRestart = application.RestartOnErrors;
         info.PluginAssembly = application.GetType().Assembly.GetName().Name;
         info.PluginType = application.GetType().Namespace + "." + application.GetType().Name;
@@ -380,5 +380,5 @@
       string baseDir = AppDomain.CurrentDomain.BaseDirectory;
 
-      Array.ForEach<string>(plugin.Files, delegate(string file) {
+      Array.ForEach<string>(plugin.FileNames, delegate(string file) {
         string filename = pluginDir + "/" + file;
         // always use \ as the directory separator
Index: anches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/PluginFileAttribute.cs
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/PluginFileAttribute.cs	(revision 2474)
+++ 	(revision )
@@ -1,67 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 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.Text;
-
-namespace HeuristicLab.PluginInfrastructure {
-  /// <summary>
-  /// Enumerator of available file types for a plugin.
-  /// </summary>
-  public enum PluginFileType {
-    Assembly,
-    Executable,
-    Data,
-    License
-  };
-
-  /// <summary>
-  /// Attribute for plugins providing information about their corresponding files.
-  /// </summary>
-  [AttributeUsage(AttributeTargets.Class, AllowMultiple=true)]
-  public class PluginFileAttribute : System.Attribute {
-    private string filename;
-
-    /// <summary>
-    /// Gets or sets the filename of the plugin.
-    /// </summary>
-    public string Filename {
-      get { return filename; }
-      set { filename = value; }
-    }
-
-    private PluginFileType filetype = PluginFileType.Data;
-
-    /// <summary>
-    /// Gets or sets the filetype of the plugin file.
-    /// </summary>
-    public PluginFileType Filetype {
-      get { return filetype; }
-      set { filetype = value; }
-    }
-
-    /// <summary>
-    /// Initializes a new instance of <see cref="PluginFileAttribute"/>.
-    /// </summary>
-    public PluginFileAttribute() { }
-  }
-}
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.Update.Client/HeuristicLab.Update.Client.csproj
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.Update.Client/HeuristicLab.Update.Client.csproj	(revision 2475)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.Update.Client/HeuristicLab.Update.Client.csproj	(revision 2475)
@@ -0,0 +1,59 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>dd7f11cf-d865-4206-ba2e-febf3a16a54b</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Update.Client</RootNamespace>
+    <AssemblyName>HeuristicLab.Update.Client</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Class1.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.Update.Client/Properties/AssemblyInfo.cs
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.Update.Client/Properties/AssemblyInfo.cs	(revision 2475)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.Update.Client/Properties/AssemblyInfo.cs	(revision 2475)
@@ -0,0 +1,36 @@
+﻿using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Update.Client")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab.Update.Client")]
+[assembly: AssemblyCopyright("Copyright ©  2009")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("dd7f11cf-d865-4206-ba2e-febf3a16a54b")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.Update.Interfaces/HeuristicLab.Update.Interfaces.csproj
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.Update.Interfaces/HeuristicLab.Update.Interfaces.csproj	(revision 2475)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.Update.Interfaces/HeuristicLab.Update.Interfaces.csproj	(revision 2475)
@@ -0,0 +1,59 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>ff397810-e3c5-4739-b5e9-36462cd67ef8</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Update.Interfaces</RootNamespace>
+    <AssemblyName>HeuristicLab.Update.Interfaces</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Class1.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.Update.Interfaces/Properties/AssemblyInfo.cs
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.Update.Interfaces/Properties/AssemblyInfo.cs	(revision 2475)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.Update.Interfaces/Properties/AssemblyInfo.cs	(revision 2475)
@@ -0,0 +1,36 @@
+﻿using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Update.Interfaces")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab.Update.Interfaces")]
+[assembly: AssemblyCopyright("Copyright ©  2009")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("ff397810-e3c5-4739-b5e9-36462cd67ef8")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.Update.Service/HeuristicLab.Update.Service.csproj
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.Update.Service/HeuristicLab.Update.Service.csproj	(revision 2475)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.Update.Service/HeuristicLab.Update.Service.csproj	(revision 2475)
@@ -0,0 +1,59 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>b0fee259-b3da-4fed-b27a-2f4e0cd2d8b6</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Update.Service</RootNamespace>
+    <AssemblyName>HeuristicLab.Update.Service</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Class1.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.Update.Service/Properties/AssemblyInfo.cs
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.Update.Service/Properties/AssemblyInfo.cs	(revision 2475)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.Update.Service/Properties/AssemblyInfo.cs	(revision 2475)
@@ -0,0 +1,36 @@
+﻿using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Update.Service")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab.Update.Service")]
+[assembly: AssemblyCopyright("Copyright ©  2009")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("b0fee259-b3da-4fed-b27a-2f4e0cd2d8b6")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
