Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Constants.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Constants.cs	(revision 17378)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Constants.cs	(revision 17379)
@@ -14,16 +14,14 @@
     internal const string Algorithm = "Algorithm";
     internal const string Problem = "Problem";
-    internal const string Objects = "Objects";
-    internal const string Types = "Types";
-    internal const string StaticParameters = "StaticParameters";
-    internal const string FreeParameters = "FreeParameters";
+    internal const string HLFileLocation = "HLFileLocation";
+    internal const string Parameters = "Parameters";
 
     internal const string Template = @"{
-      'Metadata': {
-        'Algorithm':'',
-        'Problem':''
+      '" + Metadata + @"': {
+        '" + Algorithm + @"':'',
+        '" + Problem + @"':'',
+        '" + HLFileLocation + @"':''
       },
-      'Objects': [],
-      'Types': {}
+      '" + Parameters + @"': []
     }";
   }
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/BaseConverter.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/BaseConverter.cs	(revision 17378)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/BaseConverter.cs	(revision 17379)
@@ -12,7 +12,4 @@
   {
     public void Inject(IItem item, JsonItem data) {
-      if (data.Reference != null) {
-        JsonItem.Merge(data, data.Reference);
-      }
       InjectData(item, data);
     }
@@ -21,5 +18,4 @@
       JsonItem data = ExtractData(value);
       data.Name = string.IsNullOrEmpty(data.Name) ? value.ItemName : data.Name;
-      data.Type = string.IsNullOrEmpty(data.Type) ? value.GetType().AssemblyQualifiedName : data.Type;
       return data;
     }
