Index: /trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/InstallationManager.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/InstallationManager.cs	(revision 3507)
+++ /trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/InstallationManager.cs	(revision 3508)
@@ -58,7 +58,15 @@
         return plugins;
       }
-      catch (FaultException) {
-        client.Abort();
-        return new IPluginDescription[] { };
+      catch (TimeoutException e) {
+        client.Abort();
+        throw new InstallationManagerException("Time out while connecting to server.", e);
+      }
+      catch (FaultException e) {
+        client.Abort();
+        throw new InstallationManagerException("Fault in connection to server.", e);
+      }
+      catch (CommunicationException e) {
+        client.Abort();
+        throw new InstallationManagerException("General communication exception in connection to server.", e);
       }
     }
@@ -75,7 +83,15 @@
         return products;
       }
-      catch (FaultException) {
-        client.Abort();
-        return new DeploymentService.ProductDescription[] { };
+      catch (TimeoutException e) {
+        client.Abort();
+        throw new InstallationManagerException("Time out while connecting to server.", e);
+      }
+      catch (FaultException e) {
+        client.Abort();
+        throw new InstallationManagerException("Fault in connection to server.", e);
+      }
+      catch (CommunicationException e) {
+        client.Abort();
+        throw new InstallationManagerException("General communication exception in connection to server.", e);
       }
     }
@@ -98,6 +114,15 @@
           client.Close();
         }
-        catch (FaultException) {
-          client.Abort();
+        catch (TimeoutException e) {
+          client.Abort();
+          throw new InstallationManagerException("Time out while connecting to server.", e);
+        }
+        catch (FaultException e) {
+          client.Abort();
+          throw new InstallationManagerException("Fault in connection to server.", e);
+        }
+        catch (CommunicationException e) {
+          client.Abort();
+          throw new InstallationManagerException("General communication exception in connection to server.", e);
         }
       }
@@ -121,6 +146,15 @@
           client.Close();
         }
-        catch (FaultException) {
-          client.Abort();
+        catch (TimeoutException e) {
+          client.Abort();
+          throw new InstallationManagerException("Time out while connecting to server.", e);
+        }
+        catch (FaultException e) {
+          client.Abort();
+          throw new InstallationManagerException("Fault in connection to server.", e);
+        }
+        catch (CommunicationException e) {
+          client.Abort();
+          throw new InstallationManagerException("General communication exception in connection to server.", e);
         }
       }
Index: /trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/InstallationManagerException.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/InstallationManagerException.cs	(revision 3508)
+++ /trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/InstallationManagerException.cs	(revision 3508)
@@ -0,0 +1,42 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.Linq;
+using System.Text;
+using HeuristicLab.PluginInfrastructure.Manager;
+using System.IO;
+using System.ComponentModel;
+using System.Reflection;
+using ICSharpCode.SharpZipLib.Zip;
+using System.ServiceModel;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.PluginInfrastructure.Advanced {
+  [Serializable]
+  public class InstallationManagerException : Exception {
+    public InstallationManagerException() : base() { }
+    public InstallationManagerException(string msg) : base(msg) { }
+    public InstallationManagerException(string msg, Exception e) : base(msg, e) { }
+    public InstallationManagerException(SerializationInfo info, StreamingContext context) : base(info, context) { }
+  }
+}
Index: /trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/InstallationManagerForm.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/InstallationManagerForm.Designer.cs	(revision 3507)
+++ /trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/InstallationManagerForm.Designer.cs	(revision 3508)
@@ -65,4 +65,6 @@
       this.optionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
       this.connectionSettingsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.uploadPluginsTabPage = new System.Windows.Forms.TabPage();
+      this.manageProductsTabPage = new System.Windows.Forms.TabPage();
       this.statusStrip.SuspendLayout();
       this.tabControl.SuspendLayout();
@@ -100,11 +102,13 @@
       this.removeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
       this.removeButton.Enabled = false;
