Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/HeuristicLab.JsonInterface.OptimizerIntegration.csproj
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/HeuristicLab.JsonInterface.OptimizerIntegration.csproj	(revision 17828)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/HeuristicLab.JsonInterface.OptimizerIntegration.csproj	(revision 17829)
@@ -95,32 +95,32 @@
       <DependentUpon>Resources.resx</DependentUpon>
     </Compile>
-    <Compile Include="Shared\ArrayJsonItemControl.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="Shared\ArrayJsonItemControl.Designer.cs">
+    <Compile Include="Views\ArrayJsonItemControl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\ArrayJsonItemControl.Designer.cs">
       <DependentUpon>ArrayJsonItemControl.cs</DependentUpon>
     </Compile>
-    <Compile Include="Shared\CompoundControl.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="Shared\CompoundControl.Designer.cs">
+    <Compile Include="Views\CompoundControl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\CompoundControl.Designer.cs">
       <DependentUpon>CompoundControl.cs</DependentUpon>
     </Compile>
-    <Compile Include="Shared\JsonItemBaseControl.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="Shared\JsonItemBaseControl.Designer.cs">
+    <Compile Include="Views\JsonItemBaseControl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\JsonItemBaseControl.Designer.cs">
       <DependentUpon>JsonItemBaseControl.cs</DependentUpon>
     </Compile>
-    <Compile Include="Shared\MatrixJsonItemControl.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="Shared\MatrixJsonItemControl.Designer.cs">
+    <Compile Include="Views\MatrixJsonItemControl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\MatrixJsonItemControl.Designer.cs">
       <DependentUpon>MatrixJsonItemControl.cs</DependentUpon>
     </Compile>
-    <Compile Include="Shared\NumericRangeControl.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="Shared\NumericRangeControl.Designer.cs">
+    <Compile Include="Views\NumericRangeControl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\NumericRangeControl.Designer.cs">
       <DependentUpon>NumericRangeControl.cs</DependentUpon>
     </Compile>
@@ -138,8 +138,8 @@
     <Compile Include="ViewModels\StringValueVM.cs" />
     <Compile Include="ViewModels\ValueLookupJsonItemVM.cs" />
-    <Compile Include="Shared\ConcreteItemsRestrictor.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="Shared\ConcreteItemsRestrictor.Designer.cs">
+    <Compile Include="Views\ConcreteItemsRestrictor.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\ConcreteItemsRestrictor.Designer.cs">
       <DependentUpon>ConcreteItemsRestrictor.cs</DependentUpon>
     </Compile>
@@ -209,20 +209,20 @@
       <LastGenOutput>Resources.Designer.cs</LastGenOutput>
     </EmbeddedResource>
-    <EmbeddedResource Include="Shared\ArrayJsonItemControl.resx">
+    <EmbeddedResource Include="Views\ArrayJsonItemControl.resx">
       <DependentUpon>ArrayJsonItemControl.cs</DependentUpon>
     </EmbeddedResource>
-    <EmbeddedResource Include="Shared\CompoundControl.resx">
+    <EmbeddedResource Include="Views\CompoundControl.resx">
       <DependentUpon>CompoundControl.cs</DependentUpon>
     </EmbeddedResource>
-    <EmbeddedResource Include="Shared\JsonItemBaseControl.resx">
+    <EmbeddedResource Include="Views\JsonItemBaseControl.resx">
       <DependentUpon>JsonItemBaseControl.cs</DependentUpon>
     </EmbeddedResource>
-    <EmbeddedResource Include="Shared\MatrixJsonItemControl.resx">
+    <EmbeddedResource Include="Views\MatrixJsonItemControl.resx">
       <DependentUpon>MatrixJsonItemControl.cs</DependentUpon>
     </EmbeddedResource>
-    <EmbeddedResource Include="Shared\NumericRangeControl.resx">
+    <EmbeddedResource Include="Views\NumericRangeControl.resx">
       <DependentUpon>NumericRangeControl.cs</DependentUpon>
     </EmbeddedResource>
-    <EmbeddedResource Include="Shared\ConcreteItemsRestrictor.resx">
+    <EmbeddedResource Include="Views\ConcreteItemsRestrictor.resx">
       <DependentUpon>ConcreteItemsRestrictor.cs</DependentUpon>
     </EmbeddedResource>
