Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/HeuristicLab.JsonInterface.OptimizerIntegration.csproj
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/HeuristicLab.JsonInterface.OptimizerIntegration.csproj	(revision 17404)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/HeuristicLab.JsonInterface.OptimizerIntegration.csproj	(revision 17405)
@@ -50,4 +50,8 @@
       <HintPath>..\bin\HeuristicLab.Collections-3.3.dll</HintPath>
     </Reference>
+    <Reference Include="HeuristicLab.Common.Resources-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\bin\HeuristicLab.Common.Resources-3.3.dll</HintPath>
+    </Reference>
     <Reference Include="HeuristicLab.Core.Views-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
       <SpecificVersion>False</SpecificVersion>
@@ -85,4 +89,10 @@
       <DependentUpon>JsonItemBaseControl.cs</DependentUpon>
     </Compile>
+    <Compile Include="Shared\NumericRangeControl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Shared\NumericRangeControl.Designer.cs">
+      <DependentUpon>NumericRangeControl.cs</DependentUpon>
+    </Compile>
     <Compile Include="Views\ExportJsonDialog.cs">
       <SubType>Form</SubType>
@@ -92,4 +102,10 @@
     </Compile>
     <Compile Include="FileManager.cs" />
+    <Compile Include="Views\JsonItemArrayControl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\JsonItemArrayControl.Designer.cs">
+      <DependentUpon>JsonItemArrayControl.cs</DependentUpon>
+    </Compile>
     <Compile Include="Views\JsonItemBoolControl.cs">
       <SubType>UserControl</SubType>
@@ -97,4 +113,10 @@
     <Compile Include="Views\JsonItemBoolControl.Designer.cs">
       <DependentUpon>JsonItemBoolControl.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Views\JsonItemDefaultControl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\JsonItemDefaultControl.Designer.cs">
+      <DependentUpon>JsonItemDefaultControl.cs</DependentUpon>
     </Compile>
     <Compile Include="Views\JsonItemRangeControl.cs">
@@ -135,4 +157,8 @@
       <Name>HeuristicLab.Core-3.3</Name>
     </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Data.Views\3.3\HeuristicLab.Data.Views-3.3.csproj">
+      <Project>{72104A0B-90E7-42F3-9ABE-9BBBADD4B943}</Project>
+      <Name>HeuristicLab.Data.Views-3.3</Name>
+    </ProjectReference>
     <ProjectReference Include="..\HeuristicLab.JsonInterface\HeuristicLab.JsonInterface.csproj">
       <Project>{0e3aab5e-f152-44e0-a054-4d9a83ecee08}</Project>
@@ -168,6 +194,12 @@
       <DependentUpon>JsonItemBaseControl.cs</DependentUpon>
     </EmbeddedResource>
+    <EmbeddedResource Include="Shared\NumericRangeControl.resx">
+      <DependentUpon>NumericRangeControl.cs</DependentUpon>
+    </EmbeddedResource>
     <EmbeddedResource Include="Views\ExportJsonDialog.resx">
       <DependentUpon>ExportJsonDialog.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Views\JsonItemArrayControl.resx">
+      <DependentUpon>JsonItemArrayControl.cs</DependentUpon>
     </EmbeddedResource>
     <EmbeddedResource Include="Views\JsonItemBoolControl.resx">
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/JsonItemBaseControl.Designer.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/JsonItemBaseControl.Designer.cs	(revision 17404)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/JsonItemBaseControl.Designer.cs	(revision 17405)
@@ -24,30 +24,27 @@
     /// </summary>
     private void InitializeComponent() {
-      this.labelPath = new System.Windows.Forms.Label();
+      this.labelEnable = new System.Windows.Forms.Label();
       this.checkBoxActive = new System.Windows.Forms.CheckBox();
-      this.panel1 = new System.Windows.Forms.Panel();
-      this.label3 = new System.Windows.Forms.Label();
       this.textBoxActualName = new System.Windows.Forms.TextBox();
       this.labelActualName = new System.Windows.Forms.Label();
       this.textBoxName = new System.Windows.Forms.TextBox();
       this.label1 = new System.Windows.Forms.Label();
-      this.panel1.SuspendLayout();
       this.SuspendLayout();
       // 
-      // labelPath
+      // labelEnable
       // 
-      this.labelPath.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+      this.labelEnable.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
             | System.Windows.Forms.AnchorStyles.Right)));
-      this.labelPath.AutoSize = true;
-      this.labelPath.Location = new System.Drawing.Point(24, 4);
-      this.labelPath.Name = "labelPath";
-      this.labelPath.Size = new System.Drawing.Size(29, 13);
-      this.labelPath.TabIndex = 3;
-      this.labelPath.Text = "Path";
+      this.labelEnable.AutoSize = true;
+      this.labelEnable.Location = new System.Drawing.Point(6, 3);
+      this.labelEnable.Name = "labelEnable";
+      this.labelEnable.Size = new System.Drawing.Size(40, 13);
+      this.labelEnable.TabIndex = 3;
+      this.labelEnable.Text = "Enable";
       // 
       // checkBoxActive
       // 
       this.checkBoxActive.AutoSize = true;
-      this.checkBoxActive.Location = new System.Drawing.Point(3, 3);
+      this.checkBoxActive.Location = new System.Drawing.Point(92, 3);
       this.checkBoxActive.Name = "checkBoxActive";
       this.checkBoxActive.Size = new System.Drawing.Size(15, 14);
@@ -56,33 +53,11 @@
       this.checkBoxActive.CheckedChanged += new System.EventHandler(this.checkBoxActive_CheckedChanged);
       // 
-      // panel1
-      // 
-      this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-      this.panel1.BackColor = System.Drawing.Color.Gray;
-      this.panel1.Controls.Add(this.checkBoxActive);
-      this.panel1.Controls.Add(this.labelPath);
-      this.panel1.Location = new System.Drawing.Point(0, 0);
-      this.panel1.Name = "panel1";
-      this.panel1.Size = new System.Drawing.Size(501, 20);
-      this.panel1.TabIndex = 4;
-      // 
-      // label3
-      // 
-      this.label3.AutoSize = true;
-      this.label3.Location = new System.Drawing.Point(6, 84);
-      this.label3.Name = "label3";
-      this.label3.Size = new System.Drawing.Size(34, 13);
-      this.label3.TabIndex = 13;
-      this.label3.Text = "Value";
-      this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
-      // 
       // textBoxActualName
       // 
       this.textBoxActualName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
             | System.Windows.Forms.AnchorStyles.Right)));
-      this.textBoxActualName.Location = new System.Drawing.Point(92, 55);
+      this.textBoxActualName.Location = new System.Drawing.Point(92, 49);
       this.textBoxActualName.Name = "textBoxActualName";
-      this.textBoxActualName.Size = new System.Drawing.Size(402, 20);
+      this.textBoxActualName.Size = new System.Drawing.Size(404, 20);
       this.textBoxActualName.TabIndex = 12;
       this.textBoxActualName.TextChanged += new System.EventHandler(this.textBoxActualName_TextChanged);
@@ -91,5 +66,5 @@
       // 
       this.labelActualName.AutoSize = true;
-      this.labelActualName.Location = new System.Drawing.Point(6, 58);
+      this.labelActualName.Location = new System.Drawing.Point(6, 52);
       this.labelActualName.Name = "labelActualName";
       this.labelActualName.Size = new System.Drawing.Size(65, 13);
@@ -102,7 +77,8 @@
       this.textBoxName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
             | System.Windows.Forms.AnchorStyles.Right)));
-      this.textBoxName.Location = new System.Drawing.Point(92, 29);
+      this.textBoxName.Location = new System.Drawing.Point(92, 23);
       this.textBoxName.Name = "textBoxName";
