Index: /trunk/sources/HeuristicLab.PluginAdministrator/3.3/MainForm.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginAdministrator/3.3/MainForm.cs	(revision 3178)
+++ /trunk/sources/HeuristicLab.PluginAdministrator/3.3/MainForm.cs	(revision 3179)
@@ -29,5 +29,5 @@
   internal class MainForm : DockingMainForm {
     private System.Windows.Forms.ToolStripProgressBar progressBar;
-
+    private System.Windows.Forms.ToolStripLabel statusLabel;
     public MainForm(Type type)
       : base(type) {
@@ -41,11 +41,18 @@
 
     private void InitializeComponent() {
+      this.progressBar = new System.Windows.Forms.ToolStripProgressBar();
+      this.statusLabel = new System.Windows.Forms.ToolStripLabel();
       this.SuspendLayout();
+      // 
+      // progressBar
+      // 
+      this.progressBar.MarqueeAnimationSpeed = 30;
+      this.progressBar.Name = "progressBar";
+      this.progressBar.Size = new System.Drawing.Size(100, 16);
+      this.progressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee;
+      this.progressBar.Visible = false;
 
-      progressBar = new System.Windows.Forms.ToolStripProgressBar();
-      progressBar.MarqueeAnimationSpeed = 30;
-      progressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee;
-      progressBar.Visible = false;
-      statusStrip.Items.Add(progressBar);
+      this.statusLabel.Name = "statusLabel";
+      this.statusLabel.Visible = true;
       // 
       // MainForm
@@ -56,4 +63,5 @@
       this.ResumeLayout(false);
       this.PerformLayout();
+
     }
 
@@ -65,4 +73,8 @@
       progressBar.Visible = false;
     }
+
+    public void SetStatusBarText(string msg) {
+      statusLabel.Text = msg;
+    }
   }
 }
Index: /trunk/sources/HeuristicLab.PluginAdministrator/3.3/PluginEditor.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginAdministrator/3.3/PluginEditor.cs	(revision 3178)
+++ /trunk/sources/HeuristicLab.PluginAdministrator/3.3/PluginEditor.cs	(revision 3179)
@@ -133,4 +133,5 @@
 
         foreach (var plugin in IteratePlugins(selectedPlugins)) {
+          SetMainFormStatusBar("Uploading", plugin);
           adminClient.DeployPlugin(MakePluginDescription(plugin), CreateZipPackage(plugin));
         }
@@ -144,4 +145,5 @@
       }
     }
+
     #endregion
 
@@ -187,7 +189,9 @@
           var plugin = (IPluginDescription)item.Tag;
           // also check all dependencies
-          modifiedPlugins.Add(plugin);
+          if (!modifiedPlugins.Contains(plugin))
+            modifiedPlugins.Add(plugin);
           foreach (var dep in GetAllDependencies(plugin)) {
-            modifiedPlugins.Add(dep);
+            if (!modifiedPlugins.Contains(dep))
+              modifiedPlugins.Add(dep);
           }
         }
@@ -197,7 +201,9 @@
           var plugin = (IPluginDescription)item.Tag;
           // also uncheck all dependent plugins
-          modifiedPlugins.Add(plugin);
+          if (!modifiedPlugins.Contains(plugin))
+            modifiedPlugins.Add(plugin);
           foreach (var dep in GetAllDependents(plugin)) {
-            modifiedPlugins.Add(dep);
+            if (!modifiedPlugins.Contains(dep))
+              modifiedPlugins.Add(dep);
           }
         }
@@ -231,9 +237,16 @@
 
     private IEnumerable<IPluginDescription> IteratePlugins(IEnumerable<IPluginDescription> plugins) {
+      HashSet<IPluginDescription> yieldedItems = new HashSet<IPluginDescription>();
       foreach (var plugin in plugins) {
         foreach (var dependency in IteratePlugins(plugin.Dependencies)) {
-          yield return dependency;
-        }
-        yield return plugin;
+          if (!yieldedItems.Contains(dependency)) {
+            yieldedItems.Add(dependency);
+            yield return dependency;
+          }
+        }
+        if (!yieldedItems.Contains(plugin)) {
+          yieldedItems.Add(plugin);
+          yield return plugin;
+        }
       }
     }
@@ -309,4 +322,11 @@
       MainFormManager.GetMainForm<MainForm>().HideProgressBar();
     }