@@ -31,5 +27,5 @@
     protected ValueType CastValue<ValueType>(object obj) {
       if (obj is JToken)
-        return (obj.Cast<JToken>()).ToObject<ValueType>();
+        return obj.Cast<JToken>().ToObject<ValueType>();
       else if (obj is IConvertible)
         return Convert.ChangeType(obj, typeof(ValueType)).Cast<ValueType>();
@@ -49,14 +45,14 @@
 
       switch (typeCode) {
-        case TypeCode.Int16: return Int16.MaxValue;
-        case TypeCode.Int32: return Int32.MaxValue;
-        case TypeCode.Int64: return Int64.MaxValue;
-        case TypeCode.UInt16: return UInt16.MaxValue;
-        case TypeCode.UInt32: return UInt32.MaxValue;
-        case TypeCode.UInt64: return UInt64.MaxValue;
-        case TypeCode.Single: return Single.MaxValue;
-        case TypeCode.Double: return Double.MaxValue;
-        case TypeCode.Decimal: return Decimal.MaxValue;
-        case TypeCode.Byte: return Byte.MaxValue;
+        case TypeCode.Int16: return short.MaxValue;
+        case TypeCode.Int32: return int.MaxValue;
+        case TypeCode.Int64: return long.MaxValue;
+        case TypeCode.UInt16: return ushort.MaxValue;
+        case TypeCode.UInt32: return uint.MaxValue;
+        case TypeCode.UInt64: return ulong.MaxValue;
+        case TypeCode.Single: return float.MaxValue;
+        case TypeCode.Double: return double.MaxValue;
+        case TypeCode.Decimal: return decimal.MaxValue;
+        case TypeCode.Byte: return byte.MaxValue;
         case TypeCode.Boolean: return true;
         default: return GetDefaultValue(t);
@@ -71,14 +67,14 @@
 
       switch (typeCode) {
-        case TypeCode.Int16: return Int16.MinValue;
-        case TypeCode.Int32: return Int32.MinValue;
-        case TypeCode.Int64: return Int64.MinValue;
-        case TypeCode.UInt16: return UInt16.MinValue;
-        case TypeCode.UInt32: return UInt32.MinValue;
-        case TypeCode.UInt64: return UInt64.MinValue;
-        case TypeCode.Single: return Single.MinValue;
-        case TypeCode.Double: return Double.MinValue;
-        case TypeCode.Decimal: return Decimal.MinValue;
-        case TypeCode.Byte: return Byte.MinValue;
+        case TypeCode.Int16: return short.MinValue;
+        case TypeCode.Int32: return int.MinValue;
+        case TypeCode.Int64: return long.MinValue;
+        case TypeCode.UInt16: return ushort.MinValue;
+        case TypeCode.UInt32: return uint.MinValue;
+        case TypeCode.UInt64: return ulong.MinValue;
+        case TypeCode.Single: return float.MinValue;
+        case TypeCode.Double: return double.MinValue;
+        case TypeCode.Decimal: return decimal.MinValue;
+        case TypeCode.Byte: return byte.MinValue;
         case TypeCode.Boolean: return false;
         default: return GetDefaultValue(t);
@@ -87,5 +83,4 @@
 
     protected object GetDefaultValue(Type t) => t.IsValueType ? Activator.CreateInstance(t) : null;
-
     #endregion
   }
Index: anches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/CheckedItemListConverter.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/CheckedItemListConverter.cs	(revision 17378)
+++ 	(revision )
@@ -1,40 +1,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using HeuristicLab.Core;
-
-namespace HeuristicLab.JsonInterface.Converters {
-  public class CheckedItemListConverter : BaseConverter {
-    public override JsonItem ExtractData(IItem value) {
-      /*
-      ICheckedItemList<IItem> list = value as ICheckedItemList<IItem>;
-
-      IList<JsonItem> items = new List<JsonItem>();
-
-      foreach(var i in list) {
-        items.Add(new JsonItem() {
-          Name = op.Name,
-          Value = val.Operators.ItemChecked(op),
-          Range = new object[] { false, true },
-          Path = data.Path + "." + op.Name
-        });
-      }
-      list.ItemChecked
-
-      data.Operators.Add(new JsonItem() {
-        Name = op.Name,
-        Value = val.Operators.ItemChecked(op),
-        Range = new object[] { false, true },
-        Path = data.Path + "." + op.Name
-      });
-      */
-      throw new NotImplementedException();
-    }
-
-    public override void InjectData(IItem item, JsonItem data) {
-      throw new NotImplementedException();
-    }
-  }
-}
Index: anches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ConfigurableConverter.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ConfigurableConverter.cs	(revision 17378)
+++ 	(revision )
@@ -1,203 +1,0 @@
-﻿using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Linq;
-using System.Reflection;
-using System.Text;
-using System.Threading.Tasks;
-using HeuristicLab.Core;
-
-
-using DefaultValueCb = System.Func<object>;
-using RangeCb = System.Func<object[]>;
-using ExtractCb = System.Func<object, System.Type, System.Collections.Generic.IEnumerable<HeuristicLab.JsonInterface.JsonItem>>;
-
-namespace HeuristicLab.JsonInterface {
-
-  /* 
-   * Converter der mit Hilfe einer Konfiguration einen Typen
-   * konvertieren kann. In einer Konfiguration sollten (als String)
-   * die Properties/Fields stehen, welche er zur Umwandlung benutzt.
-   * Wenn nur ein Property/Field konfiguriert ist, wird ein einfaches
-   * JsonItem erstellt. Bei mehreren Properties/Fields werden diese
-   * Daten als Parameter eingefügt. 
-   * 
-   */
-
-  public enum ElementType { None, Property, Field }
-
-  public class ConfigurableConverter : BaseConverter {
-    public class Config {
-      public string ElementName { get; set; }
-      public ElementType ElementType { get; set; }
-      public DefaultValueCb DefaultValue { get; set; }
-      public RangeCb Range { get; set; }
-      public ExtractCb Extract { get; set; }
-    }
-
-    private const BindingFlags flags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance;
-    
-    private IDictionary<string, Config> PConfigs { get; set; }
-      = new Dictionary<string, Config>();
-
-    private IDictionary<string, Config> FConfigs { get; set; }
-      = new Dictionary<string, Config>();
-
-    private IList<Config> TConfigs { get; set; } = new List<Config>();
-
-
-    public ConfigurableConverter Primitive(string elementName, ElementType elementType, object defaultValue, params object[] range) =>
-      Primitive(elementName, elementType, () => defaultValue, () => range);
-
-    public ConfigurableConverter Primitive(string elementName, ElementType elementType, DefaultValueCb defaultValue) =>
-      Primitive(elementName, elementType, defaultValue, () => new object[] { });
-
-    public ConfigurableConverter Primitive(string elementName, ElementType elementType, DefaultValueCb defaultValue, RangeCb range) =>
-      Add(elementName, elementType, defaultValue, range, (o,t) => {
-        if (!t.IsPrimitive)
-          throw new InvalidCastException($"Type {t.Name} is not a primitive type!");
-        return new JsonItem[] {
-          new JsonItem() {
-            Name = elementName,
-            Value = o,
-            Range = range().Length == 0 ? 
-              new object[] { GetMinValue(t), GetMaxValue(t) } : 
-              range()
-          }
-        };
-      });
-
-    public ConfigurableConverter IItem(string elementName, DefaultValueCb defaultValue, RangeCb range, ElementType elementType) =>
-      Add(elementName, elementType, defaultValue, range, (o,t) => {
-        if (!t.IsEqualTo(typeof(IItem)))
-          throw new InvalidCastException($"Type {t.Name} is not an IItem!");
-        return new JsonItem[] {
-          JsonItemConverter.Extract(o as IItem)
-        };
-      });
-
-    public ConfigurableConverter Enumerable(string elementName, ElementType elementType, ExtractCb extract) =>
-      Add(elementName, elementType, null, null, (o,t) => {
-        if (!t.IsEqualTo(typeof(IEnumerable)))
-          throw new InvalidCastException($"Type {t.Name} is not an IEnumerable!");
-        List<JsonItem> items = new List<JsonItem>();
-        foreach(var x in (o as IEnumerable)) 
-          items.AddRange(extract(x,x.GetType()));
-        return items;
-      });
-
-    public ConfigurableConverter PrimitiveEnumerable(string elementName, ElementType elementType, object defaultValue) =>
-      PrimitiveEnumerable(elementName, elementType, () => defaultValue);
-
-    public ConfigurableConverter PrimitiveEnumerable(string elementName, ElementType elementType, DefaultValueCb defaultValue) =>
-      Add(elementName, elementType, defaultValue, null, (o,t) => {
-        if (!t.IsEqualTo(typeof(IEnumerable)))
-          throw new InvalidCastException($"Type {t.Name} is not an IEnumerable!");
-
-        return new JsonItem[] {
-            new JsonItem() {
-              Name = elementName,
-              Value = o != null ? o : defaultValue()
-            }
-          };
-      });
-
-    public ConfigurableConverter This(ExtractCb extract) =>
-      Add(null, ElementType.None, null, null, extract);
-
-    public ConfigurableConverter Add(string elementName, ElementType elementType, DefaultValueCb defaultValue, RangeCb range, ExtractCb extract)
-      => Add(new Config() { ElementName = elementName, 
-                            ElementType = elementType,
-                            DefaultValue = defaultValue,
-                            Range = range,
-                            Extract = extract 
-                          });
-
-    public ConfigurableConverter Add(Config config) {
-      switch(config.ElementType) {
-        case ElementType.None:
-          TConfigs.Add(config);
-          break;
-        case ElementType.Field:
-          FConfigs.Add(config.ElementName, config);
-          break;
-        case ElementType.Property:
-          PConfigs.Add(config.ElementName, config);
-          break;
-      }
-      return this;
-    }
-
-    public override JsonItem ExtractData(IItem value) {
-      List<JsonItem> parameters = new List<JsonItem>();
-      Type type = value.GetType();
-
-      // Properties
-      parameters.AddRange(IterateMemberInfo(value, type.GetProperties(flags), s => { 
-        return PConfigs.TryGetValue(s, out Config c) ? c : null; 
-      }));
-
-      // Fields
-      parameters.AddRange(IterateMemberInfo(value, type.GetFields(flags), s => { 
-        return FConfigs.TryGetValue(s, out Config c) ? c : null; 
-      }));
-
-      // This Calls
-      foreach (var c in TConfigs)
-        parameters.AddRange(c.Extract(value, value.GetType()));
-
-      JsonItem item = new JsonItem() {
-        Parameters = parameters,
-        Path = value.ItemName,
-        Type = type.AssemblyQualifiedName
-      };
-
-      item.UpdatePath();
-
-      return item;
-    }
-
-    public override void InjectData(IItem item, JsonItem data) {
-      throw new NotImplementedException();
-    }
-
-    private IEnumerable<JsonItem> IterateMemberInfo(IItem item, IEnumerable<MemberInfo> infos, Func<string, Config> selector) {
-      List<JsonItem> parameters = new List<JsonItem>();
-      foreach(var info in infos) {
-        Config config = selector(info.Name);
-        if (config != null) {
-          object o = GetValue(info, item);
-          parameters.AddRange(config.Extract(o, GetType(info)));
-        }
-      }
-      return parameters;
-    }
-
-    private JsonItem ConvertPrimitive(string name, object obj) =>
-      new JsonItem() {
-        Name = name,
-        Value = obj
-      };
-
-    private object GetValue(MemberInfo info, object obj) {
-      switch (info.MemberType) {
-        case MemberTypes.Field:
-          return (info as FieldInfo).GetValue(obj);
-        case MemberTypes.Property:
-          PropertyInfo pi = info as PropertyInfo;
-          return (pi != null && pi.CanRead) ? pi.GetValue(obj) : null;
-        default: return null;
-      }
-    }
-
-    private Type GetType(MemberInfo info) {
-      switch (info.MemberType) {
-        case MemberTypes.Field:
-          return (info as FieldInfo).FieldType;
-        case MemberTypes.Property:
-          return (info as PropertyInfo).PropertyType;
-        default: return null;
-      }
-    }
-  }
-}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ConstrainedValueParameterConverter.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ConstrainedValueParameterConverter.cs	(revision 17378)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ConstrainedValueParameterConverter.cs	(revision 17379)
@@ -14,6 +14,10 @@
           parameter.ActualValue = x;
 
-      if (parameter.ActualValue is IParameterizedItem && data.Reference != null)
-        JsonItemConverter.Inject(parameter.ActualValue, data.Reference);
+      if (parameter.ActualValue is IParameterizedItem && data.Children != null) {
+        foreach(var param in data.Children) {
+          if(param.Name == parameter.ActualValue.ItemName)
+            JsonItemConverter.Inject(parameter.ActualValue, param);
+        }
+      }
     }
 
@@ -23,5 +27,5 @@
         Value = value.ActualValue?.ToString(),
         Range = GetValidValues(value).Select(x => x.ToString()),
-        Parameters = GetParameterizedChilds(value)
+        Children = GetParameterizedChilds(value)
       };
 