Index: anches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/ArrayJsonItemControl.Designer.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/ArrayJsonItemControl.Designer.cs	(revision 17828)
+++ 	(revision )
@@ -1,111 +1,0 @@
-﻿
-namespace HeuristicLab.JsonInterface.OptimizerIntegration {
-  partial class ArrayJsonItemControl {
-    /// <summary> 
-    /// Erforderliche Designervariable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Verwendete Ressourcen bereinigen.
-    /// </summary>
-    /// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing && (components != null)) {
-        components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Vom Komponenten-Designer generierter Code
-
-    /// <summary> 
-    /// Erforderliche Methode für die Designerunterstützung. 
-    /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
-    /// </summary>
-    private void InitializeComponent() {
-      this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
-      this.groupBox2 = new System.Windows.Forms.GroupBox();
-      this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel();
-      this.checkBoxResizable = new System.Windows.Forms.CheckBox();
-      this.tableLayoutPanel1.SuspendLayout();
-      this.groupBox2.SuspendLayout();
-      this.tableLayoutPanel2.SuspendLayout();
-      this.SuspendLayout();
-      // 
-      // tableLayoutPanel1
-      // 
-      this.tableLayoutPanel1.ColumnCount = 1;
-      this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
-      this.tableLayoutPanel1.Controls.Add(this.groupBox2, 0, 0);
-      this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
-      this.tableLayoutPanel1.Name = "tableLayoutPanel1";
-      this.tableLayoutPanel1.RowCount = 2;
-      this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 41F));
-      this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
-      this.tableLayoutPanel1.Size = new System.Drawing.Size(526, 41);
-      this.tableLayoutPanel1.TabIndex = 24;
-      // 
-      // groupBox2
-      // 
-      this.groupBox2.Controls.Add(this.tableLayoutPanel2);
-      this.groupBox2.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.groupBox2.Location = new System.Drawing.Point(0, 0);
-      this.groupBox2.Margin = new System.Windows.Forms.Padding(0);
-      this.groupBox2.Name = "groupBox2";
-      this.groupBox2.Size = new System.Drawing.Size(526, 41);
-      this.groupBox2.TabIndex = 19;
-      this.groupBox2.TabStop = false;
-      this.groupBox2.Text = "Array Properties";
-      // 
-      // tableLayoutPanel2
-      // 
-      this.tableLayoutPanel2.ColumnCount = 1;
-      this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
-      this.tableLayoutPanel2.Controls.Add(this.checkBoxResizable, 0, 0);
-      this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.tableLayoutPanel2.Location = new System.Drawing.Point(3, 16);
-      this.tableLayoutPanel2.Margin = new System.Windows.Forms.Padding(0);
-      this.tableLayoutPanel2.Name = "tableLayoutPanel2";
-      this.tableLayoutPanel2.RowCount = 1;
-      this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
-      this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
-      this.tableLayoutPanel2.Size = new System.Drawing.Size(520, 22);
-      this.tableLayoutPanel2.TabIndex = 22;
-      // 
-      // checkBoxResizable
-      // 
-      this.checkBoxResizable.AutoSize = true;
-      this.checkBoxResizable.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.checkBoxResizable.Location = new System.Drawing.Point(0, 0);
-      this.checkBoxResizable.Margin = new System.Windows.Forms.Padding(0);
-      this.checkBoxResizable.Name = "checkBoxResizable";
-      this.checkBoxResizable.Size = new System.Drawing.Size(520, 22);
-      this.checkBoxResizable.TabIndex = 4;
-      this.checkBoxResizable.Text = "Resizable";
-      this.checkBoxResizable.UseVisualStyleBackColor = true;
-      // 
-      // ArrayJsonItemControl
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.tableLayoutPanel1);
-      this.Name = "ArrayJsonItemControl";
-      this.Size = new System.Drawing.Size(526, 41);
-      this.tableLayoutPanel1.ResumeLayout(false);
-      this.groupBox2.ResumeLayout(false);
-      this.tableLayoutPanel2.ResumeLayout(false);
-      this.tableLayoutPanel2.PerformLayout();
-      this.ResumeLayout(false);
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
-    private System.Windows.Forms.GroupBox groupBox2;
-    private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2;
-    private System.Windows.Forms.CheckBox checkBoxResizable;
-  }
-}
Index: anches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/ArrayJsonItemControl.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/ArrayJsonItemControl.cs	(revision 17828)
+++ 	(revision )
@@ -1,16 +1,0 @@
-﻿using System.Windows.Forms;
-
-namespace HeuristicLab.JsonInterface.OptimizerIntegration {
-  public partial class ArrayJsonItemControl : UserControl {
-
-    public ArrayJsonItemControl() {
-      InitializeComponent();
-    }
-
-    public static ArrayJsonItemControl Create(IJsonItemVM vm) {
-      var control = new ArrayJsonItemControl();
-      control.checkBoxResizable.DataBindings.Add("Checked", vm, nameof(IArrayJsonItemVM.Resizable));
-      return control;
-    }
-  }
-}
Index: anches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/ArrayJsonItemControl.resx
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/ArrayJsonItemControl.resx	(revision 17828)
+++ 	(revision )
@@ -1,120 +1,0 @@
-﻿<?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: anches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/CompoundControl.Designer.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/CompoundControl.Designer.cs	(revision 17828)
+++ 	(revision )
@@ -1,60 +1,0 @@
-﻿
-namespace HeuristicLab.JsonInterface.OptimizerIntegration {
-  partial class CompoundControl {
-    /// <summary> 
-    /// Erforderliche Designervariable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Verwendete Ressourcen bereinigen.
-    /// </summary>
-    /// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing && (components != null)) {
-        components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Vom Komponenten-Designer generierter Code
-
-    /// <summary> 
-    /// Erforderliche Methode für die Designerunterstützung. 
-    /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
-    /// </summary>
-    private void InitializeComponent() {
-      this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
-      this.SuspendLayout();
-      // 
-      // tableLayoutPanel1
-      // 
-      this.tableLayoutPanel1.ColumnCount = 1;
-      this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
-      this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
-      this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(0);
-      this.tableLayoutPanel1.Name = "tableLayoutPanel1";
-      this.tableLayoutPanel1.RowCount = 2;
-      this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
-      this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
-      this.tableLayoutPanel1.Size = new System.Drawing.Size(526, 22);
-      this.tableLayoutPanel1.TabIndex = 0;
-      // 
-      // CompoundControl
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.tableLayoutPanel1);
-      this.Margin = new System.Windows.Forms.Padding(0);
-      this.Name = "CompoundControl";
-      this.Size = new System.Drawing.Size(526, 22);
-      this.ResumeLayout(false);
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
-  }
-}
Index: anches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/CompoundControl.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/CompoundControl.cs	(revision 17828)
+++ 	(revision )
@@ -1,41 +1,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-
-namespace HeuristicLab.JsonInterface.OptimizerIntegration {
-  public partial class CompoundControl : UserControl {
-    private UserControl _topControl;
-    public UserControl TopControl {
-      get => _topControl;
-      set {
-        value.Margin = new Padding() { All = 0 };
-        tableLayoutPanel1.Controls.Add(value, 0, 0);
-        value.Dock = DockStyle.Fill;
-        _topControl = value;
-      } 
-    }
-
-    private UserControl _bottomControl;
-    public UserControl BottomControl {
-      get => _bottomControl;
-      set {
-        value.Margin = new Padding() { All = 0 };
-        tableLayoutPanel1.Controls.Add(value, 0, 0);
-        value.Dock = DockStyle.Fill;
-        _bottomControl = value;
-      }
-    }
-    public CompoundControl() {
-      InitializeComponent();
-    }
-
-    public static CompoundControl Create(UserControl top, UserControl bottom) 
-      => new CompoundControl() { TopControl = top, BottomControl = bottom };
-  }
-}
Index: anches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/CompoundControl.resx
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/CompoundControl.resx	(revision 17828)
+++ 	(revision )
@@ -1,120 +1,0 @@
-﻿<?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: anches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/ConcreteItemsRestrictor.Designer.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/ConcreteItemsRestrictor.Designer.cs	(revision 17828)
+++ 	(revision )
@@ -1,78 +1,0 @@
-﻿namespace HeuristicLab.JsonInterface.OptimizerIntegration {
-  partial class ConcreteItemsRestrictor {
-    /// <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.tableOptions = new System.Windows.Forms.TableLayoutPanel();
-      this.groupBox1 = new System.Windows.Forms.GroupBox();
-      this.groupBox1.SuspendLayout();
-      this.SuspendLayout();
-      // 
-      // tableOptions
-      // 
-      this.tableOptions.AutoScroll = true;
-      this.tableOptions.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
-      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, 20F));
-      this.tableOptions.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.tableOptions.Location = new System.Drawing.Point(3, 16);
-      this.tableOptions.Margin = new System.Windows.Forms.Padding(0);
-      this.tableOptions.Name = "tableOptions";
-      this.tableOptions.RowCount = 1;
-      this.tableOptions.RowStyles.Add(new System.Windows.Forms.RowStyle());
-      this.tableOptions.Size = new System.Drawing.Size(494, 181);
-      this.tableOptions.TabIndex = 13;
-      // 
-      // groupBox1
-      // 
-      this.groupBox1.Controls.Add(this.tableOptions);
-      this.groupBox1.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.groupBox1.Location = new System.Drawing.Point(0, 0);
-      this.groupBox1.Margin = new System.Windows.Forms.Padding(0);
-      this.groupBox1.Name = "groupBox1";
-      this.groupBox1.Size = new System.Drawing.Size(500, 200);
-      this.groupBox1.TabIndex = 0;
-      this.groupBox1.TabStop = false;
-      this.groupBox1.Text = "Allowed Items";
-      // 
-      // ConcreteItemsRestrictor
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.groupBox1);
-      this.Margin = new System.Windows.Forms.Padding(0);
-      this.Name = "ConcreteItemsRestrictor";
-      this.Size = new System.Drawing.Size(500, 200);
-      this.groupBox1.ResumeLayout(false);
-      this.ResumeLayout(false);
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.TableLayoutPanel tableOptions;
-    private System.Windows.Forms.GroupBox groupBox1;
-  }
-}
Index: anches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/ConcreteItemsRestrictor.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/ConcreteItemsRestrictor.cs	(revision 17828)
+++ 	(revision )
@@ -1,59 +1,0 @@
-﻿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 ConcreteItemsRestrictor : UserControl {
-
-    public event Action<object> OnChecked;
-    public event Action<object> OnUnchecked;
-
-    public ConcreteItemsRestrictor() {
-      InitializeComponent();
-    }
-
-    public void Init<T>(IEnumerable<T> objs) {
-      if(objs != null) {
-        foreach(var obj in objs) {
-          SetupOption(obj);
-        }
-      }
-    }
-
-    private void SetupOption(object opt) {
-      AddComboOption(opt);
-      TextBox tb = new TextBox();
-      tb.Text = opt.ToString();
-      tb.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
-      tb.ReadOnly = true;
-
-      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);
-    }
-
-    private void AddComboOption(object obj) {
-      OnChecked?.Invoke(obj);
-      tableOptions.Refresh();
-    }
-
-    private void RemoveComboOption(object obj) {
-      OnUnchecked?.Invoke(obj);
-      tableOptions.Refresh();
-    }
-  }
-}
Index: anches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/ConcreteItemsRestrictor.resx
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/ConcreteItemsRestrictor.resx	(revision 17828)
+++ 	(revision )
@@ -1,120 +1,0 @@
-﻿<?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: anches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/JsonItemBaseControl.Designer.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/JsonItemBaseControl.Designer.cs	(revision 17828)
+++ 	(revision )
@@ -1,149 +1,0 @@
-﻿namespace HeuristicLab.JsonInterface.OptimizerIntegration {
-  partial class JsonItemBaseControl {
-    /// <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.components = new System.ComponentModel.Container();
-      this.errorProvider = new System.Windows.Forms.ErrorProvider(this.components);
-      this.textBoxName = new System.Windows.Forms.TextBox();
-      this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
-      this.tableLayoutPanel5 = new System.Windows.Forms.TableLayoutPanel();
-      this.textBoxDescription = new System.Windows.Forms.TextBox();
-      this.label1 = new System.Windows.Forms.Label();
-      this.labelDescription = new System.Windows.Forms.Label();
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
-      this.tableLayoutPanel1.SuspendLayout();
-      this.tableLayoutPanel5.SuspendLayout();
-      this.SuspendLayout();
-      // 
-      // errorProvider
-      // 
-      this.errorProvider.BlinkStyle = System.Windows.Forms.ErrorBlinkStyle.NeverBlink;
-      this.errorProvider.ContainerControl = this;
-      // 
-      // textBoxName
-      // 
-      this.textBoxName.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.errorProvider.SetIconAlignment(this.textBoxName, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
-      this.textBoxName.Location = new System.Drawing.Point(100, 2);
-      this.textBoxName.Margin = new System.Windows.Forms.Padding(0, 2, 0, 0);
-      this.textBoxName.Name = "textBoxName";
-      this.textBoxName.Size = new System.Drawing.Size(394, 20);
-      this.textBoxName.TabIndex = 10;
-      this.textBoxName.Validating += new System.ComponentModel.CancelEventHandler(this.textBoxName_Validating);
-      // 
-      // tableLayoutPanel1
-      // 
-      this.tableLayoutPanel1.ColumnCount = 1;
-      this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
-      this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel5, 0, 0);
-      this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 3);
-      this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(0);
-      this.tableLayoutPanel1.Name = "tableLayoutPanel1";
-      this.tableLayoutPanel1.RowCount = 2;
-      this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 50F));
-      this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
-      this.tableLayoutPanel1.Size = new System.Drawing.Size(494, 594);
-      this.tableLayoutPanel1.TabIndex = 16;
-      // 
-      // tableLayoutPanel5
-      // 
-      this.tableLayoutPanel5.ColumnCount = 2;
-      this.tableLayoutPanel5.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 100F));
-      this.tableLayoutPanel5.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
-      this.tableLayoutPanel5.Controls.Add(this.textBoxDescription, 1, 1);
-      this.tableLayoutPanel5.Controls.Add(this.textBoxName, 1, 0);
-      this.tableLayoutPanel5.Controls.Add(this.label1, 0, 0);
-      this.tableLayoutPanel5.Controls.Add(this.labelDescription, 0, 1);
-      this.tableLayoutPanel5.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.tableLayoutPanel5.Location = new System.Drawing.Point(0, 0);
-      this.tableLayoutPanel5.Margin = new System.Windows.Forms.Padding(0);
-      this.tableLayoutPanel5.Name = "tableLayoutPanel5";
-      this.tableLayoutPanel5.RowCount = 1;
-      this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
-      this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
-      this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
-      this.tableLayoutPanel5.Size = new System.Drawing.Size(494, 50);
-      this.tableLayoutPanel5.TabIndex = 17;
-      // 
-      // textBoxDescription
-      // 
-      this.textBoxDescription.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.textBoxDescription.Location = new System.Drawing.Point(100, 27);
-      this.textBoxDescription.Margin = new System.Windows.Forms.Padding(0, 2, 0, 0);
-      this.textBoxDescription.Name = "textBoxDescription";
-      this.textBoxDescription.Size = new System.Drawing.Size(394, 20);
-      this.textBoxDescription.TabIndex = 14;
-      // 
-      // label1
-      // 
-      this.label1.AutoSize = true;
-      this.label1.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.label1.Location = new System.Drawing.Point(0, 0);
-      this.label1.Margin = new System.Windows.Forms.Padding(0);
-      this.label1.Name = "label1";
-      this.label1.Size = new System.Drawing.Size(100, 25);
-      this.label1.TabIndex = 9;
-      this.label1.Text = "Name";
-      this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
-      // 
-      // labelDescription
-      // 
-      this.labelDescription.AutoSize = true;
-      this.labelDescription.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.labelDescription.Location = new System.Drawing.Point(0, 25);
-      this.labelDescription.Margin = new System.Windows.Forms.Padding(0);
-      this.labelDescription.Name = "labelDescription";
-      this.labelDescription.Size = new System.Drawing.Size(100, 25);
-      this.labelDescription.TabIndex = 13;
-      this.labelDescription.Text = "Description";
-      this.labelDescription.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
-      // 
-      // JsonItemBaseControl
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.tableLayoutPanel1);
-      this.errorProvider.SetIconAlignment(this, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
-      this.Name = "JsonItemBaseControl";
-      this.Padding = new System.Windows.Forms.Padding(3);
-      this.Size = new System.Drawing.Size(500, 600);
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
-      this.tableLayoutPanel1.ResumeLayout(false);
-      this.tableLayoutPanel5.ResumeLayout(false);
-      this.tableLayoutPanel5.PerformLayout();
-      this.ResumeLayout(false);
-
-    }
-
-    #endregion
-    protected System.Windows.Forms.ErrorProvider errorProvider;
-    protected System.Windows.Forms.TextBox textBoxName;
-    protected System.Windows.Forms.Label label1;
-    protected System.Windows.Forms.Label labelDescription;
-    protected System.Windows.Forms.TextBox textBoxDescription;
-    protected System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
-    private System.Windows.Forms.TableLayoutPanel tableLayoutPanel5;
-  }
-}
Index: anches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/JsonItemBaseControl.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/JsonItemBaseControl.cs	(revision 17828)
+++ 	(revision )
@@ -1,50 +1,0 @@
-﻿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 JsonItemBaseControl : UserControl {
-    protected IJsonItemVM VM { get; set; }
-
-    private JsonItemBaseControl() {
-      InitializeComponent();
-    }
-    
-    public JsonItemBaseControl(IJsonItemVM vm) {
-      InitializeComponent();
-      VM = vm;
-      Init();
-    }
-
-    public JsonItemBaseControl(IJsonItemVM vm, UserControl control) {
-      InitializeComponent();
-      VM = vm;
-      if(control != null) {
-        control.Margin = new Padding() { All = 0 };
-        tableLayoutPanel1.Controls.Add(control, 0, 1);
-        control.Dock = DockStyle.Fill;
-      }
-      Init();
-    }
-
-    private void Init() {
-      textBoxName.DataBindings.Add("Text", VM, nameof(IJsonItemVM.Name));
-      textBoxDescription.DataBindings.Add("Text", VM, nameof(IJsonItemVM.Description));
-    }
-
-    private void textBoxName_Validating(object sender, CancelEventArgs e) {
-      if(string.IsNullOrWhiteSpace(textBoxName.Text)) {
-        errorProvider.SetError(textBoxName, "Name must not be empty.");
-        e.Cancel = true;
-      } else {
-        errorProvider.SetError(textBoxName, null);
-      }
-    }
-  }
-}
Index: anches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/JsonItemBaseControl.resx
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/JsonItemBaseControl.resx	(revision 17828)
+++ 	(revision )
@@ -1,123 +1,0 @@
-﻿<?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>
-  <metadata name="errorProvider.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>17, 17</value>
-  </metadata>
-</root>
Index: anches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/MatrixJsonItemControl.Designer.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/MatrixJsonItemControl.Designer.cs	(revision 17828)
+++ 	(revision )
@@ -1,127 +1,0 @@
-﻿
-namespace HeuristicLab.JsonInterface.OptimizerIntegration {
-  partial class MatrixJsonItemControl {
-    /// <summary> 
-    /// Erforderliche Designervariable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Verwendete Ressourcen bereinigen.
-    /// </summary>
-    /// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing && (components != null)) {
-        components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Vom Komponenten-Designer generierter Code
-
-    /// <summary> 
-    /// Erforderliche Methode für die Designerunterstützung. 
-    /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
-    /// </summary>
-    private void InitializeComponent() {
-      this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
-      this.groupBox2 = new System.Windows.Forms.GroupBox();
-      this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel();
-      this.checkBoxColumnsResizable = new System.Windows.Forms.CheckBox();
-      this.checkBoxRowsResizable = new System.Windows.Forms.CheckBox();
-      this.tableLayoutPanel1.SuspendLayout();
-      this.groupBox2.SuspendLayout();
-      this.tableLayoutPanel2.SuspendLayout();
-      this.SuspendLayout();
-      // 
-      // tableLayoutPanel1
-      // 
-      this.tableLayoutPanel1.ColumnCount = 1;
-      this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
-      this.tableLayoutPanel1.Controls.Add(this.groupBox2, 0, 0);
-      this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
-      this.tableLayoutPanel1.Name = "tableLayoutPanel1";
-      this.tableLayoutPanel1.RowCount = 2;
-      this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 63F));
-      this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
-      this.tableLayoutPanel1.Size = new System.Drawing.Size(526, 63);
-      this.tableLayoutPanel1.TabIndex = 24;
-      // 
-      // groupBox2
-      // 
-      this.groupBox2.Controls.Add(this.tableLayoutPanel2);
-      this.groupBox2.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.groupBox2.Location = new System.Drawing.Point(0, 0);
-      this.groupBox2.Margin = new System.Windows.Forms.Padding(0);
-      this.groupBox2.Name = "groupBox2";
-      this.groupBox2.Size = new System.Drawing.Size(526, 63);
-      this.groupBox2.TabIndex = 19;
-      this.groupBox2.TabStop = false;
-      this.groupBox2.Text = "Matrix Properties";
-      // 
-      // tableLayoutPanel2
-      // 
-      this.tableLayoutPanel2.ColumnCount = 1;
-      this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
-      this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F));
-      this.tableLayoutPanel2.Controls.Add(this.checkBoxRowsResizable, 0, 0);
-      this.tableLayoutPanel2.Controls.Add(this.checkBoxColumnsResizable, 0, 1);
-      this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.tableLayoutPanel2.Location = new System.Drawing.Point(3, 16);
-      this.tableLayoutPanel2.Margin = new System.Windows.Forms.Padding(0);
-      this.tableLayoutPanel2.Name = "tableLayoutPanel2";
-      this.tableLayoutPanel2.RowCount = 2;
-      this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
-      this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
-      this.tableLayoutPanel2.Size = new System.Drawing.Size(520, 44);
-      this.tableLayoutPanel2.TabIndex = 22;
-      // 
-      // checkBoxColumnsResizable
-      // 
-      this.checkBoxColumnsResizable.AutoSize = true;
-      this.checkBoxColumnsResizable.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.checkBoxColumnsResizable.Location = new System.Drawing.Point(0, 22);
-      this.checkBoxColumnsResizable.Margin = new System.Windows.Forms.Padding(0);
-      this.checkBoxColumnsResizable.Name = "checkBoxColumnsResizable";
-      this.checkBoxColumnsResizable.Size = new System.Drawing.Size(520, 22);
-      this.checkBoxColumnsResizable.TabIndex = 7;
-      this.checkBoxColumnsResizable.Text = "Columns Resizable";
-      this.checkBoxColumnsResizable.UseVisualStyleBackColor = true;
-      // 
-      // checkBoxRowsResizable
-      // 
-      this.checkBoxRowsResizable.AutoSize = true;
-      this.checkBoxRowsResizable.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.checkBoxRowsResizable.Location = new System.Drawing.Point(0, 0);
-      this.checkBoxRowsResizable.Margin = new System.Windows.Forms.Padding(0);
-      this.checkBoxRowsResizable.Name = "checkBoxRowsResizable";
-      this.checkBoxRowsResizable.Size = new System.Drawing.Size(520, 22);
-      this.checkBoxRowsResizable.TabIndex = 4;
-      this.checkBoxRowsResizable.Text = "Rows Resizable";
-      this.checkBoxRowsResizable.UseVisualStyleBackColor = true;
-      // 
-      // MatrixJsonItemControl
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.tableLayoutPanel1);
-      this.Name = "MatrixJsonItemControl";
-      this.Size = new System.Drawing.Size(526, 63);
-      this.tableLayoutPanel1.ResumeLayout(false);
-      this.groupBox2.ResumeLayout(false);
-      this.tableLayoutPanel2.ResumeLayout(false);
-      this.tableLayoutPanel2.PerformLayout();
-      this.ResumeLayout(false);
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
-    private System.Windows.Forms.GroupBox groupBox2;
-    private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2;
-    private System.Windows.Forms.CheckBox checkBoxRowsResizable;
-    private System.Windows.Forms.CheckBox checkBoxColumnsResizable;
-  }
-}
Index: anches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/MatrixJsonItemControl.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/MatrixJsonItemControl.cs	(revision 17828)
+++ 	(revision )
@@ -1,16 +1,0 @@
-﻿using System.Windows.Forms;
-
-namespace HeuristicLab.JsonInterface.OptimizerIntegration {
-  public partial class MatrixJsonItemControl : UserControl {
-    public MatrixJsonItemControl() {
-      InitializeComponent();
-    }
-
-    public static MatrixJsonItemControl Create(IJsonItemVM vm) {
-      var control = new MatrixJsonItemControl();
-      control.checkBoxRowsResizable.DataBindings.Add("Checked", vm, nameof(IMatrixJsonItemVM.RowsResizable));
-      control.checkBoxColumnsResizable .DataBindings.Add("Checked", vm, nameof(IMatrixJsonItemVM.ColumnsResizable));
-      return control;
-    }
-  }
-}
Index: anches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/MatrixJsonItemControl.resx
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/MatrixJsonItemControl.resx	(revision 17828)
+++ 	(revision )
@@ -1,120 +1,0 @@
-﻿<?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: anches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/NumericRangeControl.Designer.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/NumericRangeControl.Designer.cs	(revision 17828)
+++ 	(revision )
@@ -1,166 +1,0 @@
-﻿namespace HeuristicLab.JsonInterface.OptimizerIntegration {
-  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.components = new System.ComponentModel.Container();
-      this.groupBox2 = new System.Windows.Forms.GroupBox();
-      this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel();
-      this.textBoxTo = new System.Windows.Forms.TextBox();
-      this.textBoxFrom = new System.Windows.Forms.TextBox();
-      this.checkBoxFrom = new System.Windows.Forms.CheckBox();
-      this.checkBoxTo = new System.Windows.Forms.CheckBox();
-      this.errorProvider = new System.Windows.Forms.ErrorProvider(this.components);
-      this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
-      this.groupBox2.SuspendLayout();
-      this.tableLayoutPanel2.SuspendLayout();
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
-      this.tableLayoutPanel1.SuspendLayout();
-      this.SuspendLayout();
-      // 
-      // groupBox2
-      // 
-      this.groupBox2.Controls.Add(this.tableLayoutPanel2);
-      this.groupBox2.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.groupBox2.Location = new System.Drawing.Point(0, 0);
-      this.groupBox2.Margin = new System.Windows.Forms.Padding(0);
-      this.groupBox2.Name = "groupBox2";
-      this.groupBox2.Size = new System.Drawing.Size(526, 63);
-      this.groupBox2.TabIndex = 19;
-      this.groupBox2.TabStop = false;
-      this.groupBox2.Text = "Range";
-      // 
-      // tableLayoutPanel2
-      // 
-      this.tableLayoutPanel2.ColumnCount = 2;
-      this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 100F));
-      this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
-      this.tableLayoutPanel2.Controls.Add(this.textBoxTo, 1, 1);
-      this.tableLayoutPanel2.Controls.Add(this.textBoxFrom, 1, 0);
-      this.tableLayoutPanel2.Controls.Add(this.checkBoxFrom, 0, 0);
-      this.tableLayoutPanel2.Controls.Add(this.checkBoxTo, 0, 1);
-      this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.tableLayoutPanel2.Location = new System.Drawing.Point(3, 16);
-      this.tableLayoutPanel2.Margin = new System.Windows.Forms.Padding(0);
-      this.tableLayoutPanel2.Name = "tableLayoutPanel2";
-      this.tableLayoutPanel2.RowCount = 2;
-      this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
-      this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
-      this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
-      this.tableLayoutPanel2.Size = new System.Drawing.Size(520, 44);
-      this.tableLayoutPanel2.TabIndex = 22;
-      // 
-      // textBoxTo
-      // 
-      this.textBoxTo.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.errorProvider.SetIconAlignment(this.textBoxTo, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
-      this.textBoxTo.Location = new System.Drawing.Point(100, 22);
-      this.textBoxTo.Margin = new System.Windows.Forms.Padding(0);
-      this.textBoxTo.Name = "textBoxTo";
-      this.textBoxTo.ReadOnly = true;
-      this.textBoxTo.Size = new System.Drawing.Size(420, 20);
-      this.textBoxTo.TabIndex = 6;
-      this.textBoxTo.Validating += new System.ComponentModel.CancelEventHandler(this.textBoxTo_Validating);
-      // 
-      // textBoxFrom
-      // 
-      this.textBoxFrom.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.errorProvider.SetIconAlignment(this.textBoxFrom, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
-      this.textBoxFrom.Location = new System.Drawing.Point(100, 0);
-      this.textBoxFrom.Margin = new System.Windows.Forms.Padding(0);
-      this.textBoxFrom.Name = "textBoxFrom";
-      this.textBoxFrom.ReadOnly = true;
-      this.textBoxFrom.Size = new System.Drawing.Size(420, 20);
-      this.textBoxFrom.TabIndex = 2;
-      this.textBoxFrom.Validating += new System.ComponentModel.CancelEventHandler(this.textBoxFrom_Validating);
-      // 
-      // checkBoxFrom
-      // 
-      this.checkBoxFrom.AutoSize = true;
-      this.checkBoxFrom.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.checkBoxFrom.Location = new System.Drawing.Point(0, 0);
-      this.checkBoxFrom.Margin = new System.Windows.Forms.Padding(0);
-      this.checkBoxFrom.Name = "checkBoxFrom";
-      this.checkBoxFrom.Size = new System.Drawing.Size(100, 22);
-      this.checkBoxFrom.TabIndex = 4;
-      this.checkBoxFrom.Text = "From:";
-      this.checkBoxFrom.UseVisualStyleBackColor = true;
-      // 
-      // checkBoxTo
-      // 
-      this.checkBoxTo.AutoSize = true;
-      this.checkBoxTo.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.checkBoxTo.Location = new System.Drawing.Point(0, 22);
-      this.checkBoxTo.Margin = new System.Windows.Forms.Padding(0);
-      this.checkBoxTo.Name = "checkBoxTo";
-      this.checkBoxTo.Size = new System.Drawing.Size(100, 22);
-      this.checkBoxTo.TabIndex = 7;
-      this.checkBoxTo.Text = "To:";
-      this.checkBoxTo.UseVisualStyleBackColor = true;
-      // 
-      // errorProvider
-      // 
-      this.errorProvider.BlinkStyle = System.Windows.Forms.ErrorBlinkStyle.NeverBlink;
-      this.errorProvider.ContainerControl = this;
-      // 
-      // tableLayoutPanel1
-      // 
-      this.tableLayoutPanel1.ColumnCount = 1;
-      this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
-      this.tableLayoutPanel1.Controls.Add(this.groupBox2, 0, 0);
-      this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
-      this.tableLayoutPanel1.Name = "tableLayoutPanel1";
-      this.tableLayoutPanel1.RowCount = 2;
-      this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 63F));
-      this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
-      this.tableLayoutPanel1.Size = new System.Drawing.Size(526, 63);
-      this.tableLayoutPanel1.TabIndex = 23;
-      // 
-      // NumericRangeControl
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.tableLayoutPanel1);
-      this.Name = "NumericRangeControl";
-      this.Size = new System.Drawing.Size(526, 63);
-      this.groupBox2.ResumeLayout(false);
-      this.tableLayoutPanel2.ResumeLayout(false);
-      this.tableLayoutPanel2.PerformLayout();
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
-      this.tableLayoutPanel1.ResumeLayout(false);
-      this.ResumeLayout(false);
-
-    }
-
-    #endregion
-    private System.Windows.Forms.GroupBox groupBox2;
-    private System.Windows.Forms.CheckBox checkBoxTo;
-    private System.Windows.Forms.TextBox textBoxTo;
-    private System.Windows.Forms.ErrorProvider errorProvider;
-    private System.Windows.Forms.CheckBox checkBoxFrom;
-    private System.Windows.Forms.TextBox textBoxFrom;
-    private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2;
-    private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
-  }
-}
Index: anches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/NumericRangeControl.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/NumericRangeControl.cs	(revision 17828)
+++ 	(revision )
@@ -1,65 +1,0 @@
-﻿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 {
-  public partial class NumericRangeControl : UserControl {
-    public TextBox TBMinRange { get; set; }
-    public TextBox TBMaxRange { get; set; }
-    public CheckBox EnableMinRange { get; set; }
-    public CheckBox EnableMaxRange { get; set; }
-    public NumericRangeControl() {
-      InitializeComponent();
-      TBMinRange = textBoxFrom;
-      TBMaxRange = textBoxTo;
-      EnableMinRange = checkBoxFrom;
-      EnableMaxRange = checkBoxTo;
-      checkBoxFrom.CheckedChanged += ToggleFromInput;
-      checkBoxTo.CheckedChanged += ToggleToInput;
-    }
-
-    private void ToggleToInput(object sender, EventArgs e) {
-      textBoxTo.ReadOnly = !checkBoxTo.Checked;
-    }
-
-    private void ToggleFromInput(object sender, EventArgs e) {
-      textBoxFrom.ReadOnly = !checkBoxFrom.Checked;
-    }
-
-    private void textBoxFrom_Validating(object sender, CancelEventArgs e) {
-      if (string.IsNullOrWhiteSpace(textBoxFrom.Text)) {
-        errorProvider.SetError(textBoxFrom, "'From' must not be empty.");
-        e.Cancel = true;
-      } else {
-        errorProvider.SetError(textBoxFrom, null);
-      }
-    }
-
-    private void textBoxTo_Validating(object sender, CancelEventArgs e) {
-      if (string.IsNullOrWhiteSpace(textBoxTo.Text)) {
-        errorProvider.SetError(textBoxTo, "'To' must not be empty.");
-        e.Cancel = true;
-      } else {
-        errorProvider.SetError(textBoxTo, null);
-      }
-    }
-
-    public static UserControl Create(IJsonItemVM vm) {
-      NumericRangeControl numericRangeControl = new NumericRangeControl();
-      numericRangeControl.TBMinRange.DataBindings.Add("Text", vm, nameof(RangedValueBaseVM<int, IntJsonItem>.MinRange));
-      numericRangeControl.TBMaxRange.DataBindings.Add("Text", vm, nameof(RangedValueBaseVM<int, IntJsonItem>.MaxRange));
-      numericRangeControl.EnableMinRange.DataBindings.Add("Checked", vm, nameof(RangedValueBaseVM<int, IntJsonItem>.EnableMinRange),
-        false, DataSourceUpdateMode.OnPropertyChanged);
-      numericRangeControl.EnableMaxRange.DataBindings.Add("Checked", vm, nameof(RangedValueBaseVM<int, IntJsonItem>.EnableMaxRange),
-        false, DataSourceUpdateMode.OnPropertyChanged);
-      return numericRangeControl;
-    }
-  }
-}
Index: anches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/NumericRangeControl.resx
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/NumericRangeControl.resx	(revision 17828)
+++ 	(revision )
@@ -1,123 +1,0 @@
-﻿<?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>
-  <metadata name="errorProvider.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>17, 17</value>
-  </metadata>
-</root>
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ArrayJsonItemControl.Designer.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ArrayJsonItemControl.Designer.cs	(revision 17829)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ArrayJsonItemControl.Designer.cs	(revision 17829)
@@ -0,0 +1,111 @@
+﻿
+namespace HeuristicLab.JsonInterface.OptimizerIntegration {
+  partial class ArrayJsonItemControl {
+    /// <summary> 
+    /// Erforderliche Designervariable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Verwendete Ressourcen bereinigen.
+    /// </summary>
+    /// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Vom Komponenten-Designer generierter Code
+
+    /// <summary> 
+    /// Erforderliche Methode für die Designerunterstützung. 
+    /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
+    /// </summary>
+    private void InitializeComponent() {
+      this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
+      this.groupBox2 = new System.Windows.Forms.GroupBox();
+      this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel();
+      this.checkBoxResizable = new System.Windows.Forms.CheckBox();
+      this.tableLayoutPanel1.SuspendLayout();
+      this.groupBox2.SuspendLayout();
+      this.tableLayoutPanel2.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // tableLayoutPanel1
+      // 
+      this.tableLayoutPanel1.ColumnCount = 1;
+      this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
+      this.tableLayoutPanel1.Controls.Add(this.groupBox2, 0, 0);
+      this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
+      this.tableLayoutPanel1.Name = "tableLayoutPanel1";
+      this.tableLayoutPanel1.RowCount = 2;
+      this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 41F));
+      this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
+      this.tableLayoutPanel1.Size = new System.Drawing.Size(526, 41);
+      this.tableLayoutPanel1.TabIndex = 24;
+      // 
+      // groupBox2
+      // 
+      this.groupBox2.Controls.Add(this.tableLayoutPanel2);
+      this.groupBox2.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.groupBox2.Location = new System.Drawing.Point(0, 0);
+      this.groupBox2.Margin = new System.Windows.Forms.Padding(0);
+      this.groupBox2.Name = "groupBox2";
+      this.groupBox2.Size = new System.Drawing.Size(526, 41);
+      this.groupBox2.TabIndex = 19;
+      this.groupBox2.TabStop = false;
+      this.groupBox2.Text = "Array Properties";
+      // 
+      // tableLayoutPanel2
+      // 
+      this.tableLayoutPanel2.ColumnCount = 1;
+      this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
+      this.tableLayoutPanel2.Controls.Add(this.checkBoxResizable, 0, 0);
+      this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.tableLayoutPanel2.Location = new System.Drawing.Point(3, 16);
+      this.tableLayoutPanel2.Margin = new System.Windows.Forms.Padding(0);
+      this.tableLayoutPanel2.Name = "tableLayoutPanel2";
+      this.tableLayoutPanel2.RowCount = 1;
+      this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
+      this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
+      this.tableLayoutPanel2.Size = new System.Drawing.Size(520, 22);
+      this.tableLayoutPanel2.TabIndex = 22;
+      // 
+      // checkBoxResizable
+      // 
+      this.checkBoxResizable.AutoSize = true;
+      this.checkBoxResizable.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.checkBoxResizable.Location = new System.Drawing.Point(0, 0);
+      this.checkBoxResizable.Margin = new System.Windows.Forms.Padding(0);
+      this.checkBoxResizable.Name = "checkBoxResizable";
+      this.checkBoxResizable.Size = new System.Drawing.Size(520, 22);
+      this.checkBoxResizable.TabIndex = 4;
+      this.checkBoxResizable.Text = "Resizable";
+      this.checkBoxResizable.UseVisualStyleBackColor = true;
+      // 
+      // ArrayJsonItemControl
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.tableLayoutPanel1);
+      this.Name = "ArrayJsonItemControl";
+      this.Size = new System.Drawing.Size(526, 41);
+      this.tableLayoutPanel1.ResumeLayout(false);
+      this.groupBox2.ResumeLayout(false);
+      this.tableLayoutPanel2.ResumeLayout(false);
+      this.tableLayoutPanel2.PerformLayout();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
+    private System.Windows.Forms.GroupBox groupBox2;
+    private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2;
+    private System.Windows.Forms.CheckBox checkBoxResizable;
+  }
+}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ArrayJsonItemControl.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ArrayJsonItemControl.cs	(revision 17829)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ArrayJsonItemControl.cs	(revision 17829)
@@ -0,0 +1,16 @@
+﻿using System.Windows.Forms;
+
+namespace HeuristicLab.JsonInterface.OptimizerIntegration {
+  public partial class ArrayJsonItemControl : UserControl {
+
+    public ArrayJsonItemControl() {
+      InitializeComponent();
+    }
+
+    public static ArrayJsonItemControl Create(IJsonItemVM vm) {
+      var control = new ArrayJsonItemControl();
+      control.checkBoxResizable.DataBindings.Add("Checked", vm, nameof(IArrayJsonItemVM.Resizable));
+      return control;
+    }
+  }
+}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ArrayJsonItemControl.resx
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ArrayJsonItemControl.resx	(revision 17829)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ArrayJsonItemControl.resx	(revision 17829)
@@ -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/CompoundControl.Designer.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/CompoundControl.Designer.cs	(revision 17829)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/CompoundControl.Designer.cs	(revision 17829)
@@ -0,0 +1,60 @@
+﻿
+namespace HeuristicLab.JsonInterface.OptimizerIntegration {
+  partial class CompoundControl {
+    /// <summary> 
+    /// Erforderliche Designervariable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Verwendete Ressourcen bereinigen.
+    /// </summary>
+    /// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Vom Komponenten-Designer generierter Code
+
+    /// <summary> 
+    /// Erforderliche Methode für die Designerunterstützung. 
+    /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
+    /// </summary>
+    private void InitializeComponent() {
+      this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
+      this.SuspendLayout();
+      // 
+      // tableLayoutPanel1
+      // 
+      this.tableLayoutPanel1.ColumnCount = 1;
+      this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
+      this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
+      this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(0);
+      this.tableLayoutPanel1.Name = "tableLayoutPanel1";
+      this.tableLayoutPanel1.RowCount = 2;
+      this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
+      this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
+      this.tableLayoutPanel1.Size = new System.Drawing.Size(526, 22);
+      this.tableLayoutPanel1.TabIndex = 0;
+      // 
+      // CompoundControl
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.tableLayoutPanel1);
+      this.Margin = new System.Windows.Forms.Padding(0);
+      this.Name = "CompoundControl";
+      this.Size = new System.Drawing.Size(526, 22);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
+  }
+}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/CompoundControl.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/CompoundControl.cs	(revision 17829)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/CompoundControl.cs	(revision 17829)
@@ -0,0 +1,41 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace HeuristicLab.JsonInterface.OptimizerIntegration {
+  public partial class CompoundControl : UserControl {
+    private UserControl _topControl;
+    public UserControl TopControl {
+      get => _topControl;
+      set {
+        value.Margin = new Padding() { All = 0 };
+        tableLayoutPanel1.Controls.Add(value, 0, 0);
+        value.Dock = DockStyle.Fill;
+        _topControl = value;
+      } 
+    }
+
+    private UserControl _bottomControl;
+    public UserControl BottomControl {
+      get => _bottomControl;
+      set {
+        value.Margin = new Padding() { All = 0 };
+        tableLayoutPanel1.Controls.Add(value, 0, 0);
+        value.Dock = DockStyle.Fill;
+        _bottomControl = value;
+      }
+    }
+    public CompoundControl() {
+      InitializeComponent();
+    }
+
+    public static CompoundControl Create(UserControl top, UserControl bottom) 
+      => new CompoundControl() { TopControl = top, BottomControl = bottom };
+  }
+}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/CompoundControl.resx
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/CompoundControl.resx	(revision 17829)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/CompoundControl.resx	(revision 17829)
@@ -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/ConcreteItemsRestrictor.Designer.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ConcreteItemsRestrictor.Designer.cs	(revision 17829)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ConcreteItemsRestrictor.Designer.cs	(revision 17829)
@@ -0,0 +1,78 @@
+﻿namespace HeuristicLab.JsonInterface.OptimizerIntegration {
+  partial class ConcreteItemsRestrictor {
+    /// <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.tableOptions = new System.Windows.Forms.TableLayoutPanel();
+      this.groupBox1 = new System.Windows.Forms.GroupBox();
+      this.groupBox1.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // tableOptions
+      // 
+      this.tableOptions.AutoScroll = true;
+      this.tableOptions.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+      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, 20F));
+      this.tableOptions.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.tableOptions.Location = new System.Drawing.Point(3, 16);
+      this.tableOptions.Margin = new System.Windows.Forms.Padding(0);
+      this.tableOptions.Name = "tableOptions";
+      this.tableOptions.RowCount = 1;
+      this.tableOptions.RowStyles.Add(new System.Windows.Forms.RowStyle());
+      this.tableOptions.Size = new System.Drawing.Size(494, 181);
+      this.tableOptions.TabIndex = 13;
+      // 
+      // groupBox1
+      // 
+      this.groupBox1.Controls.Add(this.tableOptions);
+      this.groupBox1.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.groupBox1.Location = new System.Drawing.Point(0, 0);
+      this.groupBox1.Margin = new System.Windows.Forms.Padding(0);
+      this.groupBox1.Name = "groupBox1";
+      this.groupBox1.Size = new System.Drawing.Size(500, 200);
+      this.groupBox1.TabIndex = 0;
+      this.groupBox1.TabStop = false;
+      this.groupBox1.Text = "Allowed Items";
+      // 
+      // ConcreteItemsRestrictor
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.groupBox1);
+      this.Margin = new System.Windows.Forms.Padding(0);
+      this.Name = "ConcreteItemsRestrictor";
+      this.Size = new System.Drawing.Size(500, 200);
+      this.groupBox1.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TableLayoutPanel tableOptions;
+    private System.Windows.Forms.GroupBox groupBox1;
+  }
+}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ConcreteItemsRestrictor.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ConcreteItemsRestrictor.cs	(revision 17829)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ConcreteItemsRestrictor.cs	(revision 17829)
@@ -0,0 +1,59 @@
+﻿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 ConcreteItemsRestrictor : UserControl {
+
+    public event Action<object> OnChecked;
+    public event Action<object> OnUnchecked;
+
+    public ConcreteItemsRestrictor() {
+      InitializeComponent();
+    }
+
+    public void Init<T>(IEnumerable<T> objs) {
+      if(objs != null) {
+        foreach(var obj in objs) {
+          SetupOption(obj);
+        }
+      }
+    }
+
+    private void SetupOption(object opt) {
+      AddComboOption(opt);
+      TextBox tb = new TextBox();
+      tb.Text = opt.ToString();
+      tb.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
+      tb.ReadOnly = true;
+
+      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);
+    }
+
+    private void AddComboOption(object obj) {
+      OnChecked?.Invoke(obj);
+      tableOptions.Refresh();
+    }
+
+    private void RemoveComboOption(object obj) {
+      OnUnchecked?.Invoke(obj);
+      tableOptions.Refresh();
+    }
+  }
+}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ConcreteItemsRestrictor.resx
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ConcreteItemsRestrictor.resx	(revision 17829)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ConcreteItemsRestrictor.resx	(revision 17829)
@@ -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/JsonItemBaseControl.Designer.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemBaseControl.Designer.cs	(revision 17829)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemBaseControl.Designer.cs	(revision 17829)
@@ -0,0 +1,149 @@
+﻿namespace HeuristicLab.JsonInterface.OptimizerIntegration {
+  partial class JsonItemBaseControl {
+    /// <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.components = new System.ComponentModel.Container();
+      this.errorProvider = new System.Windows.Forms.ErrorProvider(this.components);
+      this.textBoxName = new System.Windows.Forms.TextBox();
+      this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
+      this.tableLayoutPanel5 = new System.Windows.Forms.TableLayoutPanel();
+      this.textBoxDescription = new System.Windows.Forms.TextBox();
+      this.label1 = new System.Windows.Forms.Label();
+      this.labelDescription = new System.Windows.Forms.Label();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.tableLayoutPanel1.SuspendLayout();
+      this.tableLayoutPanel5.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // errorProvider
+      // 
+      this.errorProvider.BlinkStyle = System.Windows.Forms.ErrorBlinkStyle.NeverBlink;
+      this.errorProvider.ContainerControl = this;
+      // 
+      // textBoxName
+      // 
+      this.textBoxName.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.errorProvider.SetIconAlignment(this.textBoxName, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
+      this.textBoxName.Location = new System.Drawing.Point(100, 2);
+      this.textBoxName.Margin = new System.Windows.Forms.Padding(0, 2, 0, 0);
+      this.textBoxName.Name = "textBoxName";
+      this.textBoxName.Size = new System.Drawing.Size(394, 20);
+      this.textBoxName.TabIndex = 10;
+      this.textBoxName.Validating += new System.ComponentModel.CancelEventHandler(this.textBoxName_Validating);
+      // 
+      // tableLayoutPanel1
+      // 
+      this.tableLayoutPanel1.ColumnCount = 1;
+      this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
+      this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel5, 0, 0);
+      this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 3);
+      this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(0);
+      this.tableLayoutPanel1.Name = "tableLayoutPanel1";
+      this.tableLayoutPanel1.RowCount = 2;
+      this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 50F));
+      this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
+      this.tableLayoutPanel1.Size = new System.Drawing.Size(494, 594);
+      this.tableLayoutPanel1.TabIndex = 16;
+      // 
+      // tableLayoutPanel5
+      // 
+      this.tableLayoutPanel5.ColumnCount = 2;
+      this.tableLayoutPanel5.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 100F));
+      this.tableLayoutPanel5.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
+      this.tableLayoutPanel5.Controls.Add(this.textBoxDescription, 1, 1);
+      this.tableLayoutPanel5.Controls.Add(this.textBoxName, 1, 0);
+      this.tableLayoutPanel5.Controls.Add(this.label1, 0, 0);
+      this.tableLayoutPanel5.Controls.Add(this.labelDescription, 0, 1);
+      this.tableLayoutPanel5.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.tableLayoutPanel5.Location = new System.Drawing.Point(0, 0);
+      this.tableLayoutPanel5.Margin = new System.Windows.Forms.Padding(0);
+      this.tableLayoutPanel5.Name = "tableLayoutPanel5";
+      this.tableLayoutPanel5.RowCount = 1;
+      this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
+      this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
+      this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
+      this.tableLayoutPanel5.Size = new System.Drawing.Size(494, 50);
+      this.tableLayoutPanel5.TabIndex = 17;
+      // 
+      // textBoxDescription
+      // 
+      this.textBoxDescription.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.textBoxDescription.Location = new System.Drawing.Point(100, 27);
+      this.textBoxDescription.Margin = new System.Windows.Forms.Padding(0, 2, 0, 0);
+      this.textBoxDescription.Name = "textBoxDescription";
+      this.textBoxDescription.Size = new System.Drawing.Size(394, 20);
+      this.textBoxDescription.TabIndex = 14;
+      // 
+      // label1
+      // 
+      this.label1.AutoSize = true;
+      this.label1.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.label1.Location = new System.Drawing.Point(0, 0);
+      this.label1.Margin = new System.Windows.Forms.Padding(0);
+      this.label1.Name = "label1";
+      this.label1.Size = new System.Drawing.Size(100, 25);
+      this.label1.TabIndex = 9;
+      this.label1.Text = "Name";
+      this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+      // 
+      // labelDescription
+      // 
+      this.labelDescription.AutoSize = true;
+      this.labelDescription.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.labelDescription.Location = new System.Drawing.Point(0, 25);
+      this.labelDescription.Margin = new System.Windows.Forms.Padding(0);
+      this.labelDescription.Name = "labelDescription";
+      this.labelDescription.Size = new System.Drawing.Size(100, 25);
+      this.labelDescription.TabIndex = 13;
+      this.labelDescription.Text = "Description";
+      this.labelDescription.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+      // 
+      // JsonItemBaseControl
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.tableLayoutPanel1);
+      this.errorProvider.SetIconAlignment(this, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
+      this.Name = "JsonItemBaseControl";
+      this.Padding = new System.Windows.Forms.Padding(3);
+      this.Size = new System.Drawing.Size(500, 600);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.tableLayoutPanel1.ResumeLayout(false);
+      this.tableLayoutPanel5.ResumeLayout(false);
+      this.tableLayoutPanel5.PerformLayout();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+    protected System.Windows.Forms.ErrorProvider errorProvider;
+    protected System.Windows.Forms.TextBox textBoxName;
+    protected System.Windows.Forms.Label label1;
+    protected System.Windows.Forms.Label labelDescription;
+    protected System.Windows.Forms.TextBox textBoxDescription;
+    protected System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
+    private System.Windows.Forms.TableLayoutPanel tableLayoutPanel5;
+  }
+}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemBaseControl.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemBaseControl.cs	(revision 17829)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemBaseControl.cs	(revision 17829)
@@ -0,0 +1,50 @@
+﻿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 JsonItemBaseControl : UserControl {
+    protected IJsonItemVM VM { get; set; }
+
+    private JsonItemBaseControl() {
+      InitializeComponent();
+    }
+    
+    public JsonItemBaseControl(IJsonItemVM vm) {
+      InitializeComponent();
+      VM = vm;
+      Init();
+    }
+
+    public JsonItemBaseControl(IJsonItemVM vm, UserControl control) {
+      InitializeComponent();
+      VM = vm;
+      if(control != null) {
+        control.Margin = new Padding() { All = 0 };
+        tableLayoutPanel1.Controls.Add(control, 0, 1);
+        control.Dock = DockStyle.Fill;
+      }
+      Init();
+    }
+
+    private void Init() {
+      textBoxName.DataBindings.Add("Text", VM, nameof(IJsonItemVM.Name));
+      textBoxDescription.DataBindings.Add("Text", VM, nameof(IJsonItemVM.Description));
+    }
+
+    private void textBoxName_Validating(object sender, CancelEventArgs e) {
+      if(string.IsNullOrWhiteSpace(textBoxName.Text)) {
+        errorProvider.SetError(textBoxName, "Name must not be empty.");
+        e.Cancel = true;
+      } else {
+        errorProvider.SetError(textBoxName, null);
+      }
+    }
+  }
+}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemBaseControl.resx
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemBaseControl.resx	(revision 17829)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemBaseControl.resx	(revision 17829)
@@ -0,0 +1,123 @@
+﻿<?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>
+  <metadata name="errorProvider.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/MatrixJsonItemControl.Designer.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/MatrixJsonItemControl.Designer.cs	(revision 17829)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/MatrixJsonItemControl.Designer.cs	(revision 17829)
@@ -0,0 +1,127 @@
+﻿
+namespace HeuristicLab.JsonInterface.OptimizerIntegration {
+  partial class MatrixJsonItemControl {
+    /// <summary> 
+    /// Erforderliche Designervariable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Verwendete Ressourcen bereinigen.
+    /// </summary>
+    /// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Vom Komponenten-Designer generierter Code
+
+    /// <summary> 
+    /// Erforderliche Methode für die Designerunterstützung. 
+    /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
+    /// </summary>
+    private void InitializeComponent() {
+      this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
+      this.groupBox2 = new System.Windows.Forms.GroupBox();
+      this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel();
+      this.checkBoxColumnsResizable = new System.Windows.Forms.CheckBox();
+      this.checkBoxRowsResizable = new System.Windows.Forms.CheckBox();
+      this.tableLayoutPanel1.SuspendLayout();
+      this.groupBox2.SuspendLayout();
+      this.tableLayoutPanel2.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // tableLayoutPanel1
+      // 
+      this.tableLayoutPanel1.ColumnCount = 1;
+      this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
+      this.tableLayoutPanel1.Controls.Add(this.groupBox2, 0, 0);
+      this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
+      this.tableLayoutPanel1.Name = "tableLayoutPanel1";
+      this.tableLayoutPanel1.RowCount = 2;
+      this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 63F));
+      this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
+      this.tableLayoutPanel1.Size = new System.Drawing.Size(526, 63);
+      this.tableLayoutPanel1.TabIndex = 24;
+      // 
+      // groupBox2
+      // 
+      this.groupBox2.Controls.Add(this.tableLayoutPanel2);
+      this.groupBox2.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.groupBox2.Location = new System.Drawing.Point(0, 0);
+      this.groupBox2.Margin = new System.Windows.Forms.Padding(0);
+      this.groupBox2.Name = "groupBox2";
+      this.groupBox2.Size = new System.Drawing.Size(526, 63);
+      this.groupBox2.TabIndex = 19;
+      this.groupBox2.TabStop = false;
+      this.groupBox2.Text = "Matrix Properties";
+      // 
+      // tableLayoutPanel2
+      // 
+      this.tableLayoutPanel2.ColumnCount = 1;
+      this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
+      this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F));
+      this.tableLayoutPanel2.Controls.Add(this.checkBoxRowsResizable, 0, 0);
+      this.tableLayoutPanel2.Controls.Add(this.checkBoxColumnsResizable, 0, 1);
+      this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.tableLayoutPanel2.Location = new System.Drawing.Point(3, 16);
+      this.tableLayoutPanel2.Margin = new System.Windows.Forms.Padding(0);
+      this.tableLayoutPanel2.Name = "tableLayoutPanel2";
+      this.tableLayoutPanel2.RowCount = 2;
+      this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
+      this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
+      this.tableLayoutPanel2.Size = new System.Drawing.Size(520, 44);
+      this.tableLayoutPanel2.TabIndex = 22;
+      // 
+      // checkBoxColumnsResizable
+      // 
+      this.checkBoxColumnsResizable.AutoSize = true;
+      this.checkBoxColumnsResizable.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.checkBoxColumnsResizable.Location = new System.Drawing.Point(0, 22);
+      this.checkBoxColumnsResizable.Margin = new System.Windows.Forms.Padding(0);
+      this.checkBoxColumnsResizable.Name = "checkBoxColumnsResizable";
+      this.checkBoxColumnsResizable.Size = new System.Drawing.Size(520, 22);
+      this.checkBoxColumnsResizable.TabIndex = 7;
+      this.checkBoxColumnsResizable.Text = "Columns Resizable";
+      this.checkBoxColumnsResizable.UseVisualStyleBackColor = true;
+      // 
+      // checkBoxRowsResizable
+      // 
+      this.checkBoxRowsResizable.AutoSize = true;
+      this.checkBoxRowsResizable.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.checkBoxRowsResizable.Location = new System.Drawing.Point(0, 0);
+      this.checkBoxRowsResizable.Margin = new System.Windows.Forms.Padding(0);
+      this.checkBoxRowsResizable.Name = "checkBoxRowsResizable";
+      this.checkBoxRowsResizable.Size = new System.Drawing.Size(520, 22);
+      this.checkBoxRowsResizable.TabIndex = 4;
+      this.checkBoxRowsResizable.Text = "Rows Resizable";
+      this.checkBoxRowsResizable.UseVisualStyleBackColor = true;
+      // 
+      // MatrixJsonItemControl
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.tableLayoutPanel1);
+      this.Name = "MatrixJsonItemControl";
+      this.Size = new System.Drawing.Size(526, 63);
+      this.tableLayoutPanel1.ResumeLayout(false);
+      this.groupBox2.ResumeLayout(false);
+      this.tableLayoutPanel2.ResumeLayout(false);
+      this.tableLayoutPanel2.PerformLayout();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
+    private System.Windows.Forms.GroupBox groupBox2;
+    private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2;
+    private System.Windows.Forms.CheckBox checkBoxRowsResizable;
+    private System.Windows.Forms.CheckBox checkBoxColumnsResizable;
+  }
+}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/MatrixJsonItemControl.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/MatrixJsonItemControl.cs	(revision 17829)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/MatrixJsonItemControl.cs	(revision 17829)
@@ -0,0 +1,16 @@
+﻿using System.Windows.Forms;
+
+namespace HeuristicLab.JsonInterface.OptimizerIntegration {
+  public partial class MatrixJsonItemControl : UserControl {
+    public MatrixJsonItemControl() {
+      InitializeComponent();
+    }
+
+    public static MatrixJsonItemControl Create(IJsonItemVM vm) {
+      var control = new MatrixJsonItemControl();
+      control.checkBoxRowsResizable.DataBindings.Add("Checked", vm, nameof(IMatrixJsonItemVM.RowsResizable));
+      control.checkBoxColumnsResizable .DataBindings.Add("Checked", vm, nameof(IMatrixJsonItemVM.ColumnsResizable));
+      return control;
+    }
+  }
+}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/MatrixJsonItemControl.resx
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/MatrixJsonItemControl.resx	(revision 17829)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/MatrixJsonItemControl.resx	(revision 17829)
@@ -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/NumericRangeControl.Designer.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/NumericRangeControl.Designer.cs	(revision 17829)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/NumericRangeControl.Designer.cs	(revision 17829)
@@ -0,0 +1,166 @@
+﻿namespace HeuristicLab.JsonInterface.OptimizerIntegration {
+  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.components = new System.ComponentModel.Container();
+      this.groupBox2 = new System.Windows.Forms.GroupBox();
+      this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel();
+      this.textBoxTo = new System.Windows.Forms.TextBox();
+      this.textBoxFrom = new System.Windows.Forms.TextBox();
+      this.checkBoxFrom = new System.Windows.Forms.CheckBox();
+      this.checkBoxTo = new System.Windows.Forms.CheckBox();
+      this.errorProvider = new System.Windows.Forms.ErrorProvider(this.components);
+      this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
+      this.groupBox2.SuspendLayout();
+      this.tableLayoutPanel2.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
+      this.tableLayoutPanel1.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // groupBox2
+      // 
+      this.groupBox2.Controls.Add(this.tableLayoutPanel2);
+      this.groupBox2.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.groupBox2.Location = new System.Drawing.Point(0, 0);
+      this.groupBox2.Margin = new System.Windows.Forms.Padding(0);
+      this.groupBox2.Name = "groupBox2";
+      this.groupBox2.Size = new System.Drawing.Size(526, 63);
+      this.groupBox2.TabIndex = 19;
+      this.groupBox2.TabStop = false;
+      this.groupBox2.Text = "Range";
+      // 
+      // tableLayoutPanel2
+      // 
+      this.tableLayoutPanel2.ColumnCount = 2;
+      this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 100F));
+      this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
+      this.tableLayoutPanel2.Controls.Add(this.textBoxTo, 1, 1);
+      this.tableLayoutPanel2.Controls.Add(this.textBoxFrom, 1, 0);
+      this.tableLayoutPanel2.Controls.Add(this.checkBoxFrom, 0, 0);
+      this.tableLayoutPanel2.Controls.Add(this.checkBoxTo, 0, 1);
+      this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.tableLayoutPanel2.Location = new System.Drawing.Point(3, 16);
+      this.tableLayoutPanel2.Margin = new System.Windows.Forms.Padding(0);
+      this.tableLayoutPanel2.Name = "tableLayoutPanel2";
+      this.tableLayoutPanel2.RowCount = 2;
+      this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
+      this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
+      this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
+      this.tableLayoutPanel2.Size = new System.Drawing.Size(520, 44);
+      this.tableLayoutPanel2.TabIndex = 22;
+      // 
+      // textBoxTo
+      // 
+      this.textBoxTo.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.errorProvider.SetIconAlignment(this.textBoxTo, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
+      this.textBoxTo.Location = new System.Drawing.Point(100, 22);
+      this.textBoxTo.Margin = new System.Windows.Forms.Padding(0);
+      this.textBoxTo.Name = "textBoxTo";
+      this.textBoxTo.ReadOnly = true;
+      this.textBoxTo.Size = new System.Drawing.Size(420, 20);
+      this.textBoxTo.TabIndex = 6;
+      this.textBoxTo.Validating += new System.ComponentModel.CancelEventHandler(this.textBoxTo_Validating);
+      // 
+      // textBoxFrom
+      // 
+      this.textBoxFrom.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.errorProvider.SetIconAlignment(this.textBoxFrom, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
+      this.textBoxFrom.Location = new System.Drawing.Point(100, 0);
+      this.textBoxFrom.Margin = new System.Windows.Forms.Padding(0);
+      this.textBoxFrom.Name = "textBoxFrom";
+      this.textBoxFrom.ReadOnly = true;
+      this.textBoxFrom.Size = new System.Drawing.Size(420, 20);
+      this.textBoxFrom.TabIndex = 2;
+      this.textBoxFrom.Validating += new System.ComponentModel.CancelEventHandler(this.textBoxFrom_Validating);
+      // 
+      // checkBoxFrom
+      // 
+      this.checkBoxFrom.AutoSize = true;
+      this.checkBoxFrom.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.checkBoxFrom.Location = new System.Drawing.Point(0, 0);
+      this.checkBoxFrom.Margin = new System.Windows.Forms.Padding(0);
+      this.checkBoxFrom.Name = "checkBoxFrom";
+      this.checkBoxFrom.Size = new System.Drawing.Size(100, 22);
+      this.checkBoxFrom.TabIndex = 4;
+      this.checkBoxFrom.Text = "From:";
+      this.checkBoxFrom.UseVisualStyleBackColor = true;
+      // 
+      // checkBoxTo
+      // 
+      this.checkBoxTo.AutoSize = true;
+      this.checkBoxTo.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.checkBoxTo.Location = new System.Drawing.Point(0, 22);
+      this.checkBoxTo.Margin = new System.Windows.Forms.Padding(0);
+      this.checkBoxTo.Name = "checkBoxTo";
+      this.checkBoxTo.Size = new System.Drawing.Size(100, 22);
+      this.checkBoxTo.TabIndex = 7;
+      this.checkBoxTo.Text = "To:";
+      this.checkBoxTo.UseVisualStyleBackColor = true;
+      // 
+      // errorProvider
+      // 
+      this.errorProvider.BlinkStyle = System.Windows.Forms.ErrorBlinkStyle.NeverBlink;
+      this.errorProvider.ContainerControl = this;
+      // 
+      // tableLayoutPanel1
+      // 
+      this.tableLayoutPanel1.ColumnCount = 1;
+      this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
+      this.tableLayoutPanel1.Controls.Add(this.groupBox2, 0, 0);
+      this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
+      this.tableLayoutPanel1.Name = "tableLayoutPanel1";
+      this.tableLayoutPanel1.RowCount = 2;
+      this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 63F));
+      this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
+      this.tableLayoutPanel1.Size = new System.Drawing.Size(526, 63);
+      this.tableLayoutPanel1.TabIndex = 23;
+      // 
+      // NumericRangeControl
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.tableLayoutPanel1);
+      this.Name = "NumericRangeControl";
+      this.Size = new System.Drawing.Size(526, 63);
+      this.groupBox2.ResumeLayout(false);
+      this.tableLayoutPanel2.ResumeLayout(false);
+      this.tableLayoutPanel2.PerformLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
+      this.tableLayoutPanel1.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+    private System.Windows.Forms.GroupBox groupBox2;
+    private System.Windows.Forms.CheckBox checkBoxTo;
+    private System.Windows.Forms.TextBox textBoxTo;
+    private System.Windows.Forms.ErrorProvider errorProvider;
+    private System.Windows.Forms.CheckBox checkBoxFrom;
+    private System.Windows.Forms.TextBox textBoxFrom;
+    private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2;
+    private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
+  }
+}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/NumericRangeControl.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/NumericRangeControl.cs	(revision 17829)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/NumericRangeControl.cs	(revision 17829)
@@ -0,0 +1,65 @@
+﻿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 {
+  public partial class NumericRangeControl : UserControl {
+    public TextBox TBMinRange { get; set; }
+    public TextBox TBMaxRange { get; set; }
+    public CheckBox EnableMinRange { get; set; }
+    public CheckBox EnableMaxRange { get; set; }
+    public NumericRangeControl() {
+      InitializeComponent();
+      TBMinRange = textBoxFrom;
+      TBMaxRange = textBoxTo;
+      EnableMinRange = checkBoxFrom;
+      EnableMaxRange = checkBoxTo;
+      checkBoxFrom.CheckedChanged += ToggleFromInput;
+      checkBoxTo.CheckedChanged += ToggleToInput;
+    }
+
+    private void ToggleToInput(object sender, EventArgs e) {
+      textBoxTo.ReadOnly = !checkBoxTo.Checked;
+    }
+
+    private void ToggleFromInput(object sender, EventArgs e) {
+      textBoxFrom.ReadOnly = !checkBoxFrom.Checked;
+    }
+
+    private void textBoxFrom_Validating(object sender, CancelEventArgs e) {
+      if (string.IsNullOrWhiteSpace(textBoxFrom.Text)) {
+        errorProvider.SetError(textBoxFrom, "'From' must not be empty.");
+        e.Cancel = true;
+      } else {
+        errorProvider.SetError(textBoxFrom, null);
+      }
+    }
+
+    private void textBoxTo_Validating(object sender, CancelEventArgs e) {
+      if (string.IsNullOrWhiteSpace(textBoxTo.Text)) {
+        errorProvider.SetError(textBoxTo, "'To' must not be empty.");
+        e.Cancel = true;
+      } else {
+        errorProvider.SetError(textBoxTo, null);
+      }
+    }
+
+    public static UserControl Create(IJsonItemVM vm) {
+      NumericRangeControl numericRangeControl = new NumericRangeControl();
+      numericRangeControl.TBMinRange.DataBindings.Add("Text", vm, nameof(RangedValueBaseVM<int, IntJsonItem>.MinRange));
+      numericRangeControl.TBMaxRange.DataBindings.Add("Text", vm, nameof(RangedValueBaseVM<int, IntJsonItem>.MaxRange));
+      numericRangeControl.EnableMinRange.DataBindings.Add("Checked", vm, nameof(RangedValueBaseVM<int, IntJsonItem>.EnableMinRange),
+        false, DataSourceUpdateMode.OnPropertyChanged);
+      numericRangeControl.EnableMaxRange.DataBindings.Add("Checked", vm, nameof(RangedValueBaseVM<int, IntJsonItem>.EnableMaxRange),
+        false, DataSourceUpdateMode.OnPropertyChanged);
+      return numericRangeControl;
+    }
+  }
+}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/NumericRangeControl.resx
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/NumericRangeControl.resx	(revision 17829)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/NumericRangeControl.resx	(revision 17829)
@@ -0,0 +1,123 @@
+﻿<?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>
+  <metadata name="errorProvider.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/HeuristicLab.JsonInterface.csproj
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/HeuristicLab.JsonInterface.csproj	(revision 17828)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/HeuristicLab.JsonInterface.csproj	(revision 17829)
@@ -80,24 +80,24 @@
     <Compile Include="Interfaces\IValueJsonItem.cs" />
     <Compile Include="Interfaces\IValueLookupJsonItem.cs" />
