Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/HeuristicLab.JsonInterface.OptimizerIntegration.csproj
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/HeuristicLab.JsonInterface.OptimizerIntegration.csproj	(revision 17406)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/HeuristicLab.JsonInterface.OptimizerIntegration.csproj	(revision 17410)
@@ -78,4 +78,7 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="Interfaces\IJsonItemValueParser.cs" />
+    <Compile Include="Parser\JsonItemDoubleValueParser.cs" />
+    <Compile Include="Parser\JsonItemIntValueParser.cs" />
     <Compile Include="Properties\Resources.Designer.cs">
       <AutoGen>True</AutoGen>
@@ -95,4 +98,8 @@
       <DependentUpon>NumericRangeControl.cs</DependentUpon>
     </Compile>
+    <Compile Include="ViewModels\JsonItemVMBase.cs" />
+    <Compile Include="ViewModels\RangeVM.cs" />
+    <Compile Include="ViewModels\SingleValueVM.cs" />
+    <Compile Include="ViewModels\StringValueVM.cs" />
     <Compile Include="Views\ExportJsonDialog.cs">
       <SubType>Form</SubType>
@@ -102,10 +109,4 @@
     </Compile>
     <Compile Include="FileManager.cs" />
-    <Compile Include="Views\JsonItemArrayControl.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="Views\JsonItemArrayControl.Designer.cs">
-      <DependentUpon>JsonItemArrayControl.cs</DependentUpon>
-    </Compile>
     <Compile Include="Views\JsonItemBoolControl.cs">
       <SubType>UserControl</SubType>
@@ -113,10 +114,4 @@
     <Compile Include="Views\JsonItemBoolControl.Designer.cs">
       <DependentUpon>JsonItemBoolControl.cs</DependentUpon>
-    </Compile>
-    <Compile Include="Views\JsonItemDefaultControl.cs">
-      <SubType>UserControl</SubType>
-    </Compile>
-    <Compile Include="Views\JsonItemDefaultControl.Designer.cs">
-      <DependentUpon>JsonItemDefaultControl.cs</DependentUpon>
     </Compile>
     <Compile Include="Views\JsonItemRangeControl.cs">
@@ -199,7 +194,4 @@
     <EmbeddedResource Include="Views\ExportJsonDialog.resx">
       <DependentUpon>ExportJsonDialog.cs</DependentUpon>
-    </EmbeddedResource>
-    <EmbeddedResource Include="Views\JsonItemArrayControl.resx">
-      <DependentUpon>JsonItemArrayControl.cs</DependentUpon>
     </EmbeddedResource>
     <EmbeddedResource Include="Views\JsonItemBoolControl.resx">
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/JsonItemBaseControl.Designer.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/JsonItemBaseControl.Designer.cs	(revision 17406)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/JsonItemBaseControl.Designer.cs	(revision 17410)
@@ -51,5 +51,4 @@
       this.checkBoxActive.TabIndex = 2;
       this.checkBoxActive.UseVisualStyleBackColor = true;
-      this.checkBoxActive.CheckedChanged += new System.EventHandler(this.checkBoxActive_CheckedChanged);
       // 
       // textBoxActualName
@@ -61,5 +60,4 @@
       this.textBoxActualName.Size = new System.Drawing.Size(404, 20);
       this.textBoxActualName.TabIndex = 12;
-      this.textBoxActualName.TextChanged += new System.EventHandler(this.textBoxActualName_TextChanged);
       // 
       // labelActualName
@@ -82,5 +80,4 @@
       this.textBoxName.Size = new System.Drawing.Size(404, 20);
       this.textBoxName.TabIndex = 10;