+    private void SetMainFormStatusBar(string p, IPluginDescription plugin) {
+      if (InvokeRequired) Invoke((Action<string, IPluginDescription>)SetMainFormStatusBar, p, plugin);
+      else {
+        MainFormManager.GetMainForm<MainForm>().SetStatusBarText(p + " " + plugin.ToString());
+      }
+    }
+
     #endregion
   }
Index: /trunk/sources/HeuristicLab.PluginAdministrator/3.3/PluginListView.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginAdministrator/3.3/PluginListView.cs	(revision 3178)
+++ /trunk/sources/HeuristicLab.PluginAdministrator/3.3/PluginListView.cs	(revision 3179)
@@ -47,8 +47,10 @@
     }
 
-    private List<IPluginDescription> checkedPlugins = new List<IPluginDescription>();
+    private Dictionary<IPluginDescription, bool> checkedPlugins = new Dictionary<IPluginDescription, bool>();
     public IEnumerable<IPluginDescription> CheckedPlugins {
       get {
-        return checkedPlugins;
+        return from pair in checkedPlugins
+               where pair.Value
+               select pair.Key;
       }
     }
@@ -77,5 +79,5 @@
     private ListViewItem CreateListViewItem(IPluginDescription plugin) {
       var item = new ListViewItem(new string[] { plugin.Name, plugin.Version.ToString() });
-      item.Checked = (from p in checkedPlugins where p.Name == plugin.Name where p.Version == plugin.Version select p).Any();
+      item.Checked = checkedPlugins.ContainsKey(plugin) ? checkedPlugins[plugin] : false;
       item.Tag = plugin;
       return item;
@@ -89,8 +91,10 @@
           // also check all dependencies
           MarkPluginChecked(plugin);
-          modifiedPlugins.Add(plugin);
+          if (!modifiedPlugins.Contains(plugin))
+            modifiedPlugins.Add(plugin);
           foreach (var dep in GetAllDependencies(plugin)) {
             MarkPluginChecked(dep);
-            modifiedPlugins.Add(dep);
+            if (!modifiedPlugins.Contains(dep))
+              modifiedPlugins.Add(dep);
           }
         }
@@ -102,8 +106,10 @@
           // also uncheck all dependent plugins
           MarkPluginUnchecked(plugin);
-          modifiedPlugins.Add(plugin);
+          if (!modifiedPlugins.Contains(plugin))
+            modifiedPlugins.Add(plugin);
           foreach (var dep in GetAllDependents(plugin)) {
             MarkPluginUnchecked(dep);
-            modifiedPlugins.Add(dep);
+            if (!modifiedPlugins.Contains(dep))
+              modifiedPlugins.Add(dep);
           }
 
@@ -115,16 +121,9 @@
 
     private void MarkPluginChecked(IPluginDescription plugin) {
-      var matching = from p in checkedPlugins
-                     where p.Name == plugin.Name
-                     where p.Version == plugin.Version
-                     select p;
-      if (!matching.Any()) checkedPlugins.Add(plugin);
+      checkedPlugins[plugin] = true;
     }
 
     private void MarkPluginUnchecked(IPluginDescription plugin) {
-      checkedPlugins = (from p in checkedPlugins
-                        where p.Name != plugin.Name ||
-                              p.Version != plugin.Version
-                        select p).ToList();
+      checkedPlugins[plugin] = false;
     }
 
@@ -148,9 +147,16 @@
 
     private IEnumerable<IPluginDescription> GetAllDependencies(IPluginDescription plugin) {
+      HashSet<IPluginDescription> yieldedPlugins = new HashSet<IPluginDescription>();
       foreach (var dep in plugin.Dependencies) {
         foreach (var recDep in GetAllDependencies(dep)) {
-          yield return recDep;
+          if (!yieldedPlugins.Contains(recDep)) {
+            yieldedPlugins.Add(recDep);
+            yield return recDep;
+          }
         }
-        yield return dep;
+        if (!yieldedPlugins.Contains(dep)) {
+          yieldedPlugins.Add(dep);
+          yield return dep;
+        }
       }
     }
Index: /trunk/sources/HeuristicLab.PluginAdministrator/3.3/ProductEditor.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginAdministrator/3.3/ProductEditor.Designer.cs	(revision 3178)
+++ /trunk/sources/HeuristicLab.PluginAdministrator/3.3/ProductEditor.Designer.cs	(revision 3179)
@@ -54,5 +54,5 @@
       this.productVersionHeader = new System.Windows.Forms.ColumnHeader();
       this.productImageList = new System.Windows.Forms.ImageList(this.components);
