Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/HeuristicLab.JsonInterface.OptimizerIntegration.csproj
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/HeuristicLab.JsonInterface.OptimizerIntegration.csproj	(revision 17419)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/HeuristicLab.JsonInterface.OptimizerIntegration.csproj	(revision 17420)
@@ -97,4 +97,5 @@
     <Compile Include="ViewModels\ArrayValueVM.cs" />
     <Compile Include="ViewModels\JsonItemVMBase.cs" />
+    <Compile Include="ViewModels\RangedValueBaseVM.cs" />
     <Compile Include="ViewModels\RangeVM.cs" />
     <Compile Include="ViewModels\SingleValueVM.cs" />
@@ -197,4 +198,7 @@
     <EmbeddedResource Include="Views\ExportJsonDialog.resx">
       <DependentUpon>ExportJsonDialog.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Views\JsonItemArrayValueControl.resx">
+      <DependentUpon>JsonItemArrayValueControl.cs</DependentUpon>
     </EmbeddedResource>
     <EmbeddedResource Include="Views\JsonItemBoolControl.resx">
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/ArrayValueVM.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/ArrayValueVM.cs	(revision 17419)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/ArrayValueVM.cs	(revision 17420)
@@ -1,4 +1,5 @@
 ﻿using System;
 using System.Collections.Generic;
+using System.ComponentModel;
 using System.Linq;
 using System.Text;
@@ -6,7 +7,79 @@
 
 namespace HeuristicLab.JsonInterface.OptimizerIntegration {
-  public class ArrayValueVM : JsonItemVMBase {
+
+  public class DoubleArrayValueVM : ArrayValueVM<double> {
     public override Type JsonItemType => typeof(DoubleArrayJsonItem);
-    public override JsonItemBaseControl GetControl() => new JsonItemArrayValueControl(this);
+
+    protected override double MinTypeValue => double.MinValue;
+
+    protected override double MaxTypeValue => double.MaxValue;
+
+    public override JsonItemBaseControl GetControl() => new JsonItemDoubleArrayValueControl(this);
+
+    protected override void OnItemChanged() {
+      IList<IndexedArrayValueVM> list = new List<IndexedArrayValueVM>();
+      var arr = ((DoubleArrayJsonItem)Item).Value;
+      for(int i = 0; i < arr.Length; ++i) {
+        list.Add(new IndexedArrayValueVM(arr, i));
+      }
+      Value = list.ToArray();
+    }
+  }
+
+  public class IntArrayValueVM : ArrayValueVM<int> {
+    public override Type JsonItemType => typeof(IntArrayJsonItem);
+
+    protected override int MinTypeValue => int.MinValue;
+
+    protected override int MaxTypeValue => int.MaxValue;
+
+    public override JsonItemBaseControl GetControl() => new JsonItemIntArrayValueControl(this);
+
+    protected override void OnItemChanged() {
+      IList<IndexedArrayValueVM> list = new List<IndexedArrayValueVM>();
+      var arr = ((IntArrayJsonItem)Item).Value;
+      for (int i = 0; i < arr.Length; ++i) {
+        list.Add(new IndexedArrayValueVM(arr, i));
+      }
+      Value = list.ToArray();
+    }
+  }
+
+  public abstract class ArrayValueVM<T> : RangedValueBaseVM<T> {
+
+    public class IndexedArrayValueVM : INotifyPropertyChanged {
+      private T[] arr;
+      private int index;
+
+      public IndexedArrayValueVM(T[] arr, int index) {
+        this.arr = arr;
+        this.index = index;
+      }
+
+      public T Value {
+        get => arr[index];
+        set {
+          arr[index] = value;
+          PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Value)));
+        }
+      }
+
+      public event PropertyChangedEventHandler PropertyChanged;
+    }
+
+    public ArrayValueVM() {
+      base.ItemChanged += OnItemChanged;
+    }
+
+    protected abstract void OnItemChanged();
+
+    IndexedArrayValueVM[] vms;
+    public IndexedArrayValueVM[] Value {
+      get => vms; 
+      set {
+        vms = value;
+        OnPropertyChange(this, nameof(Value));
+      } 
+    }
   }
 }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/JsonItemVMBase.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/JsonItemVMBase.cs	(revision 17419)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/JsonItemVMBase.cs	(revision 17420)