-      this.removeButton.Location = new System.Drawing.Point(95, 313);
+      this.removeButton.Image = global::HeuristicLab.PluginInfrastructure.Properties.Resources.VS2008ImageLibrary_CommonElements_Actions_Remove;
+      this.removeButton.Location = new System.Drawing.Point(103, 305);
       this.removeButton.Name = "removeButton";
-      this.removeButton.Size = new System.Drawing.Size(106, 23);
+      this.removeButton.Size = new System.Drawing.Size(110, 31);
       this.removeButton.TabIndex = 11;
       this.removeButton.Text = "Delete Selected";
+      this.removeButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
       this.removeButton.UseVisualStyleBackColor = true;
-      this.removeButton.Click += new System.EventHandler(this.removeButton_Click);
+      this.removeButton.Click += new System.EventHandler(this.removeLocalButton_Click);
       // 
       // installButton
@@ -112,11 +116,13 @@
       this.installButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
       this.installButton.Enabled = false;
-      this.installButton.Location = new System.Drawing.Point(87, 313);
+      this.installButton.Image = global::HeuristicLab.PluginInfrastructure.Properties.Resources.VS2008ImageLibrary_Objects_Install;
+      this.installButton.Location = new System.Drawing.Point(84, 305);
       this.installButton.Name = "installButton";
-      this.installButton.Size = new System.Drawing.Size(132, 23);
+      this.installButton.Size = new System.Drawing.Size(140, 31);
       this.installButton.TabIndex = 15;
       this.installButton.Text = "Install Selected Items";
+      this.installButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
       this.installButton.UseVisualStyleBackColor = true;
-      this.installButton.Click += new System.EventHandler(this.updateButton_Click);
+      this.installButton.Click += new System.EventHandler(this.updateOrInstallButton_Click);
       // 
       // tabControl
@@ -127,4 +133,6 @@
       this.tabControl.Controls.Add(this.localPluginsTabPage);
       this.tabControl.Controls.Add(this.availablePluginsTabPage);
+      this.tabControl.Controls.Add(this.uploadPluginsTabPage);
+      this.tabControl.Controls.Add(this.manageProductsTabPage);
       this.tabControl.Controls.Add(this.logTabPage);
       this.tabControl.Location = new System.Drawing.Point(12, 27);
@@ -151,10 +159,14 @@
       // 
       this.updateButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.updateButton.Location = new System.Drawing.Point(6, 313);
+      this.updateButton.Enabled = false;
+      this.updateButton.Image = global::HeuristicLab.PluginInfrastructure.Properties.Resources.VS2008ImageLibrary_Objects_Internet;
+      this.updateButton.Location = new System.Drawing.Point(6, 305);
       this.updateButton.Name = "updateButton";
-      this.updateButton.Size = new System.Drawing.Size(83, 23);
+      this.updateButton.Size = new System.Drawing.Size(91, 31);
       this.updateButton.TabIndex = 12;
       this.updateButton.Text = "Update All";
+      this.updateButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
       this.updateButton.UseVisualStyleBackColor = true;
+      this.updateButton.Click += new System.EventHandler(this.updateAllButton_Click);
       // 
       // localPluginManagerView
@@ -166,5 +178,5 @@
       this.localPluginManagerView.Name = "localPluginManagerView";
       this.localPluginManagerView.Plugins = null;
-      this.localPluginManagerView.Size = new System.Drawing.Size(569, 301);
+      this.localPluginManagerView.Size = new System.Drawing.Size(569, 293);
       this.localPluginManagerView.TabIndex = 0;
       this.localPluginManagerView.ItemChecked += new System.Windows.Forms.ItemCheckedEventHandler(this.localPluginManager_ItemChecked);
@@ -194,5 +206,5 @@
       this.remotePluginInstaller.Products = new HeuristicLab.PluginInfrastructure.Advanced.DeploymentService.ProductDescription[0];
       this.remotePluginInstaller.ShowAllPlugins = false;