-      this.pluginImageList = new System.Windows.Forms.ImageList(this.components);
+      this.pluginListView = new HeuristicLab.PluginAdministrator.PluginListView();
       this.pluginsLabel = new System.Windows.Forms.Label();
       this.versionTextBox = new System.Windows.Forms.TextBox();
@@ -60,6 +60,6 @@
       this.nameTextBox = new System.Windows.Forms.TextBox();
       this.nameLabel = new System.Windows.Forms.Label();
+      this.pluginImageList = new System.Windows.Forms.ImageList(this.components);
       this.errorProvider = new System.Windows.Forms.ErrorProvider(this.components);
-      this.pluginListView = new PluginListView();
       this.splitContainer.Panel1.SuspendLayout();
       this.splitContainer.Panel2.SuspendLayout();
@@ -81,4 +81,5 @@
       // 
       this.saveButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.saveButton.Enabled = false;
       this.saveButton.Location = new System.Drawing.Point(3, 365);
       this.saveButton.Name = "saveButton";
@@ -91,4 +92,5 @@
       // newProductButton
       // 
+      this.newProductButton.Enabled = false;
       this.newProductButton.Location = new System.Drawing.Point(84, 3);
       this.newProductButton.Name = "newProductButton";
@@ -132,4 +134,5 @@
             this.productNameHeader,
             this.productVersionHeader});
+      this.productsListView.Enabled = false;
       this.productsListView.FullRowSelect = true;
       this.productsListView.Location = new System.Drawing.Point(3, 3);
@@ -159,9 +162,16 @@
       this.productImageList.TransparentColor = System.Drawing.Color.Transparent;
       // 
-      // pluginImageList
-      // 
-      this.pluginImageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;
-      this.pluginImageList.ImageSize = new System.Drawing.Size(16, 16);
-      this.pluginImageList.TransparentColor = System.Drawing.Color.Transparent;
+      // pluginListView
+      // 
+      this.pluginListView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.pluginListView.Enabled = false;
+      this.pluginListView.Location = new System.Drawing.Point(3, 85);
+      this.pluginListView.Name = "pluginListView";
+      this.pluginListView.Plugins = null;
+      this.pluginListView.Size = new System.Drawing.Size(330, 303);
+      this.pluginListView.TabIndex = 7;
+      this.pluginListView.ItemChecked += new System.Windows.Forms.ItemCheckedEventHandler(this.pluginListView_ItemChecked);
       // 
       // pluginsLabel
@@ -178,4 +188,5 @@
       this.versionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
                   | System.Windows.Forms.AnchorStyles.Right)));
+      this.versionTextBox.Enabled = false;
       this.versionTextBox.Location = new System.Drawing.Point(68, 29);
       this.versionTextBox.Name = "versionTextBox";
@@ -187,4 +198,5 @@
       // 
       this.versionLabel.AutoSize = true;
+      this.versionLabel.Enabled = false;
       this.versionLabel.Location = new System.Drawing.Point(10, 32);
       this.versionLabel.Name = "versionLabel";
@@ -197,4 +209,5 @@
       this.nameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
                   | System.Windows.Forms.AnchorStyles.Right)));
+      this.nameTextBox.Enabled = false;
       this.nameTextBox.Location = new System.Drawing.Point(68, 3);
       this.nameTextBox.Name = "nameTextBox";
@@ -206,4 +219,5 @@
       // 
       this.nameLabel.AutoSize = true;
+      this.nameLabel.Enabled = false;
       this.nameLabel.Location = new System.Drawing.Point(17, 6);
       this.nameLabel.Name = "nameLabel";
@@ -212,19 +226,13 @@
       this.nameLabel.Text = "Name:";
       // 
+      // pluginImageList
+      // 
+      this.pluginImageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;
+      this.pluginImageList.ImageSize = new System.Drawing.Size(16, 16);
+      this.pluginImageList.TransparentColor = System.Drawing.Color.Transparent;
+      // 
       // errorProvider
       // 
       this.errorProvider.ContainerControl = this;
