Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Interfaces/IJsonItemVM.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Interfaces/IJsonItemVM.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Interfaces/IJsonItemVM.cs	(revision 17473)
@@ -8,13 +8,11 @@
 
 namespace HeuristicLab.JsonInterface.OptimizerIntegration {
-  public interface IJsonItemVM : INotifyPropertyChanged, IDisposable {
+  public interface IJsonItemVM : INotifyPropertyChanged, IDisposable 
+  {
     event Action ItemChanged;
 
-    Type JsonItemType { get; }
+    Type TargetedJsonItemType { get; }
 
     UserControl Control { get; }
-
-    IJsonItem Item { get; set; }
-
     bool Selected { get; set; }
 
@@ -26,4 +24,12 @@
 
     TreeView TreeView { get; set; }
+    IJsonItem Item { get; set; }
+
+  }
+
+  public interface IJsonItemVM<JsonItemType> : IJsonItemVM
+    where JsonItemType : IJsonItem
+  {
+    new JsonItemType Item { get; set; }
   }
 }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/JsonItemBaseControl.Designer.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/JsonItemBaseControl.Designer.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/JsonItemBaseControl.Designer.cs	(revision 17473)
@@ -28,10 +28,10 @@
       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.checkBoxActive = new System.Windows.Forms.CheckBox();
+      this.label1 = new System.Windows.Forms.Label();
       this.labelDescription = new System.Windows.Forms.Label();
-      this.textBoxDescription = new System.Windows.Forms.TextBox();
-      this.label1 = new System.Windows.Forms.Label();
       this.labelEnable = new System.Windows.Forms.Label();
-      this.checkBoxActive = new System.Windows.Forms.CheckBox();
-      this.tableLayoutPanel5 = new System.Windows.Forms.TableLayoutPanel();
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
       this.tableLayoutPanel1.SuspendLayout();
@@ -48,5 +48,5 @@
       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, 24);
+      this.textBoxName.Location = new System.Drawing.Point(100, 25);
       this.textBoxName.Margin = new System.Windows.Forms.Padding(0);
       this.textBoxName.Name = "textBoxName";
@@ -72,60 +72,4 @@
       this.tableLayoutPanel1.TabIndex = 16;
       // 
-      // labelDescription
-      // 
-      this.labelDescription.AutoSize = true;
-      this.labelDescription.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.labelDescription.Location = new System.Drawing.Point(0, 48);
-      this.labelDescription.Margin = new System.Windows.Forms.Padding(0);
-      this.labelDescription.Name = "labelDescription";
-      this.labelDescription.Size = new System.Drawing.Size(100, 27);
-      this.labelDescription.TabIndex = 13;
-      this.labelDescription.Text = "Description";
-      this.labelDescription.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
-      // 
-      // textBoxDescription
-      // 
-      this.textBoxDescription.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.textBoxDescription.Location = new System.Drawing.Point(100, 50);
-      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, 24);
-      this.label1.Margin = new System.Windows.Forms.Padding(0);
-      this.label1.Name = "label1";
-      this.label1.Size = new System.Drawing.Size(100, 24);
-      this.label1.TabIndex = 9;
-      this.label1.Text = "Name";
-      this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
-      // 
-      // labelEnable
-      // 
-      this.labelEnable.AutoSize = true;
-      this.labelEnable.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.labelEnable.Location = new System.Drawing.Point(0, 0);
-      this.labelEnable.Margin = new System.Windows.Forms.Padding(0);
-      this.labelEnable.Name = "labelEnable";
-      this.labelEnable.Size = new System.Drawing.Size(100, 24);
-      this.labelEnable.TabIndex = 3;
-      this.labelEnable.Text = "Enable";
-      this.labelEnable.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
-      // 
-      // checkBoxActive
-      // 
-      this.checkBoxActive.AutoSize = true;
-      this.checkBoxActive.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.checkBoxActive.Location = new System.Drawing.Point(100, 0);
-      this.checkBoxActive.Margin = new System.Windows.Forms.Padding(0);
-      this.checkBoxActive.Name = "checkBoxActive";
-      this.checkBoxActive.Size = new System.Drawing.Size(394, 24);
-      this.checkBoxActive.TabIndex = 2;
-      this.checkBoxActive.UseVisualStyleBackColor = true;
-      // 
       // tableLayoutPanel5
       // 
@@ -150,4 +94,60 @@
       this.tableLayoutPanel5.Size = new System.Drawing.Size(494, 75);
       this.tableLayoutPanel5.TabIndex = 17;