-      this.textBoxName.Size = new System.Drawing.Size(402, 20);
+      this.textBoxName.ReadOnly = true;
+      this.textBoxName.Size = new System.Drawing.Size(404, 20);
       this.textBoxName.TabIndex = 10;
       this.textBoxName.TextChanged += new System.EventHandler(this.textBoxName_TextChanged);
@@ -111,5 +87,5 @@
       // 
       this.label1.AutoSize = true;
-      this.label1.Location = new System.Drawing.Point(6, 32);
+      this.label1.Location = new System.Drawing.Point(6, 26);
       this.label1.Name = "label1";
       this.label1.Size = new System.Drawing.Size(35, 13);
@@ -122,16 +98,13 @@
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
-      this.Controls.Add(this.label3);
+      this.Controls.Add(this.labelEnable);
+      this.Controls.Add(this.checkBoxActive);
       this.Controls.Add(this.textBoxActualName);
       this.Controls.Add(this.labelActualName);
       this.Controls.Add(this.textBoxName);
       this.Controls.Add(this.label1);
-      this.Controls.Add(this.panel1);
       this.Name = "JsonItemBaseControl";
       this.Padding = new System.Windows.Forms.Padding(3);
-      this.Size = new System.Drawing.Size(500, 152);
-      this.panel1.ResumeLayout(false);
-      this.panel1.PerformLayout();
+      this.Size = new System.Drawing.Size(502, 154);
       this.ResumeLayout(false);
       this.PerformLayout();
@@ -141,8 +114,6 @@
     #endregion
 
-    private System.Windows.Forms.Label labelPath;
+    private System.Windows.Forms.Label labelEnable;
     private System.Windows.Forms.CheckBox checkBoxActive;
-    private System.Windows.Forms.Panel panel1;
-    private System.Windows.Forms.Label label3;
     private System.Windows.Forms.TextBox textBoxActualName;
     private System.Windows.Forms.Label labelActualName;
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/JsonItemBaseControl.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/JsonItemBaseControl.cs	(revision 17404)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/JsonItemBaseControl.cs	(revision 17405)
@@ -20,5 +20,4 @@
       InitializeComponent();
       VM = vm;
-      labelPath.Text = VM.Item.Path;
       checkBoxActive.Checked = VM.Selected;
       textBoxName.Text = VM.Item.Name;
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/NumericRangeControl.Designer.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/NumericRangeControl.Designer.cs	(revision 17405)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/NumericRangeControl.Designer.cs	(revision 17405)
@@ -0,0 +1,139 @@
+﻿namespace HeuristicLab.JsonInterface.OptimizerIntegration.Shared {
+  partial class NumericRangeControl {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.textBoxFrom = new System.Windows.Forms.TextBox();
+      this.label6 = new System.Windows.Forms.Label();
+      this.groupBox2 = new System.Windows.Forms.GroupBox();
+      this.checkBoxFrom = new System.Windows.Forms.CheckBox();
+      this.checkBoxTo = new System.Windows.Forms.CheckBox();
+      this.textBoxTo = new System.Windows.Forms.TextBox();
+      this.label1 = new System.Windows.Forms.Label();
+      this.groupBox2.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // textBoxFrom
+      // 
+      this.textBoxFrom.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.textBoxFrom.Location = new System.Drawing.Point(36, 36);
+      this.textBoxFrom.Name = "textBoxFrom";
+      this.textBoxFrom.ReadOnly = true;
+      this.textBoxFrom.Size = new System.Drawing.Size(164, 20);
+      this.textBoxFrom.TabIndex = 2;
+      this.textBoxFrom.Leave += new System.EventHandler(this.textBoxFrom_Leave);
+      // 
+      // label6
+      // 
+      this.label6.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.label6.AutoSize = true;
+      this.label6.Location = new System.Drawing.Point(7, 20);
+      this.label6.Name = "label6";
+      this.label6.Size = new System.Drawing.Size(30, 13);
+      this.label6.TabIndex = 0;
+      this.label6.Text = "From";
+      // 
+      // groupBox2
+      // 
+      this.groupBox2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.groupBox2.Controls.Add(this.checkBoxTo);
+      this.groupBox2.Controls.Add(this.textBoxTo);
+      this.groupBox2.Controls.Add(this.label1);
+      this.groupBox2.Controls.Add(this.checkBoxFrom);
+      this.groupBox2.Controls.Add(this.textBoxFrom);
+      this.groupBox2.Controls.Add(this.label6);
+      this.groupBox2.Location = new System.Drawing.Point(0, 3);
+      this.groupBox2.Name = "groupBox2";
+      this.groupBox2.Size = new System.Drawing.Size(206, 109);
+      this.groupBox2.TabIndex = 19;
+      this.groupBox2.TabStop = false;
+      this.groupBox2.Text = "Range";
+      // 
+      // checkBoxFrom
+      // 
+      this.checkBoxFrom.AutoSize = true;
+      this.checkBoxFrom.Location = new System.Drawing.Point(10, 39);
+      this.checkBoxFrom.Name = "checkBoxFrom";
+      this.checkBoxFrom.Size = new System.Drawing.Size(15, 14);
+      this.checkBoxFrom.TabIndex = 4;
+      this.checkBoxFrom.UseVisualStyleBackColor = true;
+      this.checkBoxFrom.CheckStateChanged += new System.EventHandler(this.checkBoxFrom_CheckStateChanged);
+      // 
+      // checkBoxTo
+      // 
+      this.checkBoxTo.AutoSize = true;
+      this.checkBoxTo.Location = new System.Drawing.Point(10, 78);
+      this.checkBoxTo.Name = "checkBoxTo";
+      this.checkBoxTo.Size = new System.Drawing.Size(15, 14);
+      this.checkBoxTo.TabIndex = 7;
+      this.checkBoxTo.UseVisualStyleBackColor = true;
+      this.checkBoxTo.CheckStateChanged += new System.EventHandler(this.checkBoxTo_CheckStateChanged);
+      // 
+      // textBoxTo
+      // 
+      this.textBoxTo.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.textBoxTo.Location = new System.Drawing.Point(36, 75);
+      this.textBoxTo.Name = "textBoxTo";
+      this.textBoxTo.ReadOnly = true;
+      this.textBoxTo.Size = new System.Drawing.Size(164, 20);
+      this.textBoxTo.TabIndex = 6;
+      this.textBoxTo.Leave += new System.EventHandler(this.textBoxTo_Leave);
+      // 
+      // label1
+      // 
+      this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.label1.AutoSize = true;
+      this.label1.Location = new System.Drawing.Point(7, 59);
+      this.label1.Name = "label1";
+      this.label1.Size = new System.Drawing.Size(20, 13);
+      this.label1.TabIndex = 5;
+      this.label1.Text = "To";
+      // 
+      // NumericRangeControl
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.groupBox2);
+      this.Name = "NumericRangeControl";
+      this.Size = new System.Drawing.Size(206, 112);
+      this.groupBox2.ResumeLayout(false);
+      this.groupBox2.PerformLayout();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+    private System.Windows.Forms.TextBox textBoxFrom;
+    private System.Windows.Forms.Label label6;
+    private System.Windows.Forms.GroupBox groupBox2;
+    private System.Windows.Forms.CheckBox checkBoxTo;
+    private System.Windows.Forms.TextBox textBoxTo;
+    private System.Windows.Forms.Label label1;
+    private System.Windows.Forms.CheckBox checkBoxFrom;
+  }
+}
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/NumericRangeControl.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/NumericRangeControl.cs	(revision 17405)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/NumericRangeControl.cs	(revision 17405)
@@ -0,0 +1,86 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using System.Globalization;
+
+namespace HeuristicLab.JsonInterface.OptimizerIntegration.Shared {
+  public partial class NumericRangeControl : UserControl {
+
+    private JsonItemVM vm;
+    public JsonItemVM VM {
+      get => vm; 
+      set {
+        vm = value;
+        Init();
+      } 
+    }
+    public bool IsDouble { get; set; }
+
+
+
+    public NumericRangeControl() {
+      InitializeComponent();
+      Init();
+    }
+
+    private void Init() {
+      textBoxFrom.Text = "";
+      textBoxTo.Text = "";
+      textBoxFrom.ReadOnly = true;
+      textBoxTo.ReadOnly = true;
+      checkBoxFrom.Checked = false;
+      checkBoxFrom.Checked = false;
+    }
+    
+    private void checkBoxFrom_CheckStateChanged(object sender, EventArgs e) {
+      textBoxFrom.ReadOnly = !checkBoxFrom.Checked;
+      textBoxFrom.Text = "";
+      if(!checkBoxFrom.Checked)
+        SetRange();
+    }
+
+    private void checkBoxTo_CheckStateChanged(object sender, EventArgs e) {
+      textBoxTo.ReadOnly = !checkBoxTo.Checked;
+      textBoxTo.Text = "";
+      if (!checkBoxTo.Checked)
+        SetRange();
+    }
+
+    private void textBoxFrom_Leave(object sender, EventArgs e) {
+      if (checkBoxFrom.Checked)
+        SetRange();
+    }
+
+    private void textBoxTo_Leave(object sender, EventArgs e) {
+      if (checkBoxTo.Checked)
+        SetRange();
+    }
+
+    private void SetRange() {
+      object[] range = new object[2];
+      if (checkBoxFrom.Checked && !string.IsNullOrWhiteSpace(textBoxFrom.Text))
+        range[0] = Parse(textBoxFrom.Text);
+      else
+        range[0] = IsDouble ? double.MinValue : int.MinValue;
+
+      if (checkBoxTo.Checked && !string.IsNullOrWhiteSpace(textBoxTo.Text))
+        range[1] = Parse(textBoxTo.Text);
+      else
+        range[1] = IsDouble ? double.MinValue : int.MinValue;
+      VM.Item.Range = range;
+    }
+
+    private object Parse(string s) {
+      if (IsDouble) {
+        return double.Parse(s.Replace(",", "."), NumberStyles.Any, CultureInfo.InvariantCulture);
+      }
+      return int.Parse(s);
+    }
+  }
+}
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/NumericRangeControl.resx
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/NumericRangeControl.resx	(revision 17405)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/NumericRangeControl.resx	(revision 17405)
@@ -0,0 +1,120 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/JsonItemVM.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/JsonItemVM.cs	(revision 17404)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/JsonItemVM.cs	(revision 17405)
@@ -7,12 +7,38 @@
 
 namespace HeuristicLab.JsonInterface.OptimizerIntegration {
+  public delegate void OnSelectionChangeHandler(JsonItemVM sender, bool selection);
+  public delegate void OnChildAddedHandler(JsonItemVM sender, JsonItemVM child);
+
   public class JsonItemVM {
     public JsonItem Item { get; set; }
 
-    public bool Selected { get; set; } = true;
+    private IList<JsonItemVM> children = new List<JsonItemVM>();
+    public IEnumerable<JsonItemVM> Children { 
+      get => children; 
+    }
+
+    public JsonItemVM Parent { get; set; }
+
+    private bool selected = true;
+    public bool Selected {
+      get => selected; 
+      set {
+        selected = value;
+        OnSelectionChange?.Invoke(this, Selected);
+      } 
+    }
+
+    public event OnSelectionChangeHandler OnSelectionChange;
+    public event OnChildAddedHandler OnChildAdded;
 
     public JsonItemVM(JsonItem item) {
       this.Item = item;
     }
+
+    public void AddChild(JsonItemVM vm) {
+      children.Add(vm);
+      vm.Parent = this;
+      OnChildAdded?.Invoke(this, vm);
+    }
   }
 }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ExportJsonDialog.Designer.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ExportJsonDialog.Designer.cs	(revision 17404)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ExportJsonDialog.Designer.cs	(revision 17405)
