Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.App/HeuristicLab.JsonInterface.App.csproj
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.App/HeuristicLab.JsonInterface.App.csproj	(revision 17441)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.App/HeuristicLab.JsonInterface.App.csproj	(revision 17442)
@@ -38,4 +38,7 @@
   </PropertyGroup>
   <ItemGroup>
+    <Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
+      <HintPath>..\packages\Newtonsoft.Json.12.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
+    </Reference>
     <Reference Include="System" />
     <Reference Include="System.Core" />
@@ -49,4 +52,5 @@
   <ItemGroup>
     <None Include="HeuristicLab.snk" />
+    <None Include="packages.config" />
     <None Include="Plugin.cs.frame" />
     <Compile Include="Runner.cs" />
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.App/Plugin.cs.frame
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.App/Plugin.cs.frame	(revision 17441)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.App/Plugin.cs.frame	(revision 17442)
@@ -38,6 +38,6 @@
   public class HeuristicLabJsonInterfaceAppApplication : ApplicationBase {
     public override void Run(ICommandLineArgument[] args) {
-      if(args.Length == 3 && args[1] is OpenArgument && args[2] is OpenArgument) {
-        Runner.Run(args[1].Value.ToString(), args[2].Value.ToString());
+      if(args.Length == 4 && args[1] is OpenArgument && args[2] is OpenArgument && (args[3] is StringArgument || args[3] is OpenArgument)) {
+        Runner.Run(args[1].Value.ToString(), args[2].Value.ToString(), args[3].Value.ToString());
       }
     }
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.App/Runner.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.App/Runner.cs	(revision 17441)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.App/Runner.cs	(revision 17442)
@@ -8,9 +8,10 @@
 using HeuristicLab.Optimization;
 using HeuristicLab.SequentialEngine;
+using Newtonsoft.Json.Linq;
 
 namespace HeuristicLab.JsonInterface.App {
   internal static class Runner {
-    internal static void Run(string template, string config, string outputFile = @"C:\Workspace\test.txt") {
-      IOptimizer optimizer = JsonTemplateInstantiator.Instantiate(template, config);
+    internal static void Run(string template, string config, string outputFile) {
+      IOptimizer optimizer = JsonTemplateInstantiator.Instantiate(template, config, out IEnumerable<string> allowedResultNames);
       if(optimizer is EngineAlgorithm e)
         e.Engine = new SequentialEngine.SequentialEngine();
@@ -18,22 +19,26 @@
       Task task = optimizer.StartAsync();
       while(!task.IsCompleted) {
-        WriteResultsToFile(outputFile, optimizer);
+        WriteResultsToFile(outputFile, optimizer, allowedResultNames);
         Thread.Sleep(100);
       }
-      WriteResultsToFile(outputFile, optimizer);
+      WriteResultsToFile(outputFile, optimizer, allowedResultNames);
     }
 
-    private static void WriteResultsToFile(string file, IOptimizer optimizer) =>
-      File.WriteAllText(file, FetchResults(optimizer));
+    private static void WriteResultsToFile(string file, IOptimizer optimizer, IEnumerable<string> allowedResultNames) =>
+      File.WriteAllText(file, FetchResults(optimizer, allowedResultNames));
 
-    private static string FetchResults(IOptimizer optimizer) {
-      StringBuilder sb = new StringBuilder();
+    private static string FetchResults(IOptimizer optimizer, IEnumerable<string> allowedResultNames) {
+      JArray arr = new JArray();
+      
       foreach (var run in optimizer.Runs) {
-        sb.AppendLine($"--- {run.ToString()} ---");
+        JObject obj = new JObject();
+        arr.Add(obj);
+        obj.Add("Run", JToken.FromObject(run.ToString()));
         foreach (var res in run.Results) {
-          sb.AppendLine($"{res.Key}: {res.Value}");
+          if (allowedResultNames.Contains(res.Key))
+            obj.Add(res.Key, JToken.FromObject(res.Value.ToString()));
         }
       }
-      return sb.ToString();
+      return SingleLineArrayJsonWriter.Serialize(arr);
     }
   }
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonTemplateInstantiator.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonTemplateInstantiator.cs	(revision 17441)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonTemplateInstantiator.cs	(revision 17442)
@@ -25,4 +25,13 @@
     }
 
+    public static IOptimizer Instantiate(string templateFile) =>
+      Instantiate(templateFile, null, out IEnumerable<string> allowedResultNames);
+
+
+    public static IOptimizer Instantiate(string templateFile, out IEnumerable<string> allowedResultNames) =>
+      Instantiate(templateFile, null, out allowedResultNames);
+
+   
+
     /// <summary>
     /// Instantiate an IAlgorithm object with a template and config.
@@ -31,5 +40,5 @@
     /// <param name="configFile">Config file (json) for the template.</param>
     /// <returns>confugrated IOptimizer object</returns>
-    public static IOptimizer Instantiate(string templateFile, string configFile = "") {
+    public static IOptimizer Instantiate(string templateFile, string configFile, out IEnumerable<string> allowedResultNames) {
       InstData instData = new InstData() {
         Objects = new Dictionary<string, IJsonItem>()
@@ -63,4 +72,6 @@
       JsonItemConverter.Inject(optimizer, optimizerData);
 
+      allowedResultNames = CollectResults(instData);
+
       return optimizer;
     }
@@ -70,4 +81,12 @@
     private static object GetValueFromJObject(JObject obj) =>
       obj[nameof(IJsonItem.Value)]?.ToObject<object>();
+
+    private static IEnumerable<string> CollectResults(InstData instData) {
+      IList<string> res = new List<string>();
+      foreach(JObject obj in instData.Template[Constants.Results]) {
+        res.Add(obj.Property("Name").Value.ToString());
+      }
+      return res;
+    }
 
     private static void CollectParameterizedItems(InstData instData) {
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/SingleLineArrayJsonWriter.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/SingleLineArrayJsonWriter.cs	(revision 17441)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/SingleLineArrayJsonWriter.cs	(revision 17442)
@@ -8,5 +8,5 @@
   /// It collapses arrays into a single line.
   /// </summary>
-  internal class SingleLineArrayJsonWriter : JsonTextWriter {
+  public class SingleLineArrayJsonWriter : JsonTextWriter {
     private bool isRangeArray = false;
     public override void WriteStartArray() {
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.PluginInfrastructure/3.3/CommandLineArgumentHandling/Arguments/StartArgument.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.PluginInfrastructure/3.3/CommandLineArgumentHandling/Arguments/StartArgument.cs	(revision 17441)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.PluginInfrastructure/3.3/CommandLineArgumentHandling/Arguments/StartArgument.cs	(revision 17442)
@@ -32,5 +32,5 @@
 
     protected override bool CheckValidity() {
-      return !string.IsNullOrEmpty(Value) && !string.IsNullOrWhiteSpace(Value);
+      return !string.IsNullOrWhiteSpace(Value);
     }
   }
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.PluginInfrastructure/3.3/CommandLineArgumentHandling/CommandLineArgumentHandling.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.PluginInfrastructure/3.3/CommandLineArgumentHandling/CommandLineArgumentHandling.cs	(revision 17441)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.PluginInfrastructure/3.3/CommandLineArgumentHandling/CommandLineArgumentHandling.cs	(revision 17442)
@@ -54,5 +54,5 @@
           case StartArgument.TOKEN: return new StartArgument(value);
           case HideStarterArgument.TOKEN: return new HideStarterArgument(value);
-          default: return null;
+          default: return new StringArgument(value);
         }
       } else return new OpenArgument(entry);
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.PluginInfrastructure/3.3/HeuristicLab.PluginInfrastructure-3.3.csproj
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.PluginInfrastructure/3.3/HeuristicLab.PluginInfrastructure-3.3.csproj	(revision 17441)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.PluginInfrastructure/3.3/HeuristicLab.PluginInfrastructure-3.3.csproj	(revision 17442)
@@ -223,4 +223,5 @@
     <Compile Include="CommandLineArgumentHandling\Arguments\HideStarterArgument.cs" />
     <Compile Include="CommandLineArgumentHandling\Arguments\StartArgument.cs" />
+    <Compile Include="CommandLineArgumentHandling\Arguments\StringArgument.cs" />
     <Compile Include="CommandLineArgumentHandling\CommandLineArgument.cs" />
     <Compile Include="CommandLineArgumentHandling\CommandLineArgumentHandling.cs" />
Index: /branches/3026_IntegrationIntoSymSpace/Heuristiclab.ConfigStarter/Program.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/Heuristiclab.ConfigStarter/Program.cs	(revision 17441)
+++ /branches/3026_IntegrationIntoSymSpace/Heuristiclab.ConfigStarter/Program.cs	(revision 17442)
@@ -53,4 +53,5 @@
       arguments.Add(new OpenArgument(@"C:\Workspace\Template.json"));
       arguments.Add(new OpenArgument(@"C:\Workspace\ConfigProto1.json"));
+      arguments.Add(new StringArgument(@"C:\Workspace\Output.json"));
 
       app.Run(arguments.ToArray());