-      this.remotePluginInstaller.Size = new System.Drawing.Size(571, 304);
+      this.remotePluginInstaller.Size = new System.Drawing.Size(571, 293);
       this.remotePluginInstaller.TabIndex = 14;
       this.remotePluginInstaller.ItemChecked += new System.Windows.Forms.ItemCheckedEventHandler(this.remotePluginInstaller_ItemChecked);
@@ -201,11 +213,13 @@
       // 
       this.refreshButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.refreshButton.Location = new System.Drawing.Point(6, 313);
+      this.refreshButton.Image = global::HeuristicLab.PluginInfrastructure.Properties.Resources.VS2008ImageLibrary_Objects_Internet;
+      this.refreshButton.Location = new System.Drawing.Point(6, 305);
       this.refreshButton.Name = "refreshButton";
-      this.refreshButton.Size = new System.Drawing.Size(75, 23);
+      this.refreshButton.Size = new System.Drawing.Size(72, 31);
       this.refreshButton.TabIndex = 11;
       this.refreshButton.Text = "Refresh";
+      this.refreshButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
       this.refreshButton.UseVisualStyleBackColor = true;
-      this.refreshButton.Click += new System.EventHandler(this.refreshButton_Click);
+      this.refreshButton.Click += new System.EventHandler(this.refreshRemoteButton_Click);
       // 
       // logTabPage
@@ -281,8 +295,29 @@
       // connectionSettingsToolStripMenuItem
       // 
+      this.connectionSettingsToolStripMenuItem.Image = global::HeuristicLab.PluginInfrastructure.Properties.Resources.VS2008ImageLibrary_Objects_NetworkConnections;
       this.connectionSettingsToolStripMenuItem.Name = "connectionSettingsToolStripMenuItem";
       this.connectionSettingsToolStripMenuItem.Size = new System.Drawing.Size(190, 22);
       this.connectionSettingsToolStripMenuItem.Text = "Connection Settings...";
       this.connectionSettingsToolStripMenuItem.Click += new System.EventHandler(this.connectionSettingsToolStripMenuItem_Click);
+      // 
+      // uploadPluginsTabPage
+      // 
+      this.uploadPluginsTabPage.Location = new System.Drawing.Point(4, 22);
+      this.uploadPluginsTabPage.Name = "uploadPluginsTabPage";
+      this.uploadPluginsTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.uploadPluginsTabPage.Size = new System.Drawing.Size(583, 342);
+      this.uploadPluginsTabPage.TabIndex = 3;
+      this.uploadPluginsTabPage.Text = "Upload Plugins";
+      this.uploadPluginsTabPage.UseVisualStyleBackColor = true;
+      // 
+      // manageProductsTabPage
+      // 
+      this.manageProductsTabPage.Location = new System.Drawing.Point(4, 22);
+      this.manageProductsTabPage.Name = "manageProductsTabPage";
+      this.manageProductsTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.manageProductsTabPage.Size = new System.Drawing.Size(583, 342);
+      this.manageProductsTabPage.TabIndex = 4;
+      this.manageProductsTabPage.Text = "Manage Products";
+      this.manageProductsTabPage.UseVisualStyleBackColor = true;
       // 
       // InstallationManagerForm
@@ -334,4 +369,6 @@
     private System.Windows.Forms.ToolStripMenuItem connectionSettingsToolStripMenuItem;
     private System.Windows.Forms.Button updateButton;
+    private System.Windows.Forms.TabPage uploadPluginsTabPage;
+    private System.Windows.Forms.TabPage manageProductsTabPage;
   }
 }
Index: /trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/InstallationManagerForm.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/InstallationManagerForm.cs	(revision 3507)
+++ /trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/InstallationManagerForm.cs	(revision 3508)
@@ -51,4 +51,5 @@
     private BackgroundWorker removePluginsBackgroundWorker;
     private BackgroundWorker refreshLocalPluginsBackgroundWorker;