@@ -27,6 +27,9 @@
       this.dataGridViewTextBoxColumn1 = new System.Windows.Forms.DataGridViewTextBoxColumn();
       this.exportButton = new System.Windows.Forms.Button();
-      this.tabel = new System.Windows.Forms.TableLayoutPanel();
+      this.treeView = new System.Windows.Forms.TreeView();
+      this.groupBoxDetails = new System.Windows.Forms.GroupBox();
+      this.panel = new System.Windows.Forms.Panel();
       this.jsonItemBindingSource = new System.Windows.Forms.BindingSource(this.components);
+      this.groupBoxDetails.SuspendLayout();
       ((System.ComponentModel.ISupportInitialize)(this.jsonItemBindingSource)).BeginInit();
       this.SuspendLayout();
@@ -41,5 +44,5 @@
       // 
       this.exportButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
-      this.exportButton.Location = new System.Drawing.Point(397, 515);
+      this.exportButton.Location = new System.Drawing.Point(801, 687);
       this.exportButton.Name = "exportButton";
       this.exportButton.Size = new System.Drawing.Size(121, 34);
@@ -49,19 +52,37 @@
       this.exportButton.Click += new System.EventHandler(this.exportButton_Click);
       // 
-      // tabel
+      // treeView
       // 
-      this.tabel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+      this.treeView.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left)));
+      this.treeView.Location = new System.Drawing.Point(12, 12);
+      this.treeView.Name = "treeView";
+      this.treeView.Size = new System.Drawing.Size(342, 669);
+      this.treeView.TabIndex = 3;
+      this.treeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView_AfterSelect);
+      // 
+      // groupBoxDetails
+      // 
+      this.groupBoxDetails.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.tabel.AutoScroll = true;
-      this.tabel.BackColor = System.Drawing.SystemColors.Control;
-      this.tabel.ColumnCount = 1;
-      this.tabel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
-      this.tabel.Location = new System.Drawing.Point(12, 12);
-      this.tabel.Name = "tabel";
-      this.tabel.RowCount = 1;
-      this.tabel.RowStyles.Add(new System.Windows.Forms.RowStyle());
-      this.tabel.Size = new System.Drawing.Size(506, 497);
-      this.tabel.TabIndex = 2;
+      this.groupBoxDetails.Controls.Add(this.panel);
+      this.groupBoxDetails.Location = new System.Drawing.Point(360, 12);
+      this.groupBoxDetails.Name = "groupBoxDetails";
+      this.groupBoxDetails.Size = new System.Drawing.Size(562, 669);
+      this.groupBoxDetails.TabIndex = 4;
+      this.groupBoxDetails.TabStop = false;
+      this.groupBoxDetails.Text = "Details";
+      // 
+      // panel
+      // 
+      this.panel.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.panel.AutoScroll = true;
+      this.panel.Location = new System.Drawing.Point(7, 20);
+      this.panel.Name = "panel";
+      this.panel.Size = new System.Drawing.Size(549, 643);
+      this.panel.TabIndex = 0;
       // 
       // jsonItemBindingSource
@@ -73,11 +94,13 @@
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.ClientSize = new System.Drawing.Size(530, 561);
+      this.ClientSize = new System.Drawing.Size(934, 733);
+      this.Controls.Add(this.groupBoxDetails);
+      this.Controls.Add(this.treeView);
       this.Controls.Add(this.exportButton);
-      this.Controls.Add(this.tabel);
       this.Name = "ExportJsonDialog";
       this.RightToLeft = System.Windows.Forms.RightToLeft.No;
       this.ShowIcon = false;
       this.Text = "Export Json";
+      this.groupBoxDetails.ResumeLayout(false);
       ((System.ComponentModel.ISupportInitialize)(this.jsonItemBindingSource)).EndInit();
       this.ResumeLayout(false);
@@ -91,5 +114,7 @@
     private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn1;
     private System.Windows.Forms.Button exportButton;