+      // 
+      // textBoxDescription
+      // 
+      this.textBoxDescription.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.textBoxDescription.Location = new System.Drawing.Point(100, 52);
+      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;
+      // 
+      // checkBoxActive
+      // 
+      this.checkBoxActive.AutoSize = true;
+      this.checkBoxActive.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.checkBoxActive.Location = new System.Drawing.Point(100, 0);
+      this.checkBoxActive.Margin = new System.Windows.Forms.Padding(0);
+      this.checkBoxActive.Name = "checkBoxActive";
+      this.checkBoxActive.Size = new System.Drawing.Size(394, 25);
+      this.checkBoxActive.TabIndex = 2;
+      this.checkBoxActive.UseVisualStyleBackColor = true;
+      // 
+      // label1
+      // 
+      this.label1.AutoSize = true;
+      this.label1.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.label1.Location = new System.Drawing.Point(0, 25);
+      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, 50);
+      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;
+      // 
+      // labelEnable
+      // 
+      this.labelEnable.AutoSize = true;
+      this.labelEnable.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.labelEnable.Location = new System.Drawing.Point(0, 0);
+      this.labelEnable.Margin = new System.Windows.Forms.Padding(0);
+      this.labelEnable.Name = "labelEnable";
+      this.labelEnable.Size = new System.Drawing.Size(100, 25);
+      this.labelEnable.TabIndex = 3;
+      this.labelEnable.Text = "Enable";
+      this.labelEnable.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
       // 
       // JsonItemBaseControl
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/ArrayValueVM.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/ArrayValueVM.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/ArrayValueVM.cs	(revision 17473)
@@ -10,5 +10,5 @@
 
   public class DoubleArrayValueVM : ArrayValueVM<double, DoubleArrayJsonItem> {
-    public override Type JsonItemType => typeof(DoubleArrayJsonItem);
+    public override Type TargetedJsonItemType => typeof(DoubleArrayJsonItem);
 
     protected override double MinTypeValue => double.MinValue;
@@ -29,5 +29,5 @@
 
   public class IntArrayValueVM : ArrayValueVM<int, IntArrayJsonItem> {
-    public override Type JsonItemType => typeof(IntArrayJsonItem);
+    public override Type TargetedJsonItemType => typeof(IntArrayJsonItem);
 
     protected override int MinTypeValue => int.MinValue;
@@ -47,6 +47,7 @@
   }
 
-  public abstract class ArrayValueVM<T, JsonItemType> : RangedValueBaseVM<T>, IArrayJsonItemVM
-    where JsonItemType : IArrayJsonItem {
+  public abstract class ArrayValueVM<T, JsonItemType> : RangedValueBaseVM<T, JsonItemType>, IArrayJsonItemVM
+    where T : IComparable
+    where JsonItemType : class, IArrayJsonItem, IIntervalRestrictedJsonItem<T> {
     
     public ArrayValueVM() { }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/JsonItemVMBase.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/JsonItemVMBase.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/JsonItemVMBase.cs	(revision 17473)
@@ -9,7 +9,14 @@
 
 namespace HeuristicLab.JsonInterface.OptimizerIntegration {
-  public abstract class JsonItemVMBase : IJsonItemVM {
-    private IJsonItem item;
-    public IJsonItem Item {
+  public abstract class JsonItemVMBase<JsonItemType> : IJsonItemVM<JsonItemType>
+    where JsonItemType : class, IJsonItem 
+  {
+    IJsonItem IJsonItemVM.Item { 
+      get => item; 
+      set => item = (JsonItemType)value; 
+    }
+
+    private JsonItemType item;
+    public JsonItemType Item {
       get => item;
       set {
@@ -27,5 +34,5 @@
         Item.Active = value;
         if(TreeNode != null) {
-          TreeNode.ForeColor = (Selected ? Color.Black : Color.Red);
+          TreeNode.ForeColor = (Selected ? Color.Green : Color.Black);
           TreeNode.Checked = value;
         }
@@ -50,5 +57,5 @@
     }
 
-    public abstract Type JsonItemType { get; }
+    public abstract Type TargetedJsonItemType { get; }
     public abstract UserControl Control { get; }
 
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/LookupJsonItemVM.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/LookupJsonItemVM.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/LookupJsonItemVM.cs	(revision 17473)
@@ -7,13 +7,13 @@
 
 namespace HeuristicLab.JsonInterface.OptimizerIntegration {
-  public class LookupJsonItemVM : JsonItemVMBase, ILookupJsonItemVM {
-    public override Type JsonItemType => typeof(LookupJsonItem);
+  public class LookupJsonItemVM : JsonItemVMBase<LookupJsonItem>, ILookupJsonItemVM {
+    public override Type TargetedJsonItemType => typeof(LookupJsonItem);
 
     public override UserControl Control => new LookupJsonItemControl(this);
 
     public string ActualName {
-      get => ((ILookupJsonItem)Item).ActualName;
+      get => Item.ActualName;
       set {
-        ((ILookupJsonItem)Item).ActualName = value;
+        Item.ActualName = value;
         OnPropertyChange(this, nameof(ActualName));
       }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/MatrixValueVM.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/MatrixValueVM.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/MatrixValueVM.cs	(revision 17473)
@@ -10,5 +10,5 @@
 
   public class DoubleMatrixValueVM : MatrixValueVM<double, DoubleMatrixJsonItem> {
-    public override Type JsonItemType => typeof(DoubleMatrixJsonItem);
+    public override Type TargetedJsonItemType => typeof(DoubleMatrixJsonItem);
     public override UserControl Control =>
       new JsonItemDoubleMatrixValueControl(this);
@@ -27,6 +27,7 @@
   }
 
-  public abstract class MatrixValueVM<T, JsonItemType> : RangedValueBaseVM<T>, IMatrixJsonItemVM
-    where JsonItemType : IMatrixJsonItem {
+  public abstract class MatrixValueVM<T, JsonItemType> : RangedValueBaseVM<T, JsonItemType>, IMatrixJsonItemVM
+    where T : IComparable
+    where JsonItemType : class, IMatrixJsonItem, IIntervalRestrictedJsonItem<T> {
     public abstract T[][] Value { get; set; }
     public bool RowsResizable {
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/RangeVM.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/RangeVM.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/RangeVM.cs	(revision 17473)
@@ -9,6 +9,6 @@
 namespace HeuristicLab.JsonInterface.OptimizerIntegration {
 
-  public class IntRangeVM : RangeVM<int> {
-    public override Type JsonItemType => typeof(IntRangeJsonItem);
+  public class IntRangeVM : RangeVM<int, IntRangeJsonItem> {
+    public override Type TargetedJsonItemType => typeof(IntRangeJsonItem);
 
     protected override int MinTypeValue => int.MinValue;
@@ -20,6 +20,6 @@
   }
 
-  public class DoubleRangeVM : RangeVM<double> {
-    public override Type JsonItemType => typeof(DoubleRangeJsonItem);
+  public class DoubleRangeVM : RangeVM<double, DoubleRangeJsonItem> {
+    public override Type TargetedJsonItemType => typeof(DoubleRangeJsonItem);
 
     protected override double MinTypeValue => double.MinValue;
@@ -31,10 +31,13 @@
   }
 
-  public abstract class RangeVM<T> : RangedValueBaseVM<T> {
+  public abstract class RangeVM<T, JsonItemType> : RangedValueBaseVM<T, JsonItemType>
+    where T : IComparable 
+    where JsonItemType : class, IRangedJsonItem<T>
+  {
 
     public T MinValue {
-      get => Cast(((Array)Item.Value).GetValue(0));
+      get => Item.MinValue;
       set {
-        SetValue(value, (T)((Array)Item.Value).GetValue(1));
+        Item.MinValue = value;
         OnPropertyChange(this, nameof(MinValue));
       }
@@ -42,13 +45,10 @@
 
     public T MaxValue {
-      get => Cast(((Array)Item.Value).GetValue(1));
+      get => Item.MaxValue;
       set {
-        SetValue((T)((Array)Item.Value).GetValue(0), value);
+        Item.MaxValue = value;
         OnPropertyChange(this, nameof(MaxValue));
       }
     }
-
-    private void SetValue(T min, T max) =>
-      Item.Value = new T[] { min, max };
   }
 }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/RangedValueBaseVM.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/RangedValueBaseVM.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/RangedValueBaseVM.cs	(revision 17473)
@@ -6,11 +6,13 @@
 
 namespace HeuristicLab.JsonInterface.OptimizerIntegration {
-  public abstract class RangedValueBaseVM : RangedValueBaseVM<object> { }
 
-  public abstract class RangedValueBaseVM<T> : JsonItemVMBase {
+  public abstract class RangedValueBaseVM<T, JsonItemType> : JsonItemVMBase<JsonItemType>
+    where T : IComparable
+    where JsonItemType : class, IIntervalRestrictedJsonItem<T> 
+  {
     public T MinRange {
-      get => Cast(Item.Range?.First());
+      get => Item.Minimum;
       set {
-        SetRange(value, Item.Range?.Last());
+        Item.Minimum = value;
         OnPropertyChange(this, nameof(MinRange));
       }
@@ -18,7 +20,7 @@
 
     public T MaxRange {
-      get => Cast(Item.Range?.Last());
+      get => Item.Maximum;
       set {
-        SetRange(Item.Range?.First(), value);
+        Item.Maximum = value;
         OnPropertyChange(this, nameof(MaxRange));
       }
@@ -46,12 +48,5 @@
       }
     }
-
-    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/ResultItemVM.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/ResultItemVM.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/ResultItemVM.cs	(revision 17473)
@@ -7,9 +7,8 @@
 
 namespace HeuristicLab.JsonInterface.OptimizerIntegration {
-  public class ResultItemVM : JsonItemVMBase {
-    public override Type JsonItemType => typeof(ResultJsonItem);
+  public class ResultItemVM : JsonItemVMBase<ResultJsonItem> {
+    public override Type TargetedJsonItemType => typeof(ResultJsonItem);
     public override UserControl Control =>
       new JsonItemBaseControl(this);
-
   }
 }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/SingleValueVM.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/SingleValueVM.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/SingleValueVM.cs	(revision 17473)
@@ -8,6 +8,6 @@
 
 namespace HeuristicLab.JsonInterface.OptimizerIntegration {
-  public class IntValueVM : SingleValueVM<int> {
-    public override Type JsonItemType => typeof(IntJsonItem);
+  public class IntValueVM : SingleValueVM<int, IntJsonItem> {
+    public override Type TargetedJsonItemType => typeof(IntJsonItem);
 
     protected override int MinTypeValue => int.MinValue;
@@ -18,6 +18,6 @@
   }
 
-  public class DoubleValueVM : SingleValueVM<double> {
-    public override Type JsonItemType => typeof(DoubleJsonItem);
+  public class DoubleValueVM : SingleValueVM<double, DoubleJsonItem> {
+    public override Type TargetedJsonItemType => typeof(DoubleJsonItem);
 
     protected override double MinTypeValue => double.MinValue;
@@ -28,18 +28,26 @@
   }
 
-  public class BoolValueVM : SingleValueVM<bool> {
-    public override Type JsonItemType => typeof(BoolJsonItem);
+  public class BoolValueVM : JsonItemVMBase<BoolJsonItem> {
+    public override Type TargetedJsonItemType => typeof(BoolJsonItem);
 
-    protected override bool MinTypeValue => false;
-    protected override bool MaxTypeValue => true;
-
+    public bool Value { 
+      get => Item.Value;
+      set {
+        Item.Value = value;
+        OnPropertyChange(this, nameof(Value));
+      }
+    }
+    
     public override UserControl Control =>
        new JsonItemBoolControl(this);
   }
 
-  public abstract class SingleValueVM<T> : RangedValueBaseVM<T> {
-    
+  public abstract class SingleValueVM<T, JsonItemType> : RangedValueBaseVM<T, JsonItemType>
+    where T : IComparable
+    where JsonItemType : class, IIntervalRestrictedJsonItem<T>, IValueJsonItem<T> 
+  {
+
     public T Value { 
-      get => Cast(Item.Value);
+      get => Item.Value;
       set {
         Item.Value = value;
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/StringValueVM.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/StringValueVM.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/StringValueVM.cs	(revision 17473)
@@ -8,6 +8,6 @@
 
 namespace HeuristicLab.JsonInterface.OptimizerIntegration {
-  public class StringValueVM : JsonItemVMBase {
-    public override Type JsonItemType => typeof(StringJsonItem);
+  public class StringValueVM : JsonItemVMBase<StringJsonItem> {
+    public override Type TargetedJsonItemType => typeof(StringJsonItem);
     public override UserControl Control =>
        new JsonItemValidValuesControl(this);
@@ -22,7 +22,7 @@
 
     public IEnumerable<string> Range {
-      get => Item.Range?.Cast<string>();
+      get => Item.ConcreteRestrictedItems;
       set {
-        Item.Range = value;
+        Item.ConcreteRestrictedItems = value;
         //check if value is still in range
         if (!Range.Any(x => x == Value)) {
@@ -37,4 +37,5 @@
       }
     }
+
   }
 }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/ValueLookupJsonItemVM.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/ValueLookupJsonItemVM.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/ValueLookupJsonItemVM.cs	(revision 17473)
@@ -4,7 +4,10 @@
 using System.Text;
 using System.Threading.Tasks;
+using System.Windows.Forms;
 
 namespace HeuristicLab.JsonInterface.OptimizerIntegration {
   public class ValueLookupJsonItemVM : LookupJsonItemVM, IValueLookupJsonItemVM {
+    public override Type TargetedJsonItemType => typeof(ValueLookupJsonItem);
+    public override UserControl Control => new ValueLookupJsonItemControl(this);
     public IJsonItem JsonItemReference => ((IValueLookupJsonItem)Item).JsonItemReference;
   }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ExportJsonDialog.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ExportJsonDialog.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ExportJsonDialog.cs	(revision 17473)
@@ -53,5 +53,5 @@
       foreach (var vmType in ApplicationManager.Manager.GetTypes(typeof(IJsonItemVM))) {
         IJsonItemVM vm = (IJsonItemVM)Activator.CreateInstance(vmType);
-        JI2VM.Add(vm.JsonItemType, vmType);
+        JI2VM.Add(vm.TargetedJsonItemType, vmType);
       }
     }
@@ -102,4 +102,5 @@
               if(Node2VM.TryGetValue(childNode, out IJsonItemVM vm))
                 vm.Selected = true;
+              
             } else {
               TreeNode childNode = new TreeNode(c.Name);
@@ -126,5 +127,6 @@
         Node2Control.Add(node, control);
       } else {
-        //node.
+        node.ForeColor = Color.LightGray;
+        node.NodeFont = new Font(SystemFonts.DialogFont, FontStyle.Italic);
       }
     }
@@ -138,5 +140,5 @@
       }
       
-      return b || (item.Value != null || item.Range != null || item is ILookupJsonItem || item is IResultJsonItem);
+      return b || !(item is EmptyJsonItem);
     }
     
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ExportJsonDialog.resx
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ExportJsonDialog.resx	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ExportJsonDialog.resx	(revision 17473)
@@ -121,4 +121,7 @@
     <value>194, 17</value>
   </metadata>
+  <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>37</value>
+  </metadata>
   <metadata name="jsonItemBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
     <value>17, 17</value>
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemMultiValueControl.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemMultiValueControl.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemMultiValueControl.cs	(revision 17473)
@@ -167,9 +167,9 @@
     private void InitRangeBinding() {
       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),
+      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.EnableMaxRange),
+      NumericRangeControl.EnableMaxRange.DataBindings.Add("Checked", VM, nameof(RangedValueBaseVM<int, IntJsonItem>.EnableMaxRange),
         false, DataSourceUpdateMode.OnPropertyChanged);
     }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemRangeControl.Designer.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemRangeControl.Designer.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemRangeControl.Designer.cs	(revision 17473)
@@ -26,14 +26,14 @@
       this.components = new System.ComponentModel.Container();
       this.groupBox1 = new System.Windows.Forms.GroupBox();
+      this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
+      this.label2 = new System.Windows.Forms.Label();
       this.textBoxValueTo = new System.Windows.Forms.TextBox();
+      this.textBoxValueFrom = new System.Windows.Forms.TextBox();
       this.label4 = new System.Windows.Forms.Label();
-      this.label2 = new System.Windows.Forms.Label();
       this.errorProvider = new System.Windows.Forms.ErrorProvider(this.components);
-      this.textBoxValueFrom = new System.Windows.Forms.TextBox();
-      this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
       this.numericRangeControl = new HeuristicLab.JsonInterface.OptimizerIntegration.NumericRangeControl();
       this.groupBox1.SuspendLayout();
+      this.tableLayoutPanel1.SuspendLayout();
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
-      this.tableLayoutPanel1.SuspendLayout();
       this.SuspendLayout();
       // 
@@ -50,50 +50,4 @@
       this.groupBox1.TabStop = false;
       this.groupBox1.Text = "Value";
-      // 
-      // textBoxValueTo
-      // 
-      this.textBoxValueTo.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.textBoxValueTo.Location = new System.Drawing.Point(100, 24);
-      this.textBoxValueTo.Margin = new System.Windows.Forms.Padding(0);
-      this.textBoxValueTo.Name = "textBoxValueTo";
-      this.textBoxValueTo.Size = new System.Drawing.Size(394, 20);
-      this.textBoxValueTo.TabIndex = 3;
-      // 
-      // label4
-      // 
-      this.label4.AutoSize = true;
-      this.label4.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.label4.Location = new System.Drawing.Point(0, 24);
-      this.label4.Margin = new System.Windows.Forms.Padding(0);
-      this.label4.Name = "label4";
-      this.label4.Size = new System.Drawing.Size(100, 25);
-      this.label4.TabIndex = 1;
-      this.label4.Text = "To:";
-      this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
-      // 
-      // label2
-      // 
-      this.label2.AutoSize = true;
-      this.label2.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.label2.Location = new System.Drawing.Point(0, 0);
-      this.label2.Margin = new System.Windows.Forms.Padding(0);
-      this.label2.Name = "label2";
-      this.label2.Size = new System.Drawing.Size(100, 24);
-      this.label2.TabIndex = 0;
-      this.label2.Text = "From:";
-      this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
-      // 
-      // errorProvider
-      // 
-      this.errorProvider.ContainerControl = this;
-      // 
-      // textBoxValueFrom
-      // 
-      this.textBoxValueFrom.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.textBoxValueFrom.Location = new System.Drawing.Point(100, 0);
-      this.textBoxValueFrom.Margin = new System.Windows.Forms.Padding(0);
-      this.textBoxValueFrom.Name = "textBoxValueFrom";
-      this.textBoxValueFrom.Size = new System.Drawing.Size(394, 20);
-      this.textBoxValueFrom.TabIndex = 2;
       // 
       // tableLayoutPanel1
@@ -115,4 +69,50 @@
       this.tableLayoutPanel1.Size = new System.Drawing.Size(494, 49);
       this.tableLayoutPanel1.TabIndex = 19;
+      // 
+      // label2
+      // 
+      this.label2.AutoSize = true;
+      this.label2.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.label2.Location = new System.Drawing.Point(0, 0);
+      this.label2.Margin = new System.Windows.Forms.Padding(0);
+      this.label2.Name = "label2";
+      this.label2.Size = new System.Drawing.Size(100, 24);
+      this.label2.TabIndex = 0;
+      this.label2.Text = "From:";
+      this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+      // 
+      // textBoxValueTo
+      // 
+      this.textBoxValueTo.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.textBoxValueTo.Location = new System.Drawing.Point(100, 24);
+      this.textBoxValueTo.Margin = new System.Windows.Forms.Padding(0);
+      this.textBoxValueTo.Name = "textBoxValueTo";
+      this.textBoxValueTo.Size = new System.Drawing.Size(394, 20);
+      this.textBoxValueTo.TabIndex = 3;
+      // 
+      // textBoxValueFrom
+      // 
+      this.textBoxValueFrom.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.textBoxValueFrom.Location = new System.Drawing.Point(100, 0);
+      this.textBoxValueFrom.Margin = new System.Windows.Forms.Padding(0);
+      this.textBoxValueFrom.Name = "textBoxValueFrom";
+      this.textBoxValueFrom.Size = new System.Drawing.Size(394, 20);
+      this.textBoxValueFrom.TabIndex = 2;
+      // 
+      // label4
+      // 
+      this.label4.AutoSize = true;
+      this.label4.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.label4.Location = new System.Drawing.Point(0, 24);
+      this.label4.Margin = new System.Windows.Forms.Padding(0);
+      this.label4.Name = "label4";
+      this.label4.Size = new System.Drawing.Size(100, 25);
+      this.label4.TabIndex = 1;
+      this.label4.Text = "To:";
+      this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+      // 
+      // errorProvider
+      // 
+      this.errorProvider.ContainerControl = this;
       // 
       // numericRangeControl
@@ -137,7 +137,7 @@
       this.Size = new System.Drawing.Size(500, 147);
       this.groupBox1.ResumeLayout(false);
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
       this.tableLayoutPanel1.ResumeLayout(false);
       this.tableLayoutPanel1.PerformLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
       this.ResumeLayout(false);
 
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemRangeControl.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemRangeControl.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemRangeControl.cs	(revision 17473)
@@ -32,9 +32,9 @@
 
     private void InitNumbericRangeControl() {
-      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),
+      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.EnableMaxRange),
+      numericRangeControl.EnableMaxRange.DataBindings.Add("Checked", VM, nameof(RangedValueBaseVM<int, IntJsonItem>.EnableMaxRange),
         false, DataSourceUpdateMode.OnPropertyChanged);
     }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValidValuesControl.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValidValuesControl.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValidValuesControl.cs	(revision 17473)
@@ -12,12 +12,12 @@
   public partial class JsonItemValidValuesControl : UserControl {
 
-    IJsonItemVM VM { get; set; }
+    StringValueVM VM { get; set; }
 
     public JsonItemValidValuesControl(StringValueVM vm) {
       InitializeComponent();
       VM = vm;
-      if (VM.Item.Range != null) {
-        foreach (var i in VM.Item.Range)
-          SetupOption((string)i);
+      if (VM.Item.ConcreteRestrictedItems != null) {
+        foreach (var i in VM.Item.ConcreteRestrictedItems)
+          SetupOption(i);
         comboBoxValues.DataBindings.Add("SelectedItem", VM, nameof(StringValueVM.Value));
       } else {
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValueControl.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValueControl.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValueControl.cs	(revision 17473)
@@ -58,9 +58,9 @@
     protected void Init() { 
       TBValue.DataBindings.Add("Text", VM, ValuePropertyId);
-      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),
+      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.EnableMaxRange),
+      NumericRangeControl.EnableMaxRange.DataBindings.Add("Checked", VM, nameof(RangedValueBaseVM<int, IntJsonItem>.EnableMaxRange),
         false, DataSourceUpdateMode.OnPropertyChanged);
     }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ValueLookupJsonItemControl.Designer.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ValueLookupJsonItemControl.Designer.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ValueLookupJsonItemControl.Designer.cs	(revision 17473)
@@ -1,3 +1,3 @@
-﻿namespace HeuristicLab.JsonInterface.OptimizerIntegration.Views {
+﻿namespace HeuristicLab.JsonInterface.OptimizerIntegration {
   partial class ValueLookupJsonItemControl {
     /// <summary> 
@@ -29,11 +29,10 @@
       // content
       // 
-      this.content.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.content.Location = new System.Drawing.Point(0, 20);
+      this.content.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.content.Location = new System.Drawing.Point(0, 22);
       this.content.Margin = new System.Windows.Forms.Padding(0);
       this.content.Name = "content";
-      this.content.Size = new System.Drawing.Size(651, 350);
+      this.content.Padding = new System.Windows.Forms.Padding(0, 3, 0, 0);
+      this.content.Size = new System.Drawing.Size(500, 523);
       this.content.TabIndex = 14;
       // 
@@ -44,5 +43,5 @@
       this.Controls.Add(this.content);
       this.Name = "ValueLookupJsonItemControl";
-      this.Size = new System.Drawing.Size(651, 370);
+      this.Size = new System.Drawing.Size(500, 545);
       this.Controls.SetChildIndex(this.content, 0);
       this.ResumeLayout(false);
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ValueLookupJsonItemControl.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ValueLookupJsonItemControl.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ValueLookupJsonItemControl.cs	(revision 17473)
@@ -10,27 +10,29 @@
 using HeuristicLab.PluginInfrastructure;
 
-namespace HeuristicLab.JsonInterface.OptimizerIntegration.Views {
+namespace HeuristicLab.JsonInterface.OptimizerIntegration {
   public partial class ValueLookupJsonItemControl : LookupJsonItemControl {
-    private IDictionary<Type, Type> JI2VM { get; set; }
+    private static IDictionary<Type, Type> JI2VM { get; set; }
 
-    public ValueLookupJsonItemControl() {
-      InitializeComponent();
-    }
     public ValueLookupJsonItemControl(IValueLookupJsonItemVM vm) : base(vm) {
       InitializeComponent();
       InitCache();
-      if (JI2VM.TryGetValue(vm.JsonItemReference.GetType(), out Type vmType)) {
+      if (vm.JsonItemReference != null && JI2VM.TryGetValue(vm.JsonItemReference.GetType(), out Type vmType)) {
         IJsonItemVM tmp = (IJsonItemVM)Activator.CreateInstance(vmType);
-        content.Controls.Add(tmp.Control);
-      } else {
-        //node.
+        tmp.Item = vm.JsonItemReference;
+        content.Controls.Clear();
+        UserControl control = tmp.Control;
+        content.Controls.Add(control);
+        control.Dock = DockStyle.Fill;
+        
       }
     }
 
     private void InitCache() {
-      JI2VM = new Dictionary<Type, Type>();
-      foreach (var vmType in ApplicationManager.Manager.GetTypes(typeof(IJsonItemVM))) {
-        IJsonItemVM vm = (IJsonItemVM)Activator.CreateInstance(vmType);
-        JI2VM.Add(vm.JsonItemType, vmType);
+      if(JI2VM == null) {
+        JI2VM = new Dictionary<Type, Type>();
+        foreach (var vmType in ApplicationManager.Manager.GetTypes(typeof(IJsonItemVM))) {
+          IJsonItemVM vm = (IJsonItemVM)Activator.CreateInstance(vmType);
+          JI2VM.Add(vm.TargetedJsonItemType, vmType);
+        }
       }
     }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ConstrainedValueParameterConverter.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ConstrainedValueParameterConverter.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ConstrainedValueParameterConverter.cs	(revision 17473)
@@ -19,5 +19,5 @@
           parameter.ActualValue = x;
 
-      if (parameter.ActualValue is IParameterizedItem && cdata.Children != null) {
+      if (parameter.ActualValue != null && /*parameter.ActualValue is IParameterizedItem &&*/ cdata.Children != null) {
         foreach(var param in cdata.Children) {
           if(param.Name == parameter.ActualValue.ItemName)
@@ -34,5 +34,5 @@
         Description = value.ItemDescription,
         Value = parameter.ActualValue?.ToString(),
-        Range = GetValidValues(parameter).Select(x => x.ToString())
+        ConcreteRestrictedItems = GetValidValues(parameter).Select(x => x.ToString())
       };
       item.AddChildren(GetParameterizedChilds(parameter));
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/EnumTypeConverter.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/EnumTypeConverter.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/EnumTypeConverter.cs	(revision 17473)
@@ -24,5 +24,5 @@
         Description = value.ItemDescription,
         Value = Enum.GetName(enumType, val),
-        Range = Enum.GetNames(enumType)
+        ConcreteRestrictedItems = Enum.GetNames(enumType)
     };
     }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/MultiCheckedOperatorConverter.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/MultiCheckedOperatorConverter.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/MultiCheckedOperatorConverter.cs	(revision 17473)
@@ -19,6 +19,6 @@
         IJsonItem childItem = GetChildItem(op.Name, data);
         if(childItem != null) {
-          if(childItem.Value is bool b) {
-            val.Operators.SetItemCheckedState(op, b);
+          if(childItem is BoolJsonItem boolJsonItem) {
+            val.Operators.SetItemCheckedState(op, boolJsonItem.Value);
           }
           root.Inject((IItem)op, childItem, root);
@@ -34,6 +34,5 @@
           Name = op.Name,
           Description = op.Description,
-          Value = val.Operators.ItemChecked(op),
-          Range = new bool[] { false, true }
+          Value = val.Operators.ItemChecked(op)
         };
         IJsonItem c = root.Extract((IItem)op, root);
@@ -49,5 +48,5 @@
     private bool GetOperatorState(string name, IJsonItem data) {
       foreach(var op in data.Children) {
-        if (op.Name == name && op.Value is bool) return (bool)op.Value;
+        if (op.Name == name && op is BoolJsonItem b) return b.Value;
       }
       return false;
@@ -55,4 +54,5 @@
 
     private IJsonItem GetChildItem(string name, IJsonItem parent) {
+      if (parent.Children == null) return null;
       foreach(var c in parent.Children) {
         if (c.Name == name) return c;
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ParameterizedItemConverter.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ParameterizedItemConverter.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ParameterizedItemConverter.cs	(revision 17473)
@@ -24,5 +24,5 @@
       var parameterizedItem = value as IParameterizedItem;
 
-      IJsonItem item = new JsonItem() { 
+      IJsonItem item = new EmptyJsonItem() { 
         Name = value.ItemName,
         Description = value.ItemDescription
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/RegressionProblemDataConverter.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/RegressionProblemDataConverter.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/RegressionProblemDataConverter.cs	(revision 17473)
@@ -31,13 +31,13 @@
       var dataInfo = dataset.GetType().GetField("variableValues", flags);
       dataInfo.SetValue(dataset, dictTmp);
-      val.TargetVariable = (string)data.Children[3].Value;
-      val.TrainingPartition.Start = ((IntRangeJsonItem)data.Children[2]).Value.First();
-      val.TrainingPartition.End = ((IntRangeJsonItem)data.Children[2]).Value.Last();
-      val.TestPartition.Start = ((IntRangeJsonItem)data.Children[1]).Value.First();
-      val.TestPartition.End = ((IntRangeJsonItem)data.Children[1]).Value.Last();
+      val.TargetVariable = ((StringJsonItem)data.Children[3]).Value;
+      val.TrainingPartition.Start = ((IntRangeJsonItem)data.Children[2]).MinValue;
+      val.TrainingPartition.End = ((IntRangeJsonItem)data.Children[2]).MaxValue;
+      val.TestPartition.Start = ((IntRangeJsonItem)data.Children[1]).MinValue;
+      val.TestPartition.End = ((IntRangeJsonItem)data.Children[1]).MaxValue;
     }
 
     public override IJsonItem Extract(IItem value, IJsonItemConverter root) {
-      IJsonItem item = new JsonItem() { 
+      IJsonItem item = new EmptyJsonItem() { 
         Name = value.ItemName,
         Description = value.ItemDescription
@@ -71,5 +71,7 @@
           Name = "Dataset",
           Value = mat,
-          RowNames = rowNames
+          RowNames = rowNames,
+          Minimum = double.MinValue,
+          Maximum = double.MaxValue
         });
       }
@@ -80,6 +82,8 @@
       item.AddChildren(new IntRangeJsonItem() {
         Name = "TestPartition",
-        Value = new int[] { testPartition.Start, testPartition.End },
-        Range = new int[] { 0, Math.Max(testPartition.End, trainingPartition.End) }
+        MinValue = testPartition.Start, 
+        MaxValue = testPartition.End,
+        Minimum = 0, 
+        Maximum = Math.Max(testPartition.End, trainingPartition.End)
       });
 
@@ -87,13 +91,15 @@
       item.AddChildren(new IntRangeJsonItem() {
         Name = "TrainingPartition",
-        Value = new int[] { trainingPartition.Start, trainingPartition.End },
-        Range = new int[] { 0, Math.Max(testPartition.End, trainingPartition.End)}
+        MinValue = trainingPartition.Start,
+        MaxValue = trainingPartition.End,
+        Minimum = 0,
+        Maximum = Math.Max(testPartition.End, trainingPartition.End)
       });
 
       IEnumerable<StringValue> variables = (IEnumerable<StringValue>)val.InputVariables;
-      item.AddChildren(new JsonItem() {
+      item.AddChildren(new StringJsonItem() {
         Name = "TargetVariable",
-        Value = (object)targetVariable,
-        Range = variables.Select(x => x.Value)
+        Value = (string)targetVariable,
+        ConcreteRestrictedItems = variables.Select(x => x.Value)
       });
 
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ResultParameterConverter.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ResultParameterConverter.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ResultParameterConverter.cs	(revision 17473)
@@ -17,5 +17,4 @@
       return new ResultJsonItem() {
         Name = res.ActualName,
-        Value = res.ActualName,
         Description = res.Description
       };
@@ -24,5 +23,5 @@
     public override void Inject(IItem item, IJsonItem data, IJsonItemConverter root) {
       IResultParameter res = item as IResultParameter;
-      res.ActualName = (string)data.Value;
+      res.ActualName = data.Name;
     }
   }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/StringValueConverter.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/StringValueConverter.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/StringValueConverter.cs	(revision 17473)
@@ -17,5 +17,6 @@
     public override IJsonItem Extract(IItem value, IJsonItemConverter root) =>
       new StringJsonItem() {
-        Name = "[OverridableParamName]",
+        //Name = "[OverridableParamName]",
+        Name = value.ItemName,
         Description = value.ItemDescription,
         Value = ((StringValue)value).Value
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueLookupParameterConverter.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueLookupParameterConverter.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueLookupParameterConverter.cs	(revision 17473)
@@ -13,7 +13,8 @@
     public override void Inject(IItem item, IJsonItem data, IJsonItemConverter root) {
       IValueLookupParameter param = item as IValueLookupParameter;
-      param.ActualName = CastValue<string>(((IValueLookupJsonItem)data).ActualName);
+      IValueLookupJsonItem lookupItem = data as IValueLookupJsonItem;
+      param.ActualName = lookupItem.ActualName;
       if (param.Value != null)
-        root.Inject(param.Value, data, root);
+        root.Inject(param.Value, lookupItem.JsonItemReference, root);
     }
 
@@ -25,18 +26,6 @@
       if (param.Value != null) {
         IJsonItem tmp = root.Extract(param.Value, root);
-        item.Value = tmp.Value;
-        item.Range = tmp.Range;
-        item.Name = tmp.Name;
-        item.Description = tmp.Description;
         item.AddChildren(tmp.Children);
-        item.Active = tmp.Active;
         item.JsonItemReference = tmp;
-      } else {
-        var min = GetMinValue(param.DataType);
-        var max = GetMaxValue(param.DataType);
-        if (min != null && max != null)
-          item.Range = new object[] { min, max };
-        else
-          item.Range = null;
       }
       item.Name = param.Name;
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueParameterConverter.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueParameterConverter.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueParameterConverter.cs	(revision 17473)
@@ -14,5 +14,5 @@
       IParameter parameter = value as IParameter;
 
-      if (parameter.ActualValue == null && data.Value != null)
+      if (parameter.ActualValue == null)
         parameter.ActualValue = Instantiate(parameter.DataType);
 
@@ -21,5 +21,5 @@
             root.Inject(parameter.ActualValue, data, root);
           else
-            root.Inject(parameter.ActualValue, data.Children?.First(), root);
+            root.Inject(parameter.ActualValue, /*data.Children?.First()*/ data, root);
          
       }
@@ -29,5 +29,5 @@
       IParameter parameter = value as IParameter;
 
-      IJsonItem item = new JsonItem() {
+      IJsonItem item = new EmptyJsonItem() {
         Name = parameter.Name,
         Description = parameter.Description
@@ -37,4 +37,8 @@
         IJsonItem tmp = root.Extract(parameter.ActualValue, root);
         if (!(tmp is UnsupportedJsonItem)) {
+          tmp.Name = parameter.Name;
+          tmp.Description = parameter.Description;
+          item = tmp;
+          /*
           if (tmp.Name == "[OverridableParamName]") {
             tmp.Name = parameter.Name;
@@ -44,4 +48,5 @@
           } else
             item.AddChildren(tmp);
+            */
         }
       }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueRangeConverter.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueRangeConverter.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueRangeConverter.cs	(revision 17473)
@@ -18,6 +18,6 @@
       IntRange range = item as IntRange;
       IntRangeJsonItem cdata = data as IntRangeJsonItem;
-      range.Start = cdata.Value[0];
-      range.End = cdata.Value[1];
+      range.Start = cdata.MinValue;
+      range.End = cdata.MaxValue;
     }
 
@@ -25,8 +25,11 @@
       IntRange range = value as IntRange;
       return new IntRangeJsonItem() {
-        Name = "[OverridableParamName]",
+        //Name = "[OverridableParamName]",
+        Name = value.ItemName,
         Description = value.ItemDescription,
-        Value = new int[] { range.Start, range.End },
-        Range = new int[] { int.MinValue, int.MaxValue }
+        MinValue = range.Start,
+        MaxValue = range.End,
+        Minimum = int.MinValue,
+        Maximum = int.MaxValue
       };
     }
@@ -40,6 +43,6 @@
       DoubleRange range = item as DoubleRange;
       DoubleRangeJsonItem cdata = data as DoubleRangeJsonItem;
-      range.Start = cdata.Value[0];
-      range.End = cdata.Value[1];
+      range.Start = cdata.MinValue;
+      range.End = cdata.MaxValue;
     }
 
@@ -47,8 +50,11 @@
       DoubleRange range = value as DoubleRange;
       return new DoubleRangeJsonItem() {
-        Name = "[OverridableParamName]",
+        //Name = "[OverridableParamName]",
+        Name = value.ItemName,
         Description = value.ItemDescription,
-        Value = new double[] { range.Start, range.End },
-        Range = new double[] { double.MinValue, double.MaxValue }
+        MinValue = range.Start,
+        MaxValue = range.End,
+        Minimum = double.MinValue,
+        Maximum = double.MaxValue
       };
     }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueTypeArrayConverter.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueTypeArrayConverter.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueTypeArrayConverter.cs	(revision 17473)
@@ -30,5 +30,6 @@
         Description = value.ItemDescription,
         Value = ((IntArray)value).CloneAsArray(),
-        Range = new int[] { int.MinValue, int.MaxValue }
+        Minimum = int.MinValue,
+        Maximum = int.MaxValue
       };
   }
@@ -56,5 +57,6 @@
         Description = value.ItemDescription,
         Value = ((DoubleArray)value).CloneAsArray(),
-        Range = new double[] { double.MinValue, double.MaxValue }
+        Minimum = double.MinValue,
+        Maximum = double.MaxValue
       };
   }
@@ -80,5 +82,6 @@
         Description = value.ItemDescription,
         Value = ((PercentArray)value).CloneAsArray(),
-        Range = new double[] { 0.0d, 1.0d }
+        Minimum = 0.0d,
+        Maximum = 1.0d
       };
   }
@@ -101,8 +104,8 @@
     public override IJsonItem Extract(IItem value, IJsonItemConverter root) =>
       new BoolArrayJsonItem() {
-        Name = "[OverridableParamName]",
+        //Name = "[OverridableParamName]",
+        Name = value.ItemName,
         Description = value.ItemDescription,
-        Value = ((BoolArray)value).CloneAsArray(),
-        Range = new bool[] { false, true }
+        Value = ((BoolArray)value).CloneAsArray()
       };
   }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueTypeMatrixConverter.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueTypeMatrixConverter.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueTypeMatrixConverter.cs	(revision 17473)
@@ -23,5 +23,6 @@
         Description = value.ItemDescription,
         Value = Transform((IntMatrix)value),
-        Range = new int[] { int.MinValue, int.MaxValue }
+        Minimum = int.MinValue,
+        Maximum = int.MaxValue
       };
   }
@@ -42,5 +43,6 @@
         Description = value.ItemDescription,
         Value = Transform((DoubleMatrix)value),
-        Range = new double[] { double.MinValue, double.MaxValue },
+        Minimum = double.MinValue,
+        Maximum = double.MaxValue,
         RowNames = ((DoubleMatrix)value).RowNames,
         ColumnNames = ((DoubleMatrix)value).ColumnNames
@@ -63,5 +65,6 @@
         Description = value.ItemDescription,
         Value = Transform((PercentMatrix)value),
-        Range = new double[] { 0.0d, 1.0d }
+        Minimum = 0.0d,
+        Maximum = 1.0d
       };
   }
@@ -79,8 +82,8 @@
     public override IJsonItem Extract(IItem value, IJsonItemConverter root) =>
       new BoolMatrixJsonItem() {
-        Name = "[OverridableParamName]",
+        //Name = "[OverridableParamName]",
+        Name = value.ItemName,
         Description = value.ItemDescription,
-        Value = Transform((BoolMatrix)value),
-        Range = new bool[] { false, true }
+        Value = Transform((BoolMatrix)value)
       };
   }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueTypeValueConverter.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueTypeValueConverter.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueTypeValueConverter.cs	(revision 17473)
@@ -18,8 +18,10 @@
     public override IJsonItem Extract(IItem value, IJsonItemConverter root) =>
       new IntJsonItem() {
-        Name = "[OverridableParamName]",
+        //Name = "[OverridableParamName]",
+        Name = value.ItemName,
         Description = value.ItemDescription,
         Value = ((IntValue)value).Value,
-        Range = new int[] { int.MinValue, int.MaxValue }
+        Minimum = int.MinValue,
+        Maximum = int.MaxValue
       };
   }
@@ -34,8 +36,10 @@
     public override IJsonItem Extract(IItem value, IJsonItemConverter root) =>
       new DoubleJsonItem() {
-        Name = "[OverridableParamName]",
+        //Name = "[OverridableParamName]",
+        Name = value.ItemName,
         Description = value.ItemDescription,
         Value = ((DoubleValue)value).Value,
-        Range = new double[] { double.MinValue, double.MaxValue }
+        Minimum = double.MinValue,
+        Maximum = double.MaxValue
       };
   }
@@ -50,8 +54,10 @@
     public override IJsonItem Extract(IItem value, IJsonItemConverter root) =>
       new DoubleJsonItem() {
-        Name = "[OverridableParamName]",
+        //Name = "[OverridableParamName]",
+        Name = value.ItemName,
         Description = value.ItemDescription,
         Value = ((PercentValue)value).Value,
-        Range = new double[] { double.MinValue, double.MaxValue }
+        Minimum = double.MinValue,
+        Maximum = double.MaxValue
       };
   }
@@ -66,8 +72,8 @@
     public override IJsonItem Extract(IItem value, IJsonItemConverter root) =>
       new BoolJsonItem() {
-        Name = "[OverridableParamName]",
+        //Name = "[OverridableParamName]",
+        Name = value.ItemName,
         Description = value.ItemDescription,
-        Value = ((BoolValue)value).Value,
-        Range = new bool[] { false, true }
+        Value = ((BoolValue)value).Value
       };
   }
@@ -82,8 +88,10 @@
     public override IJsonItem Extract(IItem value, IJsonItemConverter root) =>
       new DateTimeJsonItem() {
-        Name = "[OverridableParamName]",
+        //Name = "[OverridableParamName]",
+        Name = value.ItemName,
         Description = value.ItemDescription,
         Value = ((DateTimeValue)value).Value,
-        Range = new DateTime[] { DateTime.MinValue, DateTime.MaxValue }
+        Minimum = DateTime.MinValue,
+        Maximum = DateTime.MaxValue
       };
   }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/HeuristicLab.JsonInterface.csproj
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/HeuristicLab.JsonInterface.csproj	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/HeuristicLab.JsonInterface.csproj	(revision 17473)
@@ -68,22 +68,33 @@
     <Compile Include="Converters\ValueRangeConverter.cs" />
     <Compile Include="Interfaces\IArrayJsonItem.cs" />
+    <Compile Include="Interfaces\IConcreteRestrictedJsonItem.cs" />
+    <Compile Include="Interfaces\IIntervalRestrictedJsonItem.cs" />
     <Compile Include="Interfaces\IJsonItem.cs" />
     <Compile Include="Interfaces\IJsonItemValidator.cs" />
     <Compile Include="Interfaces\ILookupJsonItem.cs" />
     <Compile Include="Interfaces\IMatrixJsonItem.cs" />
+    <Compile Include="Interfaces\IRangedJsonItem.cs" />
     <Compile Include="Interfaces\IResultJsonItem.cs" />
+    <Compile Include="Interfaces\IValueJsonItem.cs" />
     <Compile Include="Interfaces\IValueLookupJsonItem.cs" />
-    <Compile Include="Models\ArrayJsonItemBase.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\GenericJsonItem.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\MatrixJsonItemBase.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="SingleLineArrayJsonWriter.cs" />
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Interfaces/IArrayJsonItem.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Interfaces/IArrayJsonItem.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Interfaces/IArrayJsonItem.cs	(revision 17473)
@@ -6,5 +6,5 @@
 
 namespace HeuristicLab.JsonInterface {
-  public interface IArrayJsonItem : IJsonItem {
+  public interface IArrayJsonItem : IValueJsonItem {
     bool Resizable { get; set; }
   }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Interfaces/IConcreteRestrictedJsonItem.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Interfaces/IConcreteRestrictedJsonItem.cs	(revision 17473)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Interfaces/IConcreteRestrictedJsonItem.cs	(revision 17473)
@@ -0,0 +1,11 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HeuristicLab.JsonInterface {
+  public interface IConcreteRestrictedJsonItem<T> : IJsonItem {
+    IEnumerable<T> ConcreteRestrictedItems { get; set; }
+  }
+}
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Interfaces/IIntervalRestrictedJsonItem.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Interfaces/IIntervalRestrictedJsonItem.cs	(revision 17473)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Interfaces/IIntervalRestrictedJsonItem.cs	(revision 17473)
@@ -0,0 +1,14 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HeuristicLab.JsonInterface {
+  public interface IIntervalRestrictedJsonItem<T> : IJsonItem
+    where T : IComparable 
+  {
+    T Minimum { get; set; }
+    T Maximum { get; set; }
+  }
+}
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Interfaces/IJsonItem.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Interfaces/IJsonItem.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Interfaces/IJsonItem.cs	(revision 17473)
@@ -24,7 +24,7 @@
     IJsonItem Parent { get; set; }
 
-    object Value { get; set; }
+    //object Value { get; set; }
 
-    IEnumerable<object> Range { get; set; }
+    //IEnumerable<object> Range { get; set; }
     
     IJsonItemValidator GetValidator();
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Interfaces/IMatrixJsonItem.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Interfaces/IMatrixJsonItem.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Interfaces/IMatrixJsonItem.cs	(revision 17473)
@@ -6,5 +6,5 @@
 
 namespace HeuristicLab.JsonInterface {
-  public interface IMatrixJsonItem : IJsonItem {
+  public interface IMatrixJsonItem : IValueJsonItem {
     bool RowsResizable { get; set; }
     bool ColumnsResizable { get; set; }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Interfaces/IRangedJsonItem.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Interfaces/IRangedJsonItem.cs	(revision 17473)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Interfaces/IRangedJsonItem.cs	(revision 17473)
@@ -0,0 +1,14 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HeuristicLab.JsonInterface {
+  public interface IRangedJsonItem<T> : IIntervalRestrictedJsonItem<T>
+    where T : IComparable 
+  {
+    T MinValue { get; set; }
+    T MaxValue { get; set; }
+  }
+}
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Interfaces/IValueJsonItem.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Interfaces/IValueJsonItem.cs	(revision 17473)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Interfaces/IValueJsonItem.cs	(revision 17473)
@@ -0,0 +1,17 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HeuristicLab.JsonInterface {
+  public interface IValueJsonItem : IJsonItem {
+    object Value { get; set; }
+    //IEnumerable<object> Range { get; set; }
+  }
+
+  public interface IValueJsonItem<T> : IValueJsonItem {
+    new T Value { get; set; }
+    //new IEnumerable<T> Range { get; set; }
+  }
+}
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JCGenerator.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JCGenerator.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JCGenerator.cs	(revision 17473)
@@ -62,5 +62,5 @@
       IEnumerable<IJsonItem> children = item.Children;
       
-      if (item.Active && (item.Value != null || item.Range != null || item is IResultJsonItem || item is ILookupJsonItem)) {
+      if (item.Active && !(item is EmptyJsonItem)) {
         jsonItems.Add(item);
       }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonTemplateInstantiator.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonTemplateInstantiator.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonTemplateInstantiator.cs	(revision 17473)
@@ -105,4 +105,6 @@
         instData.Objects.Add(tmp.Path, tmp);
       }
+      //IList<IJsonItem> faultyItems = new List<IJsonItem>();
+      //root.GetValidator().Validate(ref faultyItems);
     }
     
@@ -113,9 +115,10 @@
         // override default value
         if (instData.Objects.TryGetValue(path, out IJsonItem param)) {
-          // save range from template
-          IEnumerable<object> tmpRange = param.Range;
+          // remove fixed template parameter => dont allow to copy them from concrete config
+          obj.Property(nameof(IIntervalRestrictedJsonItem<int>.Minimum))?.Remove();
+          obj.Property(nameof(IIntervalRestrictedJsonItem<int>.Maximum))?.Remove();
+          obj.Property(nameof(IConcreteRestrictedJsonItem<string>.ConcreteRestrictedItems))?.Remove();
+          // merge
           param.SetFromJObject(obj);
-          // set range from template
-          param.Range = tmpRange; 
         } else throw new InvalidDataException($"No parameter with path='{path}' defined!");
       }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/ArrayJsonItem.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/ArrayJsonItem.cs	(revision 17473)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/ArrayJsonItem.cs	(revision 17473)
@@ -0,0 +1,16 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Newtonsoft.Json.Linq;
+
+namespace HeuristicLab.JsonInterface {
+  public abstract class ArrayJsonItem<T> : ValueJsonItem<T[]>, IArrayJsonItem {
+    public virtual bool Resizable { get; set; }
+    public override void SetFromJObject(JObject jObject) {
+      base.SetFromJObject(jObject);
+      Resizable = (jObject[nameof(IArrayJsonItem.Resizable)]?.ToObject<bool>()).GetValueOrDefault();
+    }
+  }
+}
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/ArrayJsonItemBase.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/ArrayJsonItemBase.cs	(revision 17472)
+++ 	(revision )
@@ -1,16 +1,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Newtonsoft.Json.Linq;
-
-namespace HeuristicLab.JsonInterface {
-  public class ArrayJsonItemBase<T> : JsonItem<T[], T>, IArrayJsonItem {
-    public virtual bool Resizable { get; set; }
-    public override void SetFromJObject(JObject jObject) {
-      base.SetFromJObject(jObject);
-      Resizable = (jObject[nameof(IArrayJsonItem.Resizable)]?.ToObject<bool>()).GetValueOrDefault();
-    }
-  }
-}
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/BoolJsonItems.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/BoolJsonItems.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/BoolJsonItems.cs	(revision 17473)
@@ -6,8 +6,14 @@
 
 namespace HeuristicLab.JsonInterface {
-  public class BoolJsonItem : JsonItem<bool> { }
+  public class BoolJsonItem : ValueJsonItem<bool> {
+    protected override bool Validate() => true;
+  }
 
-  public class BoolArrayJsonItem : ArrayJsonItemBase<bool> { }
+  public class BoolArrayJsonItem : ArrayJsonItem<bool> {
+    protected override bool Validate() => true;
+  }
 
-  public class BoolMatrixJsonItem : MatrixJsonItemBase<bool> { }
+  public class BoolMatrixJsonItem : MatrixJsonItem<bool> {
+    protected override bool Validate() => true;
+  }
 }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/ConcreteRestrictedArrayJsonItem.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/ConcreteRestrictedArrayJsonItem.cs	(revision 17473)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/ConcreteRestrictedArrayJsonItem.cs	(revision 17473)
@@ -0,0 +1,23 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HeuristicLab.JsonInterface {
+  public abstract class ConcreteRestrictedArrayJsonItem<T> : ArrayJsonItem<T>, IConcreteRestrictedJsonItem<T> {
+    public IEnumerable<T> ConcreteRestrictedItems { get; set; }
+
+    protected override bool Validate() {
+      bool res = true;
+      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)
+        }
+        res = res && tmp; //if one tmp is false, res will set false
+      }
+      return res;
+    }
+  }
+}
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/ConcreteRestrictedValueJsonItem.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/ConcreteRestrictedValueJsonItem.cs	(revision 17473)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/ConcreteRestrictedValueJsonItem.cs	(revision 17473)
@@ -0,0 +1,18 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HeuristicLab.JsonInterface {
+  public abstract class ConcreteRestrictedValueJsonItem<T> : ValueJsonItem<T>, IConcreteRestrictedJsonItem<T> {
+    public IEnumerable<T> ConcreteRestrictedItems { get; set; }
+
+    protected override bool Validate() {
+      if (ConcreteRestrictedItems == null) return true;
+      foreach (var x in ConcreteRestrictedItems)
+        if (Value.Equals(x)) return true;
+      return false;
+    }
+  }
+}
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/DateTimeJsonItem.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/DateTimeJsonItem.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/DateTimeJsonItem.cs	(revision 17473)
@@ -6,4 +6,6 @@
 
 namespace HeuristicLab.JsonInterface {
-  public class DateTimeJsonItem : JsonItem<DateTime> { }
+  public class DateTimeJsonItem : IntervalRestrictedValueJsonItem<DateTime> {
+    protected override bool Validate() => Minimum.CompareTo(Value) >= 0 && Maximum.CompareTo(Value) <= 0;
+  }
 }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/DoubleJsonItems.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/DoubleJsonItems.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/DoubleJsonItems.cs	(revision 17473)
@@ -6,11 +6,10 @@
 
 namespace HeuristicLab.JsonInterface {
-  public class DoubleJsonItem : JsonItem<double> { }
-  public class DoubleArrayJsonItem : ArrayJsonItemBase<double> { }
-  public class DoubleRangeJsonItem : ArrayJsonItemBase<double> {
-    public override bool Resizable { get => false; set { } }
-  }
+  public class DoubleJsonItem : IntervalRestrictedValueJsonItem<double> { }
+  public class DoubleArrayJsonItem : IntervalRestrictedArrayJsonItem<double> { }
+  public class DoubleRangeJsonItem : RangedJsonItem<double> { }
 
-  public class DoubleMatrixJsonItem : MatrixJsonItemBase<double> {
+  public class DoubleMatrixJsonItem : IntervalRestrictedMatrixJsonItem<double> {
+    /*
     protected override bool IsInRange() {
       for (int c = 0; c < Value.Length; ++c) {
@@ -22,4 +21,5 @@
       return true;
     }
+    */
   }
 }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/EmptyJsonItem.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/EmptyJsonItem.cs	(revision 17473)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/EmptyJsonItem.cs	(revision 17473)
@@ -0,0 +1,11 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HeuristicLab.JsonInterface {
+  public class EmptyJsonItem : JsonItem {
+    protected override bool Validate() => true;
+  }
+}
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/GenericJsonItem.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/GenericJsonItem.cs	(revision 17472)
+++ 	(revision )
@@ -1,34 +1,0 @@
-﻿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 {
-
-  public class JsonItem<T> : JsonItem<T,T> { }
-
-  public class JsonItem<V,R> : JsonItem {
-    public new V Value {
-      get => ConvertObject(base.Value);
-      set => base.Value = value;
-    }
-    
-    public new IEnumerable<R> Range {
-      get => base.Range?.Cast<R>();
-      set => base.Range = value.Cast<object>();
-    }
-
-    private V ConvertObject(object obj) {
-      if (obj is IConvertible)
-        return (V)Convert.ChangeType(obj, typeof(V));
-
-      if (obj is JToken token)
-        return token.ToObject<V>();
-
-      return (V)obj;
-    }
-  }
-}
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/IntJsonItems.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/IntJsonItems.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/IntJsonItems.cs	(revision 17473)
@@ -6,17 +6,9 @@
 
 namespace HeuristicLab.JsonInterface {
-  public class IntJsonItem : JsonItem<int> {
-    //public new IEnumerable<int> Range { get; }
+  public class IntJsonItem : IntervalRestrictedValueJsonItem<int> { }
+  public class IntArrayJsonItem : IntervalRestrictedArrayJsonItem<int> { }
+  public class IntRangeJsonItem : RangedJsonItem<int> { }
+  public class IntMatrixJsonItem : IntervalRestrictedMatrixJsonItem<int> {
     /*
-    public int MinValue { get; set; } 
-    public int MaxValue { get; set; }
-    */
-  }
-  public class IntArrayJsonItem : ArrayJsonItemBase<int> { }
-  public class IntRangeJsonItem : ArrayJsonItemBase<int> {
-    public override bool Resizable { get => false; set { } }
-  }
-  public class IntMatrixJsonItem : MatrixJsonItemBase<int> {
-
     protected override bool IsInRange() {
       for (int c = 0; c < Value.Length; ++c) {
@@ -28,4 +20,5 @@
       return true;
     }
+    */
   }
 }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/IntervalRestrictedArrayJsonItem.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/IntervalRestrictedArrayJsonItem.cs	(revision 17473)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/IntervalRestrictedArrayJsonItem.cs	(revision 17473)
@@ -0,0 +1,28 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+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 bool Validate() {
+      foreach(var x in Value) {
+        if (Minimum.CompareTo(x) > 0 || Maximum.CompareTo(x) < 0)
+          return false;
+      }
+      return true;
+    }
+
+    public override void SetFromJObject(JObject jObject) {
+      base.SetFromJObject(jObject);
+      Minimum = jObject[nameof(IIntervalRestrictedJsonItem<T>.Minimum)].ToObject<T>();
+      Maximum = jObject[nameof(IIntervalRestrictedJsonItem<T>.Maximum)].ToObject<T>();
+    }
+  }
+}
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/IntervalRestrictedMatrixJsonItem.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/IntervalRestrictedMatrixJsonItem.cs	(revision 17473)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/IntervalRestrictedMatrixJsonItem.cs	(revision 17473)
@@ -0,0 +1,28 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+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 bool Validate() {
+      foreach (var x in Value) {
+        foreach(var y in x) {
+          if (Minimum.CompareTo(y) > 0 || Maximum.CompareTo(y) < 0)
+            return false;
+        }
+      }
+      return true;
+    }
+    public override void SetFromJObject(JObject jObject) {
+      base.SetFromJObject(jObject);
+      Minimum = jObject[nameof(IIntervalRestrictedJsonItem<T>.Minimum)].ToObject<T>();
+      Maximum = jObject[nameof(IIntervalRestrictedJsonItem<T>.Maximum)].ToObject<T>();
+    }
+  }
+}
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/IntervalRestrictedValueJsonItem.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/IntervalRestrictedValueJsonItem.cs	(revision 17473)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/IntervalRestrictedValueJsonItem.cs	(revision 17473)
@@ -0,0 +1,22 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+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 bool Validate() => Minimum.CompareTo(Value) <= 0 && Maximum.CompareTo(Value) >= 0;
+
+    public override void SetFromJObject(JObject jObject) {
+      base.SetFromJObject(jObject);
+      Minimum = jObject[nameof(IIntervalRestrictedJsonItem<T>.Minimum)].ToObject<T>();
+      Maximum = jObject[nameof(IIntervalRestrictedJsonItem<T>.Maximum)].ToObject<T>();
+    }
+  }
+}
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/JsonItem.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/JsonItem.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/JsonItem.cs	(revision 17473)
@@ -11,5 +11,5 @@
   /// Main data class for json interface.
   /// </summary>
-  public class JsonItem : IJsonItem {
+  public abstract class JsonItem : IJsonItem {
 
     public class JsonItemValidator : IJsonItemValidator {
@@ -25,4 +25,5 @@
       }
 
+      // TODO: return ValidationResult ?
       private bool ValidateHelper(JsonItem item, ref IList<IJsonItem> faultyItems) {
         int hash = item.GetHashCode();
@@ -30,12 +31,12 @@
           return r;
 
-        bool res = true;
-        if (item.Value != null && item.Range != null)
-          res = item.IsInRange();
+        bool res = item.Validate();
         if (!res) faultyItems.Add(item);
         Cache.Add(hash, res);
-        if(item.Children != null)
+        if(item.Children != null) {
           foreach (var child in item.Children)
-            res = res && ValidateHelper(child as JsonItem, ref faultyItems);
+            if (!ValidateHelper(child as JsonItem, ref faultyItems))
+              res = false && res;
+        }
         return res;
       }
@@ -62,7 +63,7 @@
     }
 
-    public virtual object Value { get; set; }
+    //public virtual object Value { get; set; }
 
-    public virtual IEnumerable<object> Range { get; set; }
+    //public virtual IEnumerable<object> Range { get; set; }
     
     // TODO jsonIgnore dataType?
@@ -105,6 +106,6 @@
 
     public virtual void SetFromJObject(JObject jObject) {
-      Value = jObject[nameof(IJsonItem.Value)]?.ToObject<object>();
-      Range = jObject[nameof(IJsonItem.Range)]?.ToObject<object[]>();
+      //Value = jObject[nameof(IJsonItem.Value)]?.ToObject<object>();
+      //Range = jObject[nameof(IJsonItem.Range)]?.ToObject<object[]>();
     }
     #endregion
@@ -114,5 +115,6 @@
      * TODO protected abstract bool Validate();
      */
-     
+    protected abstract bool Validate();
+    /*
     protected virtual bool IsInRange() {
       bool b1 = true, b2 = true;
@@ -156,4 +158,5 @@
         (((T)max).CompareTo(value) == 1 || ((T)max).CompareTo(value) == 0);
     }
+    */
     #endregion
   }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/LookupJsonItem.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/LookupJsonItem.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/LookupJsonItem.cs	(revision 17473)
@@ -14,4 +14,6 @@
       ActualName = jObject[nameof(ILookupJsonItem.ActualName)]?.ToString();
     }
+
+    protected override bool Validate() => true;
   }
 }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/MatrixJsonItem.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/MatrixJsonItem.cs	(revision 17473)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/MatrixJsonItem.cs	(revision 17473)
@@ -0,0 +1,33 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+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 SetFromJObject(JObject jObject) {
+      base.SetFromJObject(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/Models/MatrixJsonItemBase.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/MatrixJsonItemBase.cs	(revision 17472)
+++ 	(revision )
@@ -1,33 +1,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Newtonsoft.Json.Linq;
-
-namespace HeuristicLab.JsonInterface {
-  public class MatrixJsonItemBase<T> : JsonItem<T[][], 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 SetFromJObject(JObject jObject) {
-      base.SetFromJObject(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/Models/RangedJsonItem.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/RangedJsonItem.cs	(revision 17473)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/RangedJsonItem.cs	(revision 17473)
@@ -0,0 +1,19 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+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 bool Validate() =>
+      (Minimum.CompareTo(MinValue) <= 0 && Maximum.CompareTo(MinValue) >= 0) &&
+      (Minimum.CompareTo(MaxValue) <= 0 && Maximum.CompareTo(MaxValue) >= 0);
+  }
+}
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/ResultJsonItem.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/ResultJsonItem.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/ResultJsonItem.cs	(revision 17473)
@@ -7,5 +7,5 @@
 namespace HeuristicLab.JsonInterface {
   public class ResultJsonItem : JsonItem, IResultJsonItem {
-
+    protected override bool Validate() => true;
   }
 }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/StringJsonItem.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/StringJsonItem.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/StringJsonItem.cs	(revision 17473)
@@ -6,5 +6,5 @@
 
 namespace HeuristicLab.JsonInterface {
-  public class StringJsonItem : JsonItem<string> { }
-  public class StringArrayJsonItem : JsonItem<string[], string> { }
+  public class StringJsonItem : ConcreteRestrictedValueJsonItem<string> { }
+  public class StringArrayJsonItem : ConcreteRestrictedArrayJsonItem<string> { }
 }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/UnsupportedJsonItem.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/UnsupportedJsonItem.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/UnsupportedJsonItem.cs	(revision 17473)
@@ -34,13 +34,5 @@
     }
 
-    public override object Value {
-      get => throw new NotSupportedException();
-      set => throw new NotSupportedException();
-    }
-
-    public override IEnumerable<object> Range {
-      get => throw new NotSupportedException();
-      set => throw new NotSupportedException();
-    }
+    protected override bool Validate() => true;
   }
 }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/ValueJsonItem.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/ValueJsonItem.cs	(revision 17473)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/ValueJsonItem.cs	(revision 17473)
@@ -0,0 +1,50 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Newtonsoft.Json.Linq;
+
+namespace HeuristicLab.JsonInterface {
+  public abstract class ValueJsonItem : JsonItem, IValueJsonItem {
+    public object Value { get; set; }
+
+    //public IEnumerable<object> Range { get; set; }
+
+    public override void SetFromJObject(JObject jObject) {
+      Value = jObject[nameof(IValueJsonItem.Value)]?.ToObject<object>();
+      //Range = jObject[nameof(IValueJsonItem.Range)]?.ToObject<object[]>();
+    }
+
+  }
+
+  public abstract class ValueJsonItem<T> : ValueJsonItem, IValueJsonItem<T> {
+    public new T Value {
+      get => ConvertObject(base.Value);
+      set => base.Value = value;
+    }
+
+    /*
+    public new IEnumerable<T> Range {
+      get => base.Range?.Cast<T>();
+      set => base.Range = value.Cast<object>();
+    }
+    */
+
+    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 SetFromJObject(JObject jObject) {
+      if(jObject[nameof(IValueJsonItem<T>.Value)] != null)
+        Value = jObject[nameof(IValueJsonItem<T>.Value)].ToObject<T>();
+      //Range = jObject[nameof(IValueJsonItem<T>.Range)]?.ToObject<T[]>();
+    }
+  }
+}
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/ValueLookupJsonItem.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/ValueLookupJsonItem.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/ValueLookupJsonItem.cs	(revision 17473)
@@ -10,4 +10,10 @@
     [JsonIgnore]
     public IJsonItem JsonItemReference { get; set; }
+
+    protected override bool Validate() {
+      if (JsonItemReference == null) return true;
+      IList<IJsonItem> faultyItems = new List<IJsonItem>();
+      return JsonItemReference.GetValidator().Validate(ref faultyItems);
+    }
   }
 }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/SingleLineArrayJsonWriter.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/SingleLineArrayJsonWriter.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/SingleLineArrayJsonWriter.cs	(revision 17473)
@@ -19,5 +19,9 @@
       base.Formatting = Formatting.Indented;
       base.WritePropertyName(name);
-      isRangeArray = name == nameof(IJsonItem.Range) || name == nameof(IJsonItem.Value);
+      isRangeArray = 
+        name == nameof(IConcreteRestrictedJsonItem<int>.ConcreteRestrictedItems) || 
+        name == nameof(IValueJsonItem.Value) ||
+        name == nameof(IMatrixJsonItem.RowNames) || 
+        name == nameof(IMatrixJsonItem.ColumnNames);
     }
 
Index: branches/3026_IntegrationIntoSymSpace/Heuristiclab.ConfigStarter/Program.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/Heuristiclab.ConfigStarter/Program.cs	(revision 17472)
+++ branches/3026_IntegrationIntoSymSpace/Heuristiclab.ConfigStarter/Program.cs	(revision 17473)
@@ -46,7 +46,8 @@
 
       IJsonItem root = JsonItemConverter.Extract(alg);
-      var x = root.Children[0];
-      root.Children.Remove(x);
-      x.Parent = null;
+      ActivateJsonItems(root);
+      //var x = root.Children[0];
+      //root.Children.Remove(x);
+      //x.Parent = null;
 
 
@@ -64,4 +65,12 @@
       
     }
+
+    private static void ActivateJsonItems(IJsonItem item) {
+      item.Active = true;
+      if(item.Children != null) {
+        foreach (var x in item.Children)
+          ActivateJsonItems(x);
+      }
+    }
   }
 }