+    private BackgroundWorker updateAllPluginsBackgroundWorker;
     private PluginManager pluginManager;
     private string pluginDir;
@@ -80,4 +81,8 @@
       refreshLocalPluginsBackgroundWorker.DoWork += new DoWorkEventHandler(refreshLocalPluginsBackgroundWorker_DoWork);
       refreshLocalPluginsBackgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(refreshLocalPluginsBackgroundWorker_RunWorkerCompleted);
+
+      updateAllPluginsBackgroundWorker = new BackgroundWorker();
+      updateAllPluginsBackgroundWorker.DoWork += new DoWorkEventHandler(updateAllPluginsBackgroundWorker_DoWork);
+      updateAllPluginsBackgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(updateAllPluginsBackgroundWorker_RunWorkerCompleted);
       #endregion
 
@@ -90,6 +95,43 @@
       installationManager.PreUpdatePlugin += new EventHandler<PluginInfrastructureCancelEventArgs>(installationManager_PreUpdatePlugin);
 
-      RefreshLocalPluginListAsync();
-    }
+      // show or hide controls for uploading plugins based on setting
+      if (!HeuristicLab.PluginInfrastructure.Properties.Settings.Default.ShowPluginUploadControls) {
+        tabControl.Controls.Remove(uploadPluginsTabPage);
+        tabControl.Controls.Remove(manageProductsTabPage);
+      }
+
+      UpdateLocalPluginList(pluginManager.Plugins);
+      UpdateControlsConnected();
+    }
+
+    #region event handlers for update all plugins backgroundworker
+    void updateAllPluginsBackgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) {
+      if (e.Error != null) {
+        MessageBox.Show("There was an error while connecting to the server." + Environment.NewLine +
+           "Please check your connection settings and user credentials.");
+        UpdateControlsDisconnected();
+      } else {
+        RefreshLocalPluginListAsync();
+        UpdateControlsConnected();
+      }
+    }
+
+    void updateAllPluginsBackgroundWorker_DoWork(object sender, DoWorkEventArgs e) {
+      IEnumerable<IPluginDescription> installedPlugins = (IEnumerable<IPluginDescription>)e.Argument;
+      var remotePlugins = installationManager.GetRemotePluginList();
+      // if there is a local plugin with same name and same major and minor version then it's an update
+      var pluginsToUpdate = from remotePlugin in remotePlugins
+                            let matchingLocalPlugins = from installedPlugin in installedPlugins
+                                                       where installedPlugin.Name == remotePlugin.Name
+                                                       where installedPlugin.Version.Major == remotePlugin.Version.Major
+                                                       where installedPlugin.Version.Minor == remotePlugin.Version.Minor
+                                                       where installedPlugin.Version.Build <= remotePlugin.Version.Build ||
+                                                         installedPlugin.Version.Revision < remotePlugin.Version.Revision
+                                                       select installedPlugin
+                            where matchingLocalPlugins.Count() > 0
+                            select remotePlugin;
+      installationManager.Update(pluginsToUpdate);
+    }
+    #endregion
 
     #region event handlers for refresh local plugin list backgroundworker