-    <Compile Include="Models\ArrayJsonItem.cs" />
-    <Compile Include="Models\BoolJsonItems.cs" />
-    <Compile Include="Models\ConcreteRestrictedArrayJsonItem.cs" />
-    <Compile Include="Models\ConcreteRestrictedValueJsonItem.cs" />
-    <Compile Include="Models\DateTimeJsonItem.cs" />
-    <Compile Include="Models\DoubleJsonItems.cs" />
-    <Compile Include="Models\EmptyJsonItem.cs" />
-    <Compile Include="Models\IntervalRestrictedArrayJsonItem.cs" />
-    <Compile Include="Models\IntervalRestrictedMatrixJsonItem.cs" />
-    <Compile Include="Models\IntervalRestrictedValueJsonItem.cs" />
-    <Compile Include="Models\IntJsonItems.cs" />
-    <Compile Include="Models\JsonItem.cs" />
-    <Compile Include="Models\LookupJsonItem.cs" />
-    <Compile Include="Models\MatrixJsonItem.cs" />
-    <Compile Include="Models\RangedJsonItem.cs" />
-    <Compile Include="Models\ResultJsonItem.cs" />
-    <Compile Include="Models\StringJsonItem.cs" />
-    <Compile Include="Models\UnsupportedJsonItem.cs" />
-    <Compile Include="Models\ValueJsonItem.cs" />
-    <Compile Include="Models\ValueLookupJsonItem.cs" />
+    <Compile Include="JsonItems\ArrayJsonItem.cs" />
+    <Compile Include="JsonItems\BoolJsonItems.cs" />
+    <Compile Include="JsonItems\ConcreteRestrictedArrayJsonItem.cs" />
+    <Compile Include="JsonItems\ConcreteRestrictedValueJsonItem.cs" />
+    <Compile Include="JsonItems\DateTimeJsonItem.cs" />
+    <Compile Include="JsonItems\DoubleJsonItems.cs" />
+    <Compile Include="JsonItems\EmptyJsonItem.cs" />
+    <Compile Include="JsonItems\IntervalRestrictedArrayJsonItem.cs" />
+    <Compile Include="JsonItems\IntervalRestrictedMatrixJsonItem.cs" />
+    <Compile Include="JsonItems\IntervalRestrictedValueJsonItem.cs" />
+    <Compile Include="JsonItems\IntJsonItems.cs" />
+    <Compile Include="JsonItems\JsonItem.cs" />
+    <Compile Include="JsonItems\LookupJsonItem.cs" />
+    <Compile Include="JsonItems\MatrixJsonItem.cs" />
+    <Compile Include="JsonItems\RangedJsonItem.cs" />
+    <Compile Include="JsonItems\ResultJsonItem.cs" />
+    <Compile Include="JsonItems\StringJsonItem.cs" />
+    <Compile Include="JsonItems\UnsupportedJsonItem.cs" />
+    <Compile Include="JsonItems\ValueJsonItem.cs" />
+    <Compile Include="JsonItems\ValueLookupJsonItem.cs" />
     <Compile Include="SingleLineArrayJsonWriter.cs" />
     <Compile Include="JsonTemplateGenerator.cs" />
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/ArrayJsonItem.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/ArrayJsonItem.cs	(revision 17829)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/ArrayJsonItem.cs	(revision 17829)
@@ -0,0 +1,11 @@
+﻿using Newtonsoft.Json.Linq;
+
+namespace HeuristicLab.JsonInterface {
+  public abstract class ArrayJsonItem<T> : ValueJsonItem<T[]>, IArrayJsonItem {
+    public virtual bool Resizable { get; set; }
+    public override void SetJObject(JObject jObject) {
+      base.SetJObject(jObject);
+      Resizable = (jObject[nameof(IArrayJsonItem.Resizable)]?.ToObject<bool>()).GetValueOrDefault();
+    }
+  }
+}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/BoolJsonItems.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/BoolJsonItems.cs	(revision 17829)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/BoolJsonItems.cs	(revision 17829)
@@ -0,0 +1,13 @@
+﻿namespace HeuristicLab.JsonInterface {
+  public class BoolJsonItem : ValueJsonItem<bool> {
+    protected override ValidationResult Validate() => ValidationResult.Successful();
+  }
+
+  public class BoolArrayJsonItem : ArrayJsonItem<bool> {
+    protected override ValidationResult Validate() => ValidationResult.Successful();
+  }
+
+  public class BoolMatrixJsonItem : MatrixJsonItem<bool> {
+    protected override ValidationResult Validate() => ValidationResult.Successful();
+  }
+}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/ConcreteRestrictedArrayJsonItem.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/ConcreteRestrictedArrayJsonItem.cs	(revision 17829)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/ConcreteRestrictedArrayJsonItem.cs	(revision 17829)
@@ -0,0 +1,27 @@
+﻿using System.Collections.Generic;
+using System.Linq;
+namespace HeuristicLab.JsonInterface {
+  public abstract class ConcreteRestrictedArrayJsonItem<T> : ArrayJsonItem<T>, IConcreteRestrictedJsonItem<T> {
+    public IEnumerable<T> ConcreteRestrictedItems { get; set; }
+
+    protected override ValidationResult Validate() {
+      bool res = true;
+      IList<string> errors = new List<string>();
+      if (ConcreteRestrictedItems == null) return ValidationResult.Successful();
+      foreach(var x in Value) {
+        bool tmp = false;
+        foreach(var restrictedItem in ConcreteRestrictedItems) {
+          tmp = tmp || x.Equals(restrictedItem); //if one tmp is true, it stays true (match found)
+        }
+        if (!tmp)
+          errors.Add($"[{Path}]: Value '{x}' is not one of the allowed values: " +
+                     $"'{ string.Join(",", ConcreteRestrictedItems.Select(s => s.ToString()).ToArray()) }'.");
+        res = res && tmp; //if one tmp is false, res will set false
+      }
+      if (res) 
+        return ValidationResult.Successful();
+      else 
+        return ValidationResult.Faulty(errors);
+    }
+  }
+}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/ConcreteRestrictedValueJsonItem.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/ConcreteRestrictedValueJsonItem.cs	(revision 17829)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/ConcreteRestrictedValueJsonItem.cs	(revision 17829)
@@ -0,0 +1,20 @@
+﻿using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace HeuristicLab.JsonInterface {
+
+  public abstract class ConcreteRestrictedValueJsonItem<T> : ValueJsonItem<T>, IConcreteRestrictedJsonItem<T> {
+
+    public IEnumerable<T> ConcreteRestrictedItems { get; set; }
+
+    protected override ValidationResult Validate() {
+      if (ConcreteRestrictedItems == null) return ValidationResult.Successful();
+      foreach (var x in ConcreteRestrictedItems)
+        if (Value.Equals(x)) return ValidationResult.Successful();
+      return ValidationResult.Faulty(
+        $"[{Path}]: Value {Value} is not one of the allowed values: " +
+        $"'{ string.Join(",", ConcreteRestrictedItems.Select(s => s.ToString()).ToArray()) }'.");
+    }
+  }
+}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/DateTimeJsonItem.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/DateTimeJsonItem.cs	(revision 17829)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/DateTimeJsonItem.cs	(revision 17829)
@@ -0,0 +1,25 @@
+﻿using System;
+using Newtonsoft.Json.Linq;
+
+namespace HeuristicLab.JsonInterface {
+  public class DateTimeJsonItem : IntervalRestrictedValueJsonItem<DateTime> {
+    
+    public override JObject GenerateJObject() {
+      var obj = base.GenerateJObject();
+
+      if (Minimum.CompareTo(DateTime.MinValue) == 0)
+        obj.Property("Minimum").Remove();
+
+      if (Maximum.CompareTo(DateTime.MaxValue) == 0)
+        obj.Property("Maximum").Remove();
+
+      return obj;
+    }
+
+    public override void SetJObject(JObject jObject) {
+      Minimum = DateTime.MinValue;
+      Maximum = DateTime.MaxValue;
+      base.SetJObject(jObject);
+    }
+  }
+}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/DoubleJsonItems.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/DoubleJsonItems.cs	(revision 17829)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/DoubleJsonItems.cs	(revision 17829)
@@ -0,0 +1,80 @@
+﻿using Newtonsoft.Json.Linq;
+
+namespace HeuristicLab.JsonInterface {
+  public class DoubleJsonItem : IntervalRestrictedValueJsonItem<double> {
+    public override JObject GenerateJObject() {
+      var obj = base.GenerateJObject();
+
+      if (Minimum.CompareTo(double.MinValue) == 0)
+        obj.Property("Minimum").Remove();
+
+      if (Maximum.CompareTo(double.MaxValue) == 0)
+        obj.Property("Maximum").Remove();
+
+      return obj;
+    }
+
+    public override void SetJObject(JObject jObject) {
+      Minimum = double.MinValue;
+      Maximum = double.MaxValue;
+      base.SetJObject(jObject);
+    }
+  }
+  public class DoubleArrayJsonItem : IntervalRestrictedArrayJsonItem<double> {
+    public override JObject GenerateJObject() {
+      var obj = base.GenerateJObject();
+
+      if (Minimum.CompareTo(double.MinValue) == 0)
+        obj.Property("Minimum").Remove();
+
+      if (Maximum.CompareTo(double.MaxValue) == 0)
+        obj.Property("Maximum").Remove();
+
+      return obj;
+    }
+
+    public override void SetJObject(JObject jObject) {
+      Minimum = double.MinValue;
+      Maximum = double.MaxValue;
+      base.SetJObject(jObject);
+    }
+  }
+  public class DoubleRangeJsonItem : RangedJsonItem<double> {
+    public override JObject GenerateJObject() {
+      var obj = base.GenerateJObject();
+
+      if (Minimum.CompareTo(double.MinValue) == 0)
+        obj.Property("Minimum").Remove();
+
+      if (Maximum.CompareTo(double.MaxValue) == 0)
+        obj.Property("Maximum").Remove();
+
+      return obj;
+    }
+
+    public override void SetJObject(JObject jObject) {
+      Minimum = double.MinValue;
+      Maximum = double.MaxValue;
+      base.SetJObject(jObject);
+    }
+  }
+  public class DoubleMatrixJsonItem : IntervalRestrictedMatrixJsonItem<double> {
+    public override JObject GenerateJObject() {
+      var obj = base.GenerateJObject();
+
+      if (Minimum.CompareTo(double.MinValue) == 0)
+        obj.Property("Minimum").Remove();
+
+      if (Maximum.CompareTo(double.MaxValue) == 0)
+        obj.Property("Maximum").Remove();
+
+      return obj;
+    }
+
+    public override void SetJObject(JObject jObject) {
+      Minimum = double.MinValue;
+      Maximum = double.MaxValue;
+      base.SetJObject(jObject);
+    }
+  }
+}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/EmptyJsonItem.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/EmptyJsonItem.cs	(revision 17829)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/EmptyJsonItem.cs	(revision 17829)
@@ -0,0 +1,5 @@
+﻿namespace HeuristicLab.JsonInterface {
+  public class EmptyJsonItem : JsonItem {
+    protected override ValidationResult Validate() => ValidationResult.Successful();
+  }
+}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/IntJsonItems.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/IntJsonItems.cs	(revision 17829)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/IntJsonItems.cs	(revision 17829)
@@ -0,0 +1,80 @@
+﻿using Newtonsoft.Json.Linq;
+
+namespace HeuristicLab.JsonInterface {
+  public class IntJsonItem : IntervalRestrictedValueJsonItem<int> {
+    public override JObject GenerateJObject() {
+      var obj = base.GenerateJObject();
+
+      if (Minimum.CompareTo(int.MinValue) == 0)
+        obj.Property("Minimum").Remove();
+
+      if (Maximum.CompareTo(int.MaxValue) == 0)
+        obj.Property("Maximum").Remove();
+
+      return obj;
+    }
+
+    public override void SetJObject(JObject jObject) {
+      Minimum = int.MinValue;
+      Maximum = int.MaxValue;
+      base.SetJObject(jObject);
+    }
+  }
+  public class IntArrayJsonItem : IntervalRestrictedArrayJsonItem<int> {
+    public override JObject GenerateJObject() {
+      var obj = base.GenerateJObject();
+
+      if (Minimum.CompareTo(int.MinValue) == 0)
+        obj.Property("Minimum").Remove();
+
+      if (Maximum.CompareTo(int.MaxValue) == 0)
+        obj.Property("Maximum").Remove();
+
+      return obj;
+    }
+
+    public override void SetJObject(JObject jObject) {
+      Minimum = int.MinValue;
+      Maximum = int.MaxValue;
+      base.SetJObject(jObject);
+    }
+  }
+  public class IntRangeJsonItem : RangedJsonItem<int> {
+    public override JObject GenerateJObject() {
+      var obj = base.GenerateJObject();
+
+      if (Minimum.CompareTo(int.MinValue) == 0)
+        obj.Property("Minimum").Remove();
+
+      if (Maximum.CompareTo(int.MaxValue) == 0)
+        obj.Property("Maximum").Remove();
+
+      return obj;
+    }
+
+    public override void SetJObject(JObject jObject) {
+      Minimum = int.MinValue;
+      Maximum = int.MaxValue;
+      base.SetJObject(jObject);
+    }
+  }
+  public class IntMatrixJsonItem : IntervalRestrictedMatrixJsonItem<int> {
+    public override JObject GenerateJObject() {
+      var obj = base.GenerateJObject();
+
+      if (Minimum.CompareTo(int.MinValue) == 0)
+        obj.Property("Minimum").Remove();
+
+      if (Maximum.CompareTo(int.MaxValue) == 0)
+        obj.Property("Maximum").Remove();
+
+      return obj;
+    }
+
+    public override void SetJObject(JObject jObject) {
+      Minimum = int.MinValue;
+      Maximum = int.MaxValue;
+      base.SetJObject(jObject);
+    }
+  }
+}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/IntervalRestrictedArrayJsonItem.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/IntervalRestrictedArrayJsonItem.cs	(revision 17829)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/IntervalRestrictedArrayJsonItem.cs	(revision 17829)
@@ -0,0 +1,34 @@
+﻿using System;
+using System.Collections.Generic;
+using Newtonsoft.Json.Linq;
+
+namespace HeuristicLab.JsonInterface {
+  public abstract class IntervalRestrictedArrayJsonItem<T> : ArrayJsonItem<T>, IIntervalRestrictedJsonItem<T>
+    where T : IComparable {
+    public T Minimum { get; set; }
+    public T Maximum { get; set; }
+
+    protected override ValidationResult Validate() {
+      IList<string> errors = new List<string>();
+      bool success = true;
+      foreach (var x in Value) {
+        if (Minimum.CompareTo(x) > 0 && Maximum.CompareTo(x) < 0) {
+          success = false;
+          errors.Add($"[{Path}]: Value {x} is not between {Minimum} and {Maximum}.");
+        }
+      }
+      return new ValidationResult(success, errors);
+    }
+
+    public override void SetJObject(JObject jObject) {
+      base.SetJObject(jObject);
+
+      var minProp = jObject[nameof(IIntervalRestrictedJsonItem<T>.Minimum)];
+      if (minProp != null) Minimum = minProp.ToObject<T>();
+
+
+      var maxProp = jObject[nameof(IIntervalRestrictedJsonItem<T>.Maximum)];
+      if (maxProp != null) Maximum = maxProp.ToObject<T>();
+    }
+  }
+}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/IntervalRestrictedMatrixJsonItem.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/IntervalRestrictedMatrixJsonItem.cs	(revision 17829)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/IntervalRestrictedMatrixJsonItem.cs	(revision 17829)
@@ -0,0 +1,36 @@
+﻿using System;
+using System.Collections.Generic;
+using Newtonsoft.Json.Linq;
+
+namespace HeuristicLab.JsonInterface {
+  public abstract class IntervalRestrictedMatrixJsonItem<T> : MatrixJsonItem<T>, IIntervalRestrictedJsonItem<T>
+    where T : IComparable {
+    public T Minimum { get; set; }
+    public T Maximum { get; set; }
+
+    protected override ValidationResult Validate() {
+      IList<string> errors = new List<string>();
+      bool success = true;
+      foreach (var x in Value) {
+        foreach (var y in x) {
+          if (Minimum.CompareTo(y) > 0 || Maximum.CompareTo(y) < 0) {
+            success = false;
+            errors.Add($"[{Path}]: Value {y} is not between {Minimum} and {Maximum}.");
+          }
+        }
+      }
+      return new ValidationResult(success, errors);
+    }
+
+    public override void SetJObject(JObject jObject) {
+      base.SetJObject(jObject);
+
+      var minProp = jObject[nameof(IIntervalRestrictedJsonItem<T>.Minimum)];
+      if (minProp != null) Minimum = minProp.ToObject<T>();
+
+
+      var maxProp = jObject[nameof(IIntervalRestrictedJsonItem<T>.Maximum)];
+      if (maxProp != null) Maximum = maxProp.ToObject<T>();
+    }
+  }
+}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/IntervalRestrictedValueJsonItem.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/IntervalRestrictedValueJsonItem.cs	(revision 17829)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/IntervalRestrictedValueJsonItem.cs	(revision 17829)
@@ -0,0 +1,26 @@
+﻿using System;
+using Newtonsoft.Json.Linq;
+
+namespace HeuristicLab.JsonInterface {
+  public abstract class IntervalRestrictedValueJsonItem<T> : ValueJsonItem<T>, IIntervalRestrictedJsonItem<T>
+    where T : IComparable {
+    public T Minimum { get; set; }
+    public T Maximum { get; set; }
+
+    protected override ValidationResult Validate() {
+      bool res = Minimum.CompareTo(Value) <= 0 && Maximum.CompareTo(Value) >= 0;
+      if (res) return ValidationResult.Successful();
+      else return ValidationResult.Faulty($"[{Path}]: Value {Value} is not between {Minimum} and {Maximum}.");
+    }
+
+    public override void SetJObject(JObject jObject) {
+      base.SetJObject(jObject);
+
+      var minProp = jObject[nameof(IIntervalRestrictedJsonItem<T>.Minimum)];
+      if (minProp != null) Minimum = minProp.ToObject<T>();
+
+      var maxProp = jObject[nameof(IIntervalRestrictedJsonItem<T>.Maximum)];
+      if (maxProp != null) Maximum = maxProp.ToObject<T>();
+    }
+  }
+}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/JsonItem.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/JsonItem.cs	(revision 17829)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/JsonItem.cs	(revision 17829)
@@ -0,0 +1,150 @@
+﻿using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace HeuristicLab.JsonInterface {
+
+  public readonly struct ValidationResult {
+
+    public static ValidationResult Successful() => new ValidationResult(true, Enumerable.Empty<string>());
+    public static ValidationResult Faulty(IEnumerable<string> errors) => new ValidationResult(false, errors);
+    public static ValidationResult Faulty(string error) => new ValidationResult(false, error);
+
+    public ValidationResult(bool success, IEnumerable<string> errors) {
+      Success = success;
+      Errors = errors;
+    }
+
+    public ValidationResult(bool success, string error) {
+      Success = success;
+      Errors = Enumerable.Repeat(error, 1);
+    }
+
+    public bool Success { get; }
+    public IEnumerable<string> Errors { get; }
+
+    public Exception GenerateException() => 
+      new AggregateException(Errors.Select(x => new ArgumentException(x)));
+  }
+
+  /// <summary>
+  /// Main data class for json interface.
+  /// </summary>
+  public abstract class JsonItem : IJsonItem {
+
+    public class JsonItemValidator : IJsonItemValidator {
+      private IDictionary<int, bool> Cache = new Dictionary<int, bool>();
+      private JsonItem Root { get; set; }
+      public JsonItemValidator(JsonItem root) {
+        Root = root;
+      }
+
+      public ValidationResult Validate() {
+        List<string> errors = new List<string>();
+        bool success = true;
+        foreach(var x in Root) {
+          JsonItem item = x as JsonItem;
+          if(item.Active) {
+            var res = ((JsonItem)x).Validate();
+            //if one success is false -> whole validation is false
+            success = success && res.Success;
+            errors.AddRange(res.Errors);
+          }
+        }
+        return new ValidationResult(success, errors);
+      }
+    }
+
+    public virtual string Name { get; set; }
+
+    public virtual string Description { get; set; }
+
+    private string fixedPath = "";
+    public virtual string Path {
+      get {
+        if (!string.IsNullOrWhiteSpace(fixedPath))
+          return fixedPath;
+
+        IJsonItem tmp = Parent;
+        StringBuilder builder = new StringBuilder(this.Name);
+        while(tmp != null) {
+          builder.Insert(0, tmp.Name + ".");
+          tmp = tmp.Parent;
+        }
+        return builder.ToString();
+      }
+    }
+
+    [JsonIgnore]
+    public virtual IEnumerable<IJsonItem> Children { get; protected set; }
+
+    [JsonIgnore]
+    public virtual IJsonItem Parent { get; set; }
+
+    [JsonIgnore]
+    public virtual bool Active { get; set; }
+
+    #region Constructors
+    public JsonItem() { }
+
+    public JsonItem(IEnumerable<IJsonItem> childs) {
+      AddChildren(childs);
+    }
+    #endregion
+    
+    #region Public Methods
+    public void AddChildren(params IJsonItem[] childs) => 
+      AddChildren(childs as IEnumerable<IJsonItem>);
+
+    public void AddChildren(IEnumerable<IJsonItem> childs) {
+      if (childs == null) return;
+      if (Children == null)
+        Children = new List<IJsonItem>();
+      if(Children is IList<IJsonItem> list) {
+        foreach (var child in childs) {
+          list.Add(child);
+          child.Parent = this;
+        }
+      }
+    }
+
+    public IJsonItemValidator GetValidator() => new JsonItemValidator(this);
+
+    public void FixatePath() => fixedPath = Path;
+    public void LoosenPath() => fixedPath = "";
+
+    public virtual JObject GenerateJObject() =>
+      JObject.FromObject(this, new JsonSerializer() {
+        TypeNameHandling = TypeNameHandling.None,
+        NullValueHandling = NullValueHandling.Ignore,
+        ReferenceLoopHandling = ReferenceLoopHandling.Ignore
+      });
+
+    public virtual void SetJObject(JObject jObject) { }
+    #endregion
+
+    #region Abstract Methods
+    protected abstract ValidationResult Validate();
+    #endregion
+
+    #region IEnumerable Support
+    public virtual IEnumerator<IJsonItem> GetEnumerator() {
+      yield return this;
+      
+      if (Children != null) {
+        foreach (var x in Children) {
+          foreach (var c in x) {
+            yield return c;
+          }
+        }
+      }
+    }
+
+    IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
+    #endregion
+  }
+}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/LookupJsonItem.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/LookupJsonItem.cs	(revision 17829)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/LookupJsonItem.cs	(revision 17829)
@@ -0,0 +1,14 @@
+﻿using Newtonsoft.Json.Linq;
+
+namespace HeuristicLab.JsonInterface {
+  public class LookupJsonItem : JsonItem, ILookupJsonItem {
+    public virtual string ActualName { get; set; }
+
+    public override void SetJObject(JObject jObject) {
+      base.SetJObject(jObject);
+      ActualName = jObject[nameof(ILookupJsonItem.ActualName)]?.ToString();
+    }
+
+    protected override ValidationResult Validate() => ValidationResult.Successful();
+  }
+}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/MatrixJsonItem.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/MatrixJsonItem.cs	(revision 17829)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/MatrixJsonItem.cs	(revision 17829)
@@ -0,0 +1,29 @@
+﻿using System.Collections.Generic;
+using Newtonsoft.Json.Linq;
+
+namespace HeuristicLab.JsonInterface {
+  public abstract class MatrixJsonItem<T> : ValueJsonItem<T[][]>, IMatrixJsonItem {
+    public virtual bool RowsResizable { get; set; }
+    public virtual bool ColumnsResizable { get; set; }
+
+    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 override void SetJObject(JObject jObject) {
+      base.SetJObject(jObject);
+      RowsResizable = (jObject[nameof(IMatrixJsonItem.RowsResizable)]?.ToObject<bool>()).GetValueOrDefault();
+      ColumnsResizable = (jObject[nameof(IMatrixJsonItem.ColumnsResizable)]?.ToObject<bool>()).GetValueOrDefault();
+      RowNames = jObject[nameof(IMatrixJsonItem.RowNames)]?.ToObject<IEnumerable<string>>();
+      ColumnNames = jObject[nameof(IMatrixJsonItem.ColumnNames)]?.ToObject<IEnumerable<string>>();
+    }
+  }
+}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/RangedJsonItem.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/RangedJsonItem.cs	(revision 17829)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/RangedJsonItem.cs	(revision 17829)
@@ -0,0 +1,23 @@
+﻿using System;
+using System.Collections.Generic;
+
+namespace HeuristicLab.JsonInterface {
+  public abstract class RangedJsonItem<T> : JsonItem, IRangedJsonItem<T>
+    where T : IComparable {
+    public T MinValue { get; set; }
+    public T MaxValue { get; set; }
+    public T Minimum { get; set; }
+    public T Maximum { get; set; }
+
+    protected override ValidationResult Validate() {
+      IList<string> errors = new List<string>();
+      bool successMin = (Minimum.CompareTo(MinValue) <= 0 && Maximum.CompareTo(MinValue) >= 0);
+      bool successMax = (Minimum.CompareTo(MaxValue) <= 0 && Maximum.CompareTo(MaxValue) >= 0);
+      if (!successMin) errors.Add($"[{Path}]: Value {MinValue} is not between {Minimum} and {Maximum}.");
+      if (!successMax) errors.Add($"[{Path}]: Value {MaxValue} is not between {Minimum} and {Maximum}.");
+      return new ValidationResult((successMin && successMax), errors);
+
+    }
+      
+  }
+}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/ResultJsonItem.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/ResultJsonItem.cs	(revision 17829)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/ResultJsonItem.cs	(revision 17829)
@@ -0,0 +1,7 @@
+﻿namespace HeuristicLab.JsonInterface {
+  public class ResultJsonItem : JsonItem, IResultJsonItem {
+    protected override ValidationResult Validate() => ValidationResult.Successful();
+
+    public string Converter { get; set; }
+  }
+}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/StringJsonItem.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/StringJsonItem.cs	(revision 17829)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/StringJsonItem.cs	(revision 17829)
@@ -0,0 +1,4 @@
+﻿namespace HeuristicLab.JsonInterface {
+  public class StringJsonItem : ConcreteRestrictedValueJsonItem<string> { }
+  public class StringArrayJsonItem : ConcreteRestrictedArrayJsonItem<string> { }
+}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/UnsupportedJsonItem.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/UnsupportedJsonItem.cs	(revision 17829)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/UnsupportedJsonItem.cs	(revision 17829)
@@ -0,0 +1,38 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using Newtonsoft.Json;
+
+namespace HeuristicLab.JsonInterface {
+  public class UnsupportedJsonItem : JsonItem {
+    /*
+    public override string Name {
+      get => throw new NotSupportedException();
+      set => throw new NotSupportedException();
+    }
+
+    public override string Description { // TODO
+      get => throw new NotSupportedException();
+      set => throw new NotSupportedException();
+    }
+
+    public override string Path {
+      get => throw new NotSupportedException();
+    }
+    */
+
+    [JsonIgnore]
+    public override IEnumerable<IJsonItem> Children {
+      get => Enumerable.Empty<IJsonItem>();
+      protected set => throw new NotSupportedException();
+    }
+    /*
+    [JsonIgnore]
+    public override IJsonItem Parent {
+      get => throw new NotSupportedException();
+      set => throw new NotSupportedException();
+    }
+    */
+    protected override ValidationResult Validate() => ValidationResult.Successful();
+  }
+}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/ValueJsonItem.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/ValueJsonItem.cs	(revision 17829)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/ValueJsonItem.cs	(revision 17829)
@@ -0,0 +1,35 @@
+﻿using System;
+using Newtonsoft.Json.Linq;
+
+namespace HeuristicLab.JsonInterface {
+  public abstract class ValueJsonItem : JsonItem, IValueJsonItem {
+    public object Value { get; set; }
+
+    public override void SetJObject(JObject jObject) {
+      Value = jObject[nameof(IValueJsonItem.Value)]?.ToObject<object>();
+    }
+
+  }
+
+  public abstract class ValueJsonItem<T> : ValueJsonItem, IValueJsonItem<T> {
+    public new T Value {
+      get => ConvertObject(base.Value);
+      set => base.Value = value;
+    }
+
+    private T ConvertObject(object obj) {
+      if (obj is IConvertible)
+        return (T)Convert.ChangeType(obj, typeof(T));
+
+      if (obj is JToken token)
+        return token.ToObject<T>();
+
+      return (T)obj;
+    }
+
+    public override void SetJObject(JObject jObject) {
+      if(jObject[nameof(IValueJsonItem<T>.Value)] != null)
+        Value = jObject[nameof(IValueJsonItem<T>.Value)].ToObject<T>();
+    }
+  }
+}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/ValueLookupJsonItem.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/ValueLookupJsonItem.cs	(revision 17829)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItems/ValueLookupJsonItem.cs	(revision 17829)
@@ -0,0 +1,36 @@
+﻿using System.Collections.Generic;
+using Newtonsoft.Json.Linq;
+
+namespace HeuristicLab.JsonInterface {
+  public class ValueLookupJsonItem : LookupJsonItem, IValueLookupJsonItem {
+    public IJsonItem ActualValue { get; set; }
+
+    protected override ValidationResult Validate() {
+      if (ActualValue == null) return ValidationResult.Successful();
+      return ActualValue.GetValidator().Validate();
+    }
+
+    public override JObject GenerateJObject() {
+      var obj = base.GenerateJObject();
+      if(ActualValue != null) {
+        obj.Add(nameof(IValueLookupJsonItem.ActualValue), ActualValue.Path);
+      }
+      return obj;
+    }
+
+    public override IEnumerator<IJsonItem> GetEnumerator() {
+      using (var it = base.GetEnumerator()) {
+        while(it.MoveNext()) {
+          yield return it.Current;
+        }
+      }
+      if(ActualValue != null) {
+        using (var it = ActualValue.GetEnumerator()) {
+          while (it.MoveNext()) {
+            yield return it.Current;
+          }
+        }
+      }
+    }
+  }
+}