Index: anches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ItemCollectionConverter.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ItemCollectionConverter.cs	(revision 17378)
+++ 	(revision )
@@ -1,31 +1,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using HeuristicLab.Core;
-
-namespace HeuristicLab.JsonInterface.Converters {
-  public class ItemCollectionConverter : BaseConverter {
-    public override JsonItem ExtractData(IItem value) {
-      IItemCollection<IItem> col = value as IItemCollection<IItem>;
-      IList<JsonItem> items = new List<JsonItem>();
-
-      foreach (var x in col)
-        items.Add(JsonItemConverter.Extract(x));
-
-      return new JsonItem() {
-        Parameters = items
-      };
-    }
-
-    public override void InjectData(IItem item, JsonItem data) {
-      IItemCollection<IItem> col = item as IItemCollection<IItem>;
-      foreach (var x in data.Parameters) {
-        IItem tmp = Instantiate(col.GetType().GetGenericArguments()[0]);
-        JsonItemConverter.Inject(tmp, x);
-        col.Add(tmp);
-      }
-    }
-  }
-}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/MultiCheckedOperatorConverter.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/MultiCheckedOperatorConverter.cs	(revision 17378)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/MultiCheckedOperatorConverter.cs	(revision 17379)
@@ -12,13 +12,12 @@
       JsonItem data = base.ExtractData(value);
 