-    private System.Windows.Forms.TableLayoutPanel tabel;
+    private System.Windows.Forms.TreeView treeView;
+    private System.Windows.Forms.GroupBox groupBoxDetails;
+    private System.Windows.Forms.Panel panel;
   }
 }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ExportJsonDialog.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ExportJsonDialog.cs	(revision 17404)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ExportJsonDialog.cs	(revision 17405)
@@ -17,5 +17,7 @@
     private IContent content;
     private static SaveFileDialog saveFileDialog;
-
+    private IDictionary<int, UserControl> ctrlCollection = new Dictionary<int, UserControl>();
+    private JsonItem root;
+    private IOptimizer optimizer;
     private IList<JsonItemVM> vms;
     private JCGenerator generator = new JCGenerator();
@@ -25,33 +27,13 @@
         content = value;
 
-        IEnumerable<JsonItem> items = generator.FetchJsonItems(content as IOptimizer);
+        //IEnumerable<JsonItem> items = generator.FetchJsonItems(content as IOptimizer);
         vms = new List<JsonItemVM>();
-        tabel.Controls.Clear();
+        treeView.Nodes.Clear();
 
-        foreach (var item in items) {
-          if (!(item is UnsupportedJsonItem) && item.Value != null && item.Range != null) {
-            JsonItemVM vm = new JsonItemVM(item);
-            vms.Add(vm);
-            UserControl control = null;
-            if(item.Value is string) {
-              control = new JsonItemValidValuesControl(vm);
-            } else if (item.Value is bool) {
-              control = new JsonItemBoolControl(vm);
-            } else if (item.Value is int) {
-              control = new JsonItemValueControl(vm, false);
-            } else if (item.Value is double) {
-              control = new JsonItemValueControl(vm, true);
-            } else if (item.Value is Array) {
-              if(((Array)item.Value).GetValue(0) is int)
-                control = new JsonItemRangeControl(vm, false);
-              else if (((Array)item.Value).GetValue(0) is double)
-                control = new JsonItemRangeControl(vm, true);
-            }
-            if (control != null) {
-              control.Anchor = AnchorStyles.Left | AnchorStyles.Right;
-              tabel.Controls.Add(control);
-            }
-          }
-        }
+        optimizer = content as IOptimizer;
+        root = JsonItemConverter.Extract(optimizer);
+        TreeNode parent = new TreeNode(root.Name);
+        BuildTreeNode(parent, root);
+        treeView.Nodes.Add(parent);
       } 
     }
@@ -62,9 +44,8 @@
 
     private void exportButton_Click(object sender, EventArgs e) {
-      IList<JsonItem> items = new List<JsonItem>();
-
       foreach(var x in vms) {
-        if (x.Selected)
-          items.Add(x.Item);
+        if (!x.Selected) {
+          x.Item.Parent.Children.Remove(x.Item);
+        }
       }
 
@@ -80,9 +61,84 @@
 
       if (saveFileDialog.ShowDialog() == DialogResult.OK) {
-        File.WriteAllText(saveFileDialog.FileName, generator.GenerateTemplate(items));
+        File.WriteAllText(saveFileDialog.FileName, generator.GenerateTemplate(root, optimizer));
       }
 
       this.Close();
     }
+
+    private JsonItemVM BuildTreeNode(TreeNode node, JsonItem item) {
+      JsonItemVM vm = new JsonItemVM(item);
+
+      vms.Add(vm);
+      ctrlCollection.Add(node.GetHashCode(), GenerateControl(vm));
+      if (item.Children != null) {
+        foreach (var c in item.Children) {
+          if (IsDrawableItem(c)) {
+            if (c is ResultItem) {
+
+            } else {
+              TreeNode childNode = new TreeNode(c.Name);
+              node.Nodes.Add(childNode);
+              vm.AddChild(BuildTreeNode(childNode, c));
+            }
+          }
+        }
+      }
+      
+      return vm;
+    }
+
+    private bool IsDrawableItem(JsonItem item) {
+      bool b = false;
+      if (item.Children != null) {
+        foreach (var c in item.Children) {
+          b = b || IsDrawableItem(c);
+        }
+      }
+      
+      return b || (item.Value != null || item.Range != null || item.ActualName != null);
+    }
+    
+    private void treeView_AfterSelect(object sender, TreeViewEventArgs e) {
+      if(ctrlCollection.TryGetValue(treeView.SelectedNode.GetHashCode(), out UserControl ctrl)) {
+        panel.Controls.Clear();
+        if (ctrl != null) {
+          panel.Controls.Add(ctrl);
+        }
+        panel.Refresh();
+      }
+    }
+
+    private UserControl GenerateControl(JsonItemVM vm) {
+      JsonItem item = vm.Item;
+      UserControl control = null;
+      if (!(item is UnsupportedJsonItem)) {
+        if (item.Value is string && item.Range != null) {
+          control = new JsonItemValidValuesControl(vm);
+        } else if (item.Value is bool && item.Range != null) {
+          control = new JsonItemBoolControl(vm);
+        } else if (item.Value is int && item.Range != null) {
+          control = new JsonItemValueControl(vm, false);
+        } else if (item.Value is double && item.Range != null) {
+          control = new JsonItemValueControl(vm, true);
+        } else if (item.Value is Array) {
+          Array arr = (Array)item.Value;
+          if (arr.Length == 2 && arr.GetValue(0) is int && item.Range != null)
+            control = new JsonItemRangeControl(vm, false);
+          else if (arr.Length == 2 && arr.GetValue(0) is double && item.Range != null)
+            control = new JsonItemRangeControl(vm, true);
+          else if (arr.Rank == 1 && arr.GetValue(0) is double) {
+            control = new JsonItemArrayControl(vm);
+          }
+        } else {
+          control = new JsonItemBaseControl(vm);
+        }
+        if (control != null) {
+          control.Dock = DockStyle.Fill;
+          control.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
+        }
+      }
+      return control;
+    }
   }
 }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemArrayControl.Designer.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemArrayControl.Designer.cs	(revision 17405)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemArrayControl.Designer.cs	(revision 17405)
@@ -0,0 +1,59 @@
+﻿namespace HeuristicLab.JsonInterface.OptimizerIntegration {
+  partial class JsonItemArrayControl {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.dataGridView = new System.Windows.Forms.DataGridView();
+      ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // dataGridView
+      // 
+      this.dataGridView.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.dataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+      this.dataGridView.Location = new System.Drawing.Point(92, 75);
+      this.dataGridView.Name = "dataGridView";
+      this.dataGridView.Size = new System.Drawing.Size(404, 357);
+      this.dataGridView.TabIndex = 13;
+      // 
+      // JsonItemArrayControl
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.dataGridView);
+      this.Name = "JsonItemArrayControl";
+      this.Size = new System.Drawing.Size(502, 438);
+      this.Controls.SetChildIndex(this.dataGridView, 0);
+      ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).EndInit();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.DataGridView dataGridView;
+  }
+}
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemArrayControl.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemArrayControl.cs	(revision 17405)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemArrayControl.cs	(revision 17405)
@@ -0,0 +1,21 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace HeuristicLab.JsonInterface.OptimizerIntegration {
+  public partial class JsonItemArrayControl : JsonItemBaseControl {
+    public JsonItemArrayControl(JsonItemVM vm) : base(vm) {
+      InitializeComponent();
+      dataGridView.Columns.Add("Values", "Values");
+      foreach(var val in ((Array)VM.Item.Value)) {
+        dataGridView.Rows.Add(val);
+      }
+    }
+  }
+}
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemArrayControl.resx
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemArrayControl.resx	(revision 17405)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemArrayControl.resx	(revision 17405)
@@ -0,0 +1,120 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemBoolControl.Designer.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemBoolControl.Designer.cs	(revision 17404)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemBoolControl.Designer.cs	(revision 17405)
@@ -25,4 +25,5 @@
     private void InitializeComponent() {
       this.checkBoxValue = new System.Windows.Forms.CheckBox();
+      this.label2 = new System.Windows.Forms.Label();
       this.SuspendLayout();
       // 
@@ -32,5 +33,5 @@
             | System.Windows.Forms.AnchorStyles.Right)));
       this.checkBoxValue.AutoSize = true;