@@ -109,5 +151,9 @@
     #region event handlers for plugin removal background worker
     void removePluginsBackgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) {
-      if (!e.Cancelled && e.Error == null) {
+      if (e.Error != null) {
+        MessageBox.Show("There was problem while deleting files." + Environment.NewLine +
+              e.Error.Message);
+        UpdateControlsDisconnected();
+      } else {
         RefreshLocalPluginListAsync();
         UpdateControlsConnected();
@@ -123,10 +169,12 @@
     #region event handlers for plugin update background worker
     void updateOrInstallPluginsBackgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) {
-      if (!e.Cancelled && e.Error == null) {
+      if (e.Error != null) {
+        MessageBox.Show("There was an error while connecting to the server." + Environment.NewLine +
+          "Please check your connection settings and user credentials.");
+        UpdateControlsDisconnected();
+      } else {
         RefreshLocalPluginListAsync();
         RefreshRemotePluginListAsync();
         UpdateControlsConnected();
-      } else {
-        UpdateControlsDisconnected();
       }
     }
@@ -141,10 +189,12 @@
     #region event handlers for refresh server plugins background worker
     void refreshServerPluginsBackgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) {
-      if (!e.Cancelled && e.Result != null) {
+      if (e.Error != null) {
+        MessageBox.Show("There was an error while connecting to the server." + Environment.NewLine +
+          "Please check your connection settings and user credentials.");
+        UpdateControlsDisconnected();
+      } else {
         RefreshBackgroundWorkerResult refreshResult = (RefreshBackgroundWorkerResult)e.Result;
         UpdateRemotePluginList(refreshResult.RemoteProducts, refreshResult.RemotePlugins);
         UpdateControlsConnected();
-      } else {
-        UpdateControlsDisconnected();
       }
     }
@@ -217,19 +267,16 @@
     #endregion
 
-    private void SetStatusStrip(string msg) {
-      if (InvokeRequired) Invoke((Action<string>)SetStatusStrip, msg);
-      else {
-        toolStripStatusLabel.Text = msg;
-        logTextBox.Text += DateTime.Now + ": " + msg + Environment.NewLine;
-      }
-    }
+
 
     #region button events
 
-    private void refreshButton_Click(object sender, EventArgs e) {
+    private void refreshRemoteButton_Click(object sender, EventArgs e) {
+      Cursor = Cursors.AppStarting;
       RefreshRemotePluginListAsync();
-    }
-
-    private void updateButton_Click(object sender, EventArgs e) {
+      toolStripProgressBar.Visible = true;
+      DisableControls();
+    }
+
+    private void updateOrInstallButton_Click(object sender, EventArgs e) {
       Cursor = Cursors.AppStarting;
       toolStripProgressBar.Visible = true;
@@ -254,5 +301,5 @@
     }
 
-    private void removeButton_Click(object sender, EventArgs e) {
+    private void removeLocalButton_Click(object sender, EventArgs e) {
       Cursor = Cursors.AppStarting;
       toolStripProgressBar.Visible = true;
@@ -261,4 +308,29 @@
     }
 
+    private void updateAllButton_Click(object sender, EventArgs e) {
+      Cursor = Cursors.AppStarting;
+      toolStripProgressBar.Visible = true;
+      updateButton.Enabled = false;
+      var installedPlugins = pluginManager.Plugins.OfType<IPluginDescription>();
+      updateAllPluginsBackgroundWorker.RunWorkerAsync(installedPlugins);
+    }
+
+    private void connectionSettingsToolStripMenuItem_Click(object sender, EventArgs e) {
+      new ConnectionSetupView().ShowDialog();
+    }
+
+    private void tabControl_Selected(object sender, TabControlEventArgs e) {
+      viewToolStripMenuItem.Enabled = e.TabPage == availablePluginsTabPage;
+    }
+
+    private void simpleToolStripMenuItem_Click(object sender, EventArgs e) {
+      remotePluginInstaller.ShowAllPlugins = false;
+      advancedToolStripMenuItem.Checked = false;
+    }
+
+    private void advancedToolStripMenuItem_Click(object sender, EventArgs e) {
+      remotePluginInstaller.ShowAllPlugins = true;
+      simpleToolStripMenuItem.Checked = false;
+    }
     #endregion
 
@@ -297,4 +369,11 @@
 
     #region helper methods
+    private void SetStatusStrip(string msg) {
+      if (InvokeRequired) Invoke((Action<string>)SetStatusStrip, msg);
+      else {
+        toolStripStatusLabel.Text = msg;
+        logTextBox.Text += DateTime.Now + ": " + msg + Environment.NewLine;
+      }
+    }
 
     private void UpdateLocalPluginList(IEnumerable<PluginDescription> plugins) {
@@ -347,4 +426,5 @@
     private void UpdateControlsConnected() {
       refreshButton.Enabled = true;
+      updateButton.Enabled = true;
       toolStripProgressBar.Visible = false;
       Cursor = Cursors.Default;
@@ -363,7 +443,4 @@
     private void remotePluginInstaller_ItemChecked(object sender, ItemCheckedEventArgs e) {
       installButton.Enabled = remotePluginInstaller.CheckedPlugins.Count() > 0;
-    }
-
-    private void editConnectionButton_Click(object sender, EventArgs e) {
     }
 
@@ -378,19 +455,7 @@
     }
 
-    private void connectionSettingsToolStripMenuItem_Click(object sender, EventArgs e) {
-      new ConnectionSetupView().ShowDialog();
-    }
-
-    private void tabControl_Selected(object sender, TabControlEventArgs e) {
-      viewToolStripMenuItem.Enabled = e.TabPage == availablePluginsTabPage;
-    }
-
-    private void simpleToolStripMenuItem_Click(object sender, EventArgs e) {
-
-    }
-
-    private void advancedToolStripMenuItem_Click(object sender, EventArgs e) {
-
-    }
+
+
+
   }
 }
Index: /trunk/sources/HeuristicLab.PluginInfrastructure/HeuristicLab.PluginInfrastructure.csproj
===================================================================
--- /trunk/sources/HeuristicLab.PluginInfrastructure/HeuristicLab.PluginInfrastructure.csproj	(revision 3507)
+++ /trunk/sources/HeuristicLab.PluginInfrastructure/HeuristicLab.PluginInfrastructure.csproj	(revision 3508)
@@ -105,4 +105,5 @@
       <DependentUpon>ConnectionSetupView.cs</DependentUpon>
     </Compile>
+    <Compile Include="Advanced\InstallationManagerException.cs" />
     <Compile Include="Advanced\DeploymentService\AdminClientFactory.cs" />
     <Compile Include="Advanced\DeploymentService\DeploymentService.cs" />
@@ -288,5 +289,9 @@
     <None Include="Resources\VS2008ImageLibrary_Actions_Delete.png" />
     <None Include="Resources\VS2008ImageLibrary_CommonElements_Actions_Remove.png" />
+    <None Include="Resources\VS2008ImageLibrary_CommonElements_Actions_Remove1.png" />
     <Content Include="Resources\VS2008ImageLibrary_CommonElements_Objects_Arrow_Down.png" />
+    <None Include="Resources\VS2008ImageLibrary_Objects_NetworkConnections.png" />
+    <None Include="Resources\VS2008ImageLibrary_Objects_Install1.png" />
+    <None Include="Resources\VS2008ImageLibrary_Objects_Internet1.png" />
     <None Include="Resources\VS2008ImageLibrary_CommonElements_Objects_Arrow_Up.png" />
     <None Include="Resources\VS2008ImageLibrary_Objects_File.png" />
Index: /trunk/sources/HeuristicLab.PluginInfrastructure/Manager/PluginValidator.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginInfrastructure/Manager/PluginValidator.cs	(revision 3507)
+++ /trunk/sources/HeuristicLab.PluginInfrastructure/Manager/PluginValidator.cs	(revision 3508)
@@ -258,4 +258,6 @@
         catch (InvalidPluginException) {
         }
+        catch (TypeLoadException) {
+        }
       }
       return pluginDescriptions;
Index: /trunk/sources/HeuristicLab.PluginInfrastructure/Properties/Resources.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginInfrastructure/Properties/Resources.Designer.cs	(revision 3507)
+++ /trunk/sources/HeuristicLab.PluginInfrastructure/Properties/Resources.Designer.cs	(revision 3508)
@@ -95,4 +95,32 @@
             }
         }
+        
+        internal static System.Drawing.Bitmap VS2008ImageLibrary_CommonElements_Actions_Remove {
+            get {
+                object obj = ResourceManager.GetObject("VS2008ImageLibrary_CommonElements_Actions_Remove", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap VS2008ImageLibrary_Objects_Install {
+            get {
+                object obj = ResourceManager.GetObject("VS2008ImageLibrary_Objects_Install", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap VS2008ImageLibrary_Objects_Internet {
+            get {
+                object obj = ResourceManager.GetObject("VS2008ImageLibrary_Objects_Internet", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap VS2008ImageLibrary_Objects_NetworkConnections {
+            get {
+                object obj = ResourceManager.GetObject("VS2008ImageLibrary_Objects_NetworkConnections", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
     }
 }
Index: /trunk/sources/HeuristicLab.PluginInfrastructure/Properties/Resources.resx
===================================================================
--- /trunk/sources/HeuristicLab.PluginInfrastructure/Properties/Resources.resx	(revision 3507)
+++ /trunk/sources/HeuristicLab.PluginInfrastructure/Properties/Resources.resx	(revision 3508)
@@ -119,4 +119,13 @@
   </resheader>
   <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="VS2008ImageLibrary_CommonElements_Actions_Remove" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\VS2008ImageLibrary_CommonElements_Actions_Remove1.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="Logo_white" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\Logo_white.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="List" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\List.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
   <data name="Details" type="System.Resources.ResXFileRef, System.Windows.Forms">
     <value>..\Resources\Details.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
@@ -128,9 +137,12 @@
     <value>..\Resources\LargeIcons.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
   </data>
-  <data name="List" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\List.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  <data name="VS2008ImageLibrary_Objects_Install" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\VS2008ImageLibrary_Objects_Install1.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
   </data>
-  <data name="Logo_white" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\Logo_white.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  <data name="VS2008ImageLibrary_Objects_Internet" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\VS2008ImageLibrary_Objects_Internet1.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="VS2008ImageLibrary_Objects_NetworkConnections" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\VS2008ImageLibrary_Objects_NetworkConnections.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
   </data>
 </root>
Index: /trunk/sources/HeuristicLab.PluginInfrastructure/Properties/Settings.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginInfrastructure/Properties/Settings.Designer.cs	(revision 3507)
+++ /trunk/sources/HeuristicLab.PluginInfrastructure/Properties/Settings.Designer.cs	(revision 3508)
@@ -89,4 +89,16 @@
             }
         }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("True")]
+        public bool ShowPluginUploadControls {
+            get {
+                return ((bool)(this["ShowPluginUploadControls"]));
+            }
+            set {
+                this["ShowPluginUploadControls"] = value;
+            }
+        }
     }
 }
Index: /trunk/sources/HeuristicLab.PluginInfrastructure/Properties/Settings.settings
===================================================================
--- /trunk/sources/HeuristicLab.PluginInfrastructure/Properties/Settings.settings	(revision 3507)
+++ /trunk/sources/HeuristicLab.PluginInfrastructure/Properties/Settings.settings	(revision 3508)
@@ -21,4 +21,7 @@
       <Value Profile="(Default)">http://servdev.heuristiclab.com/Deployment-3.3/Admin.svc</Value>
     </Setting>
+    <Setting Name="ShowPluginUploadControls" Type="System.Boolean" Scope="User">
+      <Value Profile="(Default)">True</Value>
+    </Setting>
   </Settings>
 </SettingsFile>
Index: /trunk/sources/HeuristicLab.PluginInfrastructure/app.config
===================================================================
--- /trunk/sources/HeuristicLab.PluginInfrastructure/app.config	(revision 3507)
+++ /trunk/sources/HeuristicLab.PluginInfrastructure/app.config	(revision 3508)
@@ -98,4 +98,7 @@
                 <value>http://servdev.heuristiclab.com/Deployment-3.3/Admin.svc</value>
             </setting>
+            <setting name="ShowPluginUploadControls" serializeAs="String">
+                <value>True</value>
+            </setting>
         </HeuristicLab.PluginInfrastructure.Properties.Settings>
     </userSettings>
