Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.App/HeuristicLab.JsonInterface.App.csproj
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.App/HeuristicLab.JsonInterface.App.csproj	(revision 17450)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.App/HeuristicLab.JsonInterface.App.csproj	(revision 17451)
@@ -38,4 +38,10 @@
   </PropertyGroup>
   <ItemGroup>
+    <Reference Include="Google.Protobuf, Version=3.6.1.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604, processorArchitecture=MSIL">
+      <HintPath>..\packages\Google.Protobuf.3.6.1\lib\net45\Google.Protobuf.dll</HintPath>
+    </Reference>
+    <Reference Include="HEAL.Attic, Version=1.4.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <HintPath>..\packages\HEAL.Attic.1.4.0\lib\net461\HEAL.Attic.dll</HintPath>
+    </Reference>
     <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>
@@ -43,4 +49,8 @@
     <Reference Include="System" />
     <Reference Include="System.Core" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Drawing.Common, Version=4.0.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.Drawing.Common.4.5.1\lib\net461\System.Drawing.Common.dll</HintPath>
+    </Reference>
     <Reference Include="System.Xml.Linq" />
     <Reference Include="System.Data.DataSetExtensions" />
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.App/Runner.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.App/Runner.cs	(revision 17450)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.App/Runner.cs	(revision 17451)
@@ -22,4 +22,5 @@
         Thread.Sleep(100);
       }
+     
       WriteResultsToFile(outputFile, optimizer, allowedResultNames);
     }
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/HeuristicLab.JsonInterface.OptimizerIntegration.csproj
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/HeuristicLab.JsonInterface.OptimizerIntegration.csproj	(revision 17450)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/HeuristicLab.JsonInterface.OptimizerIntegration.csproj	(revision 17451)
@@ -81,4 +81,5 @@
     <Compile Include="Interfaces\IJsonItemVM.cs" />
     <Compile Include="Interfaces\IMatrixJsonItemVM.cs" />
+    <Compile Include="Interfaces\INamedMatrixJsonItemVM.cs" />
     <Compile Include="Properties\Resources.Designer.cs">
       <AutoGen>True</AutoGen>
@@ -101,4 +102,5 @@
     <Compile Include="ViewModels\JsonItemVMBase.cs" />
     <Compile Include="ViewModels\MatrixValueVM.cs" />
+    <Compile Include="ViewModels\NamedMatrixValueVM.cs" />
     <Compile Include="ViewModels\RangedValueBaseVM.cs" />
     <Compile Include="ViewModels\RangeVM.cs" />
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Interfaces/INamedMatrixJsonItemVM.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Interfaces/INamedMatrixJsonItemVM.cs	(revision 17451)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Interfaces/INamedMatrixJsonItemVM.cs	(revision 17451)
@@ -0,0 +1,12 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HeuristicLab.JsonInterface.OptimizerIntegration {
+  public interface INamedMatrixJsonItemVM : IMatrixJsonItemVM {
+    IEnumerable<string> RowNames { get; set; }
+    IEnumerable<string> ColumnNames { get; set; }
+  }
+}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/JsonItemVMBase.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/JsonItemVMBase.cs	(revision 17450)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/JsonItemVMBase.cs	(revision 17451)
@@ -39,11 +39,11 @@
     public virtual Type JsonItemType => typeof(JsonItem);
 