-      this.textBoxName.TextChanged += new System.EventHandler(this.textBoxName_TextChanged);
       // 
       // label1
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/JsonItemBaseControl.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/JsonItemBaseControl.cs	(revision 17406)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/JsonItemBaseControl.cs	(revision 17410)
@@ -11,5 +11,5 @@
 namespace HeuristicLab.JsonInterface.OptimizerIntegration {
   public partial class JsonItemBaseControl : UserControl {
-    public JsonItemVM VM { get; set; }
+    private JsonItemVMBase VM { get; set; }
 
     private JsonItemBaseControl() {
@@ -17,9 +17,14 @@
     }
 
-    public JsonItemBaseControl(JsonItemVM vm) {
+    public JsonItemBaseControl(JsonItemVMBase vm) {
       InitializeComponent();
       VM = vm;
-      checkBoxActive.Checked = VM.Selected;
-      textBoxName.Text = VM.Item.Name;
+
+      checkBoxActive.DataBindings.Add("Checked", VM, nameof(JsonItemVMBase.Selected));
+      textBoxName.DataBindings.Add("Text", VM, nameof(JsonItemVMBase.Name));
+      textBoxActualName.DataBindings.Add("Text", VM, nameof(JsonItemVMBase.ActualName));
+
+      //checkBoxActive.Checked = VM.Selected;
+      //textBoxName.Text = VM.Item.Name;
       if (string.IsNullOrWhiteSpace(VM.Item.ActualName))
         textBoxActualName.ReadOnly = true;
@@ -27,16 +32,4 @@
         textBoxActualName.Text = VM.Item.ActualName;
     }
-
-    private void checkBoxActive_CheckedChanged(object sender, EventArgs e) {
-      VM.Selected = checkBoxActive.Checked;
-    }
-
-    private void textBoxName_TextChanged(object sender, EventArgs e) {
-      VM.Item.Name = textBoxName.Text;
-    }
-
-    private void textBoxActualName_TextChanged(object sender, EventArgs e) {
-      VM.Item.ActualName = textBoxActualName.Text;
-    }
   }
 }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/NumericRangeControl.Designer.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/NumericRangeControl.Designer.cs	(revision 17406)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/NumericRangeControl.Designer.cs	(revision 17410)
@@ -1,3 +1,3 @@
-﻿namespace HeuristicLab.JsonInterface.OptimizerIntegration.Shared {
+﻿namespace HeuristicLab.JsonInterface.OptimizerIntegration {
   partial class NumericRangeControl {
     /// <summary> 
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/NumericRangeControl.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/NumericRangeControl.cs	(revision 17406)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/NumericRangeControl.cs	(revision 17410)
@@ -10,5 +10,5 @@
 using System.Globalization;
 
-namespace HeuristicLab.JsonInterface.OptimizerIntegration.Shared {
+namespace HeuristicLab.JsonInterface.OptimizerIntegration {
   public partial class NumericRangeControl : UserControl {
 
@@ -22,6 +22,4 @@
     }
     public bool IsDouble { get; set; }
-
-
 
     public NumericRangeControl() {
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/JsonItemVM.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/JsonItemVM.cs	(revision 17406)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/JsonItemVM.cs	(revision 17410)
@@ -2,43 +2,77 @@
 using System.Collections;
 using System.Collections.Generic;
+using System.ComponentModel;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using System.Windows.Forms;
 
 namespace HeuristicLab.JsonInterface.OptimizerIntegration {
-  public delegate void OnSelectionChangeHandler(JsonItemVM sender, bool selection);
-  public delegate void OnChildAddedHandler(JsonItemVM sender, JsonItemVM child);
 
-  public class JsonItemVM {
-    public IJsonItem Item { get; set; }
+  //TODO: controls/views only initcomponents and delegate events to this, this has parsers and other actions?
+  // maybe different VMs?
+  public class JsonItemVM : JsonItemVMBase {
 
-    private IList<JsonItemVM> children = new List<JsonItemVM>();
-    public IEnumerable<JsonItemVM> Children { 
-      get => children; 
-    }
+    public override Type JsonItemType => typeof(JsonItem);
 
-    public JsonItemVM Parent { get; set; }
+    //protected IJsonItemValueParser Parser { get; set; }
+    //child tree
+    //private IList<JsonItemVM> nodes = new List<JsonItemVM>();
+
+    //public IEnumerable<JsonItemVM> Nodes { get => nodes; }
+    //public JsonItemVM Parent { get; private set; }
+
 
     private bool selected = true;
     public bool Selected {
-      get => selected; 
+      get => selected;
       set {
         selected = value;
-        OnSelectionChange?.Invoke(this, Selected);
-      } 
+        OnPropertyChange(this, nameof(Selected));
+      }
     }
 
-    public event OnSelectionChangeHandler OnSelectionChange;
-    public event OnChildAddedHandler OnChildAdded;
-
-    public JsonItemVM(IJsonItem item) {
-      this.Item = item;
+    public string Name {
+      get => Item.Name;
+      set {
+        Item.Name = value;
+        OnPropertyChange(this, nameof(Name));
+      }
     }
 
-    public void AddChild(JsonItemVM vm) {
-      children.Add(vm);
-      vm.Parent = this;
-      OnChildAdded?.Invoke(this, vm);
+    public string ActualName {
+      get => Item.ActualName;
+      set {
+        Item.ActualName = value;
+        OnPropertyChange(this, nameof(ActualName));
+      }
     }
+    public override JsonItemBaseControl GetControl() {
+      return new JsonItemBaseControl(this);
+    }
+
+
+    /*
+    public abstract UserControl Control { get; }
+
+    public void OnSelectChange(object sender, EventArgs e) {
+      CheckBox checkBox = sender as CheckBox;
+      Selected = checkBox.Checked;
+    }
+
+    public void OnNameChange(object sender, EventArgs e) {
+      TextBox textBox = sender as TextBox;
+      Item.Name = textBox.Text;
+    }
+
+    public void OnActualNameChange(object sender, EventArgs e) {
+      TextBox textBox = sender as TextBox;
+      Item.ActualName = textBox.Text;
+    }
+
+    public abstract void OnValueChange(object sender, EventArgs e);
+
+    public abstract void OnRangeChange(object sender, EventArgs e);
+    */
   }
 }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/JsonItemVMBase.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/JsonItemVMBase.cs	(revision 17410)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/JsonItemVMBase.cs	(revision 17410)
@@ -0,0 +1,62 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HeuristicLab.JsonInterface.OptimizerIntegration {
+  public abstract class JsonItemVMBase : INotifyPropertyChanged {
+    public event PropertyChangedEventHandler PropertyChanged;
+    public IJsonItem Item { get; set; }
+
+    protected void OnPropertyChange(object sender, string propertyName) {
+      // Make a temporary copy of the event to avoid possibility of
+      // a race condition if the last subscriber unsubscribes
+      // immediately after the null check and before the event is raised.
+      // https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/events/how-to-raise-base-class-events-in-derived-classes
+      
+      PropertyChangedEventHandler tmp = PropertyChanged;
+      tmp?.Invoke(this, new PropertyChangedEventArgs(propertyName));
+    }
+
+    public virtual Type JsonItemType => typeof(JsonItem);
+
+    //protected IJsonItemValueParser Parser { get; set; }
+    //child tree
+    //private IList<JsonItemVM> nodes = new List<JsonItemVM>();
+
+    //public IEnumerable<JsonItemVM> Nodes { get => nodes; }
+    //public JsonItemVM Parent { get; private set; }
+
+
+    private bool selected = true;
+    public bool Selected {
+      get => selected;
+      set {
+        selected = value;
+        OnPropertyChange(this, nameof(Selected));
+      }
+    }
+
+    public string Name {
+      get => Item.Name;
+      set {
+        Item.Name = value;
+        OnPropertyChange(this, nameof(Name));
+      }
+    }
+
+    public string ActualName {
+      get => Item.ActualName;
+      set {
+        Item.ActualName = value;
+        OnPropertyChange(this, nameof(ActualName));
+      }
+    }
+    public virtual JsonItemBaseControl GetControl() {
+      return new JsonItemBaseControl(this);
+    }
+
+  }
+}
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/RangeVM.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/RangeVM.cs	(revision 17410)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/RangeVM.cs	(revision 17410)
@@ -0,0 +1,62 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HeuristicLab.JsonInterface.OptimizerIntegration {
+
+  public class IntRangeVM : RangeVM<int> {
+    public override Type JsonItemType => typeof(IntArrayJsonItem); 
+  }
+
+  public class DoubleRangeVM : RangeVM<double> {
+    public override Type JsonItemType => typeof(DoubleArrayJsonItem);
+    public override JsonItemBaseControl GetControl() =>
+      new JsonItemRangeControl(this);
+  }
+
+  public abstract class RangeVM<T> : JsonItemVM {
+
+    public T MinValue {
+      get => Cast(((Array)base.Item.Value).GetValue(0));
+      set {
+        SetValue(value, ((Array)base.Item.Value).GetValue(1));
+        OnPropertyChange(this, nameof(MinValue));
+      }
+    }
+
+    public T MaxValue {
+      get => Cast(((Array)base.Item.Value).GetValue(1));
+      set {
+        SetValue(((Array)base.Item.Value).GetValue(0), value);
+        OnPropertyChange(this, nameof(MaxValue));
+      }
+    }
+
+    public T MinRange {
+      get => Cast(base.Item.Range.First());
+      set {
+        SetRange(value, base.Item.Range.Last());
+        OnPropertyChange(this, nameof(MinRange));
+      }
+    }
+
+    public T MaxRange {
+      get => Cast(base.Item.Range.Last());
+      set {
+        SetRange(base.Item.Range.First(), value);
+        OnPropertyChange(this, nameof(MaxRange));
+      }
+    }
+
+    private T Cast(object obj) => (T)Convert.ChangeType(obj, typeof(T));
+
+    private void SetValue(object min, object max) =>
+      base.Item.Value = new object[] { min, max };
+
+    private void SetRange(object min, object max) =>
+      base.Item.Range = new object[] { min, max };
+  }
+}
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/SingleValueVM.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/SingleValueVM.cs	(revision 17410)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/SingleValueVM.cs	(revision 17410)
@@ -0,0 +1,62 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace HeuristicLab.JsonInterface.OptimizerIntegration {
+  public class IntValueVM : SingleValueVM<int> {
+    public override Type JsonItemType => typeof(IntJsonItem);
+    public override JsonItemBaseControl GetControl() =>
+      new JsonItemIntValueControl(this);
+  }
+
+  public class DoubleValueVM : SingleValueVM<double> {
+    public override Type JsonItemType => typeof(DoubleJsonItem); 
+    public override JsonItemBaseControl GetControl() =>
+       new JsonItemDoubleValueControl(this);
+  }
+
+  public class BoolValueVM : SingleValueVM<bool> {
+    public override Type JsonItemType => typeof(BoolJsonItem);
+    public override JsonItemBaseControl GetControl() =>
+       new JsonItemBoolControl(this);
+  }
+
+  public abstract class SingleValueVM<T> : JsonItemVM {
+    
+    public T Value { 
+      get => Cast(base.Item.Value);
+      set {
+        base.Item.Value = value;
+        OnPropertyChange(this, nameof(Value));
+      }
+    }
+
+    public T MinRange {
+      get => Cast(base.Item.Range.First());
+      set {
+        SetRange(value, base.Item.Range.Last());
+        OnPropertyChange(this, nameof(MinRange));
+      }
+    }
+
+    public T MaxRange {
+      get => Cast(base.Item.Range.Last());
+      set {
+        SetRange(base.Item.Range.First(), value);
+        OnPropertyChange(this, nameof(MaxRange));
+      }
+    }
+
+    private T Cast(object obj) => (T)Convert.ChangeType(obj, typeof(T));
+
+    private void SetRange(object min, object max) {
+      object[] range = new object[] { min, max };
+      base.Item.Range = range;
+    }
+
+  }
+}
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/StringValueVM.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/StringValueVM.cs	(revision 17410)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/StringValueVM.cs	(revision 17410)
@@ -0,0 +1,21 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HeuristicLab.JsonInterface.OptimizerIntegration {
+  public class StringValueVM : JsonItemVM {
+    public override Type JsonItemType => typeof(StringJsonItem);
+    public override JsonItemBaseControl GetControl() =>
+       new JsonItemValidValuesControl(this);
+
+    public string Value {
+      get => base.Item.Value.ToString();
+      set {
+        base.Item.Value = value;
+        OnPropertyChange(this, nameof(Value));
+      }
+    }
+  }
+}
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ExportJsonDialog.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ExportJsonDialog.cs	(revision 17406)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ExportJsonDialog.cs	(revision 17410)
@@ -12,4 +12,5 @@
 using HeuristicLab.Common;
 using HeuristicLab.Optimization;
+using HeuristicLab.PluginInfrastructure;
 
 namespace HeuristicLab.JsonInterface.OptimizerIntegration {
@@ -30,8 +31,9 @@
         vms = new List<JsonItemVM>();
         treeView.Nodes.Clear();
-
+        
         optimizer = content as IOptimizer;
         root = JsonItemConverter.Extract(optimizer);
         TreeNode parent = new TreeNode(root.Name);
+      
         BuildTreeNode(parent, root);
         treeView.Nodes.Add(parent);
@@ -39,6 +41,17 @@
     }
 
+    private IDictionary<Type, JsonItemVMBase> VMs { get; set; }
+
+
+    private void InitCache() {
+      VMs = new Dictionary<Type, JsonItemVMBase>();
+      foreach (var vm in ApplicationManager.Manager.GetInstances<JsonItemVMBase>()) {
+        VMs.Add(vm.JsonItemType, vm);
+      }
+    }
+
     public ExportJsonDialog() {
       InitializeComponent();
+      InitCache();
     }
 
@@ -67,24 +80,31 @@
     }
 
-    private JsonItemVM BuildTreeNode(TreeNode node, IJsonItem item) {
-      JsonItemVM vm = new JsonItemVM(item);
+    private void BuildTreeNode(TreeNode node, IJsonItem item) {
 
-      vms.Add(vm);
-      ctrlCollection.Add(node.GetHashCode(), GenerateControl(vm));
-      if (item.Children != null) {
-        foreach (var c in item.Children) {
-          if (IsDrawableItem(c)) {
-            if (c is ResultItem) {
+      if (VMs.TryGetValue(item.GetType(), out JsonItemVMBase vm)) {
+        //vm.Item = item;
+        //UserControl control = vm.GetControl();
+        //if (control != null) {
+        //  control.Dock = DockStyle.Fill;
+        //  control.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
+        //}
+        //ctrlCollection.Add(node.GetHashCode(), control);
+        if (item.Children != null) {
+          foreach (var c in item.Children) {
+            if (IsDrawableItem(c)) {
+              if (c is ResultItem) {
 
-            } else {
-              TreeNode childNode = new TreeNode(c.Name);
-              node.Nodes.Add(childNode);
-              vm.AddChild(BuildTreeNode(childNode, c));
+              } else {
+                TreeNode childNode = new TreeNode(c.Name);
+                node.Nodes.Add(childNode);
+                BuildTreeNode(childNode, c);
+                //vm.AddChild(BuildTreeNode(childNode, c));
+              }
             }
           }
         }
+      } else {
+        Console.WriteLine();
       }
-      
-      return vm;
     }
 
@@ -109,36 +129,4 @@
       }
     }
-
-    private UserControl GenerateControl(JsonItemVM vm) {
-      IJsonItem item = vm.Item;
-      UserControl control = null;
-      if (!(item is UnsupportedJsonItem)) {
-        if (item.Value is string && item.Range != null) {
-          control = new JsonItemValidValuesControl(vm);
-        } else if (item.Value is bool && item.Range != null) {
-          control = new JsonItemBoolControl(vm);
-        } else if (item.Value is int && item.Range != null) {
-          control = new JsonItemValueControl(vm, false);
-        } else if (item.Value is double && item.Range != null) {
-          control = new JsonItemValueControl(vm, true);
-        } else if (item.Value is Array) {
-          Array arr = (Array)item.Value;
-          if (arr.Length == 2 && arr.GetValue(0) is int && item.Range != null)
-            control = new JsonItemRangeControl(vm, false);
-          else if (arr.Length == 2 && arr.GetValue(0) is double && item.Range != null)
-            control = new JsonItemRangeControl(vm, true);
-          else if (arr.Rank == 1 && arr.GetValue(0) is double) {
-            control = new JsonItemArrayControl(vm);
-          }
-        } else {
-          control = new JsonItemBaseControl(vm);
-        }
-        if (control != null) {
-          control.Dock = DockStyle.Fill;
-          control.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
-        }
-      }
-      return control;
-    }
   }
 }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemArrayControl.Designer.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemArrayControl.Designer.cs	(revision 17406)
+++ 	(revision )
@@ -1,59 +1,0 @@
-﻿namespace HeuristicLab.JsonInterface.OptimizerIntegration {
-  partial class JsonItemArrayControl {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing && (components != null)) {
-        components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.dataGridView = new System.Windows.Forms.DataGridView();
-      ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit();
-      this.SuspendLayout();
-      // 
-      // dataGridView
-      // 
-      this.dataGridView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-      this.dataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
-      this.dataGridView.Location = new System.Drawing.Point(92, 75);
-      this.dataGridView.Name = "dataGridView";
-      this.dataGridView.Size = new System.Drawing.Size(404, 357);
-      this.dataGridView.TabIndex = 13;
-      // 
-      // JsonItemArrayControl
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.Controls.Add(this.dataGridView);
-      this.Name = "JsonItemArrayControl";
-      this.Size = new System.Drawing.Size(502, 438);
-      this.Controls.SetChildIndex(this.dataGridView, 0);
-      ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).EndInit();
-      this.ResumeLayout(false);
-      this.PerformLayout();
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.DataGridView dataGridView;
-  }
-}
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemArrayControl.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemArrayControl.cs	(revision 17406)
+++ 	(revision )
@@ -1,21 +1,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Drawing;
-using System.Data;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-
-namespace HeuristicLab.JsonInterface.OptimizerIntegration {
-  public partial class JsonItemArrayControl : JsonItemBaseControl {
-    public JsonItemArrayControl(JsonItemVM vm) : base(vm) {
-      InitializeComponent();
-      dataGridView.Columns.Add("Values", "Values");
-      foreach(var val in ((Array)VM.Item.Value)) {
-        dataGridView.Rows.Add(val);
-      }
-    }
-  }
-}
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemArrayControl.resx
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemArrayControl.resx	(revision 17406)
+++ 	(revision )
@@ -1,120 +1,0 @@
-﻿<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-</root>
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemBoolControl.Designer.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemBoolControl.Designer.cs	(revision 17406)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemBoolControl.Designer.cs	(revision 17410)
@@ -38,5 +38,4 @@
       this.checkBoxValue.TabIndex = 19;
       this.checkBoxValue.UseVisualStyleBackColor = true;
-      this.checkBoxValue.CheckStateChanged += new System.EventHandler(this.checkBoxValue_CheckStateChanged);
       // 
       // label2
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemBoolControl.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemBoolControl.cs	(revision 17406)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemBoolControl.cs	(revision 17410)
@@ -11,12 +11,14 @@
 namespace HeuristicLab.JsonInterface.OptimizerIntegration {
   public partial class JsonItemBoolControl : JsonItemBaseControl {
-    public JsonItemBoolControl(JsonItemVM vm) : base(vm) {
+
+    public JsonItemBoolControl(BoolValueVM vm) : base(vm) {
       InitializeComponent();
-      checkBoxValue.Checked = (bool)vm.Item.Value;
+      //checkBoxValue.Checked = (bool)vm.Item.Value;
     }
-
+    /*
     private void checkBoxValue_CheckStateChanged(object sender, EventArgs e) {
       VM.Item.Value = checkBoxValue.Checked;
     }
+    */
   }
 }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemDefaultControl.Designer.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemDefaultControl.Designer.cs	(revision 17406)
+++ 	(revision )
@@ -1,32 +1,0 @@
-﻿namespace HeuristicLab.JsonInterface.OptimizerIntegration.Views {
-  partial class JsonItemDefaultControl {
-    /// <summary> 
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary> 
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if (disposing && (components != null)) {
-        components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Component Designer generated code
-
-    /// <summary> 
-    /// Required method for Designer support - do not modify 
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      components = new System.ComponentModel.Container();
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-    }
-
-    #endregion
-  }
-}
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemDefaultControl.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemDefaultControl.cs	(revision 17406)
+++ 	(revision )
@@ -1,17 +1,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Drawing;
-using System.Data;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-
-namespace HeuristicLab.JsonInterface.OptimizerIntegration.Views {
-  public partial class JsonItemDefaultControl : UserControl {
-    public JsonItemDefaultControl() {
-      InitializeComponent();
-    }
-  }
-}
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemRangeControl.Designer.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemRangeControl.Designer.cs	(revision 17406)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemRangeControl.Designer.cs	(revision 17410)
@@ -29,5 +29,5 @@
       this.label4 = new System.Windows.Forms.Label();
       this.label2 = new System.Windows.Forms.Label();
-      this.numericRangeControl1 = new HeuristicLab.JsonInterface.OptimizerIntegration.Shared.NumericRangeControl();
+      this.numericRangeControl1 = new HeuristicLab.JsonInterface.OptimizerIntegration.NumericRangeControl();
       this.groupBox1.SuspendLayout();
       this.SuspendLayout();
@@ -56,5 +56,4 @@
       this.textBoxValueTo.Size = new System.Drawing.Size(230, 20);
       this.textBoxValueTo.TabIndex = 3;
-      this.textBoxValueTo.Leave += new System.EventHandler(this.textBoxValueTo_Leave);
       // 
       // textBoxValueFrom
@@ -64,5 +63,4 @@
       this.textBoxValueFrom.Size = new System.Drawing.Size(230, 20);
       this.textBoxValueFrom.TabIndex = 2;
-      this.textBoxValueFrom.Leave += new System.EventHandler(this.textBoxValueFrom_Leave);
       // 
       // label4
@@ -94,5 +92,4 @@
       this.numericRangeControl1.Size = new System.Drawing.Size(487, 112);
       this.numericRangeControl1.TabIndex = 18;
-      this.numericRangeControl1.Load += new System.EventHandler(this.numericRangeControl1_Load);
       // 
       // JsonItemRangeControl
@@ -120,5 +117,5 @@
     private System.Windows.Forms.Label label4;
     private System.Windows.Forms.Label label2;
-    private Shared.NumericRangeControl numericRangeControl1;
+    private NumericRangeControl numericRangeControl1;
   }
 }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemRangeControl.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemRangeControl.cs	(revision 17406)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemRangeControl.cs	(revision 17410)
@@ -12,10 +12,8 @@
 namespace HeuristicLab.JsonInterface.OptimizerIntegration {
   public partial class JsonItemRangeControl : JsonItemBaseControl {
-    bool isDouble = false;
-    object[] range = new object[2];
-    object[] value = new object[2];
 
-    public JsonItemRangeControl(JsonItemVM vm, bool isDouble) : base(vm) {
+    public JsonItemRangeControl(DoubleRangeVM vm) : base(vm) {
       InitializeComponent();
+      /*
       this.isDouble = isDouble;
       textBoxValueFrom.Text = ((Array)VM.Item.Value).GetValue(0).ToString();
@@ -23,14 +21,8 @@
       textBoxValueFrom.Text = VM.Item.Range.First().ToString();
       textBoxValueTo.Text = VM.Item.Range.Last().ToString();
+      */
     }
-
-    private object Parse(string s) {
-      if (isDouble) {
-        if (s == "-1,79769313486232E+308") return double.MinValue;
-        if (s == "1,79769313486232E+308") return double.MaxValue;
-        return double.Parse(s.Replace(",", "."), NumberStyles.Any, CultureInfo.InvariantCulture);
-      }
-      return int.Parse(s);
-    }
+    /*
+    protected abstract object Parse(string s);
 
     private void SetValue() {
@@ -59,4 +51,5 @@
       numericRangeControl1.VM = VM;
     }
+    */
   }
 }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValidValuesControl.Designer.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValidValuesControl.Designer.cs	(revision 17406)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValidValuesControl.Designer.cs	(revision 17410)
@@ -92,5 +92,4 @@
       this.Name = "JsonItemValidValuesControl";
       this.Size = new System.Drawing.Size(500, 290);
-      this.Load += new System.EventHandler(this.JsonItemValidValuesControl_Load);
       this.Controls.SetChildIndex(this.groupBoxRange, 0);
       this.Controls.SetChildIndex(this.comboBoxValues, 0);
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValidValuesControl.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValidValuesControl.cs	(revision 17406)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValidValuesControl.cs	(revision 17410)
@@ -11,8 +11,8 @@
 namespace HeuristicLab.JsonInterface.OptimizerIntegration {
   public partial class JsonItemValidValuesControl : JsonItemBaseControl {
-   
 
-    public JsonItemValidValuesControl(JsonItemVM vm) : base(vm) {
+    public JsonItemValidValuesControl(StringValueVM vm) : base(vm) {
       InitializeComponent();
+      /*
       foreach (var i in VM.Item.Range) {
         AddOption((string)i);
@@ -20,8 +20,7 @@
           comboBoxValues.SelectedItem = (string)i;
         }
-      }
-
+      }*/
     }
-
+    /*
     private void AddOption(string opt) {
       AddComboOption(opt);
@@ -72,4 +71,5 @@
 
     }
+    */
   }
 }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValueControl.Designer.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValueControl.Designer.cs	(revision 17406)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValueControl.Designer.cs	(revision 17410)
@@ -26,5 +26,5 @@
       this.textBoxValue = new System.Windows.Forms.TextBox();
       this.label2 = new System.Windows.Forms.Label();
-      this.numericRangeControl1 = new HeuristicLab.JsonInterface.OptimizerIntegration.Shared.NumericRangeControl();
+      this.numericRangeControl1 = new HeuristicLab.JsonInterface.OptimizerIntegration.NumericRangeControl();
       this.SuspendLayout();
       // 
@@ -37,5 +37,4 @@
       this.textBoxValue.Size = new System.Drawing.Size(404, 20);
       this.textBoxValue.TabIndex = 14;
-      this.textBoxValue.Leave += new System.EventHandler(this.textBoxValue_Leave);
       // 
       // label2
@@ -56,5 +55,4 @@
       this.numericRangeControl1.TabIndex = 16;
       this.numericRangeControl1.VM = null;
-      this.numericRangeControl1.Load += new System.EventHandler(this.numericRangeControl1_Load);
       // 
       // JsonItemValueControl
@@ -79,5 +77,5 @@
     private System.Windows.Forms.TextBox textBoxValue;
     private System.Windows.Forms.Label label2;
-    private Shared.NumericRangeControl numericRangeControl1;
+    private NumericRangeControl numericRangeControl1;
   }
 }
Index: branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValueControl.cs
===================================================================
--- branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValueControl.cs	(revision 17406)
+++ branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValueControl.cs	(revision 17410)
@@ -11,33 +11,26 @@
 
 namespace HeuristicLab.JsonInterface.OptimizerIntegration {
-  public partial class JsonItemValueControl : JsonItemBaseControl {
-    bool isDouble = false;
-    object[] range = new object[2];
 
-    public JsonItemValueControl(JsonItemVM vm, bool isDouble) : base(vm) {
-      InitializeComponent();
-      this.isDouble = isDouble;
-      textBoxValue.Text = VM.Item.Value.ToString();
-      range[0] = VM.Item.Range.First();
-      range[1] = VM.Item.Range.Last();
+  public class JsonItemIntValueControl : JsonItemValueControl {
+
+    public JsonItemIntValueControl(SingleValueVM<int> vm) : base(vm) { }
+
+  }
+
+  public class JsonItemDoubleValueControl : JsonItemValueControl {
+    private SingleValueVM<double> VM { get; set; }
+
+    public JsonItemDoubleValueControl(SingleValueVM<double> vm) : base(vm) {
+      VM = vm;
     }
 
-    private object Parse(string s) {
-      if (isDouble) {
-        return double.Parse(s.Replace(",", "."), NumberStyles.Any, CultureInfo.InvariantCulture);
-      }
-      return int.Parse(s);
+  }
+
+  public abstract partial class JsonItemValueControl : JsonItemBaseControl {
+
+    public JsonItemValueControl(JsonItemVMBase vm) : base(vm) {
+      InitializeComponent();
     }
 
-
-    private void textBoxValue_Leave(object sender, EventArgs e) {
-      if (!string.IsNullOrWhiteSpace(textBoxValue.Text))
-        VM.Item.Value = Parse(textBoxValue.Text);
-    }
-
-    private void numericRangeControl1_Load(object sender, EventArgs e) {
-      numericRangeControl1.IsDouble = isDouble;
-      numericRangeControl1.VM = VM;
-    }
   }
 }