@@ -9,5 +9,14 @@
   public class JsonItemVMBase : INotifyPropertyChanged {
     public event PropertyChangedEventHandler PropertyChanged;
-    public IJsonItem Item { get; set; }
+    public event Action ItemChanged;
+
+    private IJsonItem item;
+    public IJsonItem Item {
+      get => item;
+      set {
+        item = value;
+        ItemChanged?.Invoke();
+      }
+    }
 
     protected void OnPropertyChange(object sender, string propertyName) {
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/RangeVM.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/RangeVM.cs	(revision 17419)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/RangeVM.cs	(revision 17420)
@@ -9,14 +9,26 @@
 
   public class IntRangeVM : RangeVM<int> {
-    public override Type JsonItemType => typeof(IntArrayJsonItem); 
-  }
+    public override Type JsonItemType => typeof(IntRangeJsonItem);
 
-  public class DoubleRangeVM : RangeVM<double> {
-    public override Type JsonItemType => typeof(DoubleArrayJsonItem);
+    protected override int MinTypeValue => int.MinValue;
+
+    protected override int MaxTypeValue => int.MaxValue;
+
     public override JsonItemBaseControl GetControl() =>
       new JsonItemRangeControl(this);
   }
 
-  public abstract class RangeVM<T> : JsonItemVMBase {
+  public class DoubleRangeVM : RangeVM<double> {
+    public override Type JsonItemType => typeof(DoubleRangeJsonItem);
+
+    protected override double MinTypeValue => double.MinValue;
+
+    protected override double MaxTypeValue => double.MaxValue;
+
+    public override JsonItemBaseControl GetControl() =>
+      new JsonItemRangeControl(this);
+  }
+
+  public abstract class RangeVM<T> : RangedValueBaseVM<T> {
 
     public T MinValue {
@@ -36,27 +48,6 @@
     }
 
-    public T MinRange {
-      get => Cast(Item.Range.First());
-      set {
-        SetRange(value, Item.Range.Last());
-        OnPropertyChange(this, nameof(MinRange));
-      }
-    }
-
-    public T MaxRange {
-      get => Cast(Item.Range.Last());
-      set {
-        SetRange(Item.Range.First(), value);
-        OnPropertyChange(this, nameof(MaxRange));
-      }
-    }
-
-    private T Cast(object obj) => (T)Convert.ChangeType(obj, typeof(T));
-
     private void SetValue(object min, object max) =>
       Item.Value = new object[] { min, max };
-
-    private void SetRange(object min, object max) =>
-      Item.Range = new object[] { min, max };
   }
 }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/RangedValueBaseVM.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/RangedValueBaseVM.cs	(revision 17420)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/RangedValueBaseVM.cs	(revision 17420)
@@ -0,0 +1,59 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HeuristicLab.JsonInterface.OptimizerIntegration {
+  public abstract class RangedValueBaseVM : RangedValueBaseVM<object> { }
+
+  public abstract class RangedValueBaseVM<T> : JsonItemVMBase {
+    public T MinRange {
+      get => Cast(Item.Range?.First());
+      set {
+        SetRange(value, Item.Range?.Last());
+        OnPropertyChange(this, nameof(MinRange));
+      }
+    }
+
+    public T MaxRange {
+      get => Cast(Item.Range?.Last());
+      set {
+        SetRange(Item.Range?.First(), value);
+        OnPropertyChange(this, nameof(MaxRange));
+      }
+    }
+
+    private bool enableMinRange = false;
+    public bool EnableMinRange {
+      get => enableMinRange;
+      set {
+        enableMinRange = value;
+        if (!enableMinRange)
+          MinRange = MinTypeValue;
+        OnPropertyChange(this, nameof(EnableMinRange));
+      }
+    }
+
+    private bool enableMaxRange = false;
+    public bool EnableMaxRange {
+      get => enableMaxRange;
+      set {
+        enableMaxRange = value;
+        if (!enableMaxRange)
+          MaxRange = MaxTypeValue;
+        OnPropertyChange(this, nameof(EnableMaxRange));
+      }
+    }
+
+    protected T Cast(object obj) => (obj==null) ? default(T) : (T)Convert.ChangeType(obj, typeof(T));
+
+    private void SetRange(object min, object max) {
+      object[] range = new object[] { min, max };
+      Item.Range = range;
+    }
+
+    protected abstract T MinTypeValue { get; }
+    protected abstract T MaxTypeValue { get; }
+  }
+}
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/SingleValueVM.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/SingleValueVM.cs	(revision 17419)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/SingleValueVM.cs	(revision 17420)
@@ -38,5 +38,5 @@
   }
 
-  public abstract class SingleValueVM<T> : JsonItemVMBase {
+  public abstract class SingleValueVM<T> : RangedValueBaseVM<T> {
     
     public T Value { 
@@ -47,52 +47,4 @@
       }
     }
-
-    public T MinRange {
-      get => Cast(Item.Range.First());
-      set {
-        SetRange(value, Item.Range.Last());
-        OnPropertyChange(this, nameof(MinRange));
-      }
-    }
-
-    public T MaxRange {
-      get => Cast(Item.Range.Last());
-      set {
-        SetRange(Item.Range.First(), value);
-        OnPropertyChange(this, nameof(MaxRange));
-      }
-    }
-
-    private bool enableMinRange = false;
-    public bool EnableMinRange {
-      get => enableMinRange;
-      set {
-        enableMinRange = value;
-        if (!enableMinRange)
-          MinRange = MinTypeValue;
-        OnPropertyChange(this, nameof(EnableMinRange));
-      }
-    }
-
-    private bool enableMaxRange = false;
-    public bool EnableMaxRange {
-      get => enableMaxRange;
-      set {
-        enableMaxRange = value;
-        if (!enableMaxRange)
-          MaxRange = MaxTypeValue;
-        OnPropertyChange(this, nameof(EnableMaxRange));
-      }
-    }
-
-    private T Cast(object obj) => (T)Convert.ChangeType(obj, typeof(T));
-
-    private void SetRange(object min, object max) {
-      object[] range = new object[] { min, max };
-      Item.Range = range;
-    }
-
-    protected abstract T MinTypeValue { get; }
-    protected abstract T MaxTypeValue { get; }
   }
 }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemArrayValueControl.Designer.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemArrayValueControl.Designer.cs	(revision 17419)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemArrayValueControl.Designer.cs	(revision 17420)
