Index: trunk/sources/HeuristicLab.PluginInfrastructure/3.3/BaseClasses/ApplicationBase.cs
===================================================================
--- trunk/sources/HeuristicLab.PluginInfrastructure/3.3/BaseClasses/ApplicationBase.cs	(revision 8816)
+++ trunk/sources/HeuristicLab.PluginInfrastructure/3.3/BaseClasses/ApplicationBase.cs	(revision 8818)
@@ -67,5 +67,5 @@
     /// Runs the application.
     /// </summary>
-    public abstract void Run();
+    public abstract void Run(ICommandLineArgument[] args);
 
     #endregion
Index: trunk/sources/HeuristicLab.PluginInfrastructure/3.3/CommandLineArgumentHandling/Arguments/HideStarterArgument.cs
===================================================================
--- trunk/sources/HeuristicLab.PluginInfrastructure/3.3/CommandLineArgumentHandling/Arguments/HideStarterArgument.cs	(revision 8816)
+++ trunk/sources/HeuristicLab.PluginInfrastructure/3.3/CommandLineArgumentHandling/Arguments/HideStarterArgument.cs	(revision 8818)
@@ -20,5 +20,8 @@
 #endregion
 
+using System;
+
 namespace HeuristicLab.PluginInfrastructure {
+  [Serializable]
   public class HideStarterArgument : CommandLineArgument<bool> {
     public const string TOKEN = "hideStarter";
Index: trunk/sources/HeuristicLab.PluginInfrastructure/3.3/CommandLineArgumentHandling/Arguments/OpenArgument.cs
===================================================================
--- trunk/sources/HeuristicLab.PluginInfrastructure/3.3/CommandLineArgumentHandling/Arguments/OpenArgument.cs	(revision 8818)
+++ trunk/sources/HeuristicLab.PluginInfrastructure/3.3/CommandLineArgumentHandling/Arguments/OpenArgument.cs	(revision 8818)
@@ -0,0 +1,36 @@
+﻿#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.IO;
+
+namespace HeuristicLab.PluginInfrastructure {
+  [Serializable]
+  public class OpenArgument : CommandLineArgument<string> {
+    public OpenArgument(string value) {
+      Value = value;
+    }
+
+    protected override bool CheckValidity() {
+      return File.Exists(Value);
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.PluginInfrastructure/3.3/CommandLineArgumentHandling/Arguments/StartArgument.cs
===================================================================
--- trunk/sources/HeuristicLab.PluginInfrastructure/3.3/CommandLineArgumentHandling/Arguments/StartArgument.cs	(revision 8816)
+++ trunk/sources/HeuristicLab.PluginInfrastructure/3.3/CommandLineArgumentHandling/Arguments/StartArgument.cs	(revision 8818)
@@ -20,5 +20,8 @@
 #endregion
 
+using System;
+
 namespace HeuristicLab.PluginInfrastructure {
+  [Serializable]
   public class StartArgument : CommandLineArgument<string> {
     public const string TOKEN = "start";
Index: trunk/sources/HeuristicLab.PluginInfrastructure/3.3/CommandLineArgumentHandling/CommandLineArgument.cs
===================================================================
--- trunk/sources/HeuristicLab.PluginInfrastructure/3.3/CommandLineArgumentHandling/CommandLineArgument.cs	(revision 8816)
+++ trunk/sources/HeuristicLab.PluginInfrastructure/3.3/CommandLineArgumentHandling/CommandLineArgument.cs	(revision 8818)
@@ -20,5 +20,8 @@
 #endregion
 
+using System;
+
 namespace HeuristicLab.PluginInfrastructure {
+  [Serializable]
   public abstract class CommandLineArgument<T> : ICommandLineArgument<T> {
     object ICommandLineArgument.Value { get { return Value; } }
Index: trunk/sources/HeuristicLab.PluginInfrastructure/3.3/CommandLineArgumentHandling/CommandLineArgumentHandling.cs
===================================================================
--- trunk/sources/HeuristicLab.PluginInfrastructure/3.3/CommandLineArgumentHandling/CommandLineArgumentHandling.cs	(revision 8816)
+++ trunk/sources/HeuristicLab.PluginInfrastructure/3.3/CommandLineArgumentHandling/CommandLineArgumentHandling.cs	(revision 8818)
@@ -22,4 +22,5 @@
 using System;
 using System.Collections.Generic;
+using System.IO;
 using System.Linq;
 using System.Text.RegularExpressions;
@@ -43,14 +44,17 @@
     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;
-      }
+      bool isFile = File.Exists(entry);
+      if (!regex.IsMatch(entry) && !isFile) return null;
+      if (!isFile) {
+        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;
+        }
+      } else return new OpenArgument(entry);
     }
   }
Index: trunk/sources/HeuristicLab.PluginInfrastructure/3.3/HeuristicLab.PluginInfrastructure-3.3.csproj
===================================================================
--- trunk/sources/HeuristicLab.PluginInfrastructure/3.3/HeuristicLab.PluginInfrastructure-3.3.csproj	(revision 8816)
+++ trunk/sources/HeuristicLab.PluginInfrastructure/3.3/HeuristicLab.PluginInfrastructure-3.3.csproj	(revision 8818)
@@ -215,4 +215,5 @@
       <DependentUpon>PluginView.cs</DependentUpon>
     </Compile>
+    <Compile Include="CommandLineArgumentHandling\Arguments\OpenArgument.cs" />
     <Compile Include="CommandLineArgumentHandling\Arguments\HideStarterArgument.cs" />
     <Compile Include="CommandLineArgumentHandling\Arguments\StartArgument.cs" />
Index: trunk/sources/HeuristicLab.PluginInfrastructure/3.3/Interfaces/IApplication.cs
===================================================================
--- trunk/sources/HeuristicLab.PluginInfrastructure/3.3/Interfaces/IApplication.cs	(revision 8816)
+++ trunk/sources/HeuristicLab.PluginInfrastructure/3.3/Interfaces/IApplication.cs	(revision 8818)
@@ -37,5 +37,5 @@
     /// Main entry point for the application.
     /// </summary>
-    void Run();
+    void Run(ICommandLineArgument[] args);
   }
 }
Index: trunk/sources/HeuristicLab.PluginInfrastructure/3.3/Manager/PluginManager.cs
===================================================================
--- trunk/sources/HeuristicLab.PluginInfrastructure/3.3/Manager/PluginManager.cs	(revision 8816)
+++ trunk/sources/HeuristicLab.PluginInfrastructure/3.3/Manager/PluginManager.cs	(revision 8818)
@@ -110,5 +110,5 @@
     /// </summary>
     /// <param name="appInfo">application to run</param>
-    public void Run(ApplicationDescription appInfo) {
+    public void Run(ApplicationDescription appInfo, ICommandLineArgument[] args) {
       if (!initialized) throw new InvalidOperationException("PluginManager is not initialized. DiscoverAndCheckPlugins() must be called before Run()");
       // create a separate AppDomain for the application
@@ -129,5 +129,5 @@
         applicationManager.PrepareApplicationDomain(applications, plugins);
         OnApplicationStarted(new PluginInfrastructureEventArgs(appInfo));
-        applicationManager.Run(appInfo);
+        applicationManager.Run(appInfo, args);
       }
       finally {
Index: trunk/sources/HeuristicLab.PluginInfrastructure/3.3/SandboxApplicationManager.cs
===================================================================
--- trunk/sources/HeuristicLab.PluginInfrastructure/3.3/SandboxApplicationManager.cs	(revision 8816)
+++ trunk/sources/HeuristicLab.PluginInfrastructure/3.3/SandboxApplicationManager.cs	(revision 8818)
@@ -115,8 +115,8 @@
     /// </summary>
     /// <param name="appInfo">Description of the application to run</param>
-    internal void Run(ApplicationDescription appInfo) {
+    internal void Run(ApplicationDescription appInfo, ICommandLineArgument[] args) {
       IApplication runnablePlugin = (IApplication)Activator.CreateInstance(appInfo.DeclaringAssemblyName, appInfo.DeclaringTypeName).Unwrap();
       try {
-        runnablePlugin.Run();
+        runnablePlugin.Run(args);
       }
       finally {
Index: trunk/sources/HeuristicLab.PluginInfrastructure/3.3/Starter/StarterForm.cs
===================================================================
--- trunk/sources/HeuristicLab.PluginInfrastructure/3.3/Starter/StarterForm.cs	(revision 8816)
+++ trunk/sources/HeuristicLab.PluginInfrastructure/3.3/Starter/StarterForm.cs	(revision 8818)
@@ -39,4 +39,5 @@
     private const string pluginManagerItemName = "Plugin Manager";
     private const string updatePluginsItemName = "Updates Available";
+    private const string optimizerItemName = "Optimizer";
 
     private readonly ICommandLineArgument[] arguments;
@@ -84,5 +85,5 @@
 
     protected override void SetVisibleCore(bool value) {
-      value &= !arguments.OfType<HideStarterArgument>().Any();
+      value &= !(arguments.OfType<HideStarterArgument>().Any() || arguments.OfType<OpenArgument>().Any());
       if (!value) HandleArguments();
       base.SetVisibleCore(value);
@@ -144,5 +145,5 @@
         } else {
           ApplicationDescription app = (ApplicationDescription)applicationsListView.SelectedItems[0].Tag;
-          StartApplication(app);
+          StartApplication(app, arguments);
         }
       }
@@ -171,5 +172,6 @@
     private void splashScreen_VisibleChanged(object sender, EventArgs e) {
       // close hidden starter form
-      if (!splashScreen.Visible && arguments != null && arguments.OfType<HideStarterArgument>().Any())
+      if (!splashScreen.Visible && arguments != null &&
+           (arguments.OfType<HideStarterArgument>().Any() || arguments.OfType<OpenArgument>().Any()))
         Close();
     }
@@ -263,17 +265,11 @@
     private void HandleArguments() {
       try {
+        if (arguments.OfType<OpenArgument>().Any() && !arguments.OfType<StartArgument>().Any()) {
+          InitiateApplicationStart(optimizerItemName);
+        }
         foreach (var argument in arguments) {
           if (argument is StartArgument) {
-            var appDesc = (from desc in pluginManager.Applications
-                           where desc.Name.Equals(argument.Value)
-                           select desc).SingleOrDefault();
-            if (appDesc != null) {
-              StartApplication(appDesc);
-            } else {
-              MessageBox.Show("Cannot start application " + argument.Value + ".",
-                              "HeuristicLab",
-                              MessageBoxButtons.OK,
-                              MessageBoxIcon.Warning);
-            }
+            var arg = (StartArgument)argument;
+            InitiateApplicationStart(arg.Value);
           }
         }
@@ -284,5 +280,19 @@
     }
 
-    private void StartApplication(ApplicationDescription app) {
+    private void InitiateApplicationStart(string appName) {
+      var appDesc = (from desc in pluginManager.Applications
+                     where desc.Name.Equals(appName)
+                     select desc).SingleOrDefault();
+      if (appDesc != null) {
+        StartApplication(appDesc, arguments);
+      } else {
+        MessageBox.Show("Cannot start application " + appName + ".",
+                        "HeuristicLab",
+                        MessageBoxButtons.OK,
+                        MessageBoxIcon.Warning);
+      }
+    }
+
+    private void StartApplication(ApplicationDescription app, ICommandLineArgument[] args) {
       splashScreen.Show("Loading " + app.Name);
       Thread t = new Thread(delegate() {
@@ -291,5 +301,5 @@
           try {
             if (!abortRequested) {
-              pluginManager.Run(app);
+              pluginManager.Run(app, args);
             }
             stopped = true;
