Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.App/Runner.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.App/Runner.cs	(revision 18045)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.App/Runner.cs	(revision 18046)
@@ -22,14 +22,14 @@
       Task task = optimizer.StartAsync();
       while (!task.IsCompleted) {
-        WriteResultsToFile(outputFile, optimizer, configuredResultItem);
+        WriteResultsToFile(outputFile, optimizer, configuredResultItem, instantiatorResult.PostProcessors);
         Thread.Sleep(100);
       }
 
-      WriteResultsToFile(outputFile, optimizer, configuredResultItem);
+      WriteResultsToFile(outputFile, optimizer, configuredResultItem, instantiatorResult.PostProcessors);
     }
 
-    private static void WriteResultsToFile(string file, IOptimizer optimizer, IEnumerable<IResultJsonItem> configuredResultItem) {
+    private static void WriteResultsToFile(string file, IOptimizer optimizer, IEnumerable<IResultJsonItem> configuredResultItem, IEnumerable<IResultCollectionPostProcessor> postProcessors) {
       if (optimizer.Runs.Count > 0) 
-        File.WriteAllText(file, FetchResults(optimizer, configuredResultItem));
+        File.WriteAllText(file, FetchResults(optimizer, configuredResultItem, postProcessors));
     }
       
@@ -41,5 +41,5 @@
       ResultFormatter?.Where(x => x.GetType().FullName == fullName).Last();
 
-    private static string FetchResults(IOptimizer optimizer, IEnumerable<IResultJsonItem> configuredResultItems) {
+    private static string FetchResults(IOptimizer optimizer, IEnumerable<IResultJsonItem> configuredResultItems, IEnumerable<IResultCollectionPostProcessor> postProcessors) {
       JArray arr = new JArray();
       IEnumerable<string> configuredResults = configuredResultItems.Select(x => x.Name);
@@ -66,4 +66,12 @@
             obj.Add(result.Item1.Name, formatter.Format(result.Item2));
         }
+
+        IDictionary<string, string> resultDict = new Dictionary<string, string>();
+        foreach (var processor in postProcessors) {
+          processor.Apply(run.Results, resultDict);
+        }
+        foreach(var kvp in resultDict) {
+          obj.Add(kvp.Key, kvp.Value);
+        }
       }
       return SingleLineArrayJsonWriter.Serialize(arr);
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ExportJsonDialog.Designer.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ExportJsonDialog.Designer.cs	(revision 18045)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ExportJsonDialog.Designer.cs	(revision 18046)
@@ -1,3 +1,5 @@
-﻿namespace HeuristicLab.JsonInterface.OptimizerIntegration {
+﻿using HeuristicLab.Core;
+
+namespace HeuristicLab.JsonInterface.OptimizerIntegration {
   partial class ExportJsonDialog {
     /// <summary>
@@ -38,4 +40,5 @@
       this.tabPage1 = new System.Windows.Forms.TabPage();
       this.tabPage2 = new System.Windows.Forms.TabPage();
+      this.tabPage3 = new System.Windows.Forms.TabPage();
       this.label1 = new System.Windows.Forms.Label();
       this.textBoxTemplateName = new System.Windows.Forms.TextBox();
@@ -172,4 +175,10 @@
       this.splitContainer2.SplitterDistance = 380;
       this.splitContainer2.TabIndex = 9;
+      // postProcessorListView
+      this.postProcessorListView = new Core.Views.CheckedItemListView<IResultCollectionPostProcessor>();
+      this.postProcessorListView.Content = new CheckedItemList<IResultCollectionPostProcessor>();
+      this.postProcessorListView.Content.Add(new SymRegPythonPostProcessor());
+      this.postProcessorListView.Location = new System.Drawing.Point(0, 6);
+      this.postProcessorListView.Dock = System.Windows.Forms.DockStyle.Fill;
       // 
       // tabControl1
@@ -180,4 +189,5 @@
       this.tabControl1.Controls.Add(this.tabPage1);
       this.tabControl1.Controls.Add(this.tabPage2);
+      this.tabControl1.Controls.Add(this.tabPage3);
       this.tabControl1.Location = new System.Drawing.Point(12, 38);
       this.tabControl1.Name = "tabControl1";
@@ -207,4 +217,14 @@
       this.tabPage2.Text = "Results";
       this.tabPage2.UseVisualStyleBackColor = true;
+      // 
+      // tabPage3
+      // 
+      this.tabPage3.Controls.Add(this.postProcessorListView);
+      this.tabPage3.Location = new System.Drawing.Point(4, 22);
+      this.tabPage3.Name = "tabPage3";
+      this.tabPage3.Size = new System.Drawing.Size(802, 505);
+      this.tabPage3.TabIndex = 2;
+      this.tabPage3.Text = "Post Processors";
+      this.tabPage3.UseVisualStyleBackColor = true;
       // 
       // label1
@@ -289,4 +309,6 @@
     private System.Windows.Forms.GroupBox groupBox;
     private System.Windows.Forms.Panel panelResultDetails;
+    private System.Windows.Forms.TabPage tabPage3;
+    private Core.Views.CheckedItemListView<IResultCollectionPostProcessor> postProcessorListView;
   }
 }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ExportJsonDialog.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ExportJsonDialog.cs	(revision 18045)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ExportJsonDialog.cs	(revision 18046)
@@ -4,6 +4,8 @@
 using System.Drawing;
 using System.IO;
+using System.Linq;
 using System.Windows.Forms;
 using HeuristicLab.Common;
+using HeuristicLab.Core;
 using HeuristicLab.Optimization;
 using HeuristicLab.PluginInfrastructure;
@@ -20,4 +22,5 @@
     private IOptimizer Optimizer { get; set; }
     private IList<IJsonItemVM> VMs { get; set; }
+    private ICheckedItemList<IResultCollectionPostProcessor> PostProcessors { get; set; }
     #endregion
 
@@ -27,5 +30,5 @@
       set {
         content = value;
-
+        //CheckedItemListView
         #region Clear
         VMs = new List<IJsonItemVM>();
@@ -33,5 +36,4 @@
         treeViewResults.Nodes.Clear();
         #endregion
-
         Optimizer = content as IOptimizer;
         if(Optimizer != null) {
@@ -59,4 +61,5 @@
     public ExportJsonDialog() {
       InitializeComponent();
+      this.PostProcessors = this.postProcessorListView.Content;
       this.Icon = HeuristicLab.Common.Resources.HeuristicLab.Icon;
       InitCache();
@@ -71,7 +74,9 @@
       if (FolderBrowserDialog.ShowDialog() == DialogResult.OK) {
         try {
+          //foreach(var x in PostProcessors.CheckedItems)
+            
           JsonTemplateGenerator.GenerateTemplate(
             Path.Combine(FolderBrowserDialog.SelectedPath, textBoxTemplateName.Text), 
-            Optimizer, Root);
+            Optimizer, Root, PostProcessors.CheckedItems.Select(x => x.Value));
           Close();
         } catch (Exception ex) {
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/HeuristicLab.JsonInterface.csproj
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/HeuristicLab.JsonInterface.csproj	(revision 18045)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/HeuristicLab.JsonInterface.csproj	(revision 18046)
@@ -53,4 +53,5 @@
     <Reference Include="System" />
     <Reference Include="System.Core" />
+    <Reference Include="System.Drawing" />
     <Reference Include="System.Xml.Linq" />
     <Reference Include="System.Data.DataSetExtensions" />
@@ -82,4 +83,5 @@
     <Compile Include="Interfaces\IValueJsonItem.cs" />
     <Compile Include="Interfaces\IValueLookupJsonItem.cs" />
+    <Compile Include="Interfaces\IResultCollectionPostProcessor.cs" />
     <Compile Include="JsonItems\ArrayJsonItem.cs" />
     <Compile Include="JsonItems\BoolJsonItems.cs" />
@@ -103,4 +105,5 @@
     <Compile Include="JsonItems\ValueJsonItem.cs" />
     <Compile Include="JsonItems\ValueLookupJsonItem.cs" />
+    <Compile Include="ResultCollectionPostProcessors\SymRegPythonPostProcessor.cs" />
     <Compile Include="ResultFormatters\MatlabResultFormatter.cs" />
     <Compile Include="ResultFormatters\PythonResultFormatter.cs" />
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Interfaces/IResultCollectionPostProcessor.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Interfaces/IResultCollectionPostProcessor.cs	(revision 18046)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Interfaces/IResultCollectionPostProcessor.cs	(revision 18046)
@@ -0,0 +1,15 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using HeuristicLab.Collections;
+using HeuristicLab.Core;
+using HeuristicLab.Optimization;
+
+namespace HeuristicLab.JsonInterface {
+  public interface IResultCollectionPostProcessor : IItem {
+    
+    void Apply(IObservableDictionary<string, IItem> /*ResultCollection*/ results, IDictionary<string, string> output); //evtl. doch JToken als Dict?
+  }
+}
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonTemplateGenerator.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonTemplateGenerator.cs	(revision 18045)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonTemplateGenerator.cs	(revision 18046)
@@ -5,4 +5,5 @@
 using System.IO;
 using HeuristicLab.Core;
+using System.Linq;
 
 namespace HeuristicLab.JsonInterface {
@@ -18,5 +19,5 @@
     /// <param name="optimizer">the optimizer object to serialize</param>
     /// <param name="rootItem">Root JsonItem for serialization, considers only active JsonItems for serialization</param>
-    public static void GenerateTemplate(string templatePath, IOptimizer optimizer, IJsonItem rootItem) {
+    public static void GenerateTemplate(string templatePath, IOptimizer optimizer, IJsonItem rootItem, IEnumerable<IResultCollectionPostProcessor> postProcessors) {
       // clear all runs
       optimizer.Runs.Clear();
@@ -31,4 +32,12 @@
       JArray parameterItems = new JArray();
       JArray resultItems = new JArray();
+      JArray postProcessorItems = new JArray();
+      // postProcessors.Select(x => new JObject().Add("Name", JToken.Parse(x.GetType().Name))
+      foreach (var proc in postProcessors) {
+        var tmp = new JObject();
+        tmp.Add("Name", proc.GetType().Name);
+        postProcessorItems.Add(tmp);
+      }
+
       IList<IJsonItem> jsonItems = new List<IJsonItem>();
      
@@ -67,4 +76,5 @@
       template[Constants.Parameters] = parameterItems;
       template[Constants.Results] = resultItems;
+      template["PostProcessors"] = postProcessorItems;
       #endregion
 
@@ -76,5 +86,5 @@
     #region Helper    
     private static void PopulateJsonItems(IJsonItem item, IList<IJsonItem> jsonItems) {
-      foreach(var x in item) {
+      foreach(var x in item) { // TODO: dieses konstrukt notwendig?
         if (x.Active && !(x is EmptyJsonItem) && !(x is UnsupportedJsonItem)) {
           jsonItems.Add(x);
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonTemplateInstantiator.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonTemplateInstantiator.cs	(revision 18045)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonTemplateInstantiator.cs	(revision 18046)
@@ -6,4 +6,5 @@
 using HEAL.Attic;
 using HeuristicLab.Optimization;
+using HeuristicLab.PluginInfrastructure;
 using Newtonsoft.Json.Linq;
 
@@ -13,8 +14,16 @@
       Optimizer = optimizer;
       ConfiguredResultItems = configuredResultItems;
+      PostProcessors = Enumerable.Empty<IResultCollectionPostProcessor>();
+    }
+
+    public InstantiatorResult(IOptimizer optimizer, IEnumerable<IResultJsonItem> configuredResultItems, IEnumerable<IResultCollectionPostProcessor> postProcessors) {
+      Optimizer = optimizer;
+      ConfiguredResultItems = configuredResultItems;
+      PostProcessors = postProcessors;
     }
 
     public IOptimizer Optimizer { get; }
     public IEnumerable<IResultJsonItem> ConfiguredResultItems { get; }
+    public IEnumerable<IResultCollectionPostProcessor> PostProcessors { get; }
   }
 
@@ -85,5 +94,15 @@
       JsonItemConverter.Inject(optimizer, rootItem);
 
-      return new InstantiatorResult(optimizer, CollectResults());
+      IList<IResultCollectionPostProcessor> postProcessorList = new List<IResultCollectionPostProcessor>();
+      var postProcessors = ApplicationManager.Manager.GetInstances<IResultCollectionPostProcessor>();
+      foreach (JObject obj in Template["PostProcessors"]) {
+        //string name = obj.Property("Name").Value.ToString();
+        foreach(var proc in postProcessors) {
+          if (proc.GetType().Name == obj["Name"].ToString())
+            postProcessorList.Add(proc);
+        }
+      }
+
+      return new InstantiatorResult(optimizer, CollectResults(), postProcessorList);
     }
 
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/ResultCollectionPostProcessors/SymRegPythonPostProcessor.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/ResultCollectionPostProcessors/SymRegPythonPostProcessor.cs	(revision 18046)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/ResultCollectionPostProcessors/SymRegPythonPostProcessor.cs	(revision 18046)
@@ -0,0 +1,39 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using HeuristicLab.Collections;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Optimization;
+using HeuristicLab.Problems.DataAnalysis.Symbolic;
+using HeuristicLab.Problems.DataAnalysis.Symbolic.Regression;
+using HEAL.Attic;
+
+namespace HeuristicLab.JsonInterface {
+  [StorableType("844F2887-B7A0-4BD4-89B8-F9155C65D214")]
+  public class SymRegPythonPostProcessor : Item, IResultCollectionPostProcessor {
+
+    [StorableConstructor]
+    protected SymRegPythonPostProcessor(StorableConstructorFlag _) : base(_) {
+    }
+
+    public SymRegPythonPostProcessor() { }
+    public SymRegPythonPostProcessor(SymRegPythonPostProcessor old, Cloner cloner) { }
+
+    public void Apply(IObservableDictionary<string, IItem> results, IDictionary<string, string> output) {
+      var formatter = new SymbolicDataAnalysisExpressionPythonFormatter();
+      foreach (var kvp in results) {
+        if (kvp.Value is ISymbolicRegressionSolution sol) {
+          output.Add(kvp.Key, formatter.Format(sol.Model.SymbolicExpressionTree));
+        }
+      }
+    }
+
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new SymRegPythonPostProcessor(this, cloner);
+    }
+  }
+}