@@ -24,9 +24,49 @@
     /// </summary>
     private void InitializeComponent() {
-      components = new System.ComponentModel.Container();
+      this.dataGridView = new System.Windows.Forms.DataGridView();
+      this.numericRangeControl1 = new HeuristicLab.JsonInterface.OptimizerIntegration.NumericRangeControl();
+      ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // dataGridView
+      // 
+      this.dataGridView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.dataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+      this.dataGridView.Location = new System.Drawing.Point(9, 75);
+      this.dataGridView.Name = "dataGridView";
+      this.dataGridView.Size = new System.Drawing.Size(487, 171);
+      this.dataGridView.TabIndex = 13;
+      // 
+      // numericRangeControl1
+      // 
+      this.numericRangeControl1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.numericRangeControl1.Location = new System.Drawing.Point(9, 252);
+      this.numericRangeControl1.Name = "numericRangeControl1";
+      this.numericRangeControl1.Size = new System.Drawing.Size(487, 128);
+      this.numericRangeControl1.TabIndex = 14;
+      // 
+      // JsonItemArrayValueControl
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.numericRangeControl1);
+      this.Controls.Add(this.dataGridView);
+      this.Name = "JsonItemArrayValueControl";
+      this.Size = new System.Drawing.Size(502, 386);
+      this.Controls.SetChildIndex(this.dataGridView, 0);
+      this.Controls.SetChildIndex(this.numericRangeControl1, 0);
+      ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).EndInit();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
     }
 
     #endregion
+
+    private System.Windows.Forms.DataGridView dataGridView;
+    private NumericRangeControl numericRangeControl1;
   }
 }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemArrayValueControl.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemArrayValueControl.cs	(revision 17419)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemArrayValueControl.cs	(revision 17420)