-      this.checkBoxValue.Location = new System.Drawing.Point(92, 84);
+      this.checkBoxValue.Location = new System.Drawing.Point(92, 75);
       this.checkBoxValue.Name = "checkBoxValue";
       this.checkBoxValue.Size = new System.Drawing.Size(15, 14);
@@ -39,4 +40,13 @@
       this.checkBoxValue.CheckStateChanged += new System.EventHandler(this.checkBoxValue_CheckStateChanged);
       // 
+      // label2
+      // 
+      this.label2.AutoSize = true;
+      this.label2.Location = new System.Drawing.Point(6, 75);
+      this.label2.Name = "label2";
+      this.label2.Size = new System.Drawing.Size(34, 13);
+      this.label2.TabIndex = 20;
+      this.label2.Text = "Value";
+      // 
       // JsonItemBoolControl
       // 
@@ -44,8 +54,10 @@
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
       this.BackColor = System.Drawing.SystemColors.Control;
+      this.Controls.Add(this.label2);
       this.Controls.Add(this.checkBoxValue);
       this.Name = "JsonItemBoolControl";
       this.Size = new System.Drawing.Size(500, 105);
       this.Controls.SetChildIndex(this.checkBoxValue, 0);
+      this.Controls.SetChildIndex(this.label2, 0);
       this.ResumeLayout(false);
       this.PerformLayout();
@@ -55,4 +67,5 @@
     #endregion
     private System.Windows.Forms.CheckBox checkBoxValue;
+    private System.Windows.Forms.Label label2;
   }
 }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemDefaultControl.Designer.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemDefaultControl.Designer.cs	(revision 17405)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemDefaultControl.Designer.cs	(revision 17405)
@@ -0,0 +1,32 @@
+﻿namespace HeuristicLab.JsonInterface.OptimizerIntegration.Views {
+  partial class JsonItemDefaultControl {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+    }
+
+    #endregion
+  }
+}
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemDefaultControl.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemDefaultControl.cs	(revision 17405)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemDefaultControl.cs	(revision 17405)
@@ -0,0 +1,17 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace HeuristicLab.JsonInterface.OptimizerIntegration.Views {
+  public partial class JsonItemDefaultControl : UserControl {
+    public JsonItemDefaultControl() {
+      InitializeComponent();
+    }
+  }
+}
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemRangeControl.Designer.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemRangeControl.Designer.cs	(revision 17404)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemRangeControl.Designer.cs	(revision 17405)
@@ -29,11 +29,6 @@
       this.label4 = new System.Windows.Forms.Label();
       this.label2 = new System.Windows.Forms.Label();
-      this.textBoxRangeTo = new System.Windows.Forms.TextBox();
-      this.textBoxRangeFrom = new System.Windows.Forms.TextBox();
-      this.label5 = new System.Windows.Forms.Label();
-      this.label6 = new System.Windows.Forms.Label();
-      this.groupBox2 = new System.Windows.Forms.GroupBox();
+      this.numericRangeControl1 = new HeuristicLab.JsonInterface.OptimizerIntegration.Shared.NumericRangeControl();
       this.groupBox1.SuspendLayout();
-      this.groupBox2.SuspendLayout();
       this.SuspendLayout();
       // 
@@ -46,5 +41,5 @@
       this.groupBox1.Controls.Add(this.label4);
       this.groupBox1.Controls.Add(this.label2);
-      this.groupBox1.Location = new System.Drawing.Point(9, 81);
+      this.groupBox1.Location = new System.Drawing.Point(9, 75);
       this.groupBox1.Name = "groupBox1";
       this.groupBox1.Size = new System.Drawing.Size(487, 64);
@@ -93,58 +88,11 @@
       this.label2.Text = "From";
       // 
-      // textBoxRangeTo
+      // numericRangeControl1
       // 
-      this.textBoxRangeTo.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-      this.textBoxRangeTo.Location = new System.Drawing.Point(249, 36);
-      this.textBoxRangeTo.Name = "textBoxRangeTo";
-      this.textBoxRangeTo.Size = new System.Drawing.Size(230, 20);
-      this.textBoxRangeTo.TabIndex = 3;
-      this.textBoxRangeTo.Leave += new System.EventHandler(this.textBoxRangeTo_Leave);
-      // 
-      // textBoxRangeFrom
-      // 
-      this.textBoxRangeFrom.Location = new System.Drawing.Point(10, 36);
-      this.textBoxRangeFrom.Name = "textBoxRangeFrom";
-      this.textBoxRangeFrom.Size = new System.Drawing.Size(230, 20);
-      this.textBoxRangeFrom.TabIndex = 2;
-      this.textBoxRangeFrom.Leave += new System.EventHandler(this.textBoxRangeFrom_Leave);
-      // 
-      // label5
-      // 
-      this.label5.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-      this.label5.AutoSize = true;
-      this.label5.Location = new System.Drawing.Point(246, 20);
-      this.label5.Name = "label5";
-      this.label5.Size = new System.Drawing.Size(20, 13);
-      this.label5.TabIndex = 1;
-      this.label5.Text = "To";
-      // 
-      // label6
-      // 
-      this.label6.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-      this.label6.AutoSize = true;
-      this.label6.Location = new System.Drawing.Point(7, 20);
-      this.label6.Name = "label6";
-      this.label6.Size = new System.Drawing.Size(30, 13);
-      this.label6.TabIndex = 0;
-      this.label6.Text = "From";
-      // 
-      // groupBox2
-      // 
-      this.groupBox2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-      this.groupBox2.Controls.Add(this.textBoxRangeTo);
-      this.groupBox2.Controls.Add(this.textBoxRangeFrom);
-      this.groupBox2.Controls.Add(this.label5);
-      this.groupBox2.Controls.Add(this.label6);
-      this.groupBox2.Location = new System.Drawing.Point(9, 151);
-      this.groupBox2.Name = "groupBox2";
-      this.groupBox2.Size = new System.Drawing.Size(487, 64);
-      this.groupBox2.TabIndex = 18;
-      this.groupBox2.TabStop = false;
-      this.groupBox2.Text = "Range";
+      this.numericRangeControl1.Location = new System.Drawing.Point(9, 145);
+      this.numericRangeControl1.Name = "numericRangeControl1";
+      this.numericRangeControl1.Size = new System.Drawing.Size(487, 112);
+      this.numericRangeControl1.TabIndex = 18;
+      this.numericRangeControl1.Load += new System.EventHandler(this.numericRangeControl1_Load);
       // 
       // JsonItemRangeControl
@@ -152,14 +100,12 @@
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.groupBox2);
+      this.Controls.Add(this.numericRangeControl1);
       this.Controls.Add(this.groupBox1);
       this.Name = "JsonItemRangeControl";
-      this.Size = new System.Drawing.Size(500, 220);
+      this.Size = new System.Drawing.Size(500, 262);
       this.Controls.SetChildIndex(this.groupBox1, 0);
-      this.Controls.SetChildIndex(this.groupBox2, 0);
+      this.Controls.SetChildIndex(this.numericRangeControl1, 0);
       this.groupBox1.ResumeLayout(false);
       this.groupBox1.PerformLayout();
-      this.groupBox2.ResumeLayout(false);
-      this.groupBox2.PerformLayout();
       this.ResumeLayout(false);
       this.PerformLayout();
@@ -174,9 +120,5 @@
     private System.Windows.Forms.Label label4;
     private System.Windows.Forms.Label label2;
-    private System.Windows.Forms.TextBox textBoxRangeTo;
-    private System.Windows.Forms.TextBox textBoxRangeFrom;
-    private System.Windows.Forms.Label label5;
-    private System.Windows.Forms.Label label6;
-    private System.Windows.Forms.GroupBox groupBox2;
+    private Shared.NumericRangeControl numericRangeControl1;
   }
 }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemRangeControl.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemRangeControl.cs	(revision 17404)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemRangeControl.cs	(revision 17405)