-      // 
-      // pluginListView
-      // 
-      this.pluginListView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                  | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.pluginListView.Location = new System.Drawing.Point(3, 85);
-      this.pluginListView.Name = "pluginListView";
-      this.pluginListView.Plugins = null;
-      this.pluginListView.Size = new System.Drawing.Size(330, 303);
-      this.pluginListView.TabIndex = 7;
-      this.pluginListView.ItemChecked += new System.Windows.Forms.ItemCheckedEventHandler(this.pluginListView_ItemChecked);
       // 
       // ProductEditor
Index: /trunk/sources/HeuristicLab.PluginAdministrator/3.3/ProductEditor.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginAdministrator/3.3/ProductEditor.cs	(revision 3178)
+++ /trunk/sources/HeuristicLab.PluginAdministrator/3.3/ProductEditor.cs	(revision 3179)
@@ -91,14 +91,16 @@
 
     private void refreshProductsWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) {
-      this.products = new List<PluginDeploymentService.ProductDescription>(
-        (PluginDeploymentService.ProductDescription[])((object[])e.Result)[0]);
-      this.plugins = new List<PluginDeploymentService.PluginDescription>(
-        (PluginDeploymentService.PluginDescription[])((object[])e.Result)[1]);
-
-      UpdateProductsList();
-      dirtyProducts.Clear();
-
-      Cursor = Cursors.Default;
-      SetControlsEnabled(true);
+      if (!e.Cancelled && e.Result != null) {
+        this.products = new List<PluginDeploymentService.ProductDescription>(
+          (PluginDeploymentService.ProductDescription[])((object[])e.Result)[0]);
+        this.plugins = new List<PluginDeploymentService.PluginDescription>(
+          (PluginDeploymentService.PluginDescription[])((object[])e.Result)[1]);
+
+        UpdateProductsList();
+        dirtyProducts.Clear();
+
+        Cursor = Cursors.Default;
+        SetControlsEnabled(true);
+      }
     }
     #endregion
@@ -136,4 +138,10 @@
       newProductButton.Enabled = enabled;
       splitContainer.Enabled = enabled;
+      productsListView.Enabled = enabled;
+      nameLabel.Enabled = enabled;
+      nameTextBox.Enabled = enabled;
+      versionLabel.Enabled = enabled;
+      versionTextBox.Enabled = enabled;
+      pluginListView.Enabled = enabled;
     }
 
Index: /trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/DeploymentService/DeploymentService.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/DeploymentService/DeploymentService.cs	(revision 3178)
+++ /trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/DeploymentService/DeploymentService.cs	(revision 3179)
@@ -1,4 +1,3 @@
-﻿#pragma warning disable 1591
-//------------------------------------------------------------------------------
+﻿//------------------------------------------------------------------------------
 // <auto-generated>
 //     This code was generated by a tool.
@@ -314,3 +313,2 @@
     }
 }
-#pragma warning restore 1591
Index: /trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/DeploymentService/PluginDescription.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/DeploymentService/PluginDescription.cs	(revision 3178)
+++ /trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/DeploymentService/PluginDescription.cs	(revision 3179)
@@ -104,4 +104,14 @@
       return Name + " " + Version;
     }
+
+    public override bool Equals(object obj) {
+      PluginDescription other = obj as PluginDescription;
+      if (other == null) return false;
+      else return other.Name == this.Name && other.Version == this.Version;
+    }
+
+    public override int GetHashCode() {
+      return Name.GetHashCode() + Version.GetHashCode();
+    }
   }
 }
Index: /trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/DeploymentService/RegenerateServiceClasses.cmd
===================================================================
--- /trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/DeploymentService/RegenerateServiceClasses.cmd	(revision 3178)
+++ /trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/DeploymentService/RegenerateServiceClasses.cmd	(revision 3179)
@@ -1,2 +1,2 @@
 ﻿#
-svcutil http://servdev.heuristiclab.com/Deployment/Update.svc/mex http://servdev.heuristiclab.com/Deployment/Admin.svc/mex  /language:C# /targetClientVersion:Version35 /out:DeploymentService /namespace:*,HeuristicLab.PluginInfrastructure.Advanced.DeploymentService /mergeConfig /config:../../app.config
+svcutil http://servdev.heuristiclab.com/Deployment-3.3/Update.svc/mex http://servdev.heuristiclab.com/Deployment-3.3/Admin.svc/mex  /language:C# /targetClientVersion:Version35 /out:DeploymentService /namespace:*,HeuristicLab.PluginInfrastructure.Advanced.DeploymentService /mergeConfig /config:../../app.config
Index: /trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/InstallationManagerForm.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/InstallationManagerForm.cs	(revision 3178)
+++ /trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/InstallationManagerForm.cs	(revision 3179)
@@ -336,5 +336,5 @@
       Cursor = Cursors.AppStarting;
       toolStripProgressBar.Visible = true;