@@ -10,7 +10,27 @@
 
 namespace HeuristicLab.JsonInterface.OptimizerIntegration {
-  public partial class JsonItemArrayValueControl : JsonItemBaseControl {
-    public JsonItemArrayValueControl(JsonItemVMBase vm) : base(vm) {
+  
+  public class JsonItemIntArrayValueControl : JsonItemArrayValueControl {
+    public JsonItemIntArrayValueControl(IntArrayValueVM vm) : base(vm, vm.Value) { }
+  }
+
+  public class JsonItemDoubleArrayValueControl : JsonItemArrayValueControl {
+    public JsonItemDoubleArrayValueControl(DoubleArrayValueVM vm) : base(vm, vm.Value) { }
+  }
+  
+  public abstract partial class JsonItemArrayValueControl : JsonItemBaseControl {
+    protected NumericRangeControl NumericRangeControl { get; set; }
+
+    public JsonItemArrayValueControl(JsonItemVMBase vm, object dataSource) : base(vm) {
       InitializeComponent();
+      dataGridView.DataSource = dataSource;
+      NumericRangeControl = numericRangeControl1;
+
+      NumericRangeControl.TBMinRange.DataBindings.Add("Text", VM, nameof(RangedValueBaseVM.MinRange));
+      NumericRangeControl.TBMaxRange.DataBindings.Add("Text", VM, nameof(RangedValueBaseVM.MaxRange));
+      NumericRangeControl.EnableMinRange.DataBindings.Add("Checked", VM, nameof(RangedValueBaseVM.EnableMinRange),
+        false, DataSourceUpdateMode.OnPropertyChanged);
+      NumericRangeControl.EnableMaxRange.DataBindings.Add("Checked", VM, nameof(RangedValueBaseVM.EnableMaxRange),
+        false, DataSourceUpdateMode.OnPropertyChanged);
     }
   }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemArrayValueControl.resx
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemArrayValueControl.resx	(revision 17420)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemArrayValueControl.resx	(revision 17420)
@@ -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/JsonItemRangeControl.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemRangeControl.cs	(revision 17419)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemRangeControl.cs	(revision 17420)
@@ -14,4 +14,14 @@
 
     public JsonItemRangeControl(DoubleRangeVM vm) : base(vm) {
+      InitializeComponent();
+      /*
+      this.isDouble = isDouble;
+      textBoxValueFrom.Text = ((Array)VM.Item.Value).GetValue(0).ToString();
+      textBoxValueTo.Text = ((Array)VM.Item.Value).GetValue(1).ToString();
+      textBoxValueFrom.Text = VM.Item.Range.First().ToString();
+      textBoxValueTo.Text = VM.Item.Range.Last().ToString();
+      */
+    }
+    public JsonItemRangeControl(IntRangeVM vm) : base(vm) {
       InitializeComponent();
       /*
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValueControl.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValueControl.cs	(revision 17419)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValueControl.cs	(revision 17420)
@@ -16,8 +16,4 @@
     #region Overriden Properties
     protected override string ValuePropertyId => nameof(IntValueVM.Value);
-    protected override string MinRangePropertyId => nameof(IntValueVM.MinRange);
-    protected override string MaxRangePropertyId => nameof(IntValueVM.MaxRange);
-    protected override string EnableMinRangePropertyId => nameof(IntValueVM.EnableMinRange);
-    protected override string EnableMaxRangePropertyId => nameof(IntValueVM.EnableMaxRange);
     #endregion
 
@@ -32,8 +28,4 @@
     #region Overriden Properties
     protected override string ValuePropertyId => nameof(DoubleValueVM.Value);
-    protected override string MinRangePropertyId => nameof(DoubleValueVM.MinRange);
-    protected override string MaxRangePropertyId => nameof(DoubleValueVM.MaxRange);
-    protected override string EnableMinRangePropertyId => nameof(DoubleValueVM.EnableMinRange);
-    protected override string EnableMaxRangePropertyId => nameof(DoubleValueVM.EnableMaxRange);
     #endregion
 
@@ -52,8 +44,4 @@
     #region Abstract Properties
     protected abstract string ValuePropertyId { get; }
-    protected abstract string MinRangePropertyId { get; }
-    protected abstract string MaxRangePropertyId { get; }
-    protected abstract string EnableMinRangePropertyId { get; }
-    protected abstract string EnableMaxRangePropertyId { get; }
     #endregion
 
@@ -66,9 +54,9 @@
     protected void Init() {
       TBValue.DataBindings.Add("Text", base.VM, ValuePropertyId);
-      NumericRangeControl.TBMinRange.DataBindings.Add("Text", VM, MinRangePropertyId);
-      NumericRangeControl.TBMaxRange.DataBindings.Add("Text", VM, MaxRangePropertyId);
-      NumericRangeControl.EnableMinRange.DataBindings.Add("Checked", VM, EnableMinRangePropertyId,
+      NumericRangeControl.TBMinRange.DataBindings.Add("Text", VM, nameof(RangedValueBaseVM.MinRange));
+      NumericRangeControl.TBMaxRange.DataBindings.Add("Text", VM, nameof(RangedValueBaseVM.MaxRange));
+      NumericRangeControl.EnableMinRange.DataBindings.Add("Checked", VM, nameof(RangedValueBaseVM.EnableMinRange),
         false, DataSourceUpdateMode.OnPropertyChanged);
-      NumericRangeControl.EnableMaxRange.DataBindings.Add("Checked", VM, EnableMaxRangePropertyId,
+      NumericRangeControl.EnableMaxRange.DataBindings.Add("Checked", VM, nameof(RangedValueBaseVM.EnableMaxRange),
         false, DataSourceUpdateMode.OnPropertyChanged);
     }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/AlgorithmConverter.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/AlgorithmConverter.cs	(revision 17419)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/AlgorithmConverter.cs	(revision 17420)
@@ -25,5 +25,5 @@
       IAlgorithm algorithm = value as IAlgorithm;
       foreach (var res in algorithm.Results) {
-        item.AddChilds(new ResultItem() {
+        item.AddChildren(new ResultItem() {
           Name = res.Name,
           Value = true,
@@ -31,5 +31,5 @@
         });
       }
-      item.AddChilds(root.Extract(algorithm.Problem, root));
+      item.AddChildren(root.Extract(algorithm.Problem, root));
       return item;
     }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ConstrainedValueParameterConverter.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ConstrainedValueParameterConverter.cs	(revision 17419)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ConstrainedValueParameterConverter.cs	(revision 17420)
@@ -35,5 +35,5 @@
         Range = GetValidValues(parameter).Select(x => x.ToString())
       };
-      item.AddChilds(GetParameterizedChilds(parameter));
+      item.AddChildren(GetParameterizedChilds(parameter));
 
       return item;
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/MultiCheckedOperatorConverter.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/MultiCheckedOperatorConverter.cs	(revision 17419)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/MultiCheckedOperatorConverter.cs	(revision 17420)
@@ -24,5 +24,5 @@
       dynamic val = value as dynamic;
       foreach (var op in val.Operators) {
-        item.AddChilds(new BoolJsonItem() {
+        item.AddChildren(new BoolJsonItem() {
           Name = op.Name,
           Value = val.Operators.ItemChecked(op),
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ParameterizedItemConverter.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ParameterizedItemConverter.cs	(revision 17419)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ParameterizedItemConverter.cs	(revision 17420)
@@ -29,5 +29,5 @@
           IJsonItem tmp = root.Extract(param, root);
           if (!(tmp is UnsupportedJsonItem))
-            item.AddChilds(tmp);
+            item.AddChildren(tmp);
         }
       }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/RegressionProblemDataConverter.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/RegressionProblemDataConverter.cs	(revision 17419)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/RegressionProblemDataConverter.cs	(revision 17420)
@@ -27,5 +27,5 @@
       FieldInfo dataInfo = dataset.GetType().GetField("storableData", flags);
       // TODO: aufteilen in trainings und test daten abschnitte
-      item.AddChilds(new JsonItem() {
+      item.AddChildren(new JsonItem() {
         Name = "Dataset",
         Value = dataInfo.GetValue(dataset)
@@ -33,5 +33,5 @@
 
       IEnumerable<StringValue> variables = (IEnumerable<StringValue>)val.InputVariables;
-      item.AddChilds(new JsonItem() {
+      item.AddChildren(new JsonItem() {
         Name = "TargetVariable",
         Value = (object)targetVariable,
@@ -40,5 +40,5 @@
 
 
-      item.AddChilds(new JsonItem() {
+      item.AddChildren(new JsonItem() {
         Name = "AllowedInputVariables",
         Value = (object)val.AllowedInputVariables,
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueLookupParameterConverter.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueLookupParameterConverter.cs	(revision 17419)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueLookupParameterConverter.cs	(revision 17420)
@@ -21,21 +21,18 @@
       IValueLookupParameter param = value as IValueLookupParameter;
 
-      IJsonItem item = new JsonItem() {
-        Name = param.Name,
-        ActualName = param.ActualName
-      };
+      IJsonItem item = new JsonItem() {};
 
-      object actualValue = null;
-      IEnumerable<object> actualRange = null;
       if (param.Value != null) {
         IJsonItem tmp = root.Extract(param.Value, root);
-        tmp.Parent = item;
+        /*tmp.Parent = item;
         actualValue = tmp.Value;
         actualRange = tmp.Range;
+        */
+        item = tmp;
       } else {
-        actualRange = new object[] { GetMinValue(param.DataType), GetMaxValue(param.DataType) };
+        item.Range = new object[] { GetMinValue(param.DataType), GetMaxValue(param.DataType) };
       }
-      item.Value = actualValue;
-      item.Range = actualRange;
+      item.Name = param.Name;
+      item.ActualName = param.ActualName;
       return item;
     }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueParameterConverter.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueParameterConverter.cs	(revision 17419)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueParameterConverter.cs	(revision 17420)
@@ -34,5 +34,5 @@
             //JsonItem.Merge(item as JsonItem, tmp as JsonItem);
           } else
-            item.AddChilds(tmp);
+            item.AddChildren(tmp);
         }
       }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueRangeConverter.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueRangeConverter.cs	(revision 17419)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueRangeConverter.cs	(revision 17420)