@@ -35,10 +35,10 @@
 
     private void SetValue() {
-      if (!string.IsNullOrWhiteSpace(textBoxRangeFrom.Text))
+      if (!string.IsNullOrWhiteSpace(textBoxValueFrom.Text))
         value[0] = Parse(textBoxValueFrom.Text);
       else
         value[0] = ((Array)VM.Item.Value).GetValue(0);
 
-      if (!string.IsNullOrWhiteSpace(textBoxRangeTo.Text))
+      if (!string.IsNullOrWhiteSpace(textBoxValueTo.Text))
         value[1] = Parse(textBoxValueTo.Text);
       else
@@ -46,18 +46,5 @@
       VM.Item.Value = value;
     }
-
-    private void SetRange() {
-      if (!string.IsNullOrWhiteSpace(textBoxRangeFrom.Text))
-        range[0] = Parse(textBoxRangeFrom.Text);
-      else
-        range[0] = VM.Item.Range.First();
-
-      if (!string.IsNullOrWhiteSpace(textBoxRangeTo.Text))
-        range[1] = Parse(textBoxRangeTo.Text);
-      else
-        range[1] = VM.Item.Range.Last();
-      VM.Item.Range = range;
-    }
-
+    
     private void textBoxValueFrom_Leave(object sender, EventArgs e) {
       SetValue();
@@ -68,10 +55,7 @@
     }
 
-    private void textBoxRangeFrom_Leave(object sender, EventArgs e) {
-      SetRange();
-    }
-
-    private void textBoxRangeTo_Leave(object sender, EventArgs e) {
-      SetRange();
+    private void numericRangeControl1_Load(object sender, EventArgs e) {
+      numericRangeControl1.IsDouble = isDouble;
+      numericRangeControl1.VM = VM;
     }
   }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValidValuesControl.Designer.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValidValuesControl.Designer.cs	(revision 17404)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValidValuesControl.Designer.cs	(revision 17405)
@@ -24,74 +24,40 @@
     /// </summary>
     private void InitializeComponent() {
-      this.textBoxAdd = new System.Windows.Forms.TextBox();
       this.tableOptions = new System.Windows.Forms.TableLayoutPanel();
-      this.buttonAdd = new System.Windows.Forms.Button();
-      this.groupBox1 = new System.Windows.Forms.GroupBox();
-      this.panel2 = new System.Windows.Forms.Panel();
+      this.groupBoxRange = new System.Windows.Forms.GroupBox();
       this.comboBoxValues = new System.Windows.Forms.ComboBox();
-      this.tableOptions.SuspendLayout();
-      this.groupBox1.SuspendLayout();
-      this.panel2.SuspendLayout();
+      this.label2 = new System.Windows.Forms.Label();
+      this.groupBoxRange.SuspendLayout();
       this.SuspendLayout();
-      // 
-      // textBoxAdd
-      // 
-      this.textBoxAdd.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-      this.textBoxAdd.Location = new System.Drawing.Point(3, 3);
-      this.textBoxAdd.Name = "textBoxAdd";
-      this.textBoxAdd.Size = new System.Drawing.Size(420, 20);
-      this.textBoxAdd.TabIndex = 10;
       // 
       // tableOptions
       // 
-      this.tableOptions.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+      this.tableOptions.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.tableOptions.AutoSize = true;
       this.tableOptions.ColumnCount = 2;
+      this.tableOptions.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F));
       this.tableOptions.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
-      this.tableOptions.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 43F));
-      this.tableOptions.Controls.Add(this.textBoxAdd, 0, 0);
-      this.tableOptions.Controls.Add(this.buttonAdd, 1, 0);
-      this.tableOptions.Location = new System.Drawing.Point(3, 3);
+      this.tableOptions.Location = new System.Drawing.Point(6, 19);
       this.tableOptions.Name = "tableOptions";
       this.tableOptions.RowCount = 1;
       this.tableOptions.RowStyles.Add(new System.Windows.Forms.RowStyle());
-      this.tableOptions.Size = new System.Drawing.Size(469, 73);
+      this.tableOptions.Size = new System.Drawing.Size(478, 151);
       this.tableOptions.TabIndex = 12;
       // 
-      // buttonAdd
+      // groupBoxRange
       // 
-      this.buttonAdd.Location = new System.Drawing.Point(446, 3);
-      this.buttonAdd.Name = "buttonAdd";
-      this.buttonAdd.Size = new System.Drawing.Size(20, 20);
-      this.buttonAdd.TabIndex = 12;
-      this.buttonAdd.Text = "+";
-      this.buttonAdd.UseVisualStyleBackColor = true;
-      this.buttonAdd.Click += new System.EventHandler(this.buttonAdd_Click);
-      // 
-      // groupBox1
-      // 
-      this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-      this.groupBox1.Controls.Add(this.panel2);
-      this.groupBox1.Location = new System.Drawing.Point(6, 107);
-      this.groupBox1.Name = "groupBox1";
-      this.groupBox1.Size = new System.Drawing.Size(488, 104);
-      this.groupBox1.TabIndex = 14;
-      this.groupBox1.TabStop = false;
-      this.groupBox1.Text = "Range";
-      // 
-      // panel2
-      // 
-      this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+      this.groupBoxRange.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.panel2.AutoScroll = true;
-      this.panel2.Controls.Add(this.tableOptions);
-      this.panel2.Location = new System.Drawing.Point(7, 20);
-      this.panel2.Name = "panel2";
-      this.panel2.Size = new System.Drawing.Size(475, 78);
-      this.panel2.TabIndex = 0;
+      this.groupBoxRange.AutoSize = true;
+      this.groupBoxRange.Controls.Add(this.tableOptions);
+      this.groupBoxRange.Location = new System.Drawing.Point(6, 108);
+      this.groupBoxRange.Name = "groupBoxRange";
+      this.groupBoxRange.Size = new System.Drawing.Size(490, 176);
+      this.groupBoxRange.TabIndex = 14;
+      this.groupBoxRange.TabStop = false;
+      this.groupBoxRange.Text = "Range";
       // 
       // comboBoxValues
@@ -101,8 +67,17 @@
       this.comboBoxValues.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
       this.comboBoxValues.FormattingEnabled = true;
-      this.comboBoxValues.Location = new System.Drawing.Point(92, 81);
+      this.comboBoxValues.Location = new System.Drawing.Point(92, 75);
       this.comboBoxValues.Name = "comboBoxValues";
-      this.comboBoxValues.Size = new System.Drawing.Size(402, 21);
+      this.comboBoxValues.Size = new System.Drawing.Size(404, 21);
       this.comboBoxValues.TabIndex = 15;
+      // 
+      // label2
+      // 
+      this.label2.AutoSize = true;
+      this.label2.Location = new System.Drawing.Point(6, 78);
+      this.label2.Name = "label2";
+      this.label2.Size = new System.Drawing.Size(34, 13);
+      this.label2.TabIndex = 16;
+      this.label2.Text = "Value";
       // 
       // JsonItemValidValuesControl
@@ -110,17 +85,17 @@
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.AutoSize = true;
+      this.Controls.Add(this.label2);
       this.Controls.Add(this.comboBoxValues);
-      this.Controls.Add(this.groupBox1);
+      this.Controls.Add(this.groupBoxRange);
       this.ForeColor = System.Drawing.Color.Black;
       this.Name = "JsonItemValidValuesControl";
-      this.Size = new System.Drawing.Size(500, 217);
+      this.Size = new System.Drawing.Size(500, 290);
       this.Load += new System.EventHandler(this.JsonItemValidValuesControl_Load);