-    private bool selected = true;
+    
     public bool Selected {
-      get => selected;
+      get => Item.Active;
       set {
-        selected = value;
+        Item.Active = value;
         if(TreeNode != null) {
-          TreeNode.ForeColor = (selected ? Color.Black : Color.Red);
+          TreeNode.ForeColor = (Selected ? Color.Black : Color.Red);
           TreeNode.Checked = value;
         }
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/NamedMatrixValueVM.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/NamedMatrixValueVM.cs	(revision 17451)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/NamedMatrixValueVM.cs	(revision 17451)
@@ -0,0 +1,44 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HeuristicLab.JsonInterface.OptimizerIntegration {
+  public class DoubleNamedMatrixValueVM : NamedMatrixValueVM<double, DoubleNamedMatrixJsonItem> {
+    public override Type JsonItemType => typeof(DoubleNamedMatrixJsonItem);
+    public override JsonItemBaseControl Control =>
+      new JsonItemDoubleNamedMatrixValueControl(this);
+
+    public override double[][] Value {
+      get => ((DoubleNamedMatrixJsonItem)Item).Value;
+      set {
+        ((DoubleNamedMatrixJsonItem)Item).Value = value;
+        OnPropertyChange(this, nameof(Value));
+      }
+    }
+
+    protected override double MinTypeValue => double.MinValue;
+
+    protected override double MaxTypeValue => double.MaxValue;
+  }
+
+
+  public abstract class NamedMatrixValueVM<T, JsonItemType> : MatrixValueVM<T, JsonItemType>, INamedMatrixJsonItemVM
+    where JsonItemType : INamedMatrixJsonItem {
+    public IEnumerable<string> RowNames {
+      get => ((JsonItemType)Item).RowNames;
+      set {
+        ((JsonItemType)Item).RowNames = value;
+        OnPropertyChange(this, nameof(RowNames));
+      }
+    }
+    public IEnumerable<string> ColumnNames {
+      get => ((JsonItemType)Item).ColumnNames;
+      set {
+        ((JsonItemType)Item).ColumnNames = value;
+        OnPropertyChange(this, nameof(ColumnNames));
+      }
+    }
+  }
+}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/ResultItemVM.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/ResultItemVM.cs	(revision 17450)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/ResultItemVM.cs	(revision 17451)
@@ -7,5 +7,5 @@
 namespace HeuristicLab.JsonInterface.OptimizerIntegration {
   public class ResultItemVM : JsonItemVMBase {
-    public override Type JsonItemType => typeof(ResultItem);
+    public override Type JsonItemType => typeof(ResultJsonItem);
     public override JsonItemBaseControl Control =>
       new JsonItemBaseControl(this);
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ExportJsonDialog.Designer.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ExportJsonDialog.Designer.cs	(revision 17450)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ExportJsonDialog.Designer.cs	(revision 17451)
@@ -30,7 +30,8 @@
       this.groupBoxDetails = new System.Windows.Forms.GroupBox();
       this.panelParameterDetails = new System.Windows.Forms.Panel();
-      this.resultItems = new System.Windows.Forms.CheckedListBox();
-      this.groupBox3 = new System.Windows.Forms.GroupBox();
+      this.splitContainer1 = new System.Windows.Forms.SplitContainer();
       this.treeViewResults = new System.Windows.Forms.TreeView();
+      this.groupBox = new System.Windows.Forms.GroupBox();
+      this.panelResultDetails = new System.Windows.Forms.Panel();
       this.splitContainer2 = new System.Windows.Forms.SplitContainer();
       this.tabControl1 = new System.Windows.Forms.TabControl();
@@ -40,10 +41,11 @@
       this.textBoxTemplateName = new System.Windows.Forms.TextBox();
       this.errorProvider = new System.Windows.Forms.ErrorProvider(this.components);
-      this.splitContainer1 = new System.Windows.Forms.SplitContainer();
-      this.groupBox = new System.Windows.Forms.GroupBox();
-      this.panelResultDetails = new System.Windows.Forms.Panel();
       this.jsonItemBindingSource = new System.Windows.Forms.BindingSource(this.components);
       this.groupBoxDetails.SuspendLayout();
-      this.groupBox3.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
+      this.splitContainer1.Panel1.SuspendLayout();
+      this.splitContainer1.Panel2.SuspendLayout();
+      this.splitContainer1.SuspendLayout();
+      this.groupBox.SuspendLayout();
       ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();
       this.splitContainer2.Panel1.SuspendLayout();
@@ -54,9 +56,4 @@
       this.tabPage2.SuspendLayout();
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
-      ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
-      this.splitContainer1.Panel1.SuspendLayout();
-      this.splitContainer1.Panel2.SuspendLayout();
-      this.splitContainer1.SuspendLayout();
-      this.groupBox.SuspendLayout();
       ((System.ComponentModel.ISupportInitialize)(this.jsonItemBindingSource)).BeginInit();
       this.SuspendLayout();
@@ -85,5 +82,5 @@
       this.treeView.Location = new System.Drawing.Point(0, 6);
       this.treeView.Name = "treeView";
-      this.treeView.Size = new System.Drawing.Size(370, 493);
+      this.treeView.Size = new System.Drawing.Size(380, 492);
       this.treeView.TabIndex = 3;
       this.treeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView_AfterSelect);
@@ -95,5 +92,5 @@
       this.groupBoxDetails.Location = new System.Drawing.Point(0, 0);
       this.groupBoxDetails.Name = "groupBoxDetails";
-      this.groupBoxDetails.Size = new System.Drawing.Size(422, 499);
+      this.groupBoxDetails.Size = new System.Drawing.Size(412, 499);
       this.groupBoxDetails.TabIndex = 4;
       this.groupBoxDetails.TabStop = false;
@@ -106,38 +103,55 @@
       this.panelParameterDetails.Location = new System.Drawing.Point(3, 16);
       this.panelParameterDetails.Name = "panelParameterDetails";
-      this.panelParameterDetails.Size = new System.Drawing.Size(416, 480);
+      this.panelParameterDetails.Size = new System.Drawing.Size(406, 480);
       this.panelParameterDetails.TabIndex = 0;
       // 
-      // resultItems
-      // 
-      this.resultItems.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.resultItems.FormattingEnabled = true;
-      this.resultItems.Location = new System.Drawing.Point(0, 6);
-      this.resultItems.Name = "resultItems";
-      this.resultItems.Size = new System.Drawing.Size(373, 393);
-      this.resultItems.TabIndex = 5;
-      this.resultItems.SelectedValueChanged += new System.EventHandler(this.resultItems_SelectedValueChanged);
-      // 
-      // groupBox3
-      // 
-      this.groupBox3.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-      this.groupBox3.Controls.Add(this.splitContainer1);
-      this.groupBox3.Controls.Add(this.treeViewResults);
-      this.groupBox3.Location = new System.Drawing.Point(6, 6);
-      this.groupBox3.Name = "groupBox3";
-      this.groupBox3.Size = new System.Drawing.Size(790, 493);
-      this.groupBox3.TabIndex = 7;
-      this.groupBox3.TabStop = false;
-      this.groupBox3.Text = "Result Elements";
+      // splitContainer1
+      // 
+      this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.splitContainer1.Location = new System.Drawing.Point(3, 3);
+      this.splitContainer1.Name = "splitContainer1";
+      // 
+      // splitContainer1.Panel1
+      // 
+      this.splitContainer1.Panel1.Controls.Add(this.treeViewResults);
+      this.splitContainer1.Panel1.Padding = new System.Windows.Forms.Padding(0, 6, 0, 1);
+      // 
+      // splitContainer1.Panel2
+      // 
+      this.splitContainer1.Panel2.Controls.Add(this.groupBox);
+      this.splitContainer1.Size = new System.Drawing.Size(796, 499);
+      this.splitContainer1.SplitterDistance = 380;
+      this.splitContainer1.TabIndex = 7;
       // 
       // treeViewResults
       // 
       this.treeViewResults.CheckBoxes = true;
-      this.treeViewResults.Location = new System.Drawing.Point(6, 19);
+      this.treeViewResults.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.treeViewResults.Location = new System.Drawing.Point(0, 6);
       this.treeViewResults.Name = "treeViewResults";
-      this.treeViewResults.Size = new System.Drawing.Size(777, 63);
+      this.treeViewResults.Size = new System.Drawing.Size(380, 492);
       this.treeViewResults.TabIndex = 6;
+      this.treeViewResults.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.treeViewResults_AfterCheck);
+      this.treeViewResults.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeViewResults_AfterSelect);
+      // 
+      // groupBox
+      // 
+      this.groupBox.Controls.Add(this.panelResultDetails);
+      this.groupBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.groupBox.Location = new System.Drawing.Point(0, 0);
+      this.groupBox.Name = "groupBox";
+      this.groupBox.Size = new System.Drawing.Size(412, 499);
+      this.groupBox.TabIndex = 5;
+      this.groupBox.TabStop = false;
+      this.groupBox.Text = "Details";
+      // 
+      // panelResultDetails
+      // 
+      this.panelResultDetails.AutoScroll = true;
+      this.panelResultDetails.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.panelResultDetails.Location = new System.Drawing.Point(3, 16);
+      this.panelResultDetails.Name = "panelResultDetails";
+      this.panelResultDetails.Size = new System.Drawing.Size(406, 480);
+      this.panelResultDetails.TabIndex = 0;
       // 
       // splitContainer2
@@ -150,5 +164,5 @@
       // 
       this.splitContainer2.Panel1.Controls.Add(this.treeView);
-      this.splitContainer2.Panel1.Padding = new System.Windows.Forms.Padding(0, 6, 0, 0);
+      this.splitContainer2.Panel1.Padding = new System.Windows.Forms.Padding(0, 6, 0, 1);
       // 
       // splitContainer2.Panel2
@@ -156,5 +170,5 @@
       this.splitContainer2.Panel2.Controls.Add(this.groupBoxDetails);
       this.splitContainer2.Size = new System.Drawing.Size(796, 499);
-      this.splitContainer2.SplitterDistance = 370;
+      this.splitContainer2.SplitterDistance = 380;
       this.splitContainer2.TabIndex = 9;
       // 
@@ -185,5 +199,5 @@
       // tabPage2
       // 
-      this.tabPage2.Controls.Add(this.groupBox3);
+      this.tabPage2.Controls.Add(this.splitContainer1);
       this.tabPage2.Location = new System.Drawing.Point(4, 22);
       this.tabPage2.Name = "tabPage2";
@@ -219,44 +233,4 @@
       this.errorProvider.BlinkStyle = System.Windows.Forms.ErrorBlinkStyle.NeverBlink;
       this.errorProvider.ContainerControl = this;
-      // 
-      // splitContainer1
-      // 
-      this.splitContainer1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-      this.splitContainer1.Location = new System.Drawing.Point(6, 88);
-      this.splitContainer1.Name = "splitContainer1";
-      // 
-      // splitContainer1.Panel1
-      // 
-      this.splitContainer1.Panel1.Controls.Add(this.resultItems);
-      this.splitContainer1.Panel1.Padding = new System.Windows.Forms.Padding(0, 6, 0, 0);
-      // 
-      // splitContainer1.Panel2
-      // 
-      this.splitContainer1.Panel2.Controls.Add(this.groupBox);
-      this.splitContainer1.Size = new System.Drawing.Size(778, 399);
-      this.splitContainer1.SplitterDistance = 373;
-      this.splitContainer1.TabIndex = 7;
-      // 
-      // groupBox
-      // 
-      this.groupBox.Controls.Add(this.panelResultDetails);
-      this.groupBox.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.groupBox.Location = new System.Drawing.Point(0, 0);
-      this.groupBox.Name = "groupBox";
-      this.groupBox.Size = new System.Drawing.Size(401, 399);
-      this.groupBox.TabIndex = 5;
-      this.groupBox.TabStop = false;
-      this.groupBox.Text = "Details";
-      // 
-      // panelResultDetails
-      // 
-      this.panelResultDetails.AutoScroll = true;
-      this.panelResultDetails.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.panelResultDetails.Location = new System.Drawing.Point(3, 16);
-      this.panelResultDetails.Name = "panelResultDetails";
-      this.panelResultDetails.Size = new System.Drawing.Size(395, 380);
-      this.panelResultDetails.TabIndex = 0;
       // 
       // jsonItemBindingSource
@@ -278,5 +252,9 @@
       this.Text = "Export Json";
       this.groupBoxDetails.ResumeLayout(false);
-      this.groupBox3.ResumeLayout(false);
+      this.splitContainer1.Panel1.ResumeLayout(false);
+      this.splitContainer1.Panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
+      this.splitContainer1.ResumeLayout(false);
+      this.groupBox.ResumeLayout(false);
       this.splitContainer2.Panel1.ResumeLayout(false);
       this.splitContainer2.Panel2.ResumeLayout(false);
@@ -287,9 +265,4 @@
       this.tabPage2.ResumeLayout(false);
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
-      this.splitContainer1.Panel1.ResumeLayout(false);
-      this.splitContainer1.Panel2.ResumeLayout(false);
-      ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
-      this.splitContainer1.ResumeLayout(false);
-      this.groupBox.ResumeLayout(false);
       ((System.ComponentModel.ISupportInitialize)(this.jsonItemBindingSource)).EndInit();
       this.ResumeLayout(false);
@@ -307,6 +280,4 @@
     private System.Windows.Forms.GroupBox groupBoxDetails;
     private System.Windows.Forms.Panel panelParameterDetails;
-    private System.Windows.Forms.CheckedListBox resultItems;
-    private System.Windows.Forms.GroupBox groupBox3;
     private System.Windows.Forms.SplitContainer splitContainer2;
     private System.Windows.Forms.TabControl tabControl1;
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ExportJsonDialog.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ExportJsonDialog.cs	(revision 17450)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ExportJsonDialog.cs	(revision 17451)
@@ -17,11 +17,11 @@
   public partial class ExportJsonDialog : Form {
     private static FolderBrowserDialog FolderBrowserDialog { get; set; }
-    private IDictionary<int, UserControl> Hash2Control { get; set; } = new Dictionary<int, UserControl>();
+    private IDictionary<TreeNode, UserControl> Node2Control { get; set; } = new Dictionary<TreeNode, UserControl>();
     private IDictionary<TreeNode, IJsonItemVM> Node2VM { get; set; } = new Dictionary<TreeNode, IJsonItemVM>();
+    private IDictionary<Type, Type> JI2VM { get; set; }
     private IJsonItem Root { get; set; }
     private IOptimizer Optimizer { get; set; }
     private IList<IJsonItemVM> VMs { get; set; }
     private JCGenerator Generator { get; set; } = new JCGenerator();
-    private IDictionary<string, IJsonItem> ResultItems { get; set; } = new Dictionary<string, IJsonItem>();
 
     private IContent content;
@@ -33,6 +33,5 @@
         VMs = new List<IJsonItemVM>();
         treeView.Nodes.Clear();
-        ResultItems.Clear();
-        resultItems.Items.Clear();
+        treeViewResults.Nodes.Clear();
 
         Optimizer = content as IOptimizer;
@@ -47,13 +46,6 @@
     }
 
-    private void TreeView_AfterCheck(object sender, TreeViewEventArgs e) {
-      if (e.Action != TreeViewAction.Unknown) {
-        if (Node2VM.TryGetValue(e.Node, out IJsonItemVM vm)) {
-          vm.Selected = e.Node.Checked;
-        }
-      }
-    }
+    
 
-    private IDictionary<Type, Type> JI2VM { get; set; }
 
     private void InitCache() {
@@ -71,20 +63,17 @@
 
     private void exportButton_Click(object sender, EventArgs e) {
+      // to set default value for disabled items
+      JsonItemConverter.Inject(Optimizer, Root);
+      /*
       foreach (var x in VMs) {
-        if (!(x is ResultItemVM) && !x.Selected) {
-          x.Item.Parent.Children.Remove(x.Item);
+        if (!x.Selected) {
+          x.Item.Parent?.Children?.Remove(x.Item);
+        } else if(x is ResultItemVM) {
+          x.Item.Parent?.Children?.Remove(x.Item);
+          Root.AddChildren(x.Item);
         }
       }
-
-      foreach (var x in ResultItems.Values) {
-        x.Parent.Children.Remove(x);
-      }
-
-      foreach (var x in resultItems.CheckedItems) {
-        if (ResultItems.TryGetValue((string)x, out IJsonItem item)) {
-          Root.AddChildren(item);
-        }
-      }
-
+      */
+      
       IList<IJsonItem> faultyItems = new List<IJsonItem>();
       
@@ -110,15 +99,14 @@
 
     private void BuildTreeNode(TreeNode node, IJsonItem item) {
-      RegisterItem(node, item);
+      RegisterItem(node, item, treeView);
       if (item.Children != null) {
         foreach (var c in item.Children) {
           if (IsDrawableItem(c)) {
-            if (c is ResultItem) {
-              resultItems.Items.Add(c.Name, true);
-              ResultItems.Add(c.Name, c);
+            if (c is ResultJsonItem) {
               TreeNode childNode = new TreeNode(c.Name);
               treeViewResults.Nodes.Add(childNode);
-              RegisterItem(childNode, c);
-              //Hash2Control.Add(c.GetHashCode(), new JsonItemBaseControl(new JsonItemVMBase() { Item = c }));
+              RegisterItem(childNode, c, treeViewResults);
+              if(Node2VM.TryGetValue(childNode, out IJsonItemVM vm))
+                vm.Selected = true;
             } else {
               TreeNode childNode = new TreeNode(c.Name);
@@ -131,5 +119,5 @@
     }
 
-    private void RegisterItem(TreeNode node, IJsonItem item) {
+    private void RegisterItem(TreeNode node, IJsonItem item, TreeView tv) {
       if (JI2VM.TryGetValue(item.GetType(), out Type vmType)) {
         IJsonItemVM vm = (IJsonItemVM)Activator.CreateInstance(vmType);
@@ -137,11 +125,11 @@
         vm.Item = item;
         vm.TreeNode = node;
-        vm.TreeView = treeView;
-        node.Checked = vm.Selected;
+        vm.TreeView = tv;
+        vm.Selected = false;
 
         VMs.Add(vm);
         Node2VM.Add(node, vm);
         UserControl control = vm.Control;
-        Hash2Control.Add(node.GetHashCode(), control);
+        Node2Control.Add(node, control);
       }
     }
@@ -155,10 +143,16 @@
       }
       
-      return b || (item.Value != null || item.Range != null || item.ActualName != null);
+      return b || (item.Value != null || item.Range != null || item.ActualName != null || item is ResultJsonItem);
     }
     
     private void treeView_AfterSelect(object sender, TreeViewEventArgs e) {
-      if(Hash2Control.TryGetValue(treeView.SelectedNode.GetHashCode(), out UserControl control)) {
+      if(Node2Control.TryGetValue(treeView.SelectedNode, out UserControl control)) {
         SetControlOnPanel(control, panelParameterDetails);
+      }
+    }
+
+    private void treeViewResults_AfterSelect(object sender, TreeViewEventArgs e) {
+      if (Node2Control.TryGetValue(treeViewResults.SelectedNode, out UserControl control)) {
+        SetControlOnPanel(control, panelResultDetails);
       }
     }
@@ -170,11 +164,4 @@
       } else {
         errorProvider.SetError(textBoxTemplateName, null);
-      }
-    }
-
-    private void resultItems_SelectedValueChanged(object sender, EventArgs e) {
-      if(ResultItems.TryGetValue(resultItems.SelectedItem.ToString(), out IJsonItem item) &&
-        Hash2Control.TryGetValue(item.GetHashCode(), out UserControl control)) {
-        SetControlOnPanel(control, panelResultDetails);
       }
     }
@@ -191,4 +178,20 @@
       panel.Refresh();
     }
+
+    private void TreeView_AfterCheck(object sender, TreeViewEventArgs e) {
+      if (e.Action != TreeViewAction.Unknown) {
+        if (Node2VM.TryGetValue(e.Node, out IJsonItemVM vm)) {
+          vm.Selected = e.Node.Checked;
+        }
+      }
+    }
+
+    private void treeViewResults_AfterCheck(object sender, TreeViewEventArgs e) {
+      if (e.Action != TreeViewAction.Unknown) {
+        if (Node2VM.TryGetValue(e.Node, out IJsonItemVM vm)) {
+          vm.Selected = e.Node.Checked;
+        }
+      }
+    }
   }
 }
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemMultiValueControl.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemMultiValueControl.cs	(revision 17450)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemMultiValueControl.cs	(revision 17451)
@@ -10,8 +10,29 @@
 
 namespace HeuristicLab.JsonInterface.OptimizerIntegration {
-  
+
+  public class JsonItemDoubleNamedMatrixValueControl : JsonItemMultiValueControl<double> {
+    protected override IEnumerable<string> RowNames { 
+      get => ((DoubleNamedMatrixValueVM)VM).RowNames;
+      set => ((DoubleNamedMatrixValueVM)VM).RowNames = value;
+    }
+    protected override IEnumerable<string> ColumnNames {
+      get => ((DoubleNamedMatrixValueVM)VM).ColumnNames;
+      set => ((DoubleNamedMatrixValueVM)VM).ColumnNames = value;
+    }
+
+    public JsonItemDoubleNamedMatrixValueControl(DoubleNamedMatrixValueVM vm) : base(vm, vm.Value) { }
+
+    protected override void SaveCellData(double data, int row, int col) {
+      DoubleNamedMatrixValueVM vm = VM as DoubleNamedMatrixValueVM;
+      vm.SetCellValue(data, row, col);
+    }
+  }
+
   public class JsonItemDoubleMatrixValueControl : JsonItemMultiValueControl<double> {
+    protected override IEnumerable<string> RowNames { get => null; set { } }
+    protected override IEnumerable<string> ColumnNames { get => null; set { } }
 
     public JsonItemDoubleMatrixValueControl(DoubleMatrixValueVM vm) : base(vm, vm.Value) { }
+
     protected override void SaveCellData(double data, int row, int col) {
       DoubleMatrixValueVM vm = VM as DoubleMatrixValueVM;
@@ -21,4 +42,7 @@
 
   public class JsonItemIntArrayValueControl : JsonItemMultiValueControl<int> {
+    protected override IEnumerable<string> RowNames { get => null; set { } }
+    protected override IEnumerable<string> ColumnNames { get => null; set { } }
+
     public JsonItemIntArrayValueControl(IntArrayValueVM vm) : base(vm, vm.Value) { }
 
@@ -30,4 +54,7 @@
 
   public class JsonItemDoubleArrayValueControl : JsonItemMultiValueControl<double> {
+    protected override IEnumerable<string> RowNames { get => null; set { } }
+    protected override IEnumerable<string> ColumnNames { get => null; set { } }
+
     public JsonItemDoubleArrayValueControl(DoubleArrayValueVM vm) : base(vm, vm.Value) { }
 
@@ -60,4 +87,7 @@
     private T[][] Matrix { get; set; }
 
+    protected abstract IEnumerable<string> RowNames { get; set; }
+    protected abstract IEnumerable<string> ColumnNames { get; set; }
+
     public JsonItemMultiValueControl(IMatrixJsonItemVM vm, T[][] matrix) : base(vm) {
       InitializeComponent();
@@ -66,6 +96,6 @@
       checkBoxColumns.DataBindings.Add("Checked", vm, nameof(IMatrixJsonItemVM.ColumnsResizable));
 
-      int rows = matrix.Length;
-      int cols = matrix.Max(x => x.Length);
+      int cols = matrix.Length;
+      int rows = matrix.Max(x => x.Length);
 
       Matrix = matrix;
@@ -85,10 +115,12 @@
       int length = array.Length;
 
-      Matrix = new T[array.Length][];
+      Matrix = new T[1][];
+      Matrix[0] = array;
+      /*
       for (int r = 0; r < length; ++r) {
         Matrix[r] = new T[1];
         Matrix[r][0] = array[r];
       }
-
+      */
       _cols = 1;
       _rows = length;
@@ -125,16 +157,22 @@
 
       T[][] tmp = Matrix;
-      Matrix = new T[Rows][];
+      Matrix = new T[Columns][];
 
       // columns must added first
-      for(int c = 0; c < Columns; ++c) {
-        dataGridView.Columns.Add($"Column {c}", $"Column {c}");
-      }
-
-      for (int r = 0; r < Rows; ++r) {
-        T[] newCol = new T[Columns];
-        if(r < tmp.Length)
-          Array.Copy(tmp[r], 0, newCol, 0, Math.Min(tmp[r].Length, Columns));
-        Matrix[r] = newCol;
+      if(RowNames != null && RowNames.Count() == Columns) {
+        foreach(var name in RowNames) {
+          dataGridView.Columns.Add(name, name);
+        }
+      } else {
+        for(int c = 0; c < Columns; ++c) {
+          dataGridView.Columns.Add($"Column {c}", $"Column {c}");
+        }
+      }
+
+      for (int c = 0; c < Columns; ++c) {
+        T[] newCol = new T[Rows];
+        if(c < tmp.Length)
+          Array.Copy(tmp[c], 0, newCol, 0, Math.Min(tmp[c].Length, Rows));
+        Matrix[c] = newCol;
       }
 
@@ -144,6 +182,9 @@
           for (int r = 0; r < Rows; ++r) {
             //col and row is switched for dataGridView
-            dataGridView[c, r].Value = Matrix[r][c];
-            dataGridView.Rows[r].HeaderCell.Value = $"Row {r}";
+            dataGridView[c, r].Value = Matrix[c][r];
+            if (ColumnNames != null && r < ColumnNames.Count())
+              dataGridView.Rows[r].HeaderCell.Value = ColumnNames.ElementAt(r);
+            else
+              dataGridView.Rows[r].HeaderCell.Value = $"Row {r}";
           }
         }
@@ -214,8 +255,8 @@
     private void DataGridView_CellEndEdit(object sender, DataGridViewCellEventArgs e) {
       object val = dataGridView[e.ColumnIndex, e.RowIndex].Value;
-      Matrix[e.RowIndex][e.ColumnIndex] = (T)Convert.ChangeType(val.ToString().Replace(",", "."),
+      Matrix[e.ColumnIndex][e.RowIndex] = (T)Convert.ChangeType(val.ToString().Replace(",", "."),
                                             typeof(T),
                                             System.Globalization.CultureInfo.InvariantCulture);
-      SaveCellData(Matrix[e.RowIndex][e.ColumnIndex], e.RowIndex, e.ColumnIndex);
+      SaveCellData(Matrix[e.ColumnIndex][e.RowIndex], e.ColumnIndex, e.RowIndex);
     }
   }
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/AlgorithmConverter.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/AlgorithmConverter.cs	(revision 17450)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/AlgorithmConverter.cs	(revision 17451)
@@ -27,5 +27,5 @@
       IAlgorithm algorithm = value as IAlgorithm;
       foreach (var res in algorithm.Results) {
-        item.AddChildren(new ResultItem() {
+        item.AddChildren(new ResultJsonItem() {
           Name = res.Name,
           Description = res.Description
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/RegressionProblemDataConverter.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/RegressionProblemDataConverter.cs	(revision 17450)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/RegressionProblemDataConverter.cs	(revision 17451)
@@ -1,3 +1,4 @@
 ﻿using System;
+using System.Collections;
 using System.Collections.Generic;
 using System.Linq;
@@ -7,4 +8,5 @@
 using HeuristicLab.Core;
 using HeuristicLab.Data;
+using Newtonsoft.Json.Linq;
 
 namespace HeuristicLab.JsonInterface {
@@ -15,6 +17,35 @@
 
     public override void Inject(IItem item, IJsonItem data, IJsonItemConverter root) {
-      // TODO: inject data
-      throw new NotImplementedException();
+      //Dictionary<string, IList<double>> dict = null;
+      var dictTmp = new Dictionary<string, IList>();
+      /*if (data.Children[0].Value is JObject jObj) {
+        dict = jObj.ToObject<Dictionary<string, IList<double>>>();
+        foreach (var x in dict) {
+          dictTmp.Add(x.Key, (IList)x.Value);
+        }
+      } else if(data.Children[0].Value is Dictionary<string, IList<double>> d) {
+        dict = d;
+      } else {
+        dictTmp = (Dictionary<string, IList>)data.Children[0].Value;
+      }
+      */
+      DoubleNamedMatrixJsonItem matrix = data.Children[0] as DoubleNamedMatrixJsonItem;
+      if(matrix != null) {
+        int c = 0;
+        foreach(var col in matrix.RowNames) {
+          dictTmp.Add(col, new List<double>(matrix.Value[c]));
+          ++c;
+        }
+      }
+
+      dynamic val = (dynamic)item;
+      object dataset = (object)val.Dataset;
+      var dataInfo = dataset.GetType().GetField("variableValues", flags);
+      dataInfo.SetValue(dataset, dictTmp);
+      val.TargetVariable = (string)data.Children[3].Value;
+      val.TrainingPartition.Start = ((IntRangeJsonItem)data.Children[2]).Value.First();
+      val.TrainingPartition.End = ((IntRangeJsonItem)data.Children[2]).Value.Last();
+      val.TestPartition.Start = ((IntRangeJsonItem)data.Children[1]).Value.First();
+      val.TestPartition.End = ((IntRangeJsonItem)data.Children[1]).Value.Last();
     }
 
@@ -28,9 +59,45 @@
       object dataset = (object)val.Dataset;
       dynamic targetVariable = val.TargetVariable;
-      FieldInfo dataInfo = dataset.GetType().GetField("storableData", flags);
-      // TODO: aufteilen in trainings und test daten abschnitte
-      item.AddChildren(new JsonItem() {
-        Name = "Dataset",
-        Value = dataInfo.GetValue(dataset)
+      
+      FieldInfo dataInfo = dataset.GetType().GetField("variableValues", flags);
+      
+      if(dataInfo.GetValue(dataset) is Dictionary<string, IList> dict) {
+        int cols = dict.Count;
+        int rows = 0;
+        IList<string> rowNames = new List<string>();
+        double[][] mat = new double[cols][];
+        int c = 0;
+        foreach(var x in dict) {
+          rows = Math.Max(rows, x.Value.Count);
+          rowNames.Add(x.Key);
+          mat[c] = new double[rows];
+          int r = 0;
+          foreach(var rowValue in x.Value) {
+            mat[c][r] = (double)rowValue; 
+            ++r;
+          }
+          ++c;
+        }
+        item.AddChildren(new DoubleNamedMatrixJsonItem() {
+          Name = "Dataset",
+          Value = mat,
+          RowNames = rowNames
+        });
+      }
+
+      var trainingPartition = ((IntRange)val.TrainingPartition);
+      var testPartition = ((IntRange)val.TestPartition);
+
+      item.AddChildren(new IntRangeJsonItem() {
+        Name = "TestPartition",
+        Value = new int[] { testPartition.Start, testPartition.End },
+        Range = new int[] { 0, Math.Max(testPartition.End, trainingPartition.End) }
+      });
+
+      
+      item.AddChildren(new IntRangeJsonItem() {
+        Name = "TrainingPartition",
+        Value = new int[] { trainingPartition.Start, trainingPartition.End },
+        Range = new int[] { 0, Math.Max(testPartition.End, trainingPartition.End)}
       });
 
@@ -42,10 +109,10 @@
       });
 
-
-      item.AddChildren(new JsonItem() {
+      /*
+      item.AddChildren(new StringArrayJsonItem() {
         Name = "AllowedInputVariables",
-        Value = (object)val.AllowedInputVariables,
+        Value = (string[])val.AllowedInputVariables,
         Range = variables.Select(x => x.Value)
-      });
+      });*/
       return item;
     }
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ResultParameterConverter.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ResultParameterConverter.cs	(revision 17450)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ResultParameterConverter.cs	(revision 17451)
@@ -15,5 +15,5 @@
     public override IJsonItem Extract(IItem value, IJsonItemConverter root) {
       IResultParameter res = value as IResultParameter;
-      return new ResultItem() {
+      return new ResultJsonItem() {
         Name = res.ActualName,
         ActualName = res.ActualName,
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueLookupParameterConverter.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueLookupParameterConverter.cs	(revision 17450)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueLookupParameterConverter.cs	(revision 17451)
@@ -27,5 +27,10 @@
         item = tmp;
       } else {
-        item.Range = new object[] { GetMinValue(param.DataType), GetMaxValue(param.DataType) };
+        var min = GetMinValue(param.DataType);
+        var max = GetMaxValue(param.DataType);
+        if (min != null && max != null)
+          item.Range = new object[] { min, max };
+        else
+          item.Range = null;
       }
       item.Name = param.Name;
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueRangeConverter.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueRangeConverter.cs	(revision 17450)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueRangeConverter.cs	(revision 17451)
@@ -17,5 +17,5 @@
     public override void Inject(IItem item, IJsonItem data, IJsonItemConverter root) {
       IntRange range = item as IntRange;
-      IntArrayJsonItem cdata = data as IntArrayJsonItem;
+      IntRangeJsonItem cdata = data as IntRangeJsonItem;
       range.Start = cdata.Value[0];
       range.End = cdata.Value[1];
@@ -39,5 +39,5 @@
     public override void Inject(IItem item, IJsonItem data, IJsonItemConverter root) {
       DoubleRange range = item as DoubleRange;
-      DoubleArrayJsonItem cdata = data as DoubleArrayJsonItem;
+      DoubleRangeJsonItem cdata = data as DoubleRangeJsonItem;
       range.Start = cdata.Value[0];
       range.End = cdata.Value[1];
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueTypeArrayConverter.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueTypeArrayConverter.cs	(revision 17450)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueTypeArrayConverter.cs	(revision 17451)
@@ -40,10 +40,12 @@
     public override void Inject(IItem item, IJsonItem data, IJsonItemConverter root) {
       DoubleArray arr = item as DoubleArray;
-      double[] d = CastValue<double[]>(data);
+      DoubleArrayJsonItem doubleItem = data as DoubleArrayJsonItem;
+      //double[] d = CastValue<double[]>(data);
       bool resizeTmp = arr.Resizable;
       arr.Resizable = true;
-      arr.Length = d.Length;
-      for (int i = 0; i < d.Length; ++i)
-        arr[i] = d[i];
+      //arr.Length = d.Length;
+      arr.Length = doubleItem.Value.Length;
+      for (int i = 0; i < doubleItem.Value.Length; ++i)
+        arr[i] = doubleItem.Value[i];
       arr.Resizable = resizeTmp;
     }
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueTypeMatrixConverter.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueTypeMatrixConverter.cs	(revision 17450)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueTypeMatrixConverter.cs	(revision 17451)
@@ -33,14 +33,16 @@
     public override void Inject(IItem item, IJsonItem data, IJsonItemConverter root) {
       DoubleMatrix mat = item as DoubleMatrix;
-      DoubleMatrixJsonItem d = data as DoubleMatrixJsonItem;
+      DoubleNamedMatrixJsonItem d = data as DoubleNamedMatrixJsonItem;
       CopyMatrixData(mat, d.Value);
     }
 
     public override IJsonItem Extract(IItem value, IJsonItemConverter root) =>
-      new DoubleMatrixJsonItem() {
+      new DoubleNamedMatrixJsonItem() {
         Name = "[OverridableParamName]",
         Description = value.ItemDescription,
         Value = Transform((DoubleMatrix)value),
-        Range = new double[] { double.MinValue, double.MaxValue }
+        Range = new double[] { double.MinValue, double.MaxValue },
+        RowNames = ((DoubleMatrix)value).RowNames,
+        ColumnNames = ((DoubleMatrix)value).ColumnNames
       };
   }
@@ -90,6 +92,6 @@
     #region Helper
     protected void CopyMatrixData(MatrixType matrix, T[][] data) {
-      var rows = data.Length;
-      var cols = data.Length > 0 ? data[0].Length : 0;
+      var cols = data.Length;
+      var rows = data.Length > 0 ? data[0].Length : 0;
 
       var rowInfo = matrix.GetType().GetProperty("Rows");
@@ -100,5 +102,5 @@
       for (int x = 0; x < rows; ++x) {
         for (int y = 0; y < cols; ++y) {
-          matrix[x, y] = data[x][y];
+          matrix[x, y] = data[y][x];
         }
       }
@@ -106,9 +108,9 @@
 
     protected T[][] Transform(MatrixType matrix) {
-      T[][] m = new T[matrix.Rows][];
-      for (int r = 0; r < matrix.Rows; ++r) {
-        m[r] = new T[matrix.Columns];
-        for (int c = 0; c < matrix.Columns; ++c) {
-          m[r][c] = matrix[r, c];
+      T[][] m = new T[matrix.Columns][];
+      for (int column = 0; column < matrix.Columns; ++column) {
+        m[column] = new T[matrix.Rows];
+        for (int row = 0; row < matrix.Rows; ++row) {
+          m[column][row] = matrix[row, column];
         }
       }
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/HeuristicLab.JsonInterface.csproj
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/HeuristicLab.JsonInterface.csproj	(revision 17450)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/HeuristicLab.JsonInterface.csproj	(revision 17451)
@@ -71,4 +71,5 @@
     <Compile Include="Interfaces\IJsonItemValidator.cs" />
     <Compile Include="Interfaces\IMatrixJsonItem.cs" />
+    <Compile Include="Interfaces\INamedMatrixJsonItem.cs" />
     <Compile Include="Models\ArrayJsonItemBase.cs" />
     <Compile Include="Models\BoolJsonItems.cs" />
@@ -79,5 +80,6 @@
     <Compile Include="Models\JsonItem.cs" />
     <Compile Include="Models\MatrixJsonItemBase.cs" />
-    <Compile Include="Models\ResultItem.cs" />
+    <Compile Include="Models\NamedMatrixJsonItemBase.cs" />
+    <Compile Include="Models\ResultJsonItem.cs" />
     <Compile Include="Models\StringJsonItem.cs" />
     <Compile Include="Models\UnsupportedJsonItem.cs" />
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Interfaces/IJsonItem.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Interfaces/IJsonItem.cs	(revision 17450)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Interfaces/IJsonItem.cs	(revision 17451)
@@ -9,4 +9,5 @@
 namespace HeuristicLab.JsonInterface {
   public interface IJsonItem {
+    bool Active { get; set; }
     string Name { get; set; }
 
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Interfaces/INamedMatrixJsonItem.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Interfaces/INamedMatrixJsonItem.cs	(revision 17451)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Interfaces/INamedMatrixJsonItem.cs	(revision 17451)
@@ -0,0 +1,12 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HeuristicLab.JsonInterface {
+  public interface INamedMatrixJsonItem : IMatrixJsonItem {
+    IEnumerable<string> RowNames { get; set; }
+    IEnumerable<string> ColumnNames { get; set; }
+  }
+}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JCGenerator.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JCGenerator.cs	(revision 17450)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JCGenerator.cs	(revision 17451)
@@ -41,5 +41,5 @@
       // filter result items
       foreach (var item in jsonItems) {
-        if (item is ResultItem)
+        if (item is ResultJsonItem)
           resultItems.Add(Serialize(item));
         else
@@ -60,12 +60,12 @@
     // serializes ParameterizedItems and saves them in list "JsonItems".
     private void PopulateJsonItems(IJsonItem item, IList<IJsonItem> jsonItems) {
-      IEnumerable<IJsonItem> tmpParameter = item.Children;
+      IEnumerable<IJsonItem> children = item.Children;
       
-      if (item.Value != null || item.Range != null || item is ResultItem || item.ActualName != null) {
+      if (item.Active && (item.Value != null || item.Range != null || item is ResultJsonItem || item.ActualName != null)) {
         jsonItems.Add(item);
       }
 
-      if (tmpParameter != null) {
-        foreach (var p in tmpParameter) {
+      if (children != null) {
+        foreach (var p in children) {
           PopulateJsonItems(p, jsonItems);
         }
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/DoubleJsonItems.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/DoubleJsonItems.cs	(revision 17450)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/DoubleJsonItems.cs	(revision 17451)
@@ -23,3 +23,15 @@
     }
   }
+
+  public class DoubleNamedMatrixJsonItem : NamedMatrixJsonItemBase<double> {
+    protected override bool IsInRange() {
+      for (int c = 0; c < Value.Length; ++c) {
+        for (int r = 0; r < Value[c].Length; ++r) {
+          if (Value[c][r] < Range.First() && Range.Last() < Value[c][r])
+            return false;
+        }
+      }
+      return true;
+    }
+  }
 }
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/IntJsonItems.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/IntJsonItems.cs	(revision 17450)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/IntJsonItems.cs	(revision 17451)
@@ -6,5 +6,10 @@
 
 namespace HeuristicLab.JsonInterface {
-  public class IntJsonItem : JsonItem<int> { }
+  public class IntJsonItem : JsonItem<int> {
+    /*I
+    public int MinValue { get; set; } 
+    public int MaxValue { get; set; }
+    */
+  }
   public class IntArrayJsonItem : ArrayJsonItemBase<int> { }
   public class IntRangeJsonItem : ArrayJsonItemBase<int> {
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/JsonItem.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/JsonItem.cs	(revision 17450)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/JsonItem.cs	(revision 17451)
@@ -66,5 +66,8 @@
     public virtual IEnumerable<object> Range { get; set; }
     
+    // TODO eigene items für LookUp?
     public virtual string ActualName { get; set; }
+
+    // TODO jsonIgnore dataType?
 
     [JsonIgnore]
@@ -73,4 +76,7 @@
     [JsonIgnore]
     public virtual IJsonItem Parent { get; set; }
+
+    [JsonIgnore]
+    public virtual bool Active { get; set; }
 
     #region Constructors
@@ -81,20 +87,5 @@
     }
     #endregion
-
-    #region Public Static Methods
-    public static void Merge(JsonItem target, JsonItem from) {
-      target.Name = from.Name ?? target.Name;
-      target.Range = from.Range ?? target.Range;
-      target.Value = from.Value ?? target.Value;
-      target.ActualName = from.ActualName ?? target.ActualName;
-      if(target.Children != null) {
-        if (from.Children != null)
-          ((List<IJsonItem>)from.Children).AddRange(target.Children); 
-      } else {
-        target.Children = from.Children;
-      }
-    }
-    #endregion
-
+    
     #region Public Methods
     public void AddChildren(params IJsonItem[] childs) => 
@@ -124,4 +115,8 @@
 
     #region Helper
+    /*
+     * TODO protected abstract bool Validate();
+     */
+
     protected virtual bool IsInRange() {
       bool b1 = true, b2 = true;
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/NamedMatrixJsonItemBase.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/NamedMatrixJsonItemBase.cs	(revision 17451)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/NamedMatrixJsonItemBase.cs	(revision 17451)
@@ -0,0 +1,36 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Newtonsoft.Json.Linq;
+
+namespace HeuristicLab.JsonInterface {
+  public class NamedMatrixJsonItemBase<T> : MatrixJsonItemBase<T>, INamedMatrixJsonItem {
+    IList<string> rows = new List<string>();
+    public IEnumerable<string> RowNames {
+      get => rows;
+      set => rows = new List<string>(value);
+    }
+
+    IList<string> cols = new List<string>();
+    public IEnumerable<string> ColumnNames { 
+      get => cols; 
+      set => cols = new List<string>(value); 
+    }
+
+    public void AddColumn(string col) {
+      cols.Add(col);
+    }
+
+    public void AddRow(string row) {
+      rows.Add(row);
+    }
+
+    public override void SetFromJObject(JObject jObject) {
+      base.SetFromJObject(jObject);
+      RowNames = jObject[nameof(INamedMatrixJsonItem.RowNames)]?.ToObject<IEnumerable<string>>();
+      ColumnNames = jObject[nameof(INamedMatrixJsonItem.ColumnNames)]?.ToObject<IEnumerable<string>>();
+    }
+  }
+}
Index: anches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/ResultItem.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/ResultItem.cs	(revision 17450)
+++ 	(revision )
@@ -1,11 +1,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace HeuristicLab.JsonInterface {
-  public class ResultItem : JsonItem {
-
-  }
-}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/ResultJsonItem.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/ResultJsonItem.cs	(revision 17451)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/ResultJsonItem.cs	(revision 17451)
@@ -0,0 +1,11 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HeuristicLab.JsonInterface {
+  public class ResultJsonItem : JsonItem {
+
+  }
+}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/StringJsonItem.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/StringJsonItem.cs	(revision 17450)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/StringJsonItem.cs	(revision 17451)
@@ -7,3 +7,4 @@
 namespace HeuristicLab.JsonInterface {
   public class StringJsonItem : JsonItem<string> { }
+  public class StringArrayJsonItem : JsonItem<string[], string> { }
 }
Index: /branches/3026_IntegrationIntoSymSpace/Heuristiclab.ConfigStarter/Program.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/Heuristiclab.ConfigStarter/Program.cs	(revision 17450)
+++ /branches/3026_IntegrationIntoSymSpace/Heuristiclab.ConfigStarter/Program.cs	(revision 17451)
@@ -43,8 +43,14 @@
       SymbolicRegressionSingleObjectiveProblem prop = new SymbolicRegressionSingleObjectiveProblem();
       
-      alg.Problem = tsp;
+      alg.Problem = prop;
+
+      IJsonItem root = JsonItemConverter.Extract(alg);
+      var x = root.Children[0];
+      root.Children.Remove(x);
+      x.Parent = null;
+
 
       JCGenerator generator = new JCGenerator();
-      generator.GenerateTemplate(@"C:\Workspace", "Template", alg);
+      generator.GenerateTemplate(@"C:\Workspace", "Template", alg, root);
       //JsonTemplateInstantiator.Instantiate(@"C:\Workspace\Template.json");
       