@@ -24,5 +24,5 @@
     public override IJsonItem Extract(IItem value, IJsonItemConverter root) {
       IntRange range = value as IntRange;
-      return new IntArrayJsonItem() {
+      return new IntRangeJsonItem() {
         Name = "[OverridableParamName]",
         Value = new int[] { range.Start, range.End },
@@ -45,5 +45,5 @@
     public override IJsonItem Extract(IItem value, IJsonItemConverter root) {
       DoubleRange range = value as DoubleRange;
-      return new DoubleArrayJsonItem() {
+      return new DoubleRangeJsonItem() {
         Name = "[OverridableParamName]",
         Value = new double[] { range.Start, range.End },
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueTypeArrayConverter.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueTypeArrayConverter.cs	(revision 17419)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueTypeArrayConverter.cs	(revision 17420)
@@ -28,5 +28,6 @@
       new IntArrayJsonItem() {
         Name = "[OverridableParamName]",
-        Value = ((IntArray)value).CloneAsArray()
+        Value = ((IntArray)value).CloneAsArray(),
+        Range = new int[] { int.MinValue, int.MaxValue }
       };
   }
@@ -50,5 +51,6 @@
       new DoubleArrayJsonItem() {
         Name = "[OverridableParamName]",
-        Value = ((DoubleArray)value).CloneAsArray()
+        Value = ((DoubleArray)value).CloneAsArray(),
+        Range = new double[] { double.MinValue, double.MaxValue }
       };
   }
@@ -72,5 +74,6 @@
       new DoubleArrayJsonItem() {
         Name = "[OverridableParamName]",
-        Value = ((PercentArray)value).CloneAsArray()
+        Value = ((PercentArray)value).CloneAsArray(),
+        Range = new double[] { 0.0d, 1.0d }
       };
   }
@@ -94,5 +97,6 @@
       new BoolArrayJsonItem() {
         Name = "[OverridableParamName]",
-        Value = ((BoolArray)value).CloneAsArray()
+        Value = ((BoolArray)value).CloneAsArray(),
+        Range = new bool[] { false, true }
       };
   }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueTypeMatrixConverter.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueTypeMatrixConverter.cs	(revision 17419)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueTypeMatrixConverter.cs	(revision 17420)
@@ -21,5 +21,6 @@
       new IntMatrixJsonItem() {
         Name = "[OverridableParamName]",
-        Value = Transform((IntMatrix)value)
+        Value = Transform((IntMatrix)value),
+        Range = new int[] { int.MinValue, int.MaxValue }
       };
   }
@@ -38,5 +39,6 @@
       new DoubleMatrixJsonItem() {
         Name = "[OverridableParamName]",
-        Value = Transform((DoubleMatrix)value)
+        Value = Transform((DoubleMatrix)value),
+        Range = new double[] { double.MinValue, double.MaxValue }
       };
   }
