Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/HeuristicLab.JsonInterface.OptimizerIntegration.csproj
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/HeuristicLab.JsonInterface.OptimizerIntegration.csproj	(revision 17416)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/HeuristicLab.JsonInterface.OptimizerIntegration.csproj	(revision 17417)
@@ -78,7 +78,4 @@
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="Interfaces\IJsonItemValueParser.cs" />
-    <Compile Include="Parser\JsonItemDoubleValueParser.cs" />
-    <Compile Include="Parser\JsonItemIntValueParser.cs" />
     <Compile Include="Properties\Resources.Designer.cs">
       <AutoGen>True</AutoGen>
@@ -98,4 +95,5 @@
       <DependentUpon>NumericRangeControl.cs</DependentUpon>
     </Compile>
+    <Compile Include="ViewModels\ArrayValueVM.cs" />
     <Compile Include="ViewModels\JsonItemVMBase.cs" />
     <Compile Include="ViewModels\RangeVM.cs" />
@@ -109,4 +107,10 @@
     </Compile>
     <Compile Include="FileManager.cs" />
+    <Compile Include="Views\JsonItemArrayValueControl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Views\JsonItemArrayValueControl.Designer.cs">
+      <DependentUpon>JsonItemArrayValueControl.cs</DependentUpon>
+    </Compile>
     <Compile Include="Views\JsonItemBoolControl.cs">
       <SubType>UserControl</SubType>
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/JsonItemBaseControl.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/JsonItemBaseControl.cs	(revision 17416)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/JsonItemBaseControl.cs	(revision 17417)
@@ -11,5 +11,5 @@
 namespace HeuristicLab.JsonInterface.OptimizerIntegration {
   public partial class JsonItemBaseControl : UserControl {
-    private JsonItemVMBase VM { get; set; }
+    protected JsonItemVMBase VM { get; set; }
 
     private JsonItemBaseControl() {
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/ArrayValueVM.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/ArrayValueVM.cs	(revision 17417)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/ArrayValueVM.cs	(revision 17417)
@@ -0,0 +1,12 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HeuristicLab.JsonInterface.OptimizerIntegration {
+  public class ArrayValueVM : JsonItemVMBase {
+    public override Type JsonItemType => typeof(DoubleArrayJsonItem);
+    public override JsonItemBaseControl GetControl() => new JsonItemArrayValueControl(this);
+  }
+}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/StringValueVM.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/StringValueVM.cs	(revision 17416)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/StringValueVM.cs	(revision 17417)
@@ -12,5 +12,5 @@
 
     public string Value {
-      get => Item.Value.ToString();
+      get => Item.Value?.ToString();
       set {
         Item.Value = value;
@@ -18,4 +18,21 @@
       }
     }
+
+    public IEnumerable<string> Range {
+      get => Item.Range.Cast<string>();
+      set {
+        Item.Range = value;
+        //check if value is still in range
+        if (!Range.Any(x => x == Value)) {
+          Value = Range.FirstOrDefault();
+          if (Range.Count() == 0)
+            //if no elements exists -> deselect item
+            base.Selected = false;
+          OnPropertyChange(this, nameof(Value));
+        }
+        
+        OnPropertyChange(this, nameof(Range));
+      }
+    }
   }
 }
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ExportJsonDialog.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ExportJsonDialog.cs	(revision 17416)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ExportJsonDialog.cs	(revision 17417)
@@ -42,5 +42,4 @@
 
     private IDictionary<Type, Type> JI2VM { get; set; }
-
 
     private void InitCache() {
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemArrayValueControl.Designer.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemArrayValueControl.Designer.cs	(revision 17417)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemArrayValueControl.Designer.cs	(revision 17417)
@@ -0,0 +1,32 @@
+﻿namespace HeuristicLab.JsonInterface.OptimizerIntegration {
+  partial class JsonItemArrayValueControl {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+    }
+
+    #endregion
+  }
+}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemArrayValueControl.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemArrayValueControl.cs	(revision 17417)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemArrayValueControl.cs	(revision 17417)
@@ -0,0 +1,17 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace HeuristicLab.JsonInterface.OptimizerIntegration {
+  public partial class JsonItemArrayValueControl : JsonItemBaseControl {
+    public JsonItemArrayValueControl(JsonItemVMBase vm) : base(vm) {
+      InitializeComponent();
+    }
+  }
+}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValidValuesControl.Designer.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValidValuesControl.Designer.cs	(revision 17416)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValidValuesControl.Designer.cs	(revision 17417)
@@ -44,5 +44,5 @@
       this.tableOptions.RowCount = 1;
       this.tableOptions.RowStyles.Add(new System.Windows.Forms.RowStyle());
-      this.tableOptions.Size = new System.Drawing.Size(478, 151);
+      this.tableOptions.Size = new System.Drawing.Size(478, 137);
       this.tableOptions.TabIndex = 12;
       // 
@@ -56,5 +56,5 @@
       this.groupBoxRange.Location = new System.Drawing.Point(6, 108);
       this.groupBoxRange.Name = "groupBoxRange";
-      this.groupBoxRange.Size = new System.Drawing.Size(490, 176);
+      this.groupBoxRange.Size = new System.Drawing.Size(490, 162);
       this.groupBoxRange.TabIndex = 14;
       this.groupBoxRange.TabStop = false;
@@ -91,5 +91,5 @@
       this.ForeColor = System.Drawing.Color.Black;
       this.Name = "JsonItemValidValuesControl";
-      this.Size = new System.Drawing.Size(500, 290);
+      this.Size = new System.Drawing.Size(500, 276);
       this.Controls.SetChildIndex(this.groupBoxRange, 0);
       this.Controls.SetChildIndex(this.comboBoxValues, 0);
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValidValuesControl.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValidValuesControl.cs	(revision 17416)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValidValuesControl.cs	(revision 17417)
@@ -14,14 +14,11 @@
     public JsonItemValidValuesControl(StringValueVM vm) : base(vm) {
       InitializeComponent();
-      /*
-      foreach (var i in VM.Item.Range) {
-        AddOption((string)i);
-        if(i == VM.Item.Value) {
-          comboBoxValues.SelectedItem = (string)i;
-        }
-      }*/
+      foreach (var i in VM.Item.Range)
+        SetupOption((string)i);
+
+      comboBoxValues.DataBindings.Add("SelectedItem", VM, nameof(StringValueVM.Value));
     }
-    /*
-    private void AddOption(string opt) {
+    
+    private void SetupOption(string opt) {
       AddComboOption(opt);
       TextBox tb = new TextBox();
@@ -50,5 +47,6 @@
         items.Add((string)i);
       }
-      VM.Item.Range = items;
+      ((StringValueVM)VM).Range = items;
+      comboBoxValues.Enabled = true;
       tableOptions.Refresh();
     }
@@ -60,16 +58,11 @@
         items.Add((string)i);
       }
-      VM.Item.Range = items;
+      ((StringValueVM)VM).Range = items;
+      if (((StringValueVM)VM).Range.Count() <= 0) {
+        comboBoxValues.Enabled = false;
+        comboBoxValues.SelectedIndex = -1;
+      }
       tableOptions.Refresh();
     }
-    
-    private void comboBoxValues_SelectedValueChanged(object sender, EventArgs e) {
-      VM.Item.Value = (string)comboBoxValues.SelectedItem;
-    }
-
-    private void JsonItemValidValuesControl_Load(object sender, EventArgs e) {
-
-    }
-    */
   }
 }
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValueControl.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValueControl.cs	(revision 17416)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValueControl.cs	(revision 17417)
@@ -13,8 +13,6 @@
 
   public class JsonItemIntValueControl : JsonItemValueControl {
-    private readonly IntValueVM vm;
 
     #region Overriden Properties
-    protected override object VM => vm;
     protected override string ValuePropertyId => nameof(IntValueVM.Value);
     protected override string MinRangePropertyId => nameof(IntValueVM.MinRange);
@@ -25,5 +23,4 @@
 
     public JsonItemIntValueControl(IntValueVM vm) : base(vm) {
-      this.vm = vm;
       Init();
     }
@@ -32,8 +29,6 @@
 
   public class JsonItemDoubleValueControl : JsonItemValueControl {
-    private readonly DoubleValueVM vm;
 
     #region Overriden Properties
-    protected override object VM => vm;
     protected override string ValuePropertyId => nameof(DoubleValueVM.Value);
     protected override string MinRangePropertyId => nameof(DoubleValueVM.MinRange);
@@ -44,5 +39,4 @@
 
     public JsonItemDoubleValueControl(DoubleValueVM vm) : base(vm) {
-      this.vm = vm;
       Init();
     }
@@ -57,5 +51,4 @@
 
     #region Abstract Properties
-    protected abstract object VM { get; }
     protected abstract string ValuePropertyId { get; }
     protected abstract string MinRangePropertyId { get; }
@@ -72,5 +65,5 @@
 
     protected void Init() {
-      TBValue.DataBindings.Add("Text", VM, ValuePropertyId);
+      TBValue.DataBindings.Add("Text", base.VM, ValuePropertyId);
       NumericRangeControl.TBMinRange.DataBindings.Add("Text", VM, MinRangePropertyId);
       NumericRangeControl.TBMaxRange.DataBindings.Add("Text", VM, MaxRangePropertyId);
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueTypeArrayConverter.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueTypeArrayConverter.cs	(revision 17416)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueTypeArrayConverter.cs	(revision 17417)
@@ -10,46 +10,90 @@
 namespace HeuristicLab.JsonInterface {
 
-  public class IntArrayConverter : ValueTypeArrayConverter<IntArray, int> {
+  public class IntArrayConverter : BaseConverter {
     public override int Priority => 1;
     public override Type ConvertableType => typeof(IntArray);
+
+    public override void Inject(IItem item, IJsonItem data, IJsonItemConverter root) {
+      IntArray arr = item as IntArray;
+      int[] d = CastValue<int[]>(data);
+      bool resizeTmp = arr.Resizable;
+      arr.Resizable = true;
+      arr.Length = d.Length;
+      for (int i = 0; i < d.Length; ++i)
+        arr[i] = d[i];
+      arr.Resizable = resizeTmp;
+    }
+
+    public override IJsonItem Extract(IItem value, IJsonItemConverter root) =>
+      new IntArrayJsonItem() {
+        Name = "[OverridableParamName]",
+        Value = ((IntArray)value).CloneAsArray()
+      };
   }
 
-  public class DoubleArrayConverter : ValueTypeArrayConverter<DoubleArray, double> {
+  public class DoubleArrayConverter : BaseConverter {
     public override int Priority => 1;
     public override Type ConvertableType => typeof(DoubleArray);
+
+    public override void Inject(IItem item, IJsonItem data, IJsonItemConverter root) {
+      DoubleArray arr = item as DoubleArray;
+      double[] d = CastValue<double[]>(data);
+      bool resizeTmp = arr.Resizable;
+      arr.Resizable = true;
+      arr.Length = d.Length;
+      for (int i = 0; i < d.Length; ++i)
+        arr[i] = d[i];
+      arr.Resizable = resizeTmp;
+    }
+
+    public override IJsonItem Extract(IItem value, IJsonItemConverter root) =>
+      new DoubleArrayJsonItem() {
+        Name = "[OverridableParamName]",
+        Value = ((DoubleArray)value).CloneAsArray()
+      };
   }
 
-  public class PercentArrayConverter : ValueTypeArrayConverter<PercentArray, double> {
+  public class PercentArrayConverter : BaseConverter {
     public override int Priority => 2;
     public override Type ConvertableType => typeof(PercentArray);
+
+    public override void Inject(IItem item, IJsonItem data, IJsonItemConverter root) {
+      PercentArray arr = item as PercentArray;
+      double[] d = CastValue<double[]>(data);
+      bool resizeTmp = arr.Resizable;
+      arr.Resizable = true;
+      arr.Length = d.Length;
+      for (int i = 0; i < d.Length; ++i)
+        arr[i] = d[i];
+      arr.Resizable = resizeTmp;
+    }
+
+    public override IJsonItem Extract(IItem value, IJsonItemConverter root) =>
+      new DoubleArrayJsonItem() {
+        Name = "[OverridableParamName]",
+        Value = ((PercentArray)value).CloneAsArray()
+      };
   }
 
-  public class BoolArrayConverter : ValueTypeArrayConverter<BoolArray, bool> {
+  public class BoolArrayConverter : BaseConverter {
     public override int Priority => 1;
     public override Type ConvertableType => typeof(BoolArray);
-  }
 
-  public abstract class ValueTypeArrayConverter<ArrayType, T> : BaseConverter
-    where ArrayType : ValueTypeArray<T>
-    where T : struct 
-  {
-    public override void Inject(IItem item, IJsonItem data, IJsonItemConverter root) => 
-      CopyArrayData(((ArrayType)item), CastValue<T[]>(data.Value));
+    public override void Inject(IItem item, IJsonItem data, IJsonItemConverter root) {
+      BoolArray arr = item as BoolArray;
+      bool[] d = CastValue<bool[]>(data);
+      bool resizeTmp = arr.Resizable;
+      arr.Resizable = true;
+      arr.Length = d.Length;
+      for(int i = 0; i < d.Length; ++i)
+        arr[i] = d[i];
+      arr.Resizable = resizeTmp;
+    }
 
     public override IJsonItem Extract(IItem value, IJsonItemConverter root) =>
-      new JsonItem() {
+      new BoolArrayJsonItem() {
         Name = "[OverridableParamName]",
-        Value = ((ArrayType)value).CloneAsArray()
+        Value = ((BoolArray)value).CloneAsArray()
       };
-
-    #region Helper
-    private void CopyArrayData(ArrayType array, T[] data) {
-      var colInfo = array.GetType().GetProperty("Length");
-      colInfo.SetValue(array, data.Length);
-      for (int i = 0; i < data.Length; ++i) {
-        array[i] = data[i];
-      }
-    }
-    #endregion
   }
 }
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueTypeMatrixConverter.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueTypeMatrixConverter.cs	(revision 17416)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueTypeMatrixConverter.cs	(revision 17417)
@@ -12,4 +12,15 @@
     public override int Priority => 1;
     public override Type ConvertableType => typeof(IntMatrix);
+    public override void Inject(IItem item, IJsonItem data, IJsonItemConverter root) {
+      IntMatrix mat = item as IntMatrix;
+      IntMatrixJsonItem d = data as IntMatrixJsonItem;
+      CopyMatrixData(mat, d.Value);
+    }
+
+    public override IJsonItem Extract(IItem value, IJsonItemConverter root) =>
+      new IntMatrixJsonItem() {
+        Name = "[OverridableParamName]",
+        Value = Transform((IntMatrix)value)
+      };
   }
 
@@ -17,4 +28,16 @@
     public override int Priority => 1;
     public override Type ConvertableType => typeof(DoubleMatrix);
+
+    public override void Inject(IItem item, IJsonItem data, IJsonItemConverter root) {
+      DoubleMatrix mat = item as DoubleMatrix;
+      DoubleMatrixJsonItem d = data as DoubleMatrixJsonItem;
+      CopyMatrixData(mat, d.Value);
+    }
+
+    public override IJsonItem Extract(IItem value, IJsonItemConverter root) =>
+      new DoubleMatrixJsonItem() {
+        Name = "[OverridableParamName]",
+        Value = Transform((DoubleMatrix)value)
+      };
   }
 
@@ -22,4 +45,16 @@
     public override int Priority => 2;
     public override Type ConvertableType => typeof(PercentMatrix);
+
+    public override void Inject(IItem item, IJsonItem data, IJsonItemConverter root) {
+      PercentMatrix mat = item as PercentMatrix;
+      DoubleMatrixJsonItem d = data as DoubleMatrixJsonItem;
+      CopyMatrixData(mat, d.Value);
+    }
+
+    public override IJsonItem Extract(IItem value, IJsonItemConverter root) =>
+      new DoubleMatrixJsonItem() {
+        Name = "[OverridableParamName]",
+        Value = Transform((PercentMatrix)value)
+      };
   }
 
@@ -27,4 +62,16 @@
     public override int Priority => 1;
     public override Type ConvertableType => typeof(BoolMatrix);
+
+    public override void Inject(IItem item, IJsonItem data, IJsonItemConverter root) {
+      BoolMatrix mat = item as BoolMatrix;
+      BoolMatrixJsonItem d = data as BoolMatrixJsonItem;
+      CopyMatrixData(mat, d.Value);
+    }
+
+    public override IJsonItem Extract(IItem value, IJsonItemConverter root) =>
+      new BoolMatrixJsonItem() {
+        Name = "[OverridableParamName]",
+        Value = Transform((BoolMatrix)value)
+      };
   }
 
@@ -33,32 +80,30 @@
     where T : struct 
   {
-    public override void Inject(IItem item, IJsonItem data, IJsonItemConverter root) => 
-      CopyMatrixData(item as MatrixType, data.Value);
+    #region Helper
+    protected void CopyMatrixData(MatrixType matrix, T[][] data) {
+      var rows = data.Length;
+      var cols = data.Length > 0 ? data[0].Length : 0;
 
-    public override IJsonItem Extract(IItem value, IJsonItemConverter root) =>
-      new JsonItem() {
-        Name = "[OverridableParamName]",
-        Value = ((MatrixType)value).CloneAsMatrix()
+      var rowInfo = matrix.GetType().GetProperty("Rows");
+      rowInfo.SetValue(matrix, rows);
+      var colInfo = matrix.GetType().GetProperty("Columns");
+      colInfo.SetValue(matrix, cols);
 
-      };
-
-    #region Helper
-    private void CopyMatrixData(MatrixType matrix, object data) {
-      if (data is Array arr) {
-        var rows = arr.Length;
-        var cols = arr.Length > 0 && arr.GetValue(0) is JArray jarr ? jarr.Count : 0;
-
-        var rowInfo = matrix.GetType().GetProperty("Rows");
-        rowInfo.SetValue(matrix, rows);
-        var colInfo = matrix.GetType().GetProperty("Columns");
-        colInfo.SetValue(matrix, cols);
-
-        for (int x = 0; x < rows; ++x) {
-          jarr = (JArray)arr.GetValue(x);
-          for (int y = 0; y < cols; ++y) {
-            matrix[x, y] = jarr[y].ToObject<T>();
-          }
+      for (int x = 0; x < rows; ++x) {
+        for (int y = 0; y < cols; ++y) {
+          matrix[x, y] = data[x][y];
         }
       }
+    }
+
+    protected T[][] Transform(MatrixType matrix) {
+      T[][] m = new T[matrix.Rows][];
+      for (int r = 0; r < matrix.Rows; ++r) {
+        m[r] = new T[matrix.Columns];
+        for (int c = 0; c < matrix.Columns; ++c) {
+          m[r][c] = matrix[r, c];
+        }
+      }
+      return m;
     }
     #endregion
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonTemplateInstantiator.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonTemplateInstantiator.cs	(revision 17416)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonTemplateInstantiator.cs	(revision 17417)
@@ -68,11 +68,6 @@
     #region Helper
 
-    private static object GetValueFromJObject(JObject obj) {
-      object val = obj[nameof(IJsonItem.Value)]?.ToObject<object>();
-      if (val is JContainer jContainer) // for resolving array values
-        val = jContainer.ToObject<object[]>();
-
-      return val;
-    }
+    private static object GetValueFromJObject(JObject obj) =>
+      obj[nameof(IJsonItem.Value)]?.ToObject<object>();
 
     private static void CollectParameterizedItems(InstData instData) {
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/GenericJsonItem.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/GenericJsonItem.cs	(revision 17416)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/GenericJsonItem.cs	(revision 17417)
@@ -1,7 +1,9 @@
 ﻿using System;
+using System.Collections;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using Newtonsoft.Json.Linq;
 
 namespace HeuristicLab.JsonInterface {
@@ -11,10 +13,18 @@
   public class JsonItem<V,R> : JsonItem {
     public new V Value {
-      get => (V)Convert.ChangeType(base.Value, typeof(V));
+      get {
+        if(base.Value is IConvertible)
+          return (V)Convert.ChangeType(base.Value, typeof(V));
+
+        if(base.Value is JToken token)
+          return token.ToObject<V>();
+
+        return (V)base.Value;
+      }
       set => base.Value = value;
     }
 
     public new IEnumerable<R> Range {
-      get => base.Range.Cast<R>();
+      get => base.Range?.Cast<R>();
       set => base.Range = value.Cast<object>();
     }
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/JsonItems.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/JsonItems.cs	(revision 17416)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/JsonItems.cs	(revision 17417)
@@ -7,10 +7,14 @@
 namespace HeuristicLab.JsonInterface {
   public class IntJsonItem : JsonItem<int> {}
-  public class IntArrayJsonItem: JsonItem<int[], int> {}
+  public class IntArrayJsonItem: JsonItem<int[], int> { }
+  public class IntMatrixJsonItem : JsonItem<int[][], int> { }
 
   public class DoubleJsonItem: JsonItem<double> {}
-  public class DoubleArrayJsonItem: JsonItem<double[], double> {}
+  public class DoubleArrayJsonItem: JsonItem<double[], double> { }
+  public class DoubleMatrixJsonItem : JsonItem<double[][], double> { }
 
-  public class BoolJsonItem: JsonItem<bool> {}
+  public class BoolJsonItem: JsonItem<bool> { }
+  public class BoolArrayJsonItem : JsonItem<bool[], bool> { }
+  public class BoolMatrixJsonItem : JsonItem<bool[][], bool> { }
 
   public class StringJsonItem: JsonItem<string> {}
Index: /branches/3026_IntegrationIntoSymSpace/Heuristiclab.ConfigStarter/Program.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/Heuristiclab.ConfigStarter/Program.cs	(revision 17416)
+++ /branches/3026_IntegrationIntoSymSpace/Heuristiclab.ConfigStarter/Program.cs	(revision 17417)
@@ -47,5 +47,5 @@
       JCGenerator generator = new JCGenerator();
 
-      //File.WriteAllText(@"C:\Workspace\Template.json", generator.GenerateTemplate(alg));
+      File.WriteAllText(@"C:\Workspace\Template.json", generator.GenerateTemplate(alg));
       JsonTemplateInstantiator.Instantiate(@"C:\Workspace\Template.json");
       /*