-      DisableControls();
+      refreshButton.Enabled = false;
       refreshServerPluginsBackgroundWorker.RunWorkerAsync();
     }
@@ -378,4 +378,14 @@
       (new ConnectionSetupView()).ShowInForm();
     }
+
+    protected override void OnClosing(CancelEventArgs e) {
+      installationManager.PluginInstalled -= new EventHandler<PluginInfrastructureEventArgs>(installationManager_PluginInstalled);
+      installationManager.PluginRemoved -= new EventHandler<PluginInfrastructureEventArgs>(installationManager_PluginRemoved);
+      installationManager.PluginUpdated -= new EventHandler<PluginInfrastructureEventArgs>(installationManager_PluginUpdated);
+      installationManager.PreInstallPlugin -= new EventHandler<PluginInfrastructureCancelEventArgs>(installationManager_PreInstallPlugin);
+      installationManager.PreRemovePlugin -= new EventHandler<PluginInfrastructureCancelEventArgs>(installationManager_PreRemovePlugin);
+      installationManager.PreUpdatePlugin -= new EventHandler<PluginInfrastructureCancelEventArgs>(installationManager_PreUpdatePlugin);
+      base.OnClosing(e);
+    }
   }
 }
Index: /trunk/sources/HeuristicLab.PluginInfrastructure/Manager/PluginInfrastructureEventArgs.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginInfrastructure/Manager/PluginInfrastructureEventArgs.cs	(revision 3178)
+++ /trunk/sources/HeuristicLab.PluginInfrastructure/Manager/PluginInfrastructureEventArgs.cs	(revision 3179)
@@ -25,5 +25,4 @@
 
 namespace HeuristicLab.PluginInfrastructure.Manager {
-  // to be replaced by GenericEventArgs
   [Serializable]
   internal sealed class PluginInfrastructureEventArgs : EventArgs {
Index: /trunk/sources/HeuristicLab.PluginInfrastructure/app.config
===================================================================
--- /trunk/sources/HeuristicLab.PluginInfrastructure/app.config	(revision 3178)
+++ /trunk/sources/HeuristicLab.PluginInfrastructure/app.config	(revision 3179)
@@ -20,13 +20,20 @@
     </applicationSettings>
     <system.serviceModel>
+        <behaviors>
+            <endpointBehaviors>
+                <behavior name="SerializationBehavior">
+                    <dataContractSerializer maxItemsInObjectGraph="1000000" />
+                </behavior>
+            </endpointBehaviors>
+        </behaviors>
         <bindings>
             <wsHttpBinding>
-                <binding name="WSHttpBinding_IUpdate" closeTimeout="00:01:00"
+                <binding name="WSHttpBinding_IUpdate1" 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="10000000"
+                    maxBufferPoolSize="524288" maxReceivedMessageSize="200000000"
                     messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
                     allowCookies="false">
-                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="10000000"
+                    <readerQuotas maxDepth="32" maxStringContentLength="32000" maxArrayLength="200000000"
                         maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                     <reliableSession ordered="true" inactivityTimeout="00:10:00"
@@ -39,11 +46,11 @@
                     </security>
                 </binding>
-                <binding name="WSHttpBinding_IAdmin" closeTimeout="00:01:00"
+                <binding name="WSHttpBinding_IAdmin1" 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="10000000"
+                    maxBufferPoolSize="524288" maxReceivedMessageSize="200000000"
                     messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
                     allowCookies="false">
-                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="10000000"
+                    <readerQuotas maxDepth="32" maxStringContentLength="32000" maxArrayLength="200000000"
                         maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                     <reliableSession ordered="true" inactivityTimeout="00:10:00"
@@ -60,7 +67,7 @@
         <client>
             <endpoint address="http://servdev.heuristiclab.com/Deployment-3.3/Update.svc"
-                binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IUpdate"
-                contract="HeuristicLab.PluginInfrastructure.Advanced.DeploymentService.IUpdate"
-                name="WSHttpBinding_IUpdate">
+                behaviorConfiguration="SerializationBehavior" binding="wsHttpBinding"
+                bindingConfiguration="WSHttpBinding_IUpdate1" contract="HeuristicLab.PluginInfrastructure.Advanced.DeploymentService.IUpdate"
+                name="WSHttpBinding_IUpdate1">
                 <identity>
                     <certificate encodedValue="AwAAAAEAAAAUAAAAFhNc5P5CrrUsDAETV1gq2wDRXQ0gAAAAAQAAACcCAAAwggIjMIIBjKADAgECAhCnTkk2TwtajEKLiJLyjCpwMA0GCSqGSIb3DQEBBAUAMCMxITAfBgNVBAMTGHNlcnZkZXYuaGV1cmlzdGljbGFiLmNvbTAeFw0xMDAzMTAxNTI4MTJaFw0zOTEyMzEyMzU5NTlaMCMxITAfBgNVBAMTGHNlcnZkZXYuaGV1cmlzdGljbGFiLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEArJSMi2lAXj/Z9sMiLjiUmqUfNSfozaio/mjR6PxbDPBWZp6xTFdDLnBx+kHMBp+gc75hMI6wCFHB8PYud8tHMgJFDssGBUZkEN2vFZ0h41efyXo9U0o90KVFWFBQWOz+Opnalqohh8qHnOczo1zabeLFf79pC81Y6QGNkSyQcikCAwEAAaNYMFYwVAYDVR0BBE0wS4AQ1x+ArbPOrv0XwUivnGidCKElMCMxITAfBgNVBAMTGHNlcnZkZXYuaGV1cmlzdGljbGFiLmNvbYIQp05JNk8LWoxCi4iS8owqcDANBgkqhkiG9w0BAQQFAAOBgQBU8cGNgEnkWLs3v433WBC2Sl6BiPk6IchsqfxECp1Q4j/gqsIe9xRNnjxD5YEj0HGdqjrKBwF8XrOXPgyXQXfM4ju3INGLSJ1WH/oODbgbKnqQ/7TSJ++y1x0lnDgh+ibqjchsrBrqzKfkBNOa4B3g1M9q1eNVDOyGWu7GiZAUTA==" />
@@ -68,7 +75,7 @@
             </endpoint>
             <endpoint address="http://servdev.heuristiclab.com/Deployment-3.3/Admin.svc"
-                binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IAdmin"
-                contract="HeuristicLab.PluginInfrastructure.Advanced.DeploymentService.IAdmin"
-                name="WSHttpBinding_IAdmin">
+                behaviorConfiguration="SerializationBehavior" binding="wsHttpBinding"
+                bindingConfiguration="WSHttpBinding_IAdmin1" contract="HeuristicLab.PluginInfrastructure.Advanced.DeploymentService.IAdmin"
+                name="WSHttpBinding_IAdmin1">
                 <identity>
                     <certificate encodedValue="AwAAAAEAAAAUAAAAFhNc5P5CrrUsDAETV1gq2wDRXQ0gAAAAAQAAACcCAAAwggIjMIIBjKADAgECAhCnTkk2TwtajEKLiJLyjCpwMA0GCSqGSIb3DQEBBAUAMCMxITAfBgNVBAMTGHNlcnZkZXYuaGV1cmlzdGljbGFiLmNvbTAeFw0xMDAzMTAxNTI4MTJaFw0zOTEyMzEyMzU5NTlaMCMxITAfBgNVBAMTGHNlcnZkZXYuaGV1cmlzdGljbGFiLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEArJSMi2lAXj/Z9sMiLjiUmqUfNSfozaio/mjR6PxbDPBWZp6xTFdDLnBx+kHMBp+gc75hMI6wCFHB8PYud8tHMgJFDssGBUZkEN2vFZ0h41efyXo9U0o90KVFWFBQWOz+Opnalqohh8qHnOczo1zabeLFf79pC81Y6QGNkSyQcikCAwEAAaNYMFYwVAYDVR0BBE0wS4AQ1x+ArbPOrv0XwUivnGidCKElMCMxITAfBgNVBAMTGHNlcnZkZXYuaGV1cmlzdGljbGFiLmNvbYIQp05JNk8LWoxCi4iS8owqcDANBgkqhkiG9w0BAQQFAAOBgQBU8cGNgEnkWLs3v433WBC2Sl6BiPk6IchsqfxECp1Q4j/gqsIe9xRNnjxD5YEj0HGdqjrKBwF8XrOXPgyXQXfM4ju3INGLSJ1WH/oODbgbKnqQ/7TSJ++y1x0lnDgh+ibqjchsrBrqzKfkBNOa4B3g1M9q1eNVDOyGWu7GiZAUTA==" />
Index: /trunk/sources/HeuristicLab.Services.Deployment/3.3/App.config
===================================================================
--- /trunk/sources/HeuristicLab.Services.Deployment/3.3/App.config	(revision 3178)
+++ /trunk/sources/HeuristicLab.Services.Deployment/3.3/App.config	(revision 3179)
@@ -1,16 +1,59 @@
-<?xml version="1.0" encoding="utf-8" ?>
+<?xml version="1.0" encoding="utf-8"?>
 <configuration>
   <configSections>
   </configSections>
   <system.diagnostics>
+    <!-- for logging. Make sure the IIS application user has write access rights for the output directory -->
+    <!--sources>
+      <source name="System.ServiceModel.MessageLogging" switchValue="Warning, ActivityTracing">
+        <listeners>
+          <add type="System.Diagnostics.DefaultTraceListener" name="Default">
+            <filter type="" />
+          </add>
+          <add name="ServiceModelMessageLoggingListener">
+            <filter type="" />
+          </add>
+        </listeners>
+      </source>
+      <source name="System.ServiceModel" switchValue="Warning, ActivityTracing"
+        propagateActivity="true">
+        <listeners>
+          <add type="System.Diagnostics.DefaultTraceListener" name="Default">
+            <filter type="" />
+          </add>
+          <add name="ServiceModelTraceListener">
+            <filter type="" />
+          </add>
+        </listeners>
+      </source>
+    </sources>
+    <sharedListeners>
+      <add initializeData="C:\inetpub\wwwroot\Deployment-3.3\web_messages.svclog"
+        type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
+        name="ServiceModelMessageLoggingListener" traceOutputOptions="Timestamp">
+        <filter type="" />
+      </add>
+      <add initializeData="C:\inetpub\wwwroot\Deployment-3.3\web_tracelog.svclog"
+        type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
+        name="ServiceModelTraceListener" traceOutputOptions="Timestamp">
+        <filter type="" />
+      </add>
+    </sharedListeners-->
   </system.diagnostics>
   <connectionStrings>
     <remove name="LocalSqlServer" />
-    <add name="HeuristicLab.Services.Deployment.DataAccess.Properties.Settings.HeuristicLab_PluginStoreConnectionString"
-      connectionString="Server=SERVDEV;Database=HeuristicLab.Deployment;Integrated Security=SSPI" />
+    <add connectionString="Server=SERVDEV;Database=HeuristicLab.Deployment;Integrated Security=SSPI" name="HeuristicLab.Services.Deployment.DataAccess.Properties.Settings.HeuristicLab_PluginStoreConnectionString" />
     <add name="MyLocalSQLServer" connectionString="Initial Catalog=aspnetdb;data source=localhost;Integrated Security=SSPI;" />
   </connectionStrings>
+  <system.webServer>
+    <security>
+      <requestFiltering>
+        <requestLimits maxAllowedContentLength="100000000"/>
+      </requestFiltering>
+    </security>
+  </system.webServer>
   <system.web>
     <compilation debug="false" />
+    <httpRuntime maxRequestLength="2097151" />
     <membership defaultProvider="MySqlMembershipProvider">
       <providers>
@@ -32,6 +75,6 @@
     <bindings>
       <wsHttpBinding>
-        <binding name="DefaultWsHttpBinding" maxBufferPoolSize="10000000" maxReceivedMessageSize="1000000">
-          <readerQuotas maxDepth="1000" maxStringContentLength="16000" maxArrayLength="10000000" maxBytesPerRead="10000000" maxNameTableCharCount="16000" />
+        <binding name="DefaultWsHttpBinding" maxBufferPoolSize="10000000" maxReceivedMessageSize="200000000">
+          <readerQuotas maxDepth="1000" maxStringContentLength="16000" maxArrayLength="200000000" maxBytesPerRead="200000000" maxNameTableCharCount="16000" />
           <security mode="Message">
             <message clientCredentialType="UserName" />
@@ -44,19 +87,31 @@
     </bindings>
     <diagnostics performanceCounters="Default">
-      <messageLogging logMalformedMessages="false" logMessagesAtTransportLevel="false" />
+      <!--<messageLogging logMalformedMessages="false" logMessagesAtTransportLevel="false" />-->
     </diagnostics>
     <services>
-      <service behaviorConfiguration="HeuristicLab.Services.Deployment.UpdateBehavior" name="HeuristicLab.Services.Deployment.Update">
-        <endpoint address="" binding="wsHttpBinding" bindingConfiguration="DefaultWsHttpBinding" contract="HeuristicLab.Services.Deployment.IUpdate">
-        </endpoint>
-        <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="DefaultMexHttpBinding" contract="IMetadataExchange" />
+      <service behaviorConfiguration="HeuristicLab.Services.Deployment.UpdateBehavior"
+       name="HeuristicLab.Services.Deployment.Update">
+        <endpoint address="" behaviorConfiguration="SerializationBehavior"
+         binding="wsHttpBinding" bindingConfiguration="DefaultWsHttpBinding"
+         contract="HeuristicLab.Services.Deployment.IUpdate" />
+        <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="DefaultMexHttpBinding"
+         contract="IMetadataExchange" />
       </service>
-      <service behaviorConfiguration="HeuristicLab.Services.Deployment.AdminBehavior" name="HeuristicLab.Services.Deployment.Admin">
-        <endpoint address="" binding="wsHttpBinding" bindingConfiguration="DefaultWsHttpBinding" contract="HeuristicLab.Services.Deployment.IAdmin">
-        </endpoint>
-        <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="DefaultMexHttpBinding" contract="IMetadataExchange" />
+      <service behaviorConfiguration="HeuristicLab.Services.Deployment.AdminBehavior"
+       name="HeuristicLab.Services.Deployment.Admin">
+        <endpoint address="" behaviorConfiguration="SerializationBehavior"
+         binding="wsHttpBinding" bindingConfiguration="DefaultWsHttpBinding"
+         contract="HeuristicLab.Services.Deployment.IAdmin" />
+        <endpoint address="mex" behaviorConfiguration="SerializationBehavior"
+         binding="mexHttpBinding" bindingConfiguration="DefaultMexHttpBinding"
+         contract="IMetadataExchange" />
       </service>
     </services>
     <behaviors>
+      <endpointBehaviors>
+        <behavior name="SerializationBehavior">
+          <dataContractSerializer maxItemsInObjectGraph="1000000" />
+        </behavior>
+      </endpointBehaviors>
       <serviceBehaviors>
         <behavior name="HeuristicLab.Services.Deployment.UpdateBehavior">
@@ -64,8 +119,11 @@
           <serviceDebug includeExceptionDetailInFaults="false" />
           <serviceCredentials>
-            <serviceCertificate findValue="servdev.heuristiclab.com" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectName" />
-            <userNameAuthentication userNamePasswordValidationMode="MembershipProvider" membershipProviderName="MySqlMembershipProvider" />
+            <serviceCertificate findValue="servdev.heuristiclab.com" storeLocation="LocalMachine"
+             storeName="My" x509FindType="FindBySubjectName" />
+            <userNameAuthentication userNamePasswordValidationMode="MembershipProvider"
+             membershipProviderName="MySqlMembershipProvider" />
           </serviceCredentials>
-          <serviceAuthorization principalPermissionMode="UseAspNetRoles" roleProviderName="MySqlRoleProvider" />
+          <serviceAuthorization principalPermissionMode="UseAspNetRoles"
+           roleProviderName="MySqlRoleProvider" />
         </behavior>
         <behavior name="HeuristicLab.Services.Deployment.AdminBehavior">
@@ -73,8 +131,11 @@
           <serviceDebug includeExceptionDetailInFaults="false" />
           <serviceCredentials>
-            <serviceCertificate findValue="servdev.heuristiclab.com" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectName" />
-            <userNameAuthentication userNamePasswordValidationMode="MembershipProvider" membershipProviderName="MySqlMembershipProvider" />
+            <serviceCertificate findValue="servdev.heuristiclab.com" storeLocation="LocalMachine"
+             storeName="My" x509FindType="FindBySubjectName" />
+            <userNameAuthentication userNamePasswordValidationMode="MembershipProvider"
+             membershipProviderName="MySqlMembershipProvider" />
           </serviceCredentials>
-          <serviceAuthorization principalPermissionMode="UseAspNetRoles" roleProviderName="MySqlRoleProvider" />
+          <serviceAuthorization principalPermissionMode="UseAspNetRoles"
+           roleProviderName="MySqlRoleProvider" />
         </behavior>
       </serviceBehaviors>