-      this.Controls.SetChildIndex(this.groupBox1, 0);
+      this.Controls.SetChildIndex(this.groupBoxRange, 0);
       this.Controls.SetChildIndex(this.comboBoxValues, 0);
-      this.tableOptions.ResumeLayout(false);
-      this.tableOptions.PerformLayout();
-      this.groupBox1.ResumeLayout(false);
-      this.panel2.ResumeLayout(false);
-      this.panel2.PerformLayout();
+      this.Controls.SetChildIndex(this.label2, 0);
+      this.groupBoxRange.ResumeLayout(false);
+      this.groupBoxRange.PerformLayout();
       this.ResumeLayout(false);
       this.PerformLayout();
@@ -129,10 +104,8 @@
 
     #endregion
-    private System.Windows.Forms.TextBox textBoxAdd;
-    private System.Windows.Forms.Button buttonAdd;
     private System.Windows.Forms.TableLayoutPanel tableOptions;
-    private System.Windows.Forms.GroupBox groupBox1;
-    private System.Windows.Forms.Panel panel2;
+    private System.Windows.Forms.GroupBox groupBoxRange;
     private System.Windows.Forms.ComboBox comboBoxValues;
+    private System.Windows.Forms.Label label2;
   }
 }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValidValuesControl.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValidValuesControl.cs	(revision 17404)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValidValuesControl.cs	(revision 17405)
@@ -21,8 +21,9 @@
         }
       }
+
     }
 
     private void AddOption(string opt) {
-      comboBoxValues.Items.Add(opt);
+      AddComboOption(opt);
       TextBox tb = new TextBox();
       tb.Text = opt;
@@ -30,29 +31,38 @@
       tb.Size = new Size(420, 20);
       tb.ReadOnly = true;
-      Button btn = new Button();
-      btn.Text = "-";
-      btn.Size = new Size(20, 20);
-      btn.Click += (o, args) => {
-        tableOptions.Controls.Remove(tb);
-        tableOptions.Controls.Remove(btn);
-        comboBoxValues.Items.Remove(tb.Text);
-        IList<string> items = new List<string>();
-        foreach(var i in comboBoxValues.Items) {
-          items.Add((string)i);
-        }
-        VM.Item.Range = items;
-        tableOptions.Refresh();
+
+      CheckBox checkBox = new CheckBox();
+      checkBox.Checked = true;
+      
+      checkBox.CheckStateChanged += (o, args) => {
+        if (checkBox.Checked)
+          AddComboOption(opt);
+        else
+          RemoveComboOption(opt);
       };
+      tableOptions.Controls.Add(checkBox);
       tableOptions.Controls.Add(tb);
-      tableOptions.Controls.Add(btn);
     }
 
-    private void buttonAdd_Click(object sender, EventArgs e) {
-      string newOption = textBoxAdd.Text;
-      if (string.IsNullOrWhiteSpace(newOption)) return;
-      textBoxAdd.Text = "";
-      AddOption(newOption);
+    private void AddComboOption(string opt) {
+      comboBoxValues.Items.Add(opt);
+      IList<string> items = new List<string>();
+      foreach (var i in comboBoxValues.Items) {
+        items.Add((string)i);
+      }
+      VM.Item.Range = items;
+      tableOptions.Refresh();
     }
 
+    private void RemoveComboOption(string opt) {
+      comboBoxValues.Items.Remove(opt);
+      IList<string> items = new List<string>();
+      foreach (var i in comboBoxValues.Items) {
+        items.Add((string)i);
+      }
+      VM.Item.Range = items;
+      tableOptions.Refresh();
+    }
+    
     private void comboBoxValues_SelectedValueChanged(object sender, EventArgs e) {
       VM.Item.Value = (string)comboBoxValues.SelectedItem;
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValueControl.Designer.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValueControl.Designer.cs	(revision 17404)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValueControl.Designer.cs	(revision 17405)
@@ -25,10 +25,6 @@
     private void InitializeComponent() {
       this.textBoxValue = new System.Windows.Forms.TextBox();
-      this.groupBox1 = new System.Windows.Forms.GroupBox();
-      this.textBoxTo = new System.Windows.Forms.TextBox();
-      this.textBoxFrom = new System.Windows.Forms.TextBox();
-      this.label4 = new System.Windows.Forms.Label();
       this.label2 = new System.Windows.Forms.Label();
-      this.groupBox1.SuspendLayout();
+      this.numericRangeControl1 = new HeuristicLab.JsonInterface.OptimizerIntegration.Shared.NumericRangeControl();
       this.SuspendLayout();
       // 
@@ -37,64 +33,28 @@
       this.textBoxValue.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
             | System.Windows.Forms.AnchorStyles.Right)));
-      this.textBoxValue.Location = new System.Drawing.Point(92, 81);
+      this.textBoxValue.Location = new System.Drawing.Point(92, 75);
       this.textBoxValue.Name = "textBoxValue";
-      this.textBoxValue.Size = new System.Drawing.Size(402, 20);
+      this.textBoxValue.Size = new System.Drawing.Size(404, 20);
       this.textBoxValue.TabIndex = 14;
       this.textBoxValue.Leave += new System.EventHandler(this.textBoxValue_Leave);
       // 
-      // groupBox1
-      // 
-      this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-      this.groupBox1.Controls.Add(this.textBoxTo);
-      this.groupBox1.Controls.Add(this.textBoxFrom);
-      this.groupBox1.Controls.Add(this.label4);
-      this.groupBox1.Controls.Add(this.label2);
-      this.groupBox1.Location = new System.Drawing.Point(9, 107);
-      this.groupBox1.Name = "groupBox1";
-      this.groupBox1.Size = new System.Drawing.Size(487, 64);
-      this.groupBox1.TabIndex = 15;
-      this.groupBox1.TabStop = false;
-      this.groupBox1.Text = "Range";
-      // 
-      // textBoxTo
-      // 
-      this.textBoxTo.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-      this.textBoxTo.Location = new System.Drawing.Point(249, 36);
-      this.textBoxTo.Name = "textBoxTo";
-      this.textBoxTo.Size = new System.Drawing.Size(230, 20);
-      this.textBoxTo.TabIndex = 3;
-      this.textBoxTo.Leave += new System.EventHandler(this.textBoxTo_Leave);
-      // 
-      // textBoxFrom
-      // 
-      this.textBoxFrom.Location = new System.Drawing.Point(10, 36);
-      this.textBoxFrom.Name = "textBoxFrom";
-      this.textBoxFrom.Size = new System.Drawing.Size(230, 20);
-      this.textBoxFrom.TabIndex = 2;
-      this.textBoxFrom.Leave += new System.EventHandler(this.textBoxFrom_Leave);
-      // 
-      // label4
-      // 
-      this.label4.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-      this.label4.AutoSize = true;
-      this.label4.Location = new System.Drawing.Point(246, 20);
-      this.label4.Name = "label4";
-      this.label4.Size = new System.Drawing.Size(20, 13);
-      this.label4.TabIndex = 1;
-      this.label4.Text = "To";
-      // 
       // label2
       // 
-      this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
       this.label2.AutoSize = true;
-      this.label2.Location = new System.Drawing.Point(7, 20);
+      this.label2.Location = new System.Drawing.Point(6, 78);
       this.label2.Name = "label2";
-      this.label2.Size = new System.Drawing.Size(30, 13);
-      this.label2.TabIndex = 0;
-      this.label2.Text = "From";
+      this.label2.Size = new System.Drawing.Size(34, 13);
+      this.label2.TabIndex = 15;
+      this.label2.Text = "Value";
+      // 
+      // numericRangeControl1
+      // 
+      this.numericRangeControl1.IsDouble = false;
+      this.numericRangeControl1.Location = new System.Drawing.Point(9, 101);
+      this.numericRangeControl1.Name = "numericRangeControl1";
+      this.numericRangeControl1.Size = new System.Drawing.Size(487, 112);
+      this.numericRangeControl1.TabIndex = 16;
+      this.numericRangeControl1.VM = null;
+      this.numericRangeControl1.Load += new System.EventHandler(this.numericRangeControl1_Load);
       // 
       // JsonItemValueControl
@@ -102,12 +62,12 @@
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.groupBox1);
+      this.Controls.Add(this.numericRangeControl1);
+      this.Controls.Add(this.label2);
       this.Controls.Add(this.textBoxValue);
       this.Name = "JsonItemValueControl";
