Index: /trunk/sources/HeuristicLab.PluginInfrastructure/3.3/CommandLineArgumentHandling/Arguments/HideStarterArgument.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginInfrastructure/3.3/CommandLineArgumentHandling/Arguments/HideStarterArgument.cs	(revision 8748)
+++ /trunk/sources/HeuristicLab.PluginInfrastructure/3.3/CommandLineArgumentHandling/Arguments/HideStarterArgument.cs	(revision 8748)
@@ -0,0 +1,34 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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
+
+namespace HeuristicLab.PluginInfrastructure {
+  public class HideStarterArgument : CommandLineArgument<bool> {
+    public const string TOKEN = "hideStarter";
+
+    public HideStarterArgument(string value) {
+      Value = string.IsNullOrEmpty(value);
+    }
+
+    protected override bool CheckValidity() {
+      return Value;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.PluginInfrastructure/3.3/CommandLineArgumentHandling/Arguments/StartArgument.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginInfrastructure/3.3/CommandLineArgumentHandling/Arguments/StartArgument.cs	(revision 8748)
+++ /trunk/sources/HeuristicLab.PluginInfrastructure/3.3/CommandLineArgumentHandling/Arguments/StartArgument.cs	(revision 8748)
@@ -0,0 +1,34 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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
+
+namespace HeuristicLab.PluginInfrastructure {
+  public class StartArgument : CommandLineArgument<string> {
+    public const string TOKEN = "start";
+
+    public StartArgument(string value) {
+      Value = value;
+    }
+
+    protected override bool CheckValidity() {
+      return !string.IsNullOrEmpty(Value) && !string.IsNullOrWhiteSpace(Value);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.PluginInfrastructure/3.3/CommandLineArgumentHandling/CommandLineArgument.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginInfrastructure/3.3/CommandLineArgumentHandling/CommandLineArgument.cs	(revision 8748)
+++ /trunk/sources/HeuristicLab.PluginInfrastructure/3.3/CommandLineArgumentHandling/CommandLineArgument.cs	(revision 8748)
@@ -0,0 +1,40 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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
+
+namespace HeuristicLab.PluginInfrastructure {
+  public abstract class CommandLineArgument<T> : ICommandLineArgument<T> {
+    object ICommandLineArgument.Value { get { return Value; } }
+    public T Value { get; protected set; }
+    public bool Valid { get { return CheckValidity(); } }
+
+    public override bool Equals(object obj) {
+      if (obj == null || this.GetType() != obj.GetType()) return false;
+      var other = (ICommandLineArgument<T>)obj;
+      return this.Value.Equals(other.Value);
+    }
+
+    public override int GetHashCode() {
+      return GetType().GetHashCode() ^ Value.GetHashCode();
+    }
+
+    protected abstract bool CheckValidity();
+  }
+}
Index: /trunk/sources/HeuristicLab.PluginInfrastructure/3.3/CommandLineArgumentHandling/CommandLineArgumentHandling.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginInfrastructure/3.3/CommandLineArgumentHandling/CommandLineArgumentHandling.cs	(revision 8748)
+++ /trunk/sources/HeuristicLab.PluginInfrastructure/3.3/CommandLineArgumentHandling/CommandLineArgumentHandling.cs	(revision 8748)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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.RegularExpressions;
+
+namespace HeuristicLab.PluginInfrastructure {
+  public static class CommandLineArgumentHandling {
+    public static ICommandLineArgument[] GetArguments(string[] args) {
+      var arguments = new HashSet<ICommandLineArgument>();
+      var exceptions = new List<Exception>();
+
+      foreach (var entry in args) {
+        var argument = ParseArgument(entry);
+        if (argument != null && argument.Valid) arguments.Add(argument);
+        else exceptions.Add(new ArgumentException(string.Format("The argument \"{0}\" is invalid.", entry)));
+      }
+
+      if (exceptions.Any()) throw new AggregateException("One or more arguments are invalid.", exceptions);
+      return arguments.ToArray();
+    }
+
+    private static ICommandLineArgument ParseArgument(string entry) {
+      var regex = new Regex(@"^/[A-Za-z]+(:[A-Za-z0-9\s]+)?$");
+      if (!regex.IsMatch(entry)) return null;
+      entry = entry.Remove(0, 1);
+      var parts = entry.Split(':');
+      string key = parts[0].Trim();
+      string value = parts.Length == 2 ? parts[1].Trim() : string.Empty;
+      switch (key) {
+        case StartArgument.TOKEN: return new StartArgument(value);
+        case HideStarterArgument.TOKEN: return new HideStarterArgument(value);
+        default: return null;
+      }
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.PluginInfrastructure/3.3/CommandLineArgumentHandling/ICommandLineArgument.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginInfrastructure/3.3/CommandLineArgumentHandling/ICommandLineArgument.cs	(revision 8748)
+++ /trunk/sources/HeuristicLab.PluginInfrastructure/3.3/CommandLineArgumentHandling/ICommandLineArgument.cs	(revision 8748)
@@ -0,0 +1,31 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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
+
+namespace HeuristicLab.PluginInfrastructure {
+  public interface ICommandLineArgument {
+    object Value { get; }
+    bool Valid { get; }
+  }
+
+  public interface ICommandLineArgument<out T> : ICommandLineArgument {
+    new T Value { get; }
+  }
+}
Index: /trunk/sources/HeuristicLab.PluginInfrastructure/3.3/HeuristicLab.PluginInfrastructure-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.PluginInfrastructure/3.3/HeuristicLab.PluginInfrastructure-3.3.csproj	(revision 8747)
+++ /trunk/sources/HeuristicLab.PluginInfrastructure/3.3/HeuristicLab.PluginInfrastructure-3.3.csproj	(revision 8748)
@@ -215,7 +215,9 @@
       <DependentUpon>PluginView.cs</DependentUpon>
     </Compile>
-    <Compile Include="ArgumentHandling\ArgumentHandling.cs" />
-    <Compile Include="ArgumentHandling\Arguments.cs" />
-    <Compile Include="ArgumentHandling\IArgument.cs" />
+    <Compile Include="CommandLineArgumentHandling\Arguments\HideStarterArgument.cs" />
+    <Compile Include="CommandLineArgumentHandling\Arguments\StartArgument.cs" />
+    <Compile Include="CommandLineArgumentHandling\CommandLineArgument.cs" />
+    <Compile Include="CommandLineArgumentHandling\CommandLineArgumentHandling.cs" />
+    <Compile Include="CommandLineArgumentHandling\ICommandLineArgument.cs" />
     <Compile Include="Attributes\ApplicationAttribute.cs" />
     <Compile Include="Attributes\ContactInformationAttribute.cs" />
Index: /trunk/sources/HeuristicLab.PluginInfrastructure/3.3/Starter/StarterForm.Designer.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginInfrastructure/3.3/Starter/StarterForm.Designer.cs	(revision 8747)
+++ /trunk/sources/HeuristicLab.PluginInfrastructure/3.3/Starter/StarterForm.Designer.cs	(revision 8748)
@@ -182,5 +182,5 @@
       this.Text = "HeuristicLab Starter";
       this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.StarterForm_FormClosing);
-      this.Shown += new System.EventHandler(this.StarterForm_Shown);
+      this.Load += new System.EventHandler(this.StarterForm_Load);
       this.ResumeLayout(false);
 
Index: /trunk/sources/HeuristicLab.PluginInfrastructure/3.3/Starter/StarterForm.cs
===================================================================
--- /trunk/sources/HeuristicLab.PluginInfrastructure/3.3/Starter/StarterForm.cs	(revision 8747)
+++ /trunk/sources/HeuristicLab.PluginInfrastructure/3.3/Starter/StarterForm.cs	(revision 8748)
@@ -40,4 +40,5 @@
     private const string updatePluginsItemName = "Updates Available";
 
+    private readonly ICommandLineArgument[] arguments;
 
     private ListViewItem pluginManagerListViewItem;
@@ -46,5 +47,4 @@
     private SplashScreen splashScreen;
     private bool updatesAvailable = false;
-    private string[] arguments;
 
     /// <summary>
@@ -65,4 +65,5 @@
       pluginManager = new PluginManager(pluginPath);
       splashScreen = new SplashScreen(pluginManager, 1000);
+      splashScreen.VisibleChanged += new EventHandler(splashScreen_VisibleChanged);
       splashScreen.Show(this, "Loading HeuristicLab...");
 
@@ -71,4 +72,154 @@
 
       CheckUpdatesAvailableAsync();
+    }
+
+    /// <summary>
+    /// Creates a new StarterForm and passes the arguments in <paramref name="args"/>.
+    /// </summary>
+    /// <param name="args">The arguments that should be processed</param>
+    public StarterForm(string[] args)
+      : this() {
+      arguments = CommandLineArgumentHandling.GetArguments(args);
+    }
+
+    protected override void SetVisibleCore(bool value) {
+      value &= !arguments.OfType<HideStarterArgument>().Any();
+      if (!value) HandleArguments();
+      base.SetVisibleCore(value);
+    }
+
+    #region Events
+    private void StarterForm_Load(object sender, EventArgs e) {
+      HandleArguments();
+    }
+
+    private void StarterForm_FormClosing(object sender, FormClosingEventArgs e) {
+      splashScreen.Close();
+      abortRequested = true;
+    }
+
+    private void applicationsListView_SelectedIndexChanged(object sender, EventArgs e) {
+      startButton.Enabled = applicationsListView.SelectedItems.Count > 0;
+    }
+
+    private void applicationsListView_ItemActivate(object sender, EventArgs e) {
+      if (applicationsListView.SelectedItems.Count > 0) {
+        ListViewItem selected = applicationsListView.SelectedItems[0];
+        if (selected.Text == pluginManagerItemName) {
+          if (pluginManager.Plugins.Any(x => x.PluginState == PluginState.Loaded)) {
+            MessageBox.Show("Installation Manager cannot be started while another HeuristicLab application is active." + Environment.NewLine +
+              "Please stop all active HeuristicLab applications and try again.", "Plugin Manager",
+              MessageBoxButtons.OK, MessageBoxIcon.Information);
+          } else {
+            try {
+              Cursor = Cursors.AppStarting;
+              using (InstallationManagerForm form = new InstallationManagerForm(pluginManager)) {
+                form.ShowDialog(this);
+              }
+              UpdateApplicationsList();
+            }
+            finally {
+              Cursor = Cursors.Arrow;
+            }
+          }
+        } else if (selected.Text == updatePluginsItemName) {
+          if (pluginManager.Plugins.Any(x => x.PluginState == PluginState.Loaded)) {
+            MessageBox.Show("Updating is not possible while another HeuristicLab application is active." + Environment.NewLine +
+              "Please stop all active HeuristicLab applications and try again.", "Update plugins",
+              MessageBoxButtons.OK, MessageBoxIcon.Information);
+          } else {
+            try {
+              Cursor = Cursors.AppStarting;
+              using (PluginUpdaterForm form = new PluginUpdaterForm(pluginManager)) {
+                form.ShowDialog(this);
+              }
+              updatesAvailable = false;
+              CheckUpdatesAvailableAsync();
+              UpdateApplicationsList();
+            }
+            finally {
+              Cursor = Cursors.Arrow;
+            }
+          }
+        } else {
+          ApplicationDescription app = (ApplicationDescription)applicationsListView.SelectedItems[0].Tag;
+          StartApplication(app);
+        }
+      }
+    }
+
+    private void largeIconsButton_Click(object sender, EventArgs e) {
+      applicationsListView.View = View.LargeIcon;
+    }
+
+    private void detailsButton_Click(object sender, EventArgs e) {
+      applicationsListView.View = View.Details;
+      foreach (ColumnHeader column in applicationsListView.Columns) {
+        if (applicationsListView.Items.Count > 0)
+          column.AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
+        else column.AutoResize(ColumnHeaderAutoResizeStyle.HeaderSize);
+      }
+    }
+
+    private void aboutButton_Click(object sender, EventArgs e) {
+      List<IPluginDescription> plugins = new List<IPluginDescription>(pluginManager.Plugins.OfType<IPluginDescription>());
+      using (var dialog = new AboutDialog(plugins)) {
+        dialog.ShowDialog();
+      }
+    }
+
+    private void splashScreen_VisibleChanged(object sender, EventArgs e) {
+      // close hidden starter form
+      if (!splashScreen.Visible && arguments != null && arguments.OfType<HideStarterArgument>().Any())
+        Close();
+    }
+    #endregion
+
+    #region Helpers
+    private void UpdateApplicationsList() {
+      if (InvokeRequired) Invoke((Action)UpdateApplicationsList);
+      else {
+        applicationsListView.Items.Clear();
+        AddPluginManagerItem();
+        AddUpdatePluginsItem();
+
+        foreach (ApplicationDescription info in pluginManager.Applications) {
+          ListViewItem item = new ListViewItem(info.Name, 0);
+          item.Tag = info;
+          item.Group = applicationsListView.Groups["Applications"];
+          item.SubItems.Add(new ListViewItem.ListViewSubItem(item, info.Version.ToString()));
+          item.SubItems.Add(new ListViewItem.ListViewSubItem(item, info.Description));
+          item.ToolTipText = info.Description;
+          applicationsListView.Items.Add(item);
+        }
+        foreach (ColumnHeader column in applicationsListView.Columns) {
+          if (applicationsListView.Items.Count > 0)
+            column.AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
+          else column.AutoResize(ColumnHeaderAutoResizeStyle.HeaderSize);
+        }
+      }
+    }
+
+    private void AddPluginManagerItem() {
+      FileVersionInfo pluginInfrastructureVersion = FileVersionInfo.GetVersionInfo(GetType().Assembly.Location);
+      pluginManagerListViewItem = new ListViewItem(pluginManagerItemName, 0);
+      pluginManagerListViewItem.Group = applicationsListView.Groups["Plugin Management"];
+      pluginManagerListViewItem.SubItems.Add(new ListViewItem.ListViewSubItem(pluginManagerListViewItem, pluginInfrastructureVersion.FileVersion));
+      pluginManagerListViewItem.SubItems.Add(new ListViewItem.ListViewSubItem(pluginManagerListViewItem, "Install, upgrade or delete plugins"));
+      pluginManagerListViewItem.ToolTipText = "Install, upgrade or delete plugins";
+
+      applicationsListView.Items.Add(pluginManagerListViewItem);
+    }
+
+    private void AddUpdatePluginsItem() {
+      if (updatesAvailable) {
+        var updateListViewItem = new ListViewItem(updatePluginsItemName, 1);
+        updateListViewItem.Group = applicationsListView.Groups["Plugin Management"];
+        updateListViewItem.SubItems.Add(new ListViewItem.ListViewSubItem(updateListViewItem, ""));
+        updateListViewItem.SubItems.Add(new ListViewItem.ListViewSubItem(updateListViewItem, "Download and install updates"));
+        updateListViewItem.ToolTipText = "Download and install updates";
+
+        applicationsListView.Items.Add(updateListViewItem);
+      }
     }
 
@@ -110,19 +261,10 @@
     }
 
-    /// <summary>
-    /// Creates a new StarterForm and passes the arguments in <paramref name="args"/>.
-    /// </summary>
-    /// <param name="args">The arguments that should be processed</param>
-    public StarterForm(string[] args)
-      : this() {
-      this.arguments = args;
-    }
-
-    private void StarterForm_Shown(object sender, EventArgs e) {
+    private void HandleArguments() {
       try {
-        foreach (var argument in ArgumentHandling.GetArguments(arguments)) {
-          if (argument.Token == Argument.START) {
+        foreach (var argument in arguments) {
+          if (argument is StartArgument) {
             var appDesc = (from desc in pluginManager.Applications
-                           where desc.Name == argument.Value
+                           where desc.Name.Equals(argument.Value)
                            select desc).SingleOrDefault();
             if (appDesc != null) {
@@ -142,97 +284,4 @@
     }
 
-    private void applicationsListView_ItemActivate(object sender, EventArgs e) {
-      if (applicationsListView.SelectedItems.Count > 0) {
-        ListViewItem selected = applicationsListView.SelectedItems[0];
-        if (selected.Text == pluginManagerItemName) {
-          if (pluginManager.Plugins.Any(x => x.PluginState == PluginState.Loaded)) {
-            MessageBox.Show("Installation Manager cannot be started while another HeuristicLab application is active." + Environment.NewLine +
-              "Please stop all active HeuristicLab applications and try again.", "Plugin Manager",
-              MessageBoxButtons.OK, MessageBoxIcon.Information);
-          } else {
-            try {
-              Cursor = Cursors.AppStarting;
-              using (InstallationManagerForm form = new InstallationManagerForm(pluginManager)) {
-                form.ShowDialog(this);
-              }
-              UpdateApplicationsList();
-            }
-            finally {
-              Cursor = Cursors.Arrow;
-            }
-          }
-        } else if (selected.Text == updatePluginsItemName) {
-          if (pluginManager.Plugins.Any(x => x.PluginState == PluginState.Loaded)) {
-            MessageBox.Show("Updating is not possible while another HeuristicLab application is active." + Environment.NewLine +
-              "Please stop all active HeuristicLab applications and try again.", "Update plugins",
-              MessageBoxButtons.OK, MessageBoxIcon.Information);
-          } else {
-            try {
-              Cursor = Cursors.AppStarting;
-              using (PluginUpdaterForm form = new PluginUpdaterForm(pluginManager)) {
-                form.ShowDialog(this);
-              }
-              updatesAvailable = false;
-              CheckUpdatesAvailableAsync();
-              UpdateApplicationsList();
-            }
-            finally {
-              Cursor = Cursors.Arrow;
-            }
-          }
-        } else {
-          ApplicationDescription app = (ApplicationDescription)applicationsListView.SelectedItems[0].Tag;
-          StartApplication(app);
-        }
-      }
-    }
-
-    private void UpdateApplicationsList() {
-      if (InvokeRequired) Invoke((Action)UpdateApplicationsList);
-      else {
-        applicationsListView.Items.Clear();
-        AddPluginManagerItem();
-        AddUpdatePluginsItem();
-
-        foreach (ApplicationDescription info in pluginManager.Applications) {
-          ListViewItem item = new ListViewItem(info.Name, 0);
-          item.Tag = info;
-          item.Group = applicationsListView.Groups["Applications"];
-          item.SubItems.Add(new ListViewItem.ListViewSubItem(item, info.Version.ToString()));
-          item.SubItems.Add(new ListViewItem.ListViewSubItem(item, info.Description));
-          item.ToolTipText = info.Description;
-          applicationsListView.Items.Add(item);
-        }
-        foreach (ColumnHeader column in applicationsListView.Columns) {
-          if (applicationsListView.Items.Count > 0)
-            column.AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
-          else column.AutoResize(ColumnHeaderAutoResizeStyle.HeaderSize);
-        }
-      }
-    }
-
-    private void AddPluginManagerItem() {
-      FileVersionInfo pluginInfrastructureVersion = FileVersionInfo.GetVersionInfo(GetType().Assembly.Location);
-      pluginManagerListViewItem = new ListViewItem(pluginManagerItemName, 0);
-      pluginManagerListViewItem.Group = applicationsListView.Groups["Plugin Management"];
-      pluginManagerListViewItem.SubItems.Add(new ListViewItem.ListViewSubItem(pluginManagerListViewItem, pluginInfrastructureVersion.FileVersion));
-      pluginManagerListViewItem.SubItems.Add(new ListViewItem.ListViewSubItem(pluginManagerListViewItem, "Install, upgrade or delete plugins"));
-      pluginManagerListViewItem.ToolTipText = "Install, upgrade or delete plugins";
-
-      applicationsListView.Items.Add(pluginManagerListViewItem);
-    }
-
-    private void AddUpdatePluginsItem() {
-      if (updatesAvailable) {
-        var updateListViewItem = new ListViewItem(updatePluginsItemName, 1);
-        updateListViewItem.Group = applicationsListView.Groups["Plugin Management"];
-        updateListViewItem.SubItems.Add(new ListViewItem.ListViewSubItem(updateListViewItem, ""));
-        updateListViewItem.SubItems.Add(new ListViewItem.ListViewSubItem(updateListViewItem, "Download and install updates"));
-        updateListViewItem.ToolTipText = "Download and install updates";
-
-        applicationsListView.Items.Add(updateListViewItem);
-      }
-    }
-
     private void StartApplication(ApplicationDescription app) {
       splashScreen.Show("Loading " + app.Name);
@@ -256,33 +305,5 @@
       t.Start();
     }
-
-    private void applicationsListView_SelectedIndexChanged(object sender, EventArgs e) {
-      startButton.Enabled = applicationsListView.SelectedItems.Count > 0;
-    }
-
-    private void largeIconsButton_Click(object sender, EventArgs e) {
-      applicationsListView.View = View.LargeIcon;
-    }
-
-    private void detailsButton_Click(object sender, EventArgs e) {
-      applicationsListView.View = View.Details;
-      foreach (ColumnHeader column in applicationsListView.Columns) {
-        if (applicationsListView.Items.Count > 0)
-          column.AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
-        else column.AutoResize(ColumnHeaderAutoResizeStyle.HeaderSize);
-      }
-    }
-
-    private void StarterForm_FormClosing(object sender, FormClosingEventArgs e) {
-      splashScreen.Close();
-      abortRequested = true;
-    }
-
-    private void aboutButton_Click(object sender, EventArgs e) {
-      List<IPluginDescription> plugins = new List<IPluginDescription>(pluginManager.Plugins.OfType<IPluginDescription>());
-      using (var dialog = new AboutDialog(plugins)) {
-        dialog.ShowDialog();
-      }
-    }
+    #endregion
   }
 }
