Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Advanced/InstallationManager.cs
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Advanced/InstallationManager.cs	(revision 2516)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Advanced/InstallationManager.cs	(revision 2517)
@@ -5,12 +5,24 @@
 using HeuristicLab.PluginInfrastructure.Manager;
 using System.IO;
+using System.ComponentModel;
+using HeuristicLab.PluginInfrastructure.UpdateLocationReference;
 
 namespace HeuristicLab.PluginInfrastructure.Advanced {
-  public class InstallationManager {
+  internal class InstallationManager {
+
+    internal event EventHandler<PluginInfrastructureCancelEventArgs> PreUpdatePlugin;
+    internal event EventHandler<PluginInfrastructureCancelEventArgs> PreRemovePlugin;
+    internal event EventHandler<PluginInfrastructureCancelEventArgs> PreInstallPlugin;
+
+    internal event EventHandler<PluginInfrastructureEventArgs> PluginUpdated;
+    internal event EventHandler<PluginInfrastructureEventArgs> PluginRemoved;
+    internal event EventHandler<PluginInfrastructureEventArgs> PluginInstalled;
 
     private string pluginDir;
+    private string updateLocationUrl;
     private PluginManager pluginManager;
-    public InstallationManager() {
-      this.pluginDir = Path.GetFullPath(HeuristicLab.PluginInfrastructure.Properties.Settings.Default.PluginDir);
+    public InstallationManager(string pluginDir) {
+      this.pluginDir = pluginDir;
+      this.updateLocationUrl = "http://localhost:59253/UpdateLocation.svc";
       this.pluginManager = new PluginManager(pluginDir);
       this.pluginManager.DiscoverAndCheckPlugins();
@@ -19,9 +31,13 @@
     public IEnumerable<string> Show(IEnumerable<string> pluginNames) {
       foreach (PluginDescription desc in GetPluginDescriptions(pluginNames)) {
-        yield return ShowInformation(desc);
-      }
-    }
-
-    private string ShowInformation(PluginDescription desc) {
+        yield return GetInformation(desc);
+      }
+    }
+
+    internal string GetInformation(string pluginName) {
+      return GetInformation(GetPluginDescription(pluginName));
+    }
+
+    private string GetInformation(PluginDescription desc) {
       StringBuilder builder = new StringBuilder();
       builder.Append("Name: ").AppendLine(desc.Name);
@@ -46,24 +62,126 @@
         builder.AppendLine(dependent);
       }
+      builder.AppendLine("This plugin is " + desc.PluginState.ToString().ToLowerInvariant() + ".");
+      if (desc.PluginState == PluginState.Disabled) {
+        builder.AppendLine(DetermineProblem(desc));
+      }
 
       return builder.ToString();
     }
 
+    private static string DetermineProblem(PluginDescription desc) {
+      // either any file is missing
+      StringBuilder builder = new StringBuilder();
+      var missingFiles = from x in desc.Files
+                         where !File.Exists(x)
+                         select x;
+      if (missingFiles.Count() > 0) {
+        foreach (string fileName in desc.Files) {
+          if (!File.Exists(fileName)) builder.Append("Missing file: ").AppendLine(fileName);
+        }
+        return builder.ToString();
+      } else {
+        // or any dependency is disabled
+        var disabledDependencies = from x in desc.Dependencies
+                                   where x.PluginState == PluginState.Disabled
+                                   select x;
+        if (disabledDependencies.Count() > 0) {
+          foreach (var dependency in disabledDependencies) {
+            builder.Append(dependency.Name).AppendLine(" is disabled.").AppendLine(DetermineProblem(dependency));
+          }
+          return builder.ToString();
+        } else {
+          // or any dependency is missing / not installed
+          var declaredDependencies = GetDeclaredDependencies(desc);
+          if (declaredDependencies.Count() != desc.Dependencies.Count()) {
+            var missingDependencies = from x in declaredDependencies
+                                      where !desc.Dependencies.Any(dep => dep.Name == x)
+                                      select x;
+            builder.AppendLine("Necessary dependencies are missing:");
+            foreach (string missingDependency in missingDependencies) {
+              builder.AppendLine(missingDependency);
+            }
+          } else {
+            // or there was a problem loading the assemblies
+            builder.AppendLine("There was a problem while loading assemblies: ");
+            foreach (string assembly in desc.Assemblies) {
+              builder.AppendLine(assembly);
+            }
+            return builder.ToString();
+          }
+        }
+      }
+      return "There is an unknown problem with plugin: " + desc.Name;
+    }
+
+    private static IEnumerable<string> GetDeclaredDependencies(PluginDescription desc) {
+      var plugin = DefaultApplicationManager.GetInstances<IPlugin>(desc).Single();
+      return plugin.GetType().GetCustomAttributes(typeof(PluginDependencyAttribute), false).Cast<PluginDependencyAttribute>().Select(x => x.Dependency);
+    }
+
+    private PluginDescription GetPluginDescription(string pluginName) {
+      var exactMatch = from pluginDesc in pluginManager.Plugins
+                       where string.Equals(pluginName, pluginDesc.Name, StringComparison.InvariantCultureIgnoreCase)
+                       select pluginDesc;
+      var inexactMatch = from pluginDesc in pluginManager.Plugins
+                         where MatchPluginNameInexact(pluginName, pluginDesc.Name)
+                         select pluginDesc;
+      return exactMatch.Count() > 0 ? exactMatch.Single() : inexactMatch.First();
+    }
+
     private IEnumerable<PluginDescription> GetPluginDescriptions(IEnumerable<string> pluginNames) {
-      return from name in pluginNames
-             select (from pluginDesc in pluginManager.Plugins
-                     where name == pluginDesc.Name
-                     select pluginDesc).Single();
+      return from pluginName in pluginNames
+             select GetPluginDescription(pluginName);
+    }
+
+    private static bool MatchPluginNameInexact(string similarName, string actualName) {
+      return
+        // Core-3.2 == HeuristicLab.Core-3.2
+        actualName.Equals("HeuristicLab." + similarName, StringComparison.InvariantCultureIgnoreCase) ||
+        // HeuristicLab.Core == HeuristicLab.Core-3.2 (this should be save because we checked for exact matches first)
+        (Math.Abs(actualName.Length - similarName.Length) <= 4 && actualName.StartsWith(similarName, StringComparison.InvariantCultureIgnoreCase)) ||
+        // Core == HeuristicLab.Core-3.2
+        (Math.Abs(actualName.Length - similarName.Length) <= 17 && actualName.StartsWith("HeuristicLab." + similarName, StringComparison.InvariantCultureIgnoreCase));
     }
 
     public void Install(IEnumerable<string> pluginNames) {
-      throw new NotImplementedException();
+      IEnumerable<PluginInformation> pluginsToInstall;
+      using (UpdateLocationClient updateLocation = new UpdateLocationClient()) {
+        pluginsToInstall = from pluginName in pluginNames
+                               select GetMatchingPluginInformation(pluginName, updateLocation.GetAvailablePlugins());
+
+        var args = new PluginInfrastructureCancelEventArgs("Installing", pluginsToInstall);
+        OnPreInstall(args);
+        foreach (var pluginInfo in pluginsToInstall) {
+          var s = updateLocation.GetPackedPlugin(pluginInfo);
+          Console.WriteLine("Downloading: {0} {1} {2}", pluginInfo.Name, pluginInfo.Version, pluginInfo.BuildDate);
+        }
+      }
+      OnInstalled(new PluginInfrastructureEventArgs("Installed", pluginsToInstall));
+    }
+
+    private static PluginInformation GetMatchingPluginInformation(string pluginName, IEnumerable<PluginInformation> plugins) {
+      var exactMatch = from pluginDesc in plugins
+                       where string.Equals(pluginName, pluginDesc.Name, StringComparison.InvariantCultureIgnoreCase)
+                       select pluginDesc;
+      var inexactMatch = from pluginDesc in plugins
+                         where MatchPluginNameInexact(pluginName, pluginDesc.Name)
+                         select pluginDesc;
+      return exactMatch.Count() > 0 ? exactMatch.Single() : inexactMatch.First();
     }
 
     public void Remove(IEnumerable<string> pluginNames) {
-      foreach (PluginDescription pluginToDelete in PluginDescriptionIterator.IterateInDependencyOrder(GetPluginDescriptions(pluginNames))) {
-        foreach (string fileName in pluginToDelete.Files) {
-          Console.WriteLine("Deleting: " + Path.Combine(pluginDir, fileName));
-        }
+      var fileNames = from pluginToDelete in PluginDescriptionIterator.IterateDependentsTopDown(GetPluginDescriptions(pluginNames), pluginManager.Plugins)
+                      from fileName in pluginToDelete.Files
+                      select Path.Combine(pluginDir, fileName);
+      var args = new PluginInfrastructureCancelEventArgs("Deleting", fileNames);
+      OnPreDelete(args);
+      if (!args.Cancel) {
+        foreach (string fileName in fileNames) {
+          Console.WriteLine("Deleting file " + fileName);
+          // File.Delete(fileName);
+        }
+
+        OnDeleted(new PluginInfrastructureEventArgs("Deleted", fileNames));
       }
     }
@@ -72,4 +190,20 @@
       throw new NotImplementedException();
     }
+
+    private void OnPreDelete(PluginInfrastructureCancelEventArgs args) {
+      if (PreRemovePlugin != null) PreRemovePlugin(this, args);
+    }
+
+    private void OnDeleted(PluginInfrastructureEventArgs args) {
+      if (PluginRemoved != null) PluginRemoved(this, args);
+    }
+
+    private void OnPreInstall(PluginInfrastructureCancelEventArgs args) {
+      if (PreInstallPlugin != null) PreInstallPlugin(this, args);
+    }
+
+    private void OnInstalled(PluginInfrastructureEventArgs args) {
+      if (PluginInstalled != null) PluginInstalled(this, args);
+    }
   }
 }
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Advanced/InstallationManagerConsole.cs
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Advanced/InstallationManagerConsole.cs	(revision 2517)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Advanced/InstallationManagerConsole.cs	(revision 2517)
@@ -0,0 +1,78 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.PluginInfrastructure.Manager;
+using System.IO;
+using System.ComponentModel;
+
+namespace HeuristicLab.PluginInfrastructure.Advanced {
+  public class InstallationManagerConsole {
+    private InstallationManager installManager;
+    public InstallationManagerConsole() {
+      this.installManager = new InstallationManager(Path.GetFullPath(HeuristicLab.PluginInfrastructure.Properties.Settings.Default.PluginDir));
+      installManager.PreInstallPlugin += new EventHandler<PluginInfrastructureCancelEventArgs>(installManager_PreInstallPlugin);
+      installManager.PreRemovePlugin += new EventHandler<PluginInfrastructureCancelEventArgs>(installManager_PreRemovePlugin);
+      installManager.PreUpdatePlugin += new EventHandler<PluginInfrastructureCancelEventArgs>(installManager_PreUpdatePlugin);
+      installManager.PluginInstalled += new EventHandler<PluginInfrastructureEventArgs>(installManager_PluginInstalled);
+      installManager.PluginRemoved += new EventHandler<PluginInfrastructureEventArgs>(installManager_PluginRemoved);
+      installManager.PluginUpdated += new EventHandler<PluginInfrastructureEventArgs>(installManager_PluginUpdated);
+    }
+
+    void installManager_PreUpdatePlugin(object sender, PluginInfrastructureCancelEventArgs e) {
+      throw new NotImplementedException();
+    }
+
+    void installManager_PluginUpdated(object sender, PluginInfrastructureEventArgs e) {
+      throw new NotImplementedException();
+    }
+
+    void installManager_PreRemovePlugin(object sender, PluginInfrastructureCancelEventArgs e) {
+      Console.WriteLine("Following files are deleted:");
+      var fileNames = (IEnumerable<string>)e.Entity;
+      foreach (string fileName in fileNames) {
+        Console.WriteLine(fileName);
+      }
+      if (GetUserConfirmation()) e.Cancel = false;
+      else e.Cancel = true;
+      return;
+    }
+
+    void installManager_PluginRemoved(object sender, PluginInfrastructureEventArgs e) {
+      foreach (string fileName in (IEnumerable<string>)e.Entity)
+        Console.WriteLine("Deleted: {0}", fileName);
+    }
+
+    void installManager_PreInstallPlugin(object sender, PluginInfrastructureCancelEventArgs e) {
+      
+    }
+
+    void installManager_PluginInstalled(object sender, PluginInfrastructureEventArgs e) {
+      
+    }
+
+    private static bool GetUserConfirmation() {
+      Console.Write("Are you sure? (Y/n)");
+      string input = Console.ReadLine().ToUpperInvariant();
+      if (string.IsNullOrEmpty(input) || input == "Y") return true;
+      else return false;
+    }
+
+    public void Show(IEnumerable<string> pluginNames) {
+      foreach (string pluginName in pluginNames)
+        Console.WriteLine(installManager.GetInformation(pluginName));
+    }
+
+    public void Install(IEnumerable<string> pluginNames) {
+      installManager.Install(pluginNames);
+    }
+
+    public void Remove(IEnumerable<string> pluginNames) {
+      installManager.Remove(pluginNames);
+    }
+
+    public void Update(IEnumerable<string> pluginNames) {
+      installManager.Update(pluginNames);
+    }
+  }
+}
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/HeuristicLab.PluginInfrastructure.csproj
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/HeuristicLab.PluginInfrastructure.csproj	(revision 2516)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/HeuristicLab.PluginInfrastructure.csproj	(revision 2517)
@@ -82,8 +82,15 @@
     <Reference Include="System.Deployment" />
     <Reference Include="System.Drawing" />
+    <Reference Include="System.Runtime.Serialization">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.ServiceModel">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
     <Reference Include="System.Windows.Forms" />
     <Reference Include="System.Xml" />
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="Advanced\InstallationManagerConsole.cs" />
     <Compile Include="Advanced\InstallationManager.cs" />
     <Compile Include="Attributes\ApplicationAttribute.cs" />
@@ -103,4 +110,5 @@
     <Compile Include="InvalidPluginException.cs" />
     <Compile Include="Manager\ApplicationDescription.cs" />
+    <Compile Include="Manager\PluginInfrastructureCancelEventArgs.cs" />
     <Compile Include="Manager\DefaultApplicationManager.cs" />
     <Compile Include="Manager\PluginDescription.cs" />
@@ -135,8 +143,15 @@
       <LastGenOutput>Settings.Designer.cs</LastGenOutput>
     </None>
+    <None Include="Service References\UpdateLocationReference\UpdateLocation.xsd" />
+    <None Include="Service References\UpdateLocationReference\UpdateLocation1.xsd" />
     <Compile Include="Properties\Settings.Designer.cs">
       <AutoGen>True</AutoGen>
       <DependentUpon>Settings.settings</DependentUpon>
       <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+    <Compile Include="Service References\UpdateLocationReference\Reference.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Reference.svcmap</DependentUpon>
     </Compile>
     <Compile Include="Starter\SplashScreen.cs">
@@ -159,4 +174,24 @@
     <Content Include="Resources\List.gif" />
     <Content Include="Resources\Logo_white.gif" />
+    <None Include="Service References\UpdateLocationReference\HeuristicLab.PluginInfrastructure.UpdateLocationReference.PluginInformation.datasource">
+      <DependentUpon>Reference.svcmap</DependentUpon>
+    </None>
+    <None Include="Service References\UpdateLocationReference\Reference.svcmap">
+      <Generator>WCF Proxy Generator</Generator>
+      <LastGenOutput>Reference.cs</LastGenOutput>
+    </None>
+    <None Include="Service References\UpdateLocationReference\configuration.svcinfo" />
+    <None Include="Service References\UpdateLocationReference\configuration91.svcinfo" />
+    <None Include="Service References\UpdateLocationReference\UpdateLocation.disco" />
+    <None Include="Service References\UpdateLocationReference\UpdateLocation.wsdl" />
+    <None Include="Service References\UpdateLocationReference\UpdateLocation2.xsd" />
+    <None Include="Service References\UpdateLocationReference\UpdateLocation3.xsd" />
+    <None Include="Service References\UpdateLocationReference\UpdateLocation4.xsd" />
+  </ItemGroup>
+  <ItemGroup>
+    <WCFMetadata Include="Service References\" />
+  </ItemGroup>
+  <ItemGroup>
+    <WCFMetadataStorage Include="Service References\UpdateLocationReference\" />
   </ItemGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/ICSharpCode.SharpZipLib License.txt
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/ICSharpCode.SharpZipLib License.txt	(revision 2517)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/ICSharpCode.SharpZipLib License.txt	(revision 2517)
@@ -0,0 +1,13 @@
+#ziplib (SharpZipLib, formerly NZipLib) is a Zip, GZip, Tar and BZip2 library written entirely in C# for the .NET platform. It is implemented as an assembly (installable in the GAC), and thus can easily be incorporated into other projects (in any .NET language). The creator of #ziplib put it this way: "I've ported the zip library over to C# because I needed gzip/zip compression and I didn't want to use libzip.dll or something like this. I want all in pure C#."
+
+License
+
+The library is released under the GPL with the following exception:
+
+Linking this library statically or dynamically with other modules is making a combined work based on this library. Thus, the terms and conditions of the GNU General Public License cover the whole combination.
+
+As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules, and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version.
+
+Note: The exception is changed to reflect the latest GNU Classpath exception. Older versions of #ziplib did have another exception, but the new one is clearer and it doesn't break compatibility with the old one.
+
+Bottom line: In plain English this means you can use this library in commercial closed-source applications.
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Manager/ApplicationDescription.cs
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Manager/ApplicationDescription.cs	(revision 2516)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Manager/ApplicationDescription.cs	(revision 2517)
@@ -37,5 +37,5 @@
     public string Name {
       get { return name; }
-      set { name = value; }
+      internal set { name = value; }
     }
     private Version version;
@@ -53,5 +53,5 @@
     /// Gets or sets the description of the application.
     /// </summary>
-    public string Description {
+    internal string Description {
       get { return description; }
       set { description = value; }
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Manager/DefaultApplicationManager.cs
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Manager/DefaultApplicationManager.cs	(revision 2516)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Manager/DefaultApplicationManager.cs	(revision 2517)
@@ -80,5 +80,5 @@
     private void LoadPlugins(IEnumerable<PluginDescription> plugins) {
       // 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 desc in PluginDescriptionIterator.IterateDependenciesBottomUp(plugins.Where(x => x.PluginState != PluginState.Disabled))) {
         foreach (string assembly in desc.Assemblies) {
           var asm = Assembly.LoadFrom(assembly);
@@ -105,5 +105,5 @@
           plugin.OnUnload();
         }
-        foreach (var desc in PluginDescriptionIterator.IterateInDependencyOrder(plugins.Where(x => x.PluginState != PluginState.Disabled))) {
+        foreach (var desc in PluginDescriptionIterator.IterateDependenciesBottomUp(plugins.Where(x => x.PluginState != PluginState.Disabled))) {
           desc.Unload();
           OnPluginUnloaded(new PluginInfrastructureEventArgs("Plugin unloaded", desc));
@@ -134,5 +134,5 @@
     /// <typeparam name="T">Most general type.</typeparam>
     /// <returns>Enumerable of the created instances.</returns>
-    public IEnumerable<T> GetInstances<T>(IPluginDescription plugin) where T : class {
+    public static IEnumerable<T> GetInstances<T>(IPluginDescription plugin) where T : class {
       return from t in GetTypes(typeof(T), plugin)
              where !t.IsAbstract && !t.IsInterface && !t.HasElementType
@@ -155,5 +155,5 @@
     /// <typeparam name="T">Most general type.</typeparam>
     /// <returns>Enumerable of the created instances.</returns>
-    public IEnumerable<T> GetInstances<T>() where T : class {
+    public static IEnumerable<T> GetInstances<T>() where T : class {
       return from i in GetInstances(typeof(T))
              select (T)i;
@@ -165,5 +165,5 @@
     /// <typeparam name="type">Most general type.</typeparam>
     /// <returns>Enumerable of the created instances.</returns>
-    public IEnumerable<object> GetInstances(Type type) {
+    public static IEnumerable<object> GetInstances(Type type) {
       return from t in GetTypes(type)
              where !t.IsAbstract && !t.IsInterface && !t.HasElementType
@@ -176,5 +176,5 @@
     /// <param name="type">Most general type for which to find matching types.</param>
     /// <returns>Enumerable of the discovered types.</returns>
-    public IEnumerable<Type> GetTypes(Type type) {
+    public static IEnumerable<Type> GetTypes(Type type) {
       return from asm in AppDomain.CurrentDomain.GetAssemblies()
              from t in GetTypes(type, asm)
@@ -189,5 +189,5 @@
     /// <param name="plugin">The plugin the subtypes must be part of.</param>
     /// <returns>Enumerable of the discovered types.</returns>
-    public IEnumerable<Type> GetTypes(Type type, IPluginDescription pluginDescription) {
+    public static IEnumerable<Type> GetTypes(Type type, IPluginDescription pluginDescription) {
       PluginDescription pluginDesc = (PluginDescription)pluginDescription;
       return from asm in AppDomain.CurrentDomain.GetAssemblies()
@@ -225,4 +225,25 @@
       return null;
     }
+
+    #region IApplicationManager Members
+
+
+    IEnumerable<T> IApplicationManager.GetInstances<T>(IPluginDescription plugin) {
+      return GetInstances<T>(plugin);
+    }
+
+    IEnumerable<T> IApplicationManager.GetInstances<T>() {
+      return GetInstances<T>();
+    }
+
+    IEnumerable<Type> IApplicationManager.GetTypes(Type type) {
+      return GetTypes(type);
+    }
+
+    IEnumerable<Type> IApplicationManager.GetTypes(Type type, IPluginDescription plugin) {
+      return GetTypes(type, plugin);
+    }
+
+    #endregion
   }
 }
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Manager/PluginDescription.cs
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Manager/PluginDescription.cs	(revision 2516)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Manager/PluginDescription.cs	(revision 2517)
@@ -30,5 +30,5 @@
   /// </summary>
   [Serializable]
-  internal sealed class PluginDescription : IPluginDescription {
+  public sealed class PluginDescription : IPluginDescription {
     private int nTimesLoaded;
 
@@ -46,7 +46,7 @@
     /// Gets or sets the description of the plugin.
     /// </summary>
-    public string Description {
+    internal string Description {
       get { return description; }
-      internal set { description = value; }
+      set { description = value; }
     }
     private Version version;
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Manager/PluginInfrastructureCancelEventArgs.cs
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Manager/PluginInfrastructureCancelEventArgs.cs	(revision 2517)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Manager/PluginInfrastructureCancelEventArgs.cs	(revision 2517)
@@ -0,0 +1,39 @@
+#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.ComponentModel;
+
+namespace HeuristicLab.PluginInfrastructure.Manager {
+  // to be replaced by GenericEventArgs
+  [Serializable]
+  internal sealed class PluginInfrastructureCancelEventArgs : CancelEventArgs {
+    internal string Action { get; private set; }
+    internal object Entity { get; private set; }
+    internal PluginInfrastructureCancelEventArgs(string action, object entity)
+      : base() {
+      this.Action = action;
+      this.Entity = entity;
+    }
+  }
+}
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Manager/PluginValidator.cs
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Manager/PluginValidator.cs	(revision 2516)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Manager/PluginValidator.cs	(revision 2517)
@@ -218,5 +218,5 @@
 
       // minimal sanity check of the attribute values
-      if (!string.IsNullOrEmpty(pluginName) && !string.IsNullOrEmpty(pluginDescription) &&
+      if (!string.IsNullOrEmpty(pluginName) &&
           pluginFiles.Count > 0 &&
           pluginAssemblies.Count > 0 &&
@@ -250,9 +250,8 @@
           var matchingDescriptions = pluginDescriptions.Where(x => x.Name == pluginName);
           if (matchingDescriptions.Count() > 0) {
-            desc.AddDependency(matchingDescriptions.First());
+            desc.AddDependency(matchingDescriptions.Single());
           } else {
             // no plugin description that matches the dependency name is available => plugin is disabled
             desc.Disable();
-            break; // stop processing more dependencies
           }
         }
@@ -279,5 +278,5 @@
     private void LoadPlugins(IEnumerable<PluginDescription> pluginDescriptions) {
       // load all loadable plugins (all dependencies available) into the execution context
-      foreach (var desc in PluginDescriptionIterator.IterateInDependencyOrder(pluginDescriptions
+      foreach (var desc in PluginDescriptionIterator.IterateDependenciesBottomUp(pluginDescriptions
                                                                                 .Where(x => x.PluginState != PluginState.Disabled))) {
         List<Type> types = new List<Type>();
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/PluginDescriptionIterator.cs
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/PluginDescriptionIterator.cs	(revision 2516)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/PluginDescriptionIterator.cs	(revision 2517)
@@ -23,12 +23,13 @@
 using System.Collections.Generic;
 using System.Text;
+using System.Linq;
 
 namespace HeuristicLab.PluginInfrastructure.Manager {
   internal static class PluginDescriptionIterator {
-    internal static IEnumerable<PluginDescription> IterateInDependencyOrder(IEnumerable<PluginDescription> pluginDescriptions) {
+    internal static IEnumerable<PluginDescription> IterateDependenciesBottomUp(IEnumerable<PluginDescription> pluginDescriptions) {
       // list to make sure we yield each description only once
-      List<PluginDescription> yieldedDescriptions = new List<PluginDescription>();
+      HashSet<PluginDescription> yieldedDescriptions = new HashSet<PluginDescription>();
       foreach (var desc in pluginDescriptions) {
-        foreach (var dependency in IterateInDependencyOrder(desc.Dependencies)) {
+        foreach (var dependency in IterateDependenciesBottomUp(desc.Dependencies)) {
           if (!yieldedDescriptions.Contains(dependency)) {
             yieldedDescriptions.Add(dependency);
@@ -42,4 +43,26 @@
       }
     }
+
+    internal static IEnumerable<PluginDescription> IterateDependentsTopDown(IEnumerable<PluginDescription> pluginDescriptions, IEnumerable<PluginDescription> allPlugins) {
+      HashSet<PluginDescription> yieldedDescriptions = new HashSet<PluginDescription>();
+      foreach (var desc in pluginDescriptions) {
+        foreach (var dependent in IterateDependentsTopDown(GetDependentPlugins(desc, allPlugins), allPlugins)) {
+          if (!yieldedDescriptions.Contains(dependent)) {
+            yieldedDescriptions.Add(dependent);
+            yield return dependent;
+          }
+        }
+        if (!yieldedDescriptions.Contains(desc)) {
+          yieldedDescriptions.Add(desc);
+          yield return desc;
+        }
+      }
+    }
+
+    private static IEnumerable<PluginDescription> GetDependentPlugins(PluginDescription desc, IEnumerable<PluginDescription> allPlugins) {
+      return from plugin in allPlugins
+             where plugin.Dependencies.Contains(desc)
+             select plugin;
+    }
   }
 }
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Service References/UpdateLocationReference/HeuristicLab.PluginInfrastructure.UpdateLocationReference.PluginInformation.datasource
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Service References/UpdateLocationReference/HeuristicLab.PluginInfrastructure.UpdateLocationReference.PluginInformation.datasource	(revision 2517)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Service References/UpdateLocationReference/HeuristicLab.PluginInfrastructure.UpdateLocationReference.PluginInformation.datasource	(revision 2517)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="PluginInformation" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>HeuristicLab.PluginInfrastructure.UpdateLocationReference.PluginInformation, Service References.UpdateLocationReference.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Service References/UpdateLocationReference/Reference.cs
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Service References/UpdateLocationReference/Reference.cs	(revision 2517)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Service References/UpdateLocationReference/Reference.cs	(revision 2517)
@@ -0,0 +1,139 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.4200
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.PluginInfrastructure.UpdateLocationReference {
+    using System.Runtime.Serialization;
+    using System;
+    
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="PluginInformation", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Update.Service")]
+    [System.SerializableAttribute()]
+    internal partial class PluginInformation : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.DateTime BuildDateField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string NameField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Version VersionField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        internal System.DateTime BuildDate {
+            get {
+                return this.BuildDateField;
+            }
+            set {
+                if ((this.BuildDateField.Equals(value) != true)) {
+                    this.BuildDateField = value;
+                    this.RaisePropertyChanged("BuildDate");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        internal string Name {
+            get {
+                return this.NameField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.NameField, value) != true)) {
+                    this.NameField = value;
+                    this.RaisePropertyChanged("Name");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        internal System.Version Version {
+            get {
+                return this.VersionField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.VersionField, value) != true)) {
+                    this.VersionField = value;
+                    this.RaisePropertyChanged("Version");
+                }
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null)) {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
+    [System.ServiceModel.ServiceContractAttribute(ConfigurationName="UpdateLocationReference.IUpdateLocation")]
+    internal interface IUpdateLocation {
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IUpdateLocation/GetAvailablePlugins", ReplyAction="http://tempuri.org/IUpdateLocation/GetAvailablePluginsResponse")]
+        HeuristicLab.PluginInfrastructure.UpdateLocationReference.PluginInformation[] GetAvailablePlugins();
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IUpdateLocation/GetPackedPlugin", ReplyAction="http://tempuri.org/IUpdateLocation/GetPackedPluginResponse")]
+        System.IO.Stream GetPackedPlugin(HeuristicLab.PluginInfrastructure.UpdateLocationReference.PluginInformation info);
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
+    internal interface IUpdateLocationChannel : HeuristicLab.PluginInfrastructure.UpdateLocationReference.IUpdateLocation, System.ServiceModel.IClientChannel {
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
+    internal partial class UpdateLocationClient : System.ServiceModel.ClientBase<HeuristicLab.PluginInfrastructure.UpdateLocationReference.IUpdateLocation>, HeuristicLab.PluginInfrastructure.UpdateLocationReference.IUpdateLocation {
+        
+        public UpdateLocationClient() {
+        }
+        
+        public UpdateLocationClient(string endpointConfigurationName) : 
+                base(endpointConfigurationName) {
+        }
+        
+        public UpdateLocationClient(string endpointConfigurationName, string remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress) {
+        }
+        
+        public UpdateLocationClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress) {
+        }
+        
+        public UpdateLocationClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(binding, remoteAddress) {
+        }
+        
+        public HeuristicLab.PluginInfrastructure.UpdateLocationReference.PluginInformation[] GetAvailablePlugins() {
+            return base.Channel.GetAvailablePlugins();
+        }
+        
+        public System.IO.Stream GetPackedPlugin(HeuristicLab.PluginInfrastructure.UpdateLocationReference.PluginInformation info) {
+            return base.Channel.GetPackedPlugin(info);
+        }
+    }
+}
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Service References/UpdateLocationReference/Reference.svcmap
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Service References/UpdateLocationReference/Reference.svcmap	(revision 2517)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Service References/UpdateLocationReference/Reference.svcmap	(revision 2517)
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ReferenceGroup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ID="ccf8d9e9-be75-4024-be29-6d50e7c31aa0" xmlns="urn:schemas-microsoft-com:xml-wcfservicemap">
+  <ClientOptions>
+    <GenerateAsynchronousMethods>false</GenerateAsynchronousMethods>
+    <EnableDataBinding>true</EnableDataBinding>
+    <ExcludedTypes />
+    <ImportXmlTypes>false</ImportXmlTypes>
+    <GenerateInternalTypes>true</GenerateInternalTypes>
+    <GenerateMessageContracts>false</GenerateMessageContracts>
+    <NamespaceMappings />
+    <CollectionMappings />
+    <GenerateSerializableTypes>true</GenerateSerializableTypes>
+    <Serializer>Auto</Serializer>
+    <ReferenceAllAssemblies>true</ReferenceAllAssemblies>
+    <ReferencedAssemblies />
+    <ReferencedDataContractTypes />
+    <ServiceContractMappings />
+  </ClientOptions>
+  <MetadataSources>
+    <MetadataSource Address="http://localhost:59253/UpdateLocation.svc" Protocol="http" SourceId="1" />
+  </MetadataSources>
+  <Metadata>
+    <MetadataFile FileName="UpdateLocation.xsd" MetadataType="Schema" ID="e156a959-a47a-4042-9e0c-027c6804e5b8" SourceId="1" SourceUrl="http://localhost:59253/UpdateLocation.svc?xsd=xsd0" />
+    <MetadataFile FileName="UpdateLocation1.xsd" MetadataType="Schema" ID="3ac36497-fdd7-423c-97cc-2ffd560ec8df" SourceId="1" SourceUrl="http://localhost:59253/UpdateLocation.svc?xsd=xsd2" />
+    <MetadataFile FileName="UpdateLocation.disco" MetadataType="Disco" ID="4aa9d004-c81d-4414-8664-f9b3094bc32d" SourceId="1" SourceUrl="http://localhost:59253/UpdateLocation.svc?disco" />
+    <MetadataFile FileName="UpdateLocation2.xsd" MetadataType="Schema" ID="98c69036-e6bf-480c-9275-15e7630a95a5" SourceId="1" SourceUrl="http://localhost:59253/UpdateLocation.svc?xsd=xsd1" />
+    <MetadataFile FileName="UpdateLocation.wsdl" MetadataType="Wsdl" ID="9ab97dfc-abef-4b3b-b4d2-cfe63279bb79" SourceId="1" SourceUrl="http://localhost:59253/UpdateLocation.svc?wsdl" />
+    <MetadataFile FileName="UpdateLocation3.xsd" MetadataType="Schema" ID="6d5d8bbb-44ab-4a8b-8ce8-60b9dd0994f1" SourceId="1" SourceUrl="http://localhost:59253/UpdateLocation.svc?xsd=xsd3" />
+    <MetadataFile FileName="UpdateLocation4.xsd" MetadataType="Schema" ID="693312d2-acd3-485e-8cf2-7893fc9a6616" SourceId="1" SourceUrl="http://localhost:59253/UpdateLocation.svc?xsd=xsd4" />
+  </Metadata>
+  <Extensions>
+    <ExtensionFile FileName="configuration91.svcinfo" Name="configuration91.svcinfo" />
+    <ExtensionFile FileName="configuration.svcinfo" Name="configuration.svcinfo" />
+  </Extensions>
+</ReferenceGroup>
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Service References/UpdateLocationReference/UpdateLocation.disco
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Service References/UpdateLocationReference/UpdateLocation.disco	(revision 2517)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Service References/UpdateLocationReference/UpdateLocation.disco	(revision 2517)
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<discovery xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/disco/">
+  <contractRef ref="http://localhost:59253/UpdateLocation.svc?wsdl" docRef="http://localhost:59253/UpdateLocation.svc" xmlns="http://schemas.xmlsoap.org/disco/scl/" />
+</discovery>
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Service References/UpdateLocationReference/UpdateLocation.wsdl
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Service References/UpdateLocationReference/UpdateLocation.wsdl	(revision 2517)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Service References/UpdateLocationReference/UpdateLocation.wsdl	(revision 2517)
@@ -0,0 +1,253 @@
+<?xml version="1.0" encoding="utf-8"?>
+<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:tns="http://tempuri.org/" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" name="UpdateLocation" targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
+  <wsp:Policy wsu:Id="WSHttpBinding_IUpdateLocation_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SymmetricBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy>
+            <sp:ProtectionToken>
+              <wsp:Policy>
+                <sp:SecureConversationToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
+                  <wsp:Policy>
+                    <sp:RequireDerivedKeys />
+                    <sp:BootstrapPolicy>
+                      <wsp:Policy>
+                        <sp:SignedParts>
+                          <sp:Body />
+                          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+                          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+                        </sp:SignedParts>
+                        <sp:EncryptedParts>
+                          <sp:Body />
+                        </sp:EncryptedParts>
+                        <sp:SymmetricBinding>
+                          <wsp:Policy>
+                            <sp:ProtectionToken>
+                              <wsp:Policy>
+                                <sp:SpnegoContextToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
+                                  <wsp:Policy>
+                                    <sp:RequireDerivedKeys />
+                                  </wsp:Policy>
+                                </sp:SpnegoContextToken>
+                              </wsp:Policy>
+                            </sp:ProtectionToken>
+                            <sp:AlgorithmSuite>
+                              <wsp:Policy>
+                                <sp:Basic256 />
+                              </wsp:Policy>
+                            </sp:AlgorithmSuite>
+                            <sp:Layout>
+                              <wsp:Policy>
+                                <sp:Strict />
+                              </wsp:Policy>
+                            </sp:Layout>
+                            <sp:IncludeTimestamp />
+                            <sp:EncryptSignature />
+                            <sp:OnlySignEntireHeadersAndBody />
+                          </wsp:Policy>
+                        </sp:SymmetricBinding>
+                        <sp:Wss11>
+                          <wsp:Policy>
+                            <sp:MustSupportRefKeyIdentifier />
+                            <sp:MustSupportRefIssuerSerial />
+                            <sp:MustSupportRefThumbprint />
+                            <sp:MustSupportRefEncryptedKey />
+                          </wsp:Policy>
+                        </sp:Wss11>
+                        <sp:Trust10>
+                          <wsp:Policy>
+                            <sp:MustSupportIssuedTokens />
+                            <sp:RequireClientEntropy />
+                            <sp:RequireServerEntropy />
+                          </wsp:Policy>
+                        </sp:Trust10>
+                      </wsp:Policy>
+                    </sp:BootstrapPolicy>
+                  </wsp:Policy>
+                </sp:SecureConversationToken>
+              </wsp:Policy>
+            </sp:ProtectionToken>
+            <sp:AlgorithmSuite>
+              <wsp:Policy>
+                <sp:Basic256 />
+              </wsp:Policy>
+            </sp:AlgorithmSuite>
+            <sp:Layout>
+              <wsp:Policy>
+                <sp:Strict />
+              </wsp:Policy>
+            </sp:Layout>
+            <sp:IncludeTimestamp />
+            <sp:EncryptSignature />
+            <sp:OnlySignEntireHeadersAndBody />
+          </wsp:Policy>
+        </sp:SymmetricBinding>
+        <sp:Wss11 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy>
+            <sp:MustSupportRefKeyIdentifier />
+            <sp:MustSupportRefIssuerSerial />
+            <sp:MustSupportRefThumbprint />
+            <sp:MustSupportRefEncryptedKey />
+          </wsp:Policy>
+        </sp:Wss11>
+        <sp:Trust10 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy>
+            <sp:MustSupportIssuedTokens />
+            <sp:RequireClientEntropy />
+            <sp:RequireServerEntropy />
+          </wsp:Policy>
+        </sp:Trust10>
+        <wsaw:UsingAddressing />
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="WSHttpBinding_IUpdateLocation_GetAvailablePlugins_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="WSHttpBinding_IUpdateLocation_GetAvailablePlugins_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="WSHttpBinding_IUpdateLocation_GetPackedPlugin_Input_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsp:Policy wsu:Id="WSHttpBinding_IUpdateLocation_GetPackedPlugin_output_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <sp:SignedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+          <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
+          <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
+        </sp:SignedParts>
+        <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <sp:Body />
+        </sp:EncryptedParts>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsdl:types>
+    <xsd:schema targetNamespace="http://tempuri.org/Imports">
+      <xsd:import schemaLocation="http://localhost:59253/UpdateLocation.svc?xsd=xsd0" namespace="http://tempuri.org/" />
+      <xsd:import schemaLocation="http://localhost:59253/UpdateLocation.svc?xsd=xsd1" namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
+      <xsd:import schemaLocation="http://localhost:59253/UpdateLocation.svc?xsd=xsd2" namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Update.Service" />
+      <xsd:import schemaLocation="http://localhost:59253/UpdateLocation.svc?xsd=xsd3" namespace="http://schemas.datacontract.org/2004/07/System" />
+      <xsd:import schemaLocation="http://localhost:59253/UpdateLocation.svc?xsd=xsd4" namespace="http://schemas.microsoft.com/Message" />
+    </xsd:schema>
+  </wsdl:types>
+  <wsdl:message name="IUpdateLocation_GetAvailablePlugins_InputMessage">
+    <wsdl:part name="parameters" element="tns:GetAvailablePlugins" />
+  </wsdl:message>
+  <wsdl:message name="IUpdateLocation_GetAvailablePlugins_OutputMessage">
+    <wsdl:part name="parameters" element="tns:GetAvailablePluginsResponse" />
+  </wsdl:message>
+  <wsdl:message name="IUpdateLocation_GetPackedPlugin_InputMessage">
+    <wsdl:part name="parameters" element="tns:GetPackedPlugin" />
+  </wsdl:message>
+  <wsdl:message name="IUpdateLocation_GetPackedPlugin_OutputMessage">
+    <wsdl:part name="parameters" element="tns:GetPackedPluginResponse" />
+  </wsdl:message>
+  <wsdl:portType name="IUpdateLocation">
+    <wsdl:operation name="GetAvailablePlugins">
+      <wsdl:input wsaw:Action="http://tempuri.org/IUpdateLocation/GetAvailablePlugins" message="tns:IUpdateLocation_GetAvailablePlugins_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IUpdateLocation/GetAvailablePluginsResponse" message="tns:IUpdateLocation_GetAvailablePlugins_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="GetPackedPlugin">
+      <wsdl:input wsaw:Action="http://tempuri.org/IUpdateLocation/GetPackedPlugin" message="tns:IUpdateLocation_GetPackedPlugin_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IUpdateLocation/GetPackedPluginResponse" message="tns:IUpdateLocation_GetPackedPlugin_OutputMessage" />
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding name="WSHttpBinding_IUpdateLocation" type="tns:IUpdateLocation">
+    <wsp:PolicyReference URI="#WSHttpBinding_IUpdateLocation_policy" />
+    <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" />
+    <wsdl:operation name="GetAvailablePlugins">
+      <soap12:operation soapAction="http://tempuri.org/IUpdateLocation/GetAvailablePlugins" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#WSHttpBinding_IUpdateLocation_GetAvailablePlugins_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#WSHttpBinding_IUpdateLocation_GetAvailablePlugins_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="GetPackedPlugin">
+      <soap12:operation soapAction="http://tempuri.org/IUpdateLocation/GetPackedPlugin" style="document" />
+      <wsdl:input>
+        <wsp:PolicyReference URI="#WSHttpBinding_IUpdateLocation_GetPackedPlugin_Input_policy" />
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <wsp:PolicyReference URI="#WSHttpBinding_IUpdateLocation_GetPackedPlugin_output_policy" />
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:service name="UpdateLocation">
+    <wsdl:port name="WSHttpBinding_IUpdateLocation" binding="tns:WSHttpBinding_IUpdateLocation">
+      <soap12:address location="http://localhost:59253/UpdateLocation.svc" />
+      <wsa10:EndpointReference>
+        <wsa10:Address>http://localhost:59253/UpdateLocation.svc</wsa10:Address>
+        <Identity xmlns="http://schemas.xmlsoap.org/ws/2006/02/addressingidentity">
+          <Dns>localhost</Dns>
+        </Identity>
+      </wsa10:EndpointReference>
+    </wsdl:port>
+  </wsdl:service>
+</wsdl:definitions>
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Service References/UpdateLocationReference/UpdateLocation.xsd
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Service References/UpdateLocationReference/UpdateLocation.xsd	(revision 2517)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Service References/UpdateLocationReference/UpdateLocation.xsd	(revision 2517)
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://tempuri.org/" elementFormDefault="qualified" targetNamespace="http://tempuri.org/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import schemaLocation="http://localhost:59253/UpdateLocation.svc?xsd=xsd2" namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Update.Service" />
+  <xs:import schemaLocation="http://localhost:59253/UpdateLocation.svc?xsd=xsd4" namespace="http://schemas.microsoft.com/Message" />
+  <xs:element name="GetAvailablePlugins">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetAvailablePluginsResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q1="http://schemas.datacontract.org/2004/07/HeuristicLab.Update.Service" minOccurs="0" name="GetAvailablePluginsResult" nillable="true" type="q1:ArrayOfPluginInformation" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetPackedPlugin">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q2="http://schemas.datacontract.org/2004/07/HeuristicLab.Update.Service" minOccurs="0" name="info" nillable="true" type="q2:PluginInformation" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetPackedPluginResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q3="http://schemas.microsoft.com/Message" name="GetPackedPluginResult" type="q3:StreamBody" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+</xs:schema>
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Service References/UpdateLocationReference/UpdateLocation1.xsd
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Service References/UpdateLocationReference/UpdateLocation1.xsd	(revision 2517)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Service References/UpdateLocationReference/UpdateLocation1.xsd	(revision 2517)
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/HeuristicLab.Update.Service" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Update.Service" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import schemaLocation="http://localhost:59253/UpdateLocation.svc?xsd=xsd3" namespace="http://schemas.datacontract.org/2004/07/System" />
+  <xs:complexType name="ArrayOfPluginInformation">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="PluginInformation" nillable="true" type="tns:PluginInformation" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfPluginInformation" nillable="true" type="tns:ArrayOfPluginInformation" />
+  <xs:complexType name="PluginInformation">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="BuildDate" type="xs:dateTime" />
+      <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
+      <xs:element xmlns:q1="http://schemas.datacontract.org/2004/07/System" minOccurs="0" name="Version" nillable="true" type="q1:Version" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="PluginInformation" nillable="true" type="tns:PluginInformation" />
+</xs:schema>
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Service References/UpdateLocationReference/UpdateLocation2.xsd
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Service References/UpdateLocationReference/UpdateLocation2.xsd	(revision 2517)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Service References/UpdateLocationReference/UpdateLocation2.xsd	(revision 2517)
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.microsoft.com/2003/10/Serialization/" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:element name="anyType" nillable="true" type="xs:anyType" />
+  <xs:element name="anyURI" nillable="true" type="xs:anyURI" />
+  <xs:element name="base64Binary" nillable="true" type="xs:base64Binary" />
+  <xs:element name="boolean" nillable="true" type="xs:boolean" />
+  <xs:element name="byte" nillable="true" type="xs:byte" />
+  <xs:element name="dateTime" nillable="true" type="xs:dateTime" />
+  <xs:element name="decimal" nillable="true" type="xs:decimal" />
+  <xs:element name="double" nillable="true" type="xs:double" />
+  <xs:element name="float" nillable="true" type="xs:float" />
+  <xs:element name="int" nillable="true" type="xs:int" />
+  <xs:element name="long" nillable="true" type="xs:long" />
+  <xs:element name="QName" nillable="true" type="xs:QName" />
+  <xs:element name="short" nillable="true" type="xs:short" />
+  <xs:element name="string" nillable="true" type="xs:string" />
+  <xs:element name="unsignedByte" nillable="true" type="xs:unsignedByte" />
+  <xs:element name="unsignedInt" nillable="true" type="xs:unsignedInt" />
+  <xs:element name="unsignedLong" nillable="true" type="xs:unsignedLong" />
+  <xs:element name="unsignedShort" nillable="true" type="xs:unsignedShort" />
+  <xs:element name="char" nillable="true" type="tns:char" />
+  <xs:simpleType name="char">
+    <xs:restriction base="xs:int" />
+  </xs:simpleType>
+  <xs:element name="duration" nillable="true" type="tns:duration" />
+  <xs:simpleType name="duration">
+    <xs:restriction base="xs:duration">
+      <xs:pattern value="\-?P(\d*D)?(T(\d*H)?(\d*M)?(\d*(\.\d*)?S)?)?" />
+      <xs:minInclusive value="-P10675199DT2H48M5.4775808S" />
+      <xs:maxInclusive value="P10675199DT2H48M5.4775807S" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:element name="guid" nillable="true" type="tns:guid" />
+  <xs:simpleType name="guid">
+    <xs:restriction base="xs:string">
+      <xs:pattern value="[\da-fA-F]{8}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{12}" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:attribute name="FactoryType" type="xs:QName" />
+  <xs:attribute name="Id" type="xs:ID" />
+  <xs:attribute name="Ref" type="xs:IDREF" />
+</xs:schema>
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Service References/UpdateLocationReference/UpdateLocation3.xsd
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Service References/UpdateLocationReference/UpdateLocation3.xsd	(revision 2517)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Service References/UpdateLocationReference/UpdateLocation3.xsd	(revision 2517)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/System" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/System" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:complexType name="Version">
+    <xs:sequence>
+      <xs:element name="_Build" type="xs:int" />
+      <xs:element name="_Major" type="xs:int" />
+      <xs:element name="_Minor" type="xs:int" />
+      <xs:element name="_Revision" type="xs:int" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="Version" nillable="true" type="tns:Version" />
+</xs:schema>
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Service References/UpdateLocationReference/UpdateLocation4.xsd
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Service References/UpdateLocationReference/UpdateLocation4.xsd	(revision 2517)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Service References/UpdateLocationReference/UpdateLocation4.xsd	(revision 2517)
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.microsoft.com/Message" elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/Message" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:simpleType name="StreamBody">
+    <xs:restriction base="xs:base64Binary" />
+  </xs:simpleType>
+</xs:schema>
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Service References/UpdateLocationReference/configuration.svcinfo
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Service References/UpdateLocationReference/configuration.svcinfo	(revision 2517)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Service References/UpdateLocationReference/configuration.svcinfo	(revision 2517)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<configurationSnapshot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:schemas-microsoft-com:xml-wcfconfigurationsnapshot">
+  <behaviors />
+  <bindings>
+    <binding digest="System.ServiceModel.Configuration.WSHttpBindingElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089:&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data hostNameComparisonMode=&quot;StrongWildcard&quot; messageEncoding=&quot;Text&quot; name=&quot;WSHttpBinding_IUpdateLocation&quot; textEncoding=&quot;utf-8&quot; transactionFlow=&quot;false&quot;&gt;&lt;readerQuotas maxArrayLength=&quot;16384&quot; maxBytesPerRead=&quot;4096&quot; maxDepth=&quot;32&quot; maxNameTableCharCount=&quot;16384&quot; maxStringContentLength=&quot;8192&quot; /&gt;&lt;reliableSession enabled=&quot;false&quot; inactivityTimeout=&quot;00:10:00&quot; ordered=&quot;true&quot; /&gt;&lt;security mode=&quot;Message&quot;&gt;&lt;message algorithmSuite=&quot;Default&quot; clientCredentialType=&quot;Windows&quot; establishSecurityContext=&quot;true&quot; negotiateServiceCredential=&quot;true&quot; /&gt;&lt;transport clientCredentialType=&quot;Windows&quot; proxyCredentialType=&quot;None&quot; realm=&quot;&quot; /&gt;&lt;/security&gt;&lt;/Data&gt;" bindingType="wsHttpBinding" name="WSHttpBinding_IUpdateLocation" />
+  </bindings>
+  <endpoints>
+    <endpoint normalizedDigest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;http://localhost:59253/UpdateLocation.svc&quot; binding=&quot;wsHttpBinding&quot; bindingConfiguration=&quot;WSHttpBinding_IUpdateLocation&quot; contract=&quot;UpdateLocationReference.IUpdateLocation&quot; name=&quot;WSHttpBinding_IUpdateLocation&quot;&gt;&lt;identity&gt;&lt;dns value=&quot;localhost&quot; /&gt;&lt;/identity&gt;&lt;/Data&gt;" digest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;http://localhost:59253/UpdateLocation.svc&quot; binding=&quot;wsHttpBinding&quot; bindingConfiguration=&quot;WSHttpBinding_IUpdateLocation&quot; contract=&quot;UpdateLocationReference.IUpdateLocation&quot; name=&quot;WSHttpBinding_IUpdateLocation&quot;&gt;&lt;identity&gt;&lt;dns value=&quot;localhost&quot; /&gt;&lt;/identity&gt;&lt;/Data&gt;" contractName="UpdateLocationReference.IUpdateLocation" name="WSHttpBinding_IUpdateLocation" />
+  </endpoints>
+</configurationSnapshot>
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Service References/UpdateLocationReference/configuration91.svcinfo
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Service References/UpdateLocationReference/configuration91.svcinfo	(revision 2517)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Service References/UpdateLocationReference/configuration91.svcinfo	(revision 2517)
@@ -0,0 +1,198 @@
+<?xml version="1.0" encoding="utf-8"?>
+<SavedWcfConfigurationInformation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="9.1" CheckSum="Kufo8oSHLckamtQ/yxuGNszhGZI=">
+  <bindingConfigurations>
+    <bindingConfiguration bindingType="wsHttpBinding" name="WSHttpBinding_IUpdateLocation">
+      <properties>
+        <property path="/name" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>WSHttpBinding_IUpdateLocation</serializedValue>
+        </property>
+        <property path="/closeTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/openTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/receiveTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:10:00</serializedValue>
+        </property>
+        <property path="/sendTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/bypassProxyOnLocal" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/transactionFlow" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/hostNameComparisonMode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.HostNameComparisonMode, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>StrongWildcard</serializedValue>
+        </property>
+        <property path="/maxBufferPoolSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int64, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>524288</serializedValue>
+        </property>
+        <property path="/maxReceivedMessageSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int64, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>65536</serializedValue>
+        </property>
+        <property path="/messageEncoding" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.WSMessageEncoding, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Text</serializedValue>
+        </property>
+        <property path="/proxyAddress" isComplexType="false" isExplicitlyDefined="false" clrType="System.Uri, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/readerQuotas" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxDepth" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>32</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxStringContentLength" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>8192</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxArrayLength" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>16384</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxBytesPerRead" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>4096</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxNameTableCharCount" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>16384</serializedValue>
+        </property>
+        <property path="/reliableSession" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.StandardBindingOptionalReliableSessionElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.StandardBindingOptionalReliableSessionElement</serializedValue>
+        </property>
+        <property path="/reliableSession/ordered" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>True</serializedValue>
+        </property>
+        <property path="/reliableSession/inactivityTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:10:00</serializedValue>
+        </property>
+        <property path="/reliableSession/enabled" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/textEncoding" isComplexType="false" isExplicitlyDefined="true" clrType="System.Text.Encoding, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.Text.UTF8Encoding</serializedValue>
+        </property>
+        <property path="/useDefaultWebProxy" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>True</serializedValue>
+        </property>
+        <property path="/allowCookies" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/security" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.WSHttpSecurityElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.WSHttpSecurityElement</serializedValue>
+        </property>
+        <property path="/security/mode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.SecurityMode, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Message</serializedValue>
+        </property>
+        <property path="/security/transport" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.WSHttpTransportSecurityElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.WSHttpTransportSecurityElement</serializedValue>
+        </property>
+        <property path="/security/transport/clientCredentialType" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.HttpClientCredentialType, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Windows</serializedValue>
+        </property>
+        <property path="/security/transport/proxyCredentialType" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.HttpProxyCredentialType, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>None</serializedValue>
+        </property>
+        <property path="/security/transport/realm" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/security/message" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.NonDualMessageSecurityOverHttpElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.NonDualMessageSecurityOverHttpElement</serializedValue>
+        </property>
+        <property path="/security/message/clientCredentialType" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.MessageCredentialType, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Windows</serializedValue>
+        </property>
+        <property path="/security/message/negotiateServiceCredential" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>True</serializedValue>
+        </property>
+        <property path="/security/message/algorithmSuite" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.Security.SecurityAlgorithmSuite, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Basic256</serializedValue>
+        </property>
+        <property path="/security/message/establishSecurityContext" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>True</serializedValue>
+        </property>
+      </properties>
+    </bindingConfiguration>
+  </bindingConfigurations>
+  <endpoints>
+    <endpoint name="WSHttpBinding_IUpdateLocation" contract="UpdateLocationReference.IUpdateLocation" bindingType="wsHttpBinding" address="http://localhost:59253/UpdateLocation.svc" bindingConfiguration="WSHttpBinding_IUpdateLocation">
+      <properties>
+        <property path="/address" isComplexType="false" isExplicitlyDefined="true" clrType="System.Uri, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>http://localhost:59253/UpdateLocation.svc</serializedValue>
+        </property>
+        <property path="/behaviorConfiguration" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/binding" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>wsHttpBinding</serializedValue>
+        </property>
+        <property path="/bindingConfiguration" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>WSHttpBinding_IUpdateLocation</serializedValue>
+        </property>
+        <property path="/contract" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>UpdateLocationReference.IUpdateLocation</serializedValue>
+        </property>
+        <property path="/headers" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.AddressHeaderCollectionElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.AddressHeaderCollectionElement</serializedValue>
+        </property>
+        <property path="/headers/headers" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.Channels.AddressHeaderCollection, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>&lt;Header /&gt;</serializedValue>
+        </property>
+        <property path="/identity" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.IdentityElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.IdentityElement</serializedValue>
+        </property>
+        <property path="/identity/userPrincipalName" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.UserPrincipalNameElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.UserPrincipalNameElement</serializedValue>
+        </property>
+        <property path="/identity/userPrincipalName/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/servicePrincipalName" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.ServicePrincipalNameElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.ServicePrincipalNameElement</serializedValue>
+        </property>
+        <property path="/identity/servicePrincipalName/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/dns" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.DnsElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.DnsElement</serializedValue>
+        </property>
+        <property path="/identity/dns/value" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>localhost</serializedValue>
+        </property>
+        <property path="/identity/rsa" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.RsaElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.RsaElement</serializedValue>
+        </property>
+        <property path="/identity/rsa/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificate" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.CertificateElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.CertificateElement</serializedValue>
+        </property>
+        <property path="/identity/certificate/encodedValue" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificateReference" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.CertificateReferenceElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.CertificateReferenceElement</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/storeName" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.StoreName, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>My</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/storeLocation" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.StoreLocation, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>LocalMachine</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/x509FindType" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.X509FindType, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>FindBySubjectDistinguishedName</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/findValue" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificateReference/isChainIncluded" isComplexType="false" isExplicitlyDefined="false" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/name" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>WSHttpBinding_IUpdateLocation</serializedValue>
+        </property>
+      </properties>
+    </endpoint>
+  </endpoints>
+</SavedWcfConfigurationInformation>
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/app.config
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/app.config	(revision 2516)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/app.config	(revision 2517)
@@ -19,3 +19,35 @@
         </HeuristicLab.PluginInfrastructure.Properties.Settings>
     </applicationSettings>
+    <system.serviceModel>
+        <bindings>
+            <wsHttpBinding>
+                <binding name="WSHttpBinding_IUpdateLocation" closeTimeout="00:01:00"
+                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
+                    bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
+                    maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
+                    messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
+                    allowCookies="false">
+                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
+                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
+                    <reliableSession ordered="true" inactivityTimeout="00:10:00"
+                        enabled="false" />
+                    <security mode="Message">
+                        <transport clientCredentialType="Windows" proxyCredentialType="None"
+                            realm="" />
+                        <message clientCredentialType="Windows" negotiateServiceCredential="true"
+                            algorithmSuite="Default" establishSecurityContext="true" />
+                    </security>
+                </binding>
+            </wsHttpBinding>
+        </bindings>
+        <client>
+            <endpoint address="http://localhost:59253/UpdateLocation.svc"
+                binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IUpdateLocation"
+                contract="UpdateLocationReference.IUpdateLocation" name="WSHttpBinding_IUpdateLocation">
+                <identity>
+                    <dns value="localhost" />
+                </identity>
+            </endpoint>
+        </client>
+    </system.serviceModel>
 </configuration>
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.Update.Service/HeuristicLab.Update.Service.csproj
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.Update.Service/HeuristicLab.Update.Service.csproj	(revision 2517)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.Update.Service/HeuristicLab.Update.Service.csproj	(revision 2517)
@@ -0,0 +1,110 @@
+﻿<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>{39619691-BDCA-44E1-9642-ADA5F85C62A2}</ProjectGuid>
+    <ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Update.Service</RootNamespace>
+    <AssemblyName>HeuristicLab.Update.Service</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\</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\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="ICSharpCode.SharpZipLib, Version=0.85.4.369, Culture=neutral, PublicKeyToken=1b03e6acf1164f73, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>.\ICSharpCode.SharpZipLib.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Configuration" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.EnterpriseServices" />
+    <Reference Include="System.Runtime.Serialization">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.ServiceModel">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Web" />
+    <Reference Include="System.Web.Extensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Web.Mobile" />
+    <Reference Include="System.Web.Services" />
+    <Reference Include="System.Xml" />
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="UpdateLocation.svc" />
+    <Content Include="Web.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="UpdateLocation.svc.cs">
+      <DependentUpon>UpdateLocation.svc</DependentUpon>
+    </Compile>
+    <Compile Include="IUpdateLocation.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <Folder Include="App_Data\" />
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v9.0\WebApplications\Microsoft.WebApplication.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>
+  -->
+  <ProjectExtensions>
+    <VisualStudio>
+      <FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}">
+        <WebProjectProperties>
+          <UseIIS>False</UseIIS>
+          <AutoAssignPort>True</AutoAssignPort>
+          <DevelopmentServerPort>59253</DevelopmentServerPort>
+          <DevelopmentServerVPath>/</DevelopmentServerVPath>
+          <IISUrl>
+          </IISUrl>
+          <NTLMAuthentication>False</NTLMAuthentication>
+          <UseCustomServer>False</UseCustomServer>
+          <CustomServerUrl>
+          </CustomServerUrl>
+          <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>
+        </WebProjectProperties>
+      </FlavorProperties>
+    </VisualStudio>
+  </ProjectExtensions>
+</Project>
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.Update.Service/HeuristicLab.Update.Service.csproj.user
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.Update.Service/HeuristicLab.Update.Service.csproj.user	(revision 2517)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.Update.Service/HeuristicLab.Update.Service.csproj.user	(revision 2517)
@@ -0,0 +1,32 @@
+﻿<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ProjectExtensions>
+    <VisualStudio>
+      <FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}" xmlns="">
+        <WebProjectProperties>
+          <StartPageUrl>
+          </StartPageUrl>
+          <StartAction>CurrentPage</StartAction>
+          <AspNetDebugging>True</AspNetDebugging>
+          <NativeDebugging>False</NativeDebugging>
+          <SQLDebugging>False</SQLDebugging>
+          <PublishCopyOption>RunFiles</PublishCopyOption>
+          <PublishTargetLocation>
+          </PublishTargetLocation>
+          <PublishDeleteAllFiles>False</PublishDeleteAllFiles>
+          <PublishCopyAppData>True</PublishCopyAppData>
+          <ExternalProgram>
+          </ExternalProgram>
+          <StartExternalURL>
+          </StartExternalURL>
+          <StartCmdLineArguments>
+          </StartCmdLineArguments>
+          <StartWorkingDirectory>
+          </StartWorkingDirectory>
+          <EnableENC>False</EnableENC>
+          <AlwaysStartWebServerOnDebug>True</AlwaysStartWebServerOnDebug>
+          <EnableWcfTestClientForSVC>False</EnableWcfTestClientForSVC>
+        </WebProjectProperties>
+      </FlavorProperties>
+    </VisualStudio>
+  </ProjectExtensions>
+</Project>
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.Update.Service/ICSharpCode.SharpZipLib License.txt
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.Update.Service/ICSharpCode.SharpZipLib License.txt	(revision 2517)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.Update.Service/ICSharpCode.SharpZipLib License.txt	(revision 2517)
@@ -0,0 +1,13 @@
+#ziplib (SharpZipLib, formerly NZipLib) is a Zip, GZip, Tar and BZip2 library written entirely in C# for the .NET platform. It is implemented as an assembly (installable in the GAC), and thus can easily be incorporated into other projects (in any .NET language). The creator of #ziplib put it this way: "I've ported the zip library over to C# because I needed gzip/zip compression and I didn't want to use libzip.dll or something like this. I want all in pure C#."
+
+License
+
+The library is released under the GPL with the following exception:
+
+Linking this library statically or dynamically with other modules is making a combined work based on this library. Thus, the terms and conditions of the GNU General Public License cover the whole combination.
+
+As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules, and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version.
+
+Note: The exception is changed to reflect the latest GNU Classpath exception. Older versions of #ziplib did have another exception, but the new one is clearer and it doesn't break compatibility with the old one.
+
+Bottom line: In plain English this means you can use this library in commercial closed-source applications.
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.Update.Service/IUpdateLocation.cs
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.Update.Service/IUpdateLocation.cs	(revision 2517)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.Update.Service/IUpdateLocation.cs	(revision 2517)
@@ -0,0 +1,48 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.Serialization;
+using System.ServiceModel;
+using System.Text;
+using System.IO;
+
+namespace HeuristicLab.Update.Service {
+  [ServiceContract]
+  public interface IUpdateLocation {
+
+    [OperationContract]
+    IEnumerable<PluginInformation> GetAvailablePlugins();
+
+    [OperationContract]
+    Stream GetPackedPlugin(PluginInformation info);
+  }
+
+
+  [DataContract]
+  public class PluginInformation {
+    private string name;
+    [DataMember]
+    public string Name {
+      get { return name; }
+      set { name = value; }
+    }
+    private Version version;
+    [DataMember]
+    public Version Version {
+      get { return version; }
+      set { version = value; }
+    }
+    private DateTime buildDate;
+    [DataMember]
+    public DateTime BuildDate {
+      get { return buildDate; }
+      set { buildDate = value; }
+    }
+
+    public PluginInformation(string name, Version version, DateTime buildDate) : base() {
+      this.name = name;
+      this.version = version;
+      this.buildDate = buildDate;
+    }
+  }
+}
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.Update.Service/Properties/AssemblyInfo.cs
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.Update.Service/Properties/AssemblyInfo.cs	(revision 2517)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.Update.Service/Properties/AssemblyInfo.cs	(revision 2517)
@@ -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("4cf19b3e-8a57-4288-a226-ca6dedb2cee1")]
+
+// 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 Revision and Build 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/UpdateLocation.svc
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.Update.Service/UpdateLocation.svc	(revision 2517)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.Update.Service/UpdateLocation.svc	(revision 2517)
@@ -0,0 +1,1 @@
+﻿<%@ ServiceHost Language="C#" Debug="true" Service="HeuristicLab.Update.Service.UpdateLocation" CodeBehind="UpdateLocation.svc.cs" %>
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.Update.Service/UpdateLocation.svc.cs
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.Update.Service/UpdateLocation.svc.cs	(revision 2517)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.Update.Service/UpdateLocation.svc.cs	(revision 2517)
@@ -0,0 +1,39 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.Serialization;
+using System.ServiceModel;
+using System.Text;
+using System.IO;
+using HeuristicLab.PluginInfrastructure.Manager;
+using ICSharpCode.SharpZipLib.Zip;
+
+namespace HeuristicLab.Update.Service {
+  public class UpdateLocation : IUpdateLocation {
+
+    #region IUpdateLocation Members
+
+    public IEnumerable<PluginInformation> GetAvailablePlugins() {
+      yield break;
+    }
+
+    public System.IO.Stream GetPackedPlugin(PluginInformation info) {
+      MemoryStream memStream = new MemoryStream();
+      ZipOutputStream stream = new ZipOutputStream(memStream);
+      ZipEntryFactory fac = new ZipEntryFactory();
+      foreach (string fileName in GetMatchingPluginDescription(info.Name, pluginManager.Plugins).Files) {
+        stream.PutNextEntry( (Path.Combine(pluginDir, fileName)));
+      }
+
+      return memStream;
+    }
+
+    private static PluginDescription GetMatchingPluginDescription(string name, IEnumerable<PluginDescription> plugins) {
+      return (from x in plugins
+              where x.Name == name
+              select x).Single();
+    }
+
+    #endregion
+  }
+}
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.Update.Service/Web.config
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.Update.Service/Web.config	(revision 2517)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.Update.Service/Web.config	(revision 2517)
@@ -0,0 +1,138 @@
+﻿<?xml version="1.0"?>
+<!--
+    Note: As an alternative to hand editing this file you can use the 
+    web admin tool to configure settings for your application. Use
+    the Website->Asp.Net Configuration option in Visual Studio.
+    A full list of settings and comments can be found in 
+    machine.config.comments usually located in 
+    \Windows\Microsoft.Net\Framework\v2.x\Config 
+-->
+<configuration>
+
+
+    <configSections>
+      <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
+        <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
+          <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
+          <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
+            <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere" />
+            <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
+            <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
+            <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
+          </sectionGroup>
+        </sectionGroup>
+      </sectionGroup>
+    </configSections>  
+
+
+    <appSettings/>
+    <connectionStrings/>
+
+    <system.web>
+        <!--
+            Set compilation debug="true" to insert debugging 
+            symbols into the compiled page. Because this 
+            affects performance, set this value to true only 
+            during development.
+        -->
+        <compilation debug="true">
+
+          <assemblies>
+            <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
+            <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
+          </assemblies>
+
+        </compilation>
+        <!--
+            The <authentication> section enables configuration 
+            of the security authentication mode used by 
+            ASP.NET to identify an incoming user. 
+        -->
+        <authentication mode="Windows" />
+        <!--
+            The <customErrors> section enables configuration 
+            of what to do if/when an unhandled error occurs 
+            during the execution of a request. Specifically, 
+            it enables developers to configure html error pages 
+            to be displayed in place of a error stack trace.
+
+        <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
+            <error statusCode="403" redirect="NoAccess.htm" />
+            <error statusCode="404" redirect="FileNotFound.htm" />
+        </customErrors>
+        -->
+
+
+      <pages>
+        <controls>
+          <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
+        </controls>
+      </pages>
+
+      <httpHandlers>
+        <remove verb="*" path="*.asmx"/>
+        <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
+        <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
+        <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
+      </httpHandlers>
+      <httpModules>
+        <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
+      </httpModules>
+
+
+    </system.web>
+
+    <system.codedom>
+      <compilers>
+        <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4"
+                  type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <providerOption name="CompilerVersion" value="v3.5"/>
+          <providerOption name="WarnAsError" value="false"/>
+        </compiler>
+      </compilers>
+    </system.codedom>
+
+    <!--
+        The system.webServer section is required for running ASP.NET AJAX under Internet
+        Information Services 7.0.  It is not necessary for previous version of IIS.
+    -->
+    <system.webServer>
+      <validation validateIntegratedModeConfiguration="false"/>
+      <modules>
+        <add name="ScriptModule" preCondition="integratedMode" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
+      </modules>
+      <handlers>
+        <remove name="WebServiceHandlerFactory-Integrated"/>
+        <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode"
+             type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
+        <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode"
+             type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
+        <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
+      </handlers>
+    </system.webServer>
+
+
+  <system.serviceModel>
+    <services>
+      <service behaviorConfiguration="HeuristicLab.Update.Service.UpdateLocationBehavior"
+        name="HeuristicLab.Update.Service.UpdateLocation">
+        <endpoint address="" binding="wsHttpBinding" contract="HeuristicLab.Update.Service.IUpdateLocation">
+          <identity>
+            <dns value="localhost" />
+          </identity>
+        </endpoint>
+        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
+      </service>
+    </services>
+    <behaviors>
+      <serviceBehaviors>
+        <behavior name="HeuristicLab.Update.Service.UpdateLocationBehavior">
+          <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
+          <serviceMetadata httpGetEnabled="true"/>
+          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
+          <serviceDebug includeExceptionDetailInFaults="true"/>
+        </behavior>
+      </serviceBehaviors>
+    </behaviors>
+  </system.serviceModel>
+</configuration>
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab.sln
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab.sln	(revision 2516)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab.sln	(revision 2517)
@@ -258,9 +258,5 @@
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.PluginInfrastructure.Manager", "HeuristicLab.PluginInfrastructure.Manager\HeuristicLab.PluginInfrastructure.Manager.csproj", "{CA8AAD91-E8E2-41AF-96AD-2BA94BC3EF2D}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Update.Service", "HeuristicLab.Update.Service\HeuristicLab.Update.Service.csproj", "{175263A8-716D-40AC-85A1-E837F6F4736A}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Update.Interfaces", "HeuristicLab.Update.Interfaces\HeuristicLab.Update.Interfaces.csproj", "{F47613C0-06D3-4314-8DAD-F992850A3B23}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Update.Client", "HeuristicLab.Update.Client\HeuristicLab.Update.Client.csproj", "{A8EDF081-459A-4A3D-9F5C-D565A9B01F52}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Update.Service", "HeuristicLab.Update.Service\HeuristicLab.Update.Service.csproj", "{39619691-BDCA-44E1-9642-ADA5F85C62A2}"
 EndProject
 Global
@@ -4111,76 +4107,28 @@
 		{CA8AAD91-E8E2-41AF-96AD-2BA94BC3EF2D}.Visualization Debug|x64.ActiveCfg = Debug|Any CPU
 		{CA8AAD91-E8E2-41AF-96AD-2BA94BC3EF2D}.Visualization Debug|x86.ActiveCfg = Debug|Any CPU
-		{175263A8-716D-40AC-85A1-E837F6F4736A}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{175263A8-716D-40AC-85A1-E837F6F4736A}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
-		{175263A8-716D-40AC-85A1-E837F6F4736A}.CEDMA Debug|x64.ActiveCfg = Debug|Any CPU
-		{175263A8-716D-40AC-85A1-E837F6F4736A}.CEDMA Debug|x86.ActiveCfg = Debug|Any CPU
-		{175263A8-716D-40AC-85A1-E837F6F4736A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{175263A8-716D-40AC-85A1-E837F6F4736A}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{175263A8-716D-40AC-85A1-E837F6F4736A}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{175263A8-716D-40AC-85A1-E837F6F4736A}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{175263A8-716D-40AC-85A1-E837F6F4736A}.Modeling Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{175263A8-716D-40AC-85A1-E837F6F4736A}.Modeling Debug|Any CPU.Build.0 = Debug|Any CPU
-		{175263A8-716D-40AC-85A1-E837F6F4736A}.Modeling Debug|x64.ActiveCfg = Debug|Any CPU
-		{175263A8-716D-40AC-85A1-E837F6F4736A}.Modeling Debug|x86.ActiveCfg = Debug|Any CPU
-		{175263A8-716D-40AC-85A1-E837F6F4736A}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{175263A8-716D-40AC-85A1-E837F6F4736A}.Release|Any CPU.Build.0 = Release|Any CPU
-		{175263A8-716D-40AC-85A1-E837F6F4736A}.Release|x64.ActiveCfg = Release|Any CPU
-		{175263A8-716D-40AC-85A1-E837F6F4736A}.Release|x86.ActiveCfg = Release|Any CPU
-		{175263A8-716D-40AC-85A1-E837F6F4736A}.v3.2 Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{175263A8-716D-40AC-85A1-E837F6F4736A}.v3.2 Debug|Any CPU.Build.0 = Debug|Any CPU
-		{175263A8-716D-40AC-85A1-E837F6F4736A}.v3.2 Debug|x64.ActiveCfg = Debug|Any CPU
-		{175263A8-716D-40AC-85A1-E837F6F4736A}.v3.2 Debug|x86.ActiveCfg = Debug|Any CPU
-		{175263A8-716D-40AC-85A1-E837F6F4736A}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{175263A8-716D-40AC-85A1-E837F6F4736A}.Visualization Debug|Any CPU.Build.0 = Debug|Any CPU
-		{175263A8-716D-40AC-85A1-E837F6F4736A}.Visualization Debug|x64.ActiveCfg = Debug|Any CPU
-		{175263A8-716D-40AC-85A1-E837F6F4736A}.Visualization Debug|x86.ActiveCfg = Debug|Any CPU
-		{F47613C0-06D3-4314-8DAD-F992850A3B23}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{F47613C0-06D3-4314-8DAD-F992850A3B23}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
-		{F47613C0-06D3-4314-8DAD-F992850A3B23}.CEDMA Debug|x64.ActiveCfg = Debug|Any CPU
-		{F47613C0-06D3-4314-8DAD-F992850A3B23}.CEDMA Debug|x86.ActiveCfg = Debug|Any CPU
-		{F47613C0-06D3-4314-8DAD-F992850A3B23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{F47613C0-06D3-4314-8DAD-F992850A3B23}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{F47613C0-06D3-4314-8DAD-F992850A3B23}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{F47613C0-06D3-4314-8DAD-F992850A3B23}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{F47613C0-06D3-4314-8DAD-F992850A3B23}.Modeling Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{F47613C0-06D3-4314-8DAD-F992850A3B23}.Modeling Debug|Any CPU.Build.0 = Debug|Any CPU
-		{F47613C0-06D3-4314-8DAD-F992850A3B23}.Modeling Debug|x64.ActiveCfg = Debug|Any CPU
-		{F47613C0-06D3-4314-8DAD-F992850A3B23}.Modeling Debug|x86.ActiveCfg = Debug|Any CPU
-		{F47613C0-06D3-4314-8DAD-F992850A3B23}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{F47613C0-06D3-4314-8DAD-F992850A3B23}.Release|Any CPU.Build.0 = Release|Any CPU
-		{F47613C0-06D3-4314-8DAD-F992850A3B23}.Release|x64.ActiveCfg = Release|Any CPU
-		{F47613C0-06D3-4314-8DAD-F992850A3B23}.Release|x86.ActiveCfg = Release|Any CPU
-		{F47613C0-06D3-4314-8DAD-F992850A3B23}.v3.2 Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{F47613C0-06D3-4314-8DAD-F992850A3B23}.v3.2 Debug|Any CPU.Build.0 = Debug|Any CPU
-		{F47613C0-06D3-4314-8DAD-F992850A3B23}.v3.2 Debug|x64.ActiveCfg = Debug|Any CPU
-		{F47613C0-06D3-4314-8DAD-F992850A3B23}.v3.2 Debug|x86.ActiveCfg = Debug|Any CPU
-		{F47613C0-06D3-4314-8DAD-F992850A3B23}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{F47613C0-06D3-4314-8DAD-F992850A3B23}.Visualization Debug|Any CPU.Build.0 = Debug|Any CPU
-		{F47613C0-06D3-4314-8DAD-F992850A3B23}.Visualization Debug|x64.ActiveCfg = Debug|Any CPU
-		{F47613C0-06D3-4314-8DAD-F992850A3B23}.Visualization Debug|x86.ActiveCfg = Debug|Any CPU
-		{A8EDF081-459A-4A3D-9F5C-D565A9B01F52}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{A8EDF081-459A-4A3D-9F5C-D565A9B01F52}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
-		{A8EDF081-459A-4A3D-9F5C-D565A9B01F52}.CEDMA Debug|x64.ActiveCfg = Debug|Any CPU
-		{A8EDF081-459A-4A3D-9F5C-D565A9B01F52}.CEDMA Debug|x86.ActiveCfg = Debug|Any CPU
-		{A8EDF081-459A-4A3D-9F5C-D565A9B01F52}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{A8EDF081-459A-4A3D-9F5C-D565A9B01F52}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{A8EDF081-459A-4A3D-9F5C-D565A9B01F52}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{A8EDF081-459A-4A3D-9F5C-D565A9B01F52}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{A8EDF081-459A-4A3D-9F5C-D565A9B01F52}.Modeling Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{A8EDF081-459A-4A3D-9F5C-D565A9B01F52}.Modeling Debug|Any CPU.Build.0 = Debug|Any CPU
-		{A8EDF081-459A-4A3D-9F5C-D565A9B01F52}.Modeling Debug|x64.ActiveCfg = Debug|Any CPU
-		{A8EDF081-459A-4A3D-9F5C-D565A9B01F52}.Modeling Debug|x86.ActiveCfg = Debug|Any CPU
-		{A8EDF081-459A-4A3D-9F5C-D565A9B01F52}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{A8EDF081-459A-4A3D-9F5C-D565A9B01F52}.Release|Any CPU.Build.0 = Release|Any CPU
-		{A8EDF081-459A-4A3D-9F5C-D565A9B01F52}.Release|x64.ActiveCfg = Release|Any CPU
-		{A8EDF081-459A-4A3D-9F5C-D565A9B01F52}.Release|x86.ActiveCfg = Release|Any CPU
-		{A8EDF081-459A-4A3D-9F5C-D565A9B01F52}.v3.2 Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{A8EDF081-459A-4A3D-9F5C-D565A9B01F52}.v3.2 Debug|Any CPU.Build.0 = Debug|Any CPU
-		{A8EDF081-459A-4A3D-9F5C-D565A9B01F52}.v3.2 Debug|x64.ActiveCfg = Debug|Any CPU
-		{A8EDF081-459A-4A3D-9F5C-D565A9B01F52}.v3.2 Debug|x86.ActiveCfg = Debug|Any CPU
-		{A8EDF081-459A-4A3D-9F5C-D565A9B01F52}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{A8EDF081-459A-4A3D-9F5C-D565A9B01F52}.Visualization Debug|Any CPU.Build.0 = Debug|Any CPU
-		{A8EDF081-459A-4A3D-9F5C-D565A9B01F52}.Visualization Debug|x64.ActiveCfg = Debug|Any CPU
-		{A8EDF081-459A-4A3D-9F5C-D565A9B01F52}.Visualization Debug|x86.ActiveCfg = Debug|Any CPU
+		{39619691-BDCA-44E1-9642-ADA5F85C62A2}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{39619691-BDCA-44E1-9642-ADA5F85C62A2}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{39619691-BDCA-44E1-9642-ADA5F85C62A2}.CEDMA Debug|x64.ActiveCfg = Debug|Any CPU
+		{39619691-BDCA-44E1-9642-ADA5F85C62A2}.CEDMA Debug|x86.ActiveCfg = Debug|Any CPU
+		{39619691-BDCA-44E1-9642-ADA5F85C62A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{39619691-BDCA-44E1-9642-ADA5F85C62A2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{39619691-BDCA-44E1-9642-ADA5F85C62A2}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{39619691-BDCA-44E1-9642-ADA5F85C62A2}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{39619691-BDCA-44E1-9642-ADA5F85C62A2}.Modeling Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{39619691-BDCA-44E1-9642-ADA5F85C62A2}.Modeling Debug|Any CPU.Build.0 = Debug|Any CPU
+		{39619691-BDCA-44E1-9642-ADA5F85C62A2}.Modeling Debug|x64.ActiveCfg = Debug|Any CPU
+		{39619691-BDCA-44E1-9642-ADA5F85C62A2}.Modeling Debug|x86.ActiveCfg = Debug|Any CPU
+		{39619691-BDCA-44E1-9642-ADA5F85C62A2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{39619691-BDCA-44E1-9642-ADA5F85C62A2}.Release|Any CPU.Build.0 = Release|Any CPU
+		{39619691-BDCA-44E1-9642-ADA5F85C62A2}.Release|x64.ActiveCfg = Release|Any CPU
+		{39619691-BDCA-44E1-9642-ADA5F85C62A2}.Release|x86.ActiveCfg = Release|Any CPU
+		{39619691-BDCA-44E1-9642-ADA5F85C62A2}.v3.2 Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{39619691-BDCA-44E1-9642-ADA5F85C62A2}.v3.2 Debug|Any CPU.Build.0 = Debug|Any CPU
+		{39619691-BDCA-44E1-9642-ADA5F85C62A2}.v3.2 Debug|x64.ActiveCfg = Debug|Any CPU
+		{39619691-BDCA-44E1-9642-ADA5F85C62A2}.v3.2 Debug|x86.ActiveCfg = Debug|Any CPU
+		{39619691-BDCA-44E1-9642-ADA5F85C62A2}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{39619691-BDCA-44E1-9642-ADA5F85C62A2}.Visualization Debug|Any CPU.Build.0 = Debug|Any CPU
+		{39619691-BDCA-44E1-9642-ADA5F85C62A2}.Visualization Debug|x64.ActiveCfg = Debug|Any CPU
+		{39619691-BDCA-44E1-9642-ADA5F85C62A2}.Visualization Debug|x86.ActiveCfg = Debug|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
Index: /branches/PluginInfrastructure Refactoring/HeuristicLab/Program.cs
===================================================================
--- /branches/PluginInfrastructure Refactoring/HeuristicLab/Program.cs	(revision 2516)
+++ /branches/PluginInfrastructure Refactoring/HeuristicLab/Program.cs	(revision 2517)
@@ -29,4 +29,5 @@
 using HeuristicLab.PluginInfrastructure;
 using HeuristicLab.PluginInfrastructure.Advanced;
+using System.Runtime.InteropServices;
 
 namespace HeuristicLab {
@@ -58,23 +59,21 @@
             }
           case "SHOW": {
-              InstallationManager manager = new InstallationManager();
-              foreach (string info in manager.Show(args.Skip(1))) {
-                Console.WriteLine(info);
-              }
+              InstallationManagerConsole managerConsole = new InstallationManagerConsole();
+              managerConsole.Show(args.Skip(1));
               break;
             }
           case "INSTALL": {
-              InstallationManager manager = new InstallationManager();
-              manager.Install(args.Skip(1));
+              InstallationManagerConsole managerConsole = new InstallationManagerConsole();
+              managerConsole.Install(args.Skip(1));
               break;
             }
           case "UPDATE": {
-              InstallationManager manager = new InstallationManager();
-              manager.Update(args.Skip(1));
+              InstallationManagerConsole managerConsole = new InstallationManagerConsole();
+              managerConsole.Update(args.Skip(1));
               break;
             }
           case "REMOVE": {
-              InstallationManager manager = new InstallationManager();
-              manager.Remove(args.Skip(1));
+              InstallationManagerConsole managerConsole = new InstallationManagerConsole();
+              managerConsole.Remove(args.Skip(1));
               break;
             }