@@ -55,5 +57,6 @@
       new DoubleMatrixJsonItem() {
         Name = "[OverridableParamName]",
-        Value = Transform((PercentMatrix)value)
+        Value = Transform((PercentMatrix)value),
+        Range = new double[] { 0.0d, 1.0d }
       };
   }
@@ -72,5 +75,6 @@
       new BoolMatrixJsonItem() {
         Name = "[OverridableParamName]",
-        Value = Transform((BoolMatrix)value)
+        Value = Transform((BoolMatrix)value),
+        Range = new bool[] { false, true }
       };
   }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Interfaces/IJsonItem.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Interfaces/IJsonItem.cs	(revision 17419)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Interfaces/IJsonItem.cs	(revision 17420)
@@ -15,5 +15,5 @@
 
     [JsonIgnore]
-    IList<IJsonItem> Children { get; }
+    IList<IJsonItem> Children { get; } //TODO: IEnumerable
 
     [JsonIgnore]
@@ -28,7 +28,7 @@
     IJsonItemValidator GetValidator();
 
-    void AddChilds(params IJsonItem[] childs);
+    void AddChildren(params IJsonItem[] childs);
 
-    void AddChilds(IEnumerable<IJsonItem> childs);
+    void AddChildren(IEnumerable<IJsonItem> childs);
   }
 }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/JsonItem.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/JsonItem.cs	(revision 17419)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/JsonItem.cs	(revision 17420)