-      this.Size = new System.Drawing.Size(500, 177);
+      this.Size = new System.Drawing.Size(500, 220);
       this.Controls.SetChildIndex(this.textBoxValue, 0);
-      this.Controls.SetChildIndex(this.groupBox1, 0);
-      this.groupBox1.ResumeLayout(false);
-      this.groupBox1.PerformLayout();
+      this.Controls.SetChildIndex(this.label2, 0);
+      this.Controls.SetChildIndex(this.numericRangeControl1, 0);
       this.ResumeLayout(false);
       this.PerformLayout();
@@ -118,9 +78,6 @@
 
     private System.Windows.Forms.TextBox textBoxValue;
-    private System.Windows.Forms.GroupBox groupBox1;
-    private System.Windows.Forms.TextBox textBoxTo;
-    private System.Windows.Forms.TextBox textBoxFrom;
-    private System.Windows.Forms.Label label4;
     private System.Windows.Forms.Label label2;
+    private Shared.NumericRangeControl numericRangeControl1;
   }
 }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValueControl.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValueControl.cs	(revision 17404)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValueControl.cs	(revision 17405)
@@ -19,6 +19,4 @@
       this.isDouble = isDouble;
       textBoxValue.Text = VM.Item.Value.ToString();
-      textBoxFrom.Text = VM.Item.Range.First().ToString();
-      textBoxTo.Text = VM.Item.Range.Last().ToString();
       range[0] = VM.Item.Range.First();
       range[1] = VM.Item.Range.Last();
@@ -27,6 +25,4 @@
     private object Parse(string s) {
       if (isDouble) {
-        if (s == "-1,79769313486232E+308") return double.MinValue;
-        if (s == "1,79769313486232E+308") return double.MaxValue;
         return double.Parse(s.Replace(",", "."), NumberStyles.Any, CultureInfo.InvariantCulture);
       }
@@ -34,24 +30,4 @@
     }
 
-    private void SetRange() {
-      if (!string.IsNullOrWhiteSpace(textBoxFrom.Text))
-        range[0] = Parse(textBoxFrom.Text);
-      else
-        range[0] = VM.Item.Range.First();
-
-      if (!string.IsNullOrWhiteSpace(textBoxTo.Text))
-        range[1] = Parse(textBoxTo.Text);
-      else
-        range[1] = VM.Item.Range.Last();
-      VM.Item.Range = range;
-    }
-
-    private void textBoxTo_Leave(object sender, EventArgs e) {
-      SetRange();
-    }
-
-    private void textBoxFrom_Leave(object sender, EventArgs e) {
-      SetRange();
-    }
 
     private void textBoxValue_Leave(object sender, EventArgs e) {
@@ -59,4 +35,9 @@
         VM.Item.Value = Parse(textBoxValue.Text);
     }
+
+    private void numericRangeControl1_Load(object sender, EventArgs e) {
+      numericRangeControl1.IsDouble = isDouble;
+      numericRangeControl1.VM = VM;
+    }
   }
 }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Constants.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Constants.cs	(revision 17404)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Constants.cs	(revision 17405)
@@ -16,4 +16,5 @@
     internal const string HLFileLocation = "HLFileLocation";
     internal const string Parameters = "Parameters";
+    internal const string ActivatedResults = "ActivatedResults";
 
     internal const string Template = @"{
@@ -23,5 +24,6 @@
         '" + HLFileLocation + @"':''
       },
-      '" + Parameters + @"': []
+      '" + Parameters + @"': [],
+      '" + ActivatedResults + @"': []
     }";
   }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/AlgorithmConverter.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/AlgorithmConverter.cs	(revision 17404)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/AlgorithmConverter.cs	(revision 17405)
@@ -24,4 +24,11 @@
       base.Populate(value, item, root);
       IAlgorithm algorithm = value as IAlgorithm;
+      foreach(var res in algorithm.Results) {
+        item.AddChilds(new ResultItem() { 
+          Name = res.Name, 
+          Value = true, 
+          Range = new object[] { true, false } 
+        });
+      }
       item.AddChilds(root.Extract(algorithm.Problem, root));
     }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/HeuristicLab.JsonInterface.csproj
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/HeuristicLab.JsonInterface.csproj	(revision 17404)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/HeuristicLab.JsonInterface.csproj	(revision 17405)
@@ -66,4 +66,5 @@
     <Compile Include="Converters\ValueLookupParameterConverter.cs" />
     <Compile Include="Converters\ValueRangeConverter.cs" />
+    <Compile Include="ResultItem.cs" />
     <Compile Include="SingleLineArrayJsonWriter.cs" />
     <Compile Include="Extensions\TypeExtensions.cs" />
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JCGenerator.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JCGenerator.cs	(revision 17404)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JCGenerator.cs	(revision 17405)
@@ -20,4 +20,5 @@
     private IOptimizer Optimizer { get; set; }
 
+    
     public string GenerateTemplate(IOptimizer optimizer) {
       // data container
@@ -33,5 +34,4 @@
       // which have parameters aswell
       AddIItem(optimizer);
-
       // save the JArray with JsonItems (= IParameterizedItems)
       Template[Constants.Parameters] = JArrayItems;
@@ -45,9 +45,46 @@
       Template[Constants.Metadata][Constants.HLFileLocation] = @"C:\Workspace\template.hl";
 
+      JArray ResultItems = new JArray();
+
       JArrayItems = new JArray();
       foreach (var item in items) {
-        JArrayItems.Add(Serialize(item));
+        if (item is ResultItem)
+          ResultItems.Add(Serialize(item));
+        else
+          JArrayItems.Add(Serialize(item));
       }
       Template[Constants.Parameters] = JArrayItems;
+      Template[Constants.ActivatedResults] = ResultItems;
+
+      // serialize template and return string
+      return SingleLineArrayJsonWriter.Serialize(Template);
+    }
+
+    public string GenerateTemplate(JsonItem rootItem, IOptimizer optimizer) {
+      // data container
+      Template = JObject.Parse(Constants.Template);
+      JsonItems = new List<JsonItem>();
+
+      // extract JsonItem, save the name in the metadata section of the 
+      // template and save it an JArray incl. all parameters of the JsonItem, 
+      // which have parameters aswell
+      Template[Constants.Metadata][Constants.Optimizer] = optimizer.Name;
+      PopulateJsonItems(rootItem);
+
+      ProtoBufSerializer serializer = new ProtoBufSerializer();
+      serializer.Serialize(Optimizer, @"C:\Workspace\template.hl");
+      Template[Constants.Metadata][Constants.HLFileLocation] = @"C:\Workspace\template.hl";
+
+      JArray ResultItems = new JArray();
+
+      JArrayItems = new JArray();
+      foreach (var item in JsonItems) {
+        if (item is ResultItem)
+          ResultItems.Add(Serialize(item));
+        else
+          JArrayItems.Add(Serialize(item));
+      }
+      Template[Constants.Parameters] = JArrayItems;
+      Template[Constants.ActivatedResults] = ResultItems;
 
       // serialize template and return string
@@ -81,6 +118,6 @@
     private void PopulateJsonItems(JsonItem item) {
       IEnumerable<JsonItem> tmpParameter = item.Children;
-
-      if (item.Value != null || item.Range != null) {
+      
+      if (item.Value != null || item.Range != null || item is ResultItem || item.ActualName != null) {
         JsonItems.Add(item);
       }