-      if(data.Parameters == null)
-        data.Parameters = new List<JsonItem>();
+      if(data.Children == null)
+        data.Children = new List<JsonItem>();
       dynamic val = value.Cast<dynamic>();
       foreach (var op in val.Operators) {
-        data.Parameters.Add(new JsonItem() {
+        data.Children.Add(new JsonItem() {
           Name = op.Name,
           Value = val.Operators.ItemChecked(op),
-          Range = new object[] { false, true }/*,
-          Path = data.Path + "." + op.Name*/
+          Range = new object[] { false, true }
         });
       }
@@ -35,6 +34,6 @@
 
     private bool GetOperatorState(string name, JsonItem data) {
-      foreach(var op in data.Operators) {
-        if (op.Name == name) return op.Value.Cast<bool>();
+      foreach(var op in data.Children) {
+        if (op.Name == name && op.Value is bool) return op.Value.Cast<bool>();
       }
       return false;
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ParameterBaseConverter.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ParameterBaseConverter.cs	(revision 17378)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ParameterBaseConverter.cs	(revision 17379)
@@ -8,9 +8,7 @@
 namespace HeuristicLab.JsonInterface {
   public abstract class ParameterBaseConverter : BaseConverter {
-    public override JsonItem ExtractData(IItem value) {
-      IParameter param = value.Cast<IParameter>();
-      JsonItem comp = ExtractData(param);
-      return comp;
-    }
+    public override JsonItem ExtractData(IItem value) => 
+      ExtractData(value.Cast<IParameter>());
+
     public abstract JsonItem ExtractData(IParameter value);
 
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ParameterizedItemConverter.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ParameterizedItemConverter.cs	(revision 17378)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ParameterizedItemConverter.cs	(revision 17379)
@@ -11,6 +11,6 @@
       IParameterizedItem pItem = item.Cast<IParameterizedItem>();
 
-      if(data.Parameters != null) {
-        foreach (var sp in data.Parameters)
+      if(data.Children != null) {
+        foreach (var sp in data.Children)
           if (pItem.Parameters.TryGetValue(sp.Name, out IParameter param))
             JsonItemConverter.Inject(param, sp);
@@ -27,7 +27,7 @@
           //data.Name = param.Name;
 
-          if (item.Parameters == null)
-            item.Parameters = new List<JsonItem>();
-          item.Parameters.Add(data);
+          if (item.Children == null)
+            item.Children = new List<JsonItem>();
+          item.Children.Add(data);
         }
       }
Index: anches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/PrimitiveConverter.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/PrimitiveConverter.cs	(revision 17378)
+++ 	(revision )
@@ -1,18 +1,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using HeuristicLab.Core;
-
-namespace HeuristicLab.JsonInterface.Converters {
-  public class PrimitiveConverter<T> : BaseConverter where T : struct {
-    public override JsonItem ExtractData(IItem value) {
-      throw new NotImplementedException();
-    }
-
-    public override void InjectData(IItem item, JsonItem data) {
-      throw new NotImplementedException();
-    }
-  }
-}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/RegressionProblemDataConverter.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/RegressionProblemDataConverter.cs	(revision 17378)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/RegressionProblemDataConverter.cs	(revision 17379)
@@ -14,9 +14,7 @@
       JsonItem item = new JsonItem() {
         Path = value.ItemName,
-        Parameters = new List<JsonItem>()
+        Children = new List<JsonItem>()
       };
-
-      Type type = value.GetType();
-
+      
       dynamic val = (dynamic)value;
       object dataset = (object)val.Dataset;
@@ -24,5 +22,5 @@
       FieldInfo dataInfo = dataset.GetType().GetField("storableData", flags);
       // TODO: aufteilen in trainings und test daten abschnitte
-      item.Parameters.Add(new JsonItem() {
+      item.Children.Add(new JsonItem() {
         Name = "Dataset",
         Value = dataInfo.GetValue(dataset),
@@ -31,5 +29,5 @@
 
       IEnumerable<StringValue> variables = (IEnumerable<StringValue>)val.InputVariables;
-      item.Parameters.Add(new JsonItem() {
+      item.Children.Add(new JsonItem() {
         Name = "TargetVariable",
         Value = (object)targetVariable,
@@ -39,5 +37,5 @@
 
 
-      item.Parameters.Add(new JsonItem() {
+      item.Children.Add(new JsonItem() {
         Name = "AllowedInputVariables",
         Value = (object)val.AllowedInputVariables,
@@ -46,11 +44,4 @@
       });
 
-      /*
-      item.Parameters.Add(new JsonItem() {
-        Name = "InputVariables",
-        Value = variables.Select(x => x.Value),
-        Path = "InputVariables"
-      });
-      */
       item.UpdatePath();
 
@@ -59,4 +50,5 @@
 
     public override void InjectData(IItem item, JsonItem data) {
+      // TODO: inject data
       throw new NotImplementedException();
     }
Index: anches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/StorableConverter.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/StorableConverter.cs	(revision 17378)
+++ 	(revision )
@@ -1,231 +1,0 @@
-﻿using System;
-using HEAL.Attic;
-using System.Collections.Generic;
-using HeuristicLab.Common;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using HeuristicLab.Core;
-using System.Reflection;
-using HeuristicLab.Data;
-using System.Collections;
-
-namespace HeuristicLab.JsonInterface {
-
-
-  public class StorableConverter {
-    private const BindingFlags flags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly;
-
-    //private IDictionary<Type, >
-
-
-    private bool Filter(MemberInfo info) => info.Name != "ItemName" && info.Name != "ItemDescription" && info.Name != "name" && info.Name != "description";
-
-    private Stack<Tuple<JsonItem, object, Type, string>> stack = new Stack<Tuple<JsonItem, object, Type, string>>();
-    private IDictionary<int, JsonItem> hashToObject = new Dictionary<int, JsonItem>();
-
-    public JsonItem ExtractHelper(object obj, Type type, string name = "") {
-      JsonItem item = new JsonItem() {
-        Parameters = new List<JsonItem>()
-      };
-
-      
-
-      item.Type = type.AssemblyQualifiedName;
-
-      if (obj != null && obj is IItem)
-        item.Name = (obj as IItem).ItemName;
-      else if (!string.IsNullOrEmpty(name))
-        item.Name = name;
-      else
-        item.Name = type.Name;
-
-      hashToObject.Add(obj.GetHashCode(), item);
-
-      item.Path = item.Name;
-
-      if (obj == null) return item;
-
-      if (StorableTypeAttribute.IsStorableType(type)) {
-        do {
-          foreach (var property in type.GetProperties(flags)) {
-            if (StorableAttribute.IsStorable(property) && Filter(property)) {
-              object tmp = GetValue(property, obj);
-              if (tmp != null && !hashToObject.ContainsKey(tmp.GetHashCode()))
-                item.Parameters.Add(ExtractHelper(tmp, tmp != null ? tmp.GetType() : property.PropertyType, property.Name));
-            }
-          }
-
-          foreach (var field in type.GetFields(flags)) {
-            if (StorableAttribute.IsStorable(field) && Filter(field)) {
-              object tmp = GetValue(field, obj);
-              if (tmp != null && !hashToObject.ContainsKey(tmp.GetHashCode()))
-                item.Parameters.Add(ExtractHelper(tmp, tmp != null ? tmp.GetType() : field.FieldType, field.Name));
-            }
-          }
-
-          type = type.BaseType;
-        } while (type != null);
-      } else if (
-          type.IsEqualTo(typeof(short))
-          || type.IsEqualTo(typeof(int))
-          || type.IsEqualTo(typeof(long))
-          || type.IsEqualTo(typeof(ushort))
-          || type.IsEqualTo(typeof(uint))
-          || type.IsEqualTo(typeof(ulong))
-          || type.IsEqualTo(typeof(float))
-          || type.IsEqualTo(typeof(double))
-          || type.IsEqualTo(typeof(bool))
-      ) {
-        item.Value = obj;
-        item.Range = new object[] { GetMinValue(type), GetMaxValue(type) };
-      } else if (type.IsEqualTo(typeof(IDictionary))) {
-        if (obj != null) {
-          foreach (DictionaryEntry i in (IDictionary)obj) {
-            if (i.Key is string) {
-              if (!hashToObject.ContainsKey(i.Value.GetHashCode()))
-                item.Parameters.Add(ExtractHelper(i.Value, i.Value.GetType()));
-            }
-          }
-        }
-      } else if(type.IsEqualTo(typeof(IList))) {
-        foreach (var i in (IList)obj) {
-          if (!hashToObject.ContainsKey(i.GetHashCode()))
-            item.Parameters.Add(ExtractHelper(i, i.GetType()));
-        }
-      } else if(type.IsEqualTo(typeof(KeyValuePair<,>))) {
-        dynamic tmp = (dynamic)obj;
-        object key = (object)tmp.Key;
-        object value = (object)tmp.Value;
-        if (!hashToObject.ContainsKey(key.GetHashCode()))
-          item.Parameters.Add(ExtractHelper(key, key.GetType()));
-
-        if (!hashToObject.ContainsKey(value.GetHashCode()))
-          item.Parameters.Add(ExtractHelper(value, value.GetType()));
-
-      } else if(type.IsEqualTo(typeof(string))) {
-        item.Value = obj;
-
-      } else if(type.IsEqualTo(typeof(Array))) {
-        foreach (var i in (Array)obj) {
-          if (!hashToObject.ContainsKey(i.GetHashCode()))
-            item.Parameters.Add(ExtractHelper(i, i.GetType()));
-        }
-      } else if(type.IsEqualTo(typeof(Tuple<,>))) {
-        dynamic tmp = (dynamic)obj;
-        object key = (object)tmp.Item1;
-        object value = (object)tmp.Item2;
-        if (!hashToObject.ContainsKey(key.GetHashCode()))
-          item.Parameters.Add(ExtractHelper(key, key.GetType()));
-
-        if (!hashToObject.ContainsKey(value.GetHashCode()))
-          item.Parameters.Add(ExtractHelper(value, value.GetType()));
-
-      } else if (type.IsEqualTo(typeof(IEnumerable))) {
-        foreach (var i in (IEnumerable)obj) {
-          if (!hashToObject.ContainsKey(i.GetHashCode()))
-            item.Parameters.Add(ExtractHelper(i, i.GetType()));
-        }
-      }
-
-
-      item.UpdatePath();
-      return item;
-    }
-
-    public JsonItem Extract(object obj) {
-      return ExtractHelper(obj, obj.GetType());
-    }
-
-    /*
-    public override JsonItem ExtractData(IItem value) {
-      Type type = value.GetType();
-
-      JsonItem item = new JsonItem() {
-        Name = value.ItemName,
-        Path = value.ItemName,
-        Value = ".",
-        Type = value.GetType().AssemblyQualifiedName
-      };
-      item.Parameters = new List<JsonItem>();
-
-      
-      do {
-        foreach (var property in type.GetProperties(flags)) {
-          ExtractFromMemberInfo(property, value, item);
-        }
-
-        foreach (var field in type.GetFields(flags)) {
-          ExtractFromMemberInfo(field, value, item);
-        }
-
-        type = type.BaseType;
-      } while (type != null);
-
-
-      return item;
-    }
-    
-    public override void InjectData(IItem item, JsonItem data) {
-      throw new NotImplementedException();
-    }
-    */
-
-    private object GetValue(MemberInfo info, object obj) {
-      switch(info.MemberType) {
-        case MemberTypes.Field:
-          return ((FieldInfo)info).GetValue(obj);
-        case MemberTypes.Property:
-          return ((PropertyInfo)info).CanRead ? ((PropertyInfo)info).GetValue(obj) : null;
-        default: return null;
-      }
-    }
-
-    private object GetMaxValue(Type t) {
-      TypeCode typeCode = Type.GetTypeCode(t);
-
-      if (typeof(ValueType).IsEqualTo(typeof(PercentValue)))
-        return 1.0d;
-
-      switch (typeCode) {
-        case TypeCode.Int16: return Int16.MaxValue;
-        case TypeCode.Int32: return Int32.MaxValue;
-        case TypeCode.Int64: return Int64.MaxValue;
-        case TypeCode.UInt16: return UInt16.MaxValue;
-        case TypeCode.UInt32: return UInt32.MaxValue;
-        case TypeCode.UInt64: return UInt64.MaxValue;
-        case TypeCode.Single: return Single.MaxValue;
-        case TypeCode.Double: return Double.MaxValue;
-        case TypeCode.Decimal: return Decimal.MaxValue;
-        case TypeCode.Byte: return Byte.MaxValue;
-        case TypeCode.Boolean: return true;
-        default: return GetDefaultValue(t);
-      }
-    }
-
-    private object GetMinValue(Type t) {
-      TypeCode typeCode = Type.GetTypeCode(t);
-
-      if (typeof(ValueType).IsEqualTo(typeof(PercentValue)))
-        return 0.0d;
-
-      switch (typeCode) {
-        case TypeCode.Int16: return Int16.MinValue;
-        case TypeCode.Int32: return Int32.MinValue;
-        case TypeCode.Int64: return Int64.MinValue;
-        case TypeCode.UInt16: return UInt16.MinValue;
-        case TypeCode.UInt32: return UInt32.MinValue;
-        case TypeCode.UInt64: return UInt64.MinValue;
-        case TypeCode.Single: return Single.MinValue;
-        case TypeCode.Double: return Double.MinValue;
-        case TypeCode.Decimal: return Decimal.MinValue;
-        case TypeCode.Byte: return Byte.MinValue;
-        case TypeCode.Boolean: return false;
-        default: return GetDefaultValue(t);
-      }
-    }
-
-    private object GetDefaultValue(Type t) => t.IsValueType ? Activator.CreateInstance(t) : null;
-
-  }
-}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueLookupParameterConverter.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueLookupParameterConverter.cs	(revision 17378)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueLookupParameterConverter.cs	(revision 17379)
@@ -16,5 +16,8 @@
         actualValue = tmp.Value;
         actualRange = tmp.Range;
+      } else {
+        actualRange = new object[] { GetMinValue(param.DataType), GetMaxValue(param.DataType) };
       }
+
       return new JsonItem() {
         Name = value.Name,
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueRangeConverter.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueRangeConverter.cs	(revision 17378)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueRangeConverter.cs	(revision 17379)
@@ -19,6 +19,8 @@
     where TType : struct {
 
+    private const BindingFlags Flags = BindingFlags.NonPublic | BindingFlags.Instance;
+
     public override JsonItem ExtractData(IItem value) {
-      var field = value.GetType().GetField("values", BindingFlags.NonPublic | BindingFlags.Instance);
+      var field = value.GetType().GetField("values", Flags);
       Tuple<T,T> tuple = (Tuple<T,T>)field.GetValue(value);
 
@@ -34,5 +36,5 @@
       object[] arr = (object[])data.Value;
       Tuple<T,T> tuple = new Tuple<T,T>(Instantiate<T>(arr[0]), Instantiate<T>(arr[1]));
-      var field = item.GetType().GetField("values", BindingFlags.NonPublic | BindingFlags.Instance);
+      var field = item.GetType().GetField("values", Flags);
       field.SetValue(tuple, item);
     }
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueTypeMatrixConverter.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueTypeMatrixConverter.cs	(revision 17378)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/ValueTypeMatrixConverter.cs	(revision 17379)
@@ -14,5 +14,5 @@
   {
     public override void InjectData(IItem item, JsonItem data) => 
-      CopyMatrixData(item.Cast<MatrixType>(), CastValue<T[,]>(data.Value));
+      CopyMatrixData(item.Cast<MatrixType>(), data.Value);
 
     public override JsonItem ExtractData(IItem value) =>
@@ -23,13 +23,19 @@
 
     #region Helper
-    private void CopyMatrixData(MatrixType matrix, T[,] data) {
-      var rowInfo = matrix.GetType().GetProperty("Rows");
-      rowInfo.SetValue(matrix, data.GetLength(0));
-      var colInfo = matrix.GetType().GetProperty("Columns");
-      colInfo.SetValue(matrix, data.GetLength(1));
+    private void CopyMatrixData(MatrixType matrix, object data) {
+      if (data is Array arr) {
+        var rows = arr.Length;
+        var cols = arr.Length > 0 && arr.GetValue(0) is JArray jarr ? jarr.Count : 0;
 
-      for (int x = 0; x < data.GetLength(0); ++x) {
-        for (int y = 0; y < data.GetLength(1); ++y) {
-          matrix[x, y] = data[x, y];
+        var rowInfo = matrix.GetType().GetProperty("Rows");
+        rowInfo.SetValue(matrix, rows);
+        var colInfo = matrix.GetType().GetProperty("Columns");
+        colInfo.SetValue(matrix, cols);
+
+        for (int x = 0; x < rows; ++x) {
+          jarr = (JArray)arr.GetValue(x);
+          for (int y = 0; y < cols; ++y) {
+            matrix[x, y] = jarr[y].ToObject<T>();
+          }
         }
       }
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/HeuristicLab.JsonInterface.csproj
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/HeuristicLab.JsonInterface.csproj	(revision 17378)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/HeuristicLab.JsonInterface.csproj	(revision 17379)
@@ -63,10 +63,5 @@
     <Compile Include="Attributes\ConvertableAttribute.cs" />
     <Compile Include="Constants.cs" />
-    <Compile Include="Converters\CheckedItemListConverter.cs" />
-    <Compile Include="Converters\ConfigurableConverter.cs" />
-    <Compile Include="Converters\ItemCollectionConverter.cs" />
-    <Compile Include="Converters\PrimitiveConverter.cs" />
     <Compile Include="Converters\RegressionProblemDataConverter.cs" />
-    <Compile Include="Converters\StorableConverter.cs" />
     <Compile Include="Converters\ValueLookupParameterConverter.cs" />
     <Compile Include="Converters\ValueRangeConverter.cs" />
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JCGenerator.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JCGenerator.cs	(revision 17378)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JCGenerator.cs	(revision 17379)
@@ -17,5 +17,4 @@
     private struct GenData {
       public JObject Template { get; set; }
-      public IDictionary<string, string> TypeList { get; set; }
       public JArray JsonItems { get; set; }
     }
@@ -25,5 +24,4 @@
       GenData genData = new GenData() {
         Template = JObject.Parse(Constants.Template),
-        TypeList = new Dictionary<string, string>(),
         JsonItems = new JArray()
       };
@@ -31,19 +29,17 @@
       ProtoBufSerializer serializer = new ProtoBufSerializer();
       serializer.Serialize(algorithm, @"C:\Workspace\template.hl");
-      
+      genData.Template[Constants.Metadata][Constants.HLFileLocation] = @"C:\Workspace\template.hl";
 
-      // 1.1. extract JsonItem, save the name in the metadata section of the 
+      // extract JsonItem, save the name in the metadata section of the 
       // template and save it an JArray incl. all parameters of the JsonItem, 
       // which have parameters aswell
       AddInstantiableIItem(Constants.Algorithm, algorithm, genData);
       //IsConvertable(algorithm, true);
-      if (algorithm.Problem != null) // 1.2. only when an problem exists
+      if (algorithm.Problem != null) // only when an problem exists
         AddInstantiableIItem(Constants.Problem, algorithm.Problem, genData);
 
-      // 2. save the JArray with JsonItems (= IParameterizedItems)
-      genData.Template[Constants.Objects] = genData.JsonItems;
-      // 3. save the types of the JsonItems (for instatiation)
-      genData.Template[Constants.Types] = JObject.FromObject(genData.TypeList);
-      // 4. serialize template and return string
+      // save the JArray with JsonItems (= IParameterizedItems)
+      genData.Template[Constants.Parameters] = genData.JsonItems;
+      // serialize template and return string
       return CustomJsonWriter.Serialize(genData.Template);
     }
@@ -65,70 +61,20 @@
     // serializes ParameterizedItems and saves them in list "JsonItems".
     private static void PopulateJsonItems(JsonItem item, GenData genData) {
-      if (item.Parameters != null) {
-        foreach (var p in item.Parameters) {
+      IEnumerable<JsonItem> tmpParameter = item.Children;
+      item.Children = null;
+
+      if (item.Value != null || item.Range != null) {
+        genData.JsonItems.Add(Serialize(item));
+      }
+
+      if (tmpParameter != null) {
+        foreach (var p in tmpParameter) {
           PopulateJsonItems(p, genData);
         }
-      }else if (item.Value != null || item.Range != null /*|| item.ActualName != null*/) {
-        genData.JsonItems.Add(Serialize(item, genData));
       }
-      /*
-      if (item.Parameters != null) {
-        if (item.Range == null)
-          genData.JsonItems.Add(Serialize(item, genData));
-        foreach (var p in item.Parameters)
-          if (p.IsParameterizedItem)
-            PopulateJsonItems(p, genData);
-      }*/
     }
 
-    private static JObject Serialize(JsonItem item, GenData genData) {
-      JObject obj = JObject.FromObject(item, Settings());
-      //obj[Constants.StaticParameters] = obj[nameof(JsonItem.Parameters)];
-      //obj[Constants.FreeParameters] = obj[nameof(JsonItem.Parameters)];
-
-      //obj.Property(nameof(JsonItem.Parameters))?.Remove();
-      //RefactorFreeParameters(obj, genData);
-      //RefactorStaticParameters(obj, genData);
-
-      //obj.Property(nameof(JsonItem.Value))?.Remove();
-      obj.Property(nameof(JsonItem.Type))?.Remove();
-
-      if(!genData.TypeList.ContainsKey(item.Path))
-        genData.TypeList.Add(item.Path, item.Type);
-      return obj;
-    }
-
-    // deletes unnecessary properties for free parameters.
-    private static void RefactorFreeParameters(JToken token, GenData genData) {
-      IList<JObject> objToRemove = new List<JObject>();
-      TransformNodes(x => {
-        var p = JsonItem.BuildJsonItem(x, genData.TypeList);
-        x.Property(nameof(JsonItem.Type))?.Remove();
-        x.Property(nameof(JsonItem.Parameters))?.Remove();
-        /*
-        if ((p.Value == null || (p.Value != null && p.Value.GetType() == typeof(string) && p.Range == null) && p.ActualName == null)) {
-          objToRemove.Add(x);
-        } else {
-          x.Property(nameof(JsonItem.Type))?.Remove();
-          x.Property(nameof(JsonItem.Parameters))?.Remove();
-        }*/
-      }, token[Constants.FreeParameters]);
-      //foreach (var x in objToRemove) x.Remove();
-    }
-
-    // deletes unnecessary properties for static parameters.
-    private static void RefactorStaticParameters(JToken token, GenData genData) {
-      IList<JObject> objToRemove = new List<JObject>();
-      TransformNodes(x => {
-        var p = JsonItem.BuildJsonItem(x, genData.TypeList);
-        x.Property(nameof(JsonItem.Range))?.Remove();
-        x.Property(nameof(JsonItem.Operators))?.Remove();
-        x.Property(nameof(JsonItem.Parameters))?.Remove();
-        x.Property(nameof(JsonItem.Type))?.Remove();
-        //TODO: maybe allow JsonItems with Value==null in static parameters too?
-        if (p.Value == null) objToRemove.Add(x); 
-      }, token[Constants.StaticParameters]);
-      //foreach (var x in objToRemove) x.Remove();
-    }
+    private static JObject Serialize(JsonItem item) => 
+      JObject.FromObject(item, Settings());
 
     /// <summary>
@@ -141,9 +87,4 @@
       ReferenceLoopHandling = ReferenceLoopHandling.Serialize
     };
-
-    private static void TransformNodes(Action<JObject> action, params JToken[] tokens) {
-      foreach(JObject obj in tokens.SelectMany(x => x.Children<JObject>()))
-        action(obj);
-    }
     #endregion
   }
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JCInstantiator.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JCInstantiator.cs	(revision 17378)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JCInstantiator.cs	(revision 17379)
@@ -7,4 +7,5 @@
 using System.Text;
 using System.Threading.Tasks;
+using HEAL.Attic;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
@@ -21,7 +22,6 @@
       public JToken Template { get; set; }
       public JArray Config { get; set; }
-      public Dictionary<string, string> TypeList { get; set; }
-      public IDictionary<string, JsonItem> ParameterizedItems { get; set; }
-      public IDictionary<string, JsonItem> ConfigurableItems { get; set; }
+      public IDictionary<string, JsonItem> Objects { get; set; }
+      public IDictionary<string, JsonItem> ResolvedItems { get; set; }
     }
 
@@ -34,46 +34,42 @@
     public static IAlgorithm Instantiate(string templateFile, string configFile = "") {
       InstData instData = new InstData() {
-        TypeList = new Dictionary<string, string>(),
-        ParameterizedItems = new Dictionary<string, JsonItem>(),
-        ConfigurableItems = new Dictionary<string, JsonItem>()
+        Objects = new Dictionary<string, JsonItem>(),
+        ResolvedItems = new Dictionary<string, JsonItem>()
       };
 
-      //1. Parse Template and Config files
+      // parse template and config files
       instData.Template = JToken.Parse(File.ReadAllText(templateFile));
       if(!string.IsNullOrEmpty(configFile))
         instData.Config = JArray.Parse(File.ReadAllText(configFile));
-      instData.TypeList = instData.Template[Constants.Types].ToObject<Dictionary<string, string>>();
+
+      // extract metadata information
       string algorithmName = instData.Template[Constants.Metadata][Constants.Algorithm].ToString();
       string problemName = instData.Template[Constants.Metadata][Constants.Problem].ToString();
+      string hLFileLocation = instData.Template[Constants.Metadata][Constants.HLFileLocation].ToString();
 
-      //2. Collect all parameterizedItems from template
+      // deserialize hl file
+      ProtoBufSerializer serializer = new ProtoBufSerializer();
+      IAlgorithm algorithm = (IAlgorithm)serializer.Deserialize(hLFileLocation);
+
+      // collect all parameterizedItems from template
       CollectParameterizedItems(instData);
 
-      //3. select all ConfigurableItems
-      SelectConfigurableItems(instData);
+      // rebuild tree with paths
+      RebuildTree(instData);
 
-      //4. if config != null -> merge Template and Config 
+      // if config != null -> merge Template and Config 
       if (instData.Config != null)
         MergeTemplateWithConfig(instData);
 
-      //5. resolve the references between parameterizedItems
-      ResolveReferences(instData);
+      // get algorthm data and object
+      JsonItem algorithmData = GetData(algorithmName, instData);
 
-      //6. get algorthm data and object
-      JsonItem algorithmData = GetData(algorithmName, instData);
-      IAlgorithm algorithm = CreateObject<IAlgorithm>(algorithmData, instData);
+      // get problem data and object
+      JsonItem problemData = GetData(problemName, instData);
 
-      //7. get problem data and object
-      JsonItem problemData = GetData(problemName, instData);
-      IProblem problem = CreateObject<IProblem>(problemData, instData);
-      algorithm.Problem = problem;
-
-      //8. inject configuration
+      // inject configuration
       JsonItemConverter.Inject(algorithm, algorithmData);
-      JsonItemConverter.Inject(problem, problemData);
-
-      // TODO: let the engine be configurable
-      if (algorithm is EngineAlgorithm)
-        algorithm.Cast<EngineAlgorithm>().Engine = new SequentialEngine.SequentialEngine();
+      if(algorithm.Problem != null)
+        JsonItemConverter.Inject(algorithm.Problem, problemData);
 
       return algorithm;
@@ -82,50 +78,56 @@
     #region Helper
     private static void CollectParameterizedItems(InstData instData) {
-      foreach (JObject item in instData.Template[Constants.Objects]) {
-        JsonItem data = JsonItem.BuildJsonItem(item, instData.TypeList);
-        instData.ParameterizedItems.Add(data.Path, data);
+      foreach (JObject item in instData.Template[Constants.Parameters]) {
+        JsonItem data = JsonItem.BuildJsonItem(item);
+        instData.Objects.Add(data.Path, data);
       }
     }
+    
+    private static JsonItem RebuildTreeHelper(IList<JsonItem> col, string name) {
+      JsonItem target = null;
+      foreach (var val in col) {
+        if (val.Name == name)
+          target = val;
+      }
+      if (target == null) {
+        target = new JsonItem() {
+          Name = name,
+          Path = name,
+          Children = new List<JsonItem>()
+        };
+        col.Add(target);
+      }
+      return target;
+    }
 
-    private static void SelectConfigurableItems(InstData instData) {
-      foreach (var item in instData.ParameterizedItems.Values) {
-        if (item.Parameters != null)
-          AddConfigurableItems(item.Parameters, instData);
+    // rebuilds item tree with splitting paths of each jsonitem
+    private static void RebuildTree(InstData instData) {
+      List<JsonItem> values = new List<JsonItem>();
+      foreach (var x in instData.Objects) {
+        string[] pathParts = x.Key.Split('.');
+        JsonItem target = RebuildTreeHelper(values, pathParts[0]);
 
-        if (item.Operators != null)
-          AddConfigurableItems(item.Operators, instData);
+        for (int i = 1; i < pathParts.Length; ++i) {
+          target = RebuildTreeHelper(target.Children, pathParts[i]);
+        }
+
+        JsonItem.Merge(target, x.Value);
+      }
+      foreach(var val in values) {
+        instData.ResolvedItems.Add(val.Name, val);
       }
     }
-
-    private static void AddConfigurableItems(IEnumerable<JsonItem> items, InstData instData) {
-      foreach (var item in items)
-        if (item.IsConfigurable)
-          instData.ConfigurableItems.Add(item.Path, item);
-    }
-
-    private static void ResolveReferences(InstData instData) {
-      foreach(var x in instData.ParameterizedItems.Values)
-        foreach (var p in x.Parameters)
-          if (p.Value is string) {
-            string key = p.Path;
-            if (p.Range != null)
-              key = $"{p.Path}.{p.Value.Cast<string>()}";
-
-            if (instData.ParameterizedItems.TryGetValue(key, out JsonItem value))
-              p.Reference = value;
-          }
-    }
-
+    
     private static void MergeTemplateWithConfig(InstData instData) {
       foreach (JObject obj in instData.Config) {
         // build item from config object
-        JsonItem item = JsonItem.BuildJsonItem(obj, instData.TypeList);
+        JsonItem item = JsonItem.BuildJsonItem(obj);
         // override default value
-        if (instData.ConfigurableItems.TryGetValue(item.Path, out JsonItem param)) {
+        if (instData.Objects.TryGetValue(item.Path, out JsonItem param)) {
           param.Value = item.Value;
           // override ActualName (for LookupParameters)
           if (param.ActualName != null)
             param.ActualName = item.ActualName;
-        } else throw new InvalidDataException($"No {Constants.FreeParameters.Trim('s')} with path='{item.Path}' defined!");
+        } else throw new InvalidDataException($"No parameter with path='{item.Path}' defined!");
       }
     }
@@ -133,16 +135,9 @@
     private static JsonItem GetData(string key, InstData instData)
     {
-      if (instData.ParameterizedItems.TryGetValue(key, out JsonItem value))
+      if (instData.ResolvedItems.TryGetValue(key, out JsonItem value))
         return value;
       else
         throw new InvalidDataException($"Type of item '{key}' is not defined!");
     }
-
-    private static T CreateObject<T>(JsonItem data, InstData instData) {
-      if (instData.TypeList.TryGetValue(data.Name, out string typeName)) {
-        Type type = Type.GetType(typeName);
-        return (T)Activator.CreateInstance(type);
-      } else throw new TypeLoadException($"Cannot find AssemblyQualifiedName for {data.Name}.");
-    }
     #endregion
   }
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItem.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItem.cs	(revision 17378)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItem.cs	(revision 17379)
@@ -28,10 +28,8 @@
           string oldName = Name;
           name = value;
+          // replace name in path if path != null
           if (Path != null) {
             var parts = Path.Split('.');
-            for (int i = 0; i < parts.Length; ++i)
-              if (parts[i] == oldName)
-                parts[i] = Name;
-
+            parts[Array.IndexOf(parts, oldName)] = name;
             Path = string.Join(".", parts);
           } else
@@ -42,8 +40,6 @@
       }
     }
-    public string Type { get; set; }
     public string Path { get; set; }
-    public IList<JsonItem> Parameters { get; set; } // -> für flachen aufbau -> childs?
-    public IList<JsonItem> Operators { get; set; }
+    public IList<JsonItem> Children { get; set; }
     public object Value {
       get => value;
@@ -62,26 +58,17 @@
     public string ActualName { get; set; }
 
-    #region JsonIgnore Properties
-    [JsonIgnore]
-    public JsonItem Reference { get; set; }
-
-    [JsonIgnore]
-    public bool IsConfigurable => (Value != null && Range != null);
-
-    [JsonIgnore]
-    public bool IsParameterizedItem => Parameters != null;
-    #endregion
-
     #region Public Static Methods
     public static void Merge(JsonItem target, JsonItem from) {
       target.Name = from.Name ?? target.Name;
-      target.Type = from.Type ?? target.Type;
       target.Range = from.Range ?? target.Range;
       target.Path = from.Path ?? target.Path;
       target.Value = from.Value ?? target.Value;
-      target.Reference = from.Reference ?? target.Reference;
       target.ActualName = from.ActualName ?? target.ActualName;
-      target.Parameters = from.Parameters ?? target.Parameters;
-      target.Operators = from.Operators ?? target.Operators;
+      if(target.Children != null) {
+        if (from.Children != null)
+          ((List<JsonItem>)from.Children).AddRange(target.Children); 
+      } else {
+        target.Children = from.Children;
+      }
     }
     #endregion
@@ -89,7 +76,7 @@
     #region Public Methods
     public void AddParameter(JsonItem item) {
-      if (Parameters == null)
-        Parameters = new List<JsonItem>();
-      Parameters.Add(item);
+      if (Children == null)
+        Children = new List<JsonItem>();
+      Children.Add(item);
       item.Path = $"{Path}.{item.Name}";
       item.UpdatePath();
@@ -97,19 +84,10 @@
 
     public void UpdatePath() {
-      if (Parameters != null)
-        UpdatePathHelper(Parameters);
-
-      if (Operators != null)
-        UpdatePathHelper(Operators);
-
-      if (Reference != null)
-        UpdatePathHelper(Reference);
+      if (Children != null)
+        UpdatePathHelper(Children);
     }
     #endregion
 
     #region Helper
-    private void UpdatePathHelper(params JsonItem[] items) =>
-      UpdatePathHelper((IEnumerable<JsonItem>)items);
-
     private void UpdatePathHelper(IEnumerable<JsonItem> items) {
       foreach (var item in items) {
@@ -136,5 +114,4 @@
         b2 = IsInNumericRange(Value);
       } 
-
       return b1 || b2;
     }
@@ -166,20 +143,12 @@
         (((T)max).CompareTo(value) == 1 || ((T)max).CompareTo(value) == 0);
     }
-
     #endregion
 
     #region BuildJsonItemMethods
-    public static JsonItem BuildJsonItem(JObject obj, IDictionary<string, string> typeList) {
+    public static JsonItem BuildJsonItem(JObject obj) {
       object val = obj[nameof(Value)]?.ToObject<object>();
-      if (val is JContainer) {
-        //try {
-          val = ((JContainer)val).ToObject<object[]>();
-        /*} catch (Exception) { }
-        try {
-          val = ((JContainer)val).ToObject<object[,]>();
-        } catch (Exception) { }*/
-      }
+      if (val is JContainer jContainer) // for resolving array values
+        val = jContainer.ToObject<object[]>();
         
-
       return new JsonItem() {
         Name = obj[nameof(Name)]?.ToString(),
@@ -187,51 +156,6 @@
         Value = val,
         Range = obj[nameof(Range)]?.ToObject<object[]>(),
-        Type = GetType(obj[nameof(Path)]?.ToObject<string>(), typeList),
-        ActualName = obj[nameof(ActualName)]?.ToString(),
-        Parameters = PopulateParameters(obj, typeList),
-        Operators = PopulateOperators(obj, typeList)
+        ActualName = obj[nameof(ActualName)]?.ToString()
       };
-  }
-
-    private static string GetType(string path, IDictionary<string, string> typeList) {
-      if (!string.IsNullOrEmpty(path))
-        if (typeList.TryGetValue(path, out string value))
-          return value;
-      return null;
-    }
-
-    private static IList<JsonItem> PopulateParameters(JObject obj, IDictionary<string, string> typeList) {
-      IList<JsonItem> list = new List<JsonItem>();
-
-      // add staticParameters
-      if (obj[Constants.StaticParameters] != null)
-        foreach (JObject param in obj[Constants.StaticParameters])
-          list.Add(BuildJsonItem(param, typeList));
-
-      // merge staticParameter with freeParameter
-      if (obj[Constants.FreeParameters] != null) {
-        foreach (JObject param in obj[Constants.FreeParameters]) {
-          JsonItem tmp = BuildJsonItem(param, typeList);
-
-          // search staticParameter from list
-          JsonItem comp = null;
-          foreach (var p in list)
-            if (p.Name == tmp.Name) comp = p;
-          if (comp == null)
-            throw new InvalidDataException($"Invalid {Constants.FreeParameters.Trim('s')}: '{tmp.Name}'!");
-
-          JsonItem.Merge(comp, tmp);
-        }
-      }
-      return list;
-    }
-
-    private static IList<JsonItem> PopulateOperators(JObject obj, IDictionary<string, string> typeList) {
-      IList<JsonItem> list = new List<JsonItem>();
-      JToken operators = obj[nameof(JsonItem.Operators)];
-      if (operators != null)
-        foreach (JObject sp in operators)
-          list.Add(BuildJsonItem(sp, typeList));
-      return list;
     }
     #endregion
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItemConverter.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItemConverter.cs	(revision 17378)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItemConverter.cs	(revision 17379)
@@ -34,5 +34,4 @@
         Converters.Add(type, new ConverterPriorityContainer() { Converter = converter, Priority = priority });
     }
-
 
     public static void Register(string atticGuid, IJsonItemConverter converter, int priority) =>
@@ -126,97 +125,4 @@
       
       Register("EE612297-B1AF-42D2-BF21-AF9A2D42791C", new RegressionProblemDataConverter(), 20);
-
-      // ISymbol
-      /*
-      Register("25137f88-66b9-48d7-a2bd-60190082e044", 
-        new ConfigurableConverter()
-        .Primitive("InitialFrequency", ElementType.Property, new object[] { 0.0, 1.0 })
-        .Primitive("Enabled", ElementType.Property, true)
-        .Primitive("MinimumArity", ElementType.Property, 0)
-        .Primitive("MaximumArity", ElementType.Property, 10),
-        5);
-      */
-      // SymbolicRegressionProblem
-      /*
-      Register("7DDCF683-96FC-4F70-BF4F-FE3A0B0DE6E0",
-        new ConfigurableConverter()
-        .
-        10);
-      */
-
-      // Dataset
-      /*
-      Register("49F4D145-50D7-4497-8D8A-D190CD556CC8",
-        new ConfigurableConverter() //TODO: set guid to enable "inheritance"?
-        .PrimitiveEnumerable("storableData", ElementType.Field, new double[,] { }),
-        5);
-      */
-      // ItemCollection<>
-      /*
-      Register("0BD4F01E-2D52-4E41-AEF8-611F10856D90",
-        new ConfigurableConverter()
-        .This((o, t) => {
-          dynamic itemList = o as dynamic;
-          IList<JsonItem> jsonItems = new List<JsonItem>();
-          foreach (var obj in itemList) {
-            IItem item = obj as IItem;
-            jsonItems.Add(Extract(item));
-          }
-          return jsonItems;
-        }),
-        5);
-      */
-      // IItemList<>
-      /*
-      Register("466747d2-6a73-495b-ac68-7b0199d0f830",
-        new ConfigurableConverter()
-        .This((o, t) => {
-          dynamic itemList = o as dynamic;
-          IList<JsonItem> jsonItems = new List<JsonItem>();
-          foreach (var obj in itemList) {
-            IItem item = obj as IItem;
-            jsonItems.Add(Extract(item));
-          }
-          return jsonItems;
-        }),
-        6);
-      */
-      // ICheckedItemList<>
-      /*
-      Register("ba4a82ca-92eb-47a1-95a7-f41f6ef470f4",
-        new ConfigurableConverter()
-        .This((o,t) => {
-          dynamic itemList = o as dynamic;
-          IList<JsonItem> jsonItems = new List<JsonItem>();
-          int count = 0;
-          foreach(var obj in itemList) {
-            IItem item = obj as IItem;
-            JsonItem checkedStatus = new JsonItem() {
-              Name = "Checked",
-              Value = itemList.ItemChecked(obj),
-              Range = new object[] { false, true }
-            };
-            JsonItem value = Extract(item);
-
-            jsonItems.Add(new JsonItem() {
-              Name = item.ItemName + count++,
-              Parameters = new JsonItem[] {
-                checkedStatus, value
-              },
-              Type = item.GetType().AssemblyQualifiedName
-            });
-          }
-          return jsonItems;
-        }),
-        6);
-      */
-      //ISymbolicExpressionGrammar - "1f6afcbe-b309-44e2-8d35-2d33eaeb9649"
-      //ISymbolicExpressionGrammarBase - "119f5e94-bc7d-42fc-a48b-ac0230115ef2"
-      /*
-      Register("119f5e94-bc7d-42fc-a48b-ac0230115ef2",
-        new ConfigurableConverter()
-        .Enumerable("Symbols", ElementType.Property, (o,t) => new JsonItem[] { Extract(o as IItem) }),
-        10);
-      */
     }
   }
Index: /branches/3026_IntegrationIntoSymSpace/Heuristiclab.ConfigStarter/Program.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/Heuristiclab.ConfigStarter/Program.cs	(revision 17378)
+++ /branches/3026_IntegrationIntoSymSpace/Heuristiclab.ConfigStarter/Program.cs	(revision 17379)
@@ -17,25 +17,4 @@
 namespace Heuristiclab.ConfigStarter {
   public class Program {
-
-    private static string Reduce(string str) => 
-      str
-      .Replace(" ", "")
-      .Replace("-", "")
-      .Replace("`", "")
-      .Replace(".", "")
-      .Replace("<", "")
-      .Replace(">", "")
-      .Replace("(", "_")
-      .Replace(")", "_");
-
-    private static void Visualize(JsonItem item, StringBuilder sb) {
-      sb.Append($"  {item.GetHashCode()} [label=\"{item.Name}\"];\n");
-      foreach (var i in item.Parameters) {
-        sb.Append($"  {item.GetHashCode()} -> {i.GetHashCode()};\n");
-      }
-      foreach(var i in item.Parameters) {
-        Visualize(i, sb);
-      }
-    }
 
     public static void Main(string[] args) {
@@ -64,24 +43,8 @@
       SymbolicRegressionSingleObjectiveProblem prop = new SymbolicRegressionSingleObjectiveProblem();
       
-      alg.Problem = prop;
+      alg.Problem = tsp;
 
-      alg.Engine = new SequentialEngine();
-      Task t = alg.StartAsync();
-      Thread.Sleep(1000);
-      alg.Stop();
-
-      StorableConverter storableConverter = new StorableConverter();
-      JsonItem item = storableConverter.Extract(alg);
-
-      StringBuilder sb = new StringBuilder();
-
-      //Visualize(item, sb);
-
-      //File.WriteAllText(@"C:\Workspace\item.gv", $"digraph G {{\n{sb.ToString()}}}");
-
-
-      //Console.WriteLine(alg);
       File.WriteAllText(@"C:\Workspace\Template.json", JCGenerator.GenerateTemplate(alg));
-
+      JCInstantiator.Instantiate(@"C:\Workspace\Template.json");
       /*
       List<ICommandLineArgument> arguments = new List<ICommandLineArgument>();