@@ -2,11 +2,7 @@
 using System.Collections;
 using System.Collections.Generic;
-using System.IO;
 using System.Linq;
 using System.Text;
-using System.Threading.Tasks;
-using HeuristicLab.Core;
 using Newtonsoft.Json;
-using Newtonsoft.Json.Linq;
 
 namespace HeuristicLab.JsonInterface {
@@ -74,5 +70,5 @@
 
     public JsonItem(IEnumerable<IJsonItem> childs) {
-      AddChilds(childs);
+      AddChildren(childs);
     }
     #endregion
@@ -94,8 +90,8 @@
 
     #region Public Methods
-    public void AddChilds(params IJsonItem[] childs) => 
-      AddChilds(childs as IEnumerable<IJsonItem>);
+    public void AddChildren(params IJsonItem[] childs) => 
+      AddChildren(childs as IEnumerable<IJsonItem>);
 
-    public void AddChilds(IEnumerable<IJsonItem> childs) {
+    public void AddChildren(IEnumerable<IJsonItem> childs) {
       if (Children == null)
         Children = new List<IJsonItem>();
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/JsonItems.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/JsonItems.cs	(revision 17419)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/JsonItems.cs	(revision 17420)
@@ -8,8 +8,10 @@
   public class IntJsonItem : JsonItem<int> {}
   public class IntArrayJsonItem: JsonItem<int[], int> { }
+  public class IntRangeJsonItem : JsonItem<int[], int> { }
   public class IntMatrixJsonItem : JsonItem<int[][], int> { }
 
   public class DoubleJsonItem: JsonItem<double> {}
   public class DoubleArrayJsonItem: JsonItem<double[], double> { }
+  public class DoubleRangeJsonItem : JsonItem<double[], double> { }
   public class DoubleMatrixJsonItem : JsonItem<double[][], double> { }
 
