Index: anches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/Component.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/Component.cs	(revision 17282)
+++ 	(revision )
@@ -1,113 +1,0 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using HeuristicLab.Core;
-using Newtonsoft.Json;
-using Newtonsoft.Json.Linq;
-
-namespace HeuristicLab.Manufacture {
-  //JsonItem
-  public class Component {
-    private IList<object> range;
-    private object defaultValue;
-
-    public string Name { get; set; }
-    public string Type { get; set; }
-    public object Default {
-      get => defaultValue; 
-      set {
-        defaultValue = value;
-        if(Range != null && value != null && !FulfillConstraints())
-          throw new ArgumentOutOfRangeException("Default", "Default is not in range.");
-      } 
-    }
-    public string Path { get; set; } = "";
-
-    public IList<object> Range { 
-      get => range; 
-      set {
-        range = value;
-        if (Default != null && value != null && !FulfillConstraints())
-          throw new ArgumentOutOfRangeException("Default", "Default is not in range.");
-      } 
-    }
-
-    public IList<Component> Parameters { get; set; }
-    public IList<Component> Operators { get; set; }
-    
-    public override bool Equals(object obj) => 
-      (obj is Component ? (obj.Cast<Component>().Name == this.Name) : false);
-      
-    public override int GetHashCode() => Name.GetHashCode();
-
-    [JsonIgnore]
-    public Component Reference { get; set; }
-    
-    public static void Merge(Component target, Component 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.Default = from.Default ?? target.Default;
-      target.Reference = from.Reference ?? target.Reference;
-      target.Parameters = from.Parameters ?? target.Parameters;
-      target.Operators = from.Operators ?? target.Operators;
-    }
-
-    public bool FulfillConstraints() => FulfillConstraints(this);
-
-    public static bool FulfillConstraints(Component data) =>
-      data.Range != null && data.Default != null && (
-      IsInRangeList(data.Range, data.Default) ||
-      IsInNumericRange<long>(data.Default, data.Range[0], data.Range[1]) ||
-      IsInNumericRange<int>(data.Default, data.Range[0], data.Range[1]) ||
-      IsInNumericRange<short>(data.Default, data.Range[0], data.Range[1]) ||
-      IsInNumericRange<byte>(data.Default, data.Range[0], data.Range[1]) ||
-      IsInNumericRange<float>(data.Default, data.Range[0], data.Range[1]) ||
-      IsInNumericRange<double>(data.Default, data.Range[0], data.Range[1]));
-
-
-
-    public void UpdatePaths() {
-      if (Parameters != null) {
-        foreach (var p in Parameters) {
-          p.Path = Path + "." + p.Name;
-        }
-      }
-
-      if (Operators != null) {
-        foreach (var p in Operators) {
-          p.Path = Path + "." + p.Name;
-        }
-      }
-    }
-
-    public void PrependPath(string str) {
-      Path = $"{str}.{Path}";
-      PrependPathHelper(Parameters, str);
-      PrependPathHelper(Operators, str);
-    }
-
-    private void PrependPathHelper(IEnumerable<Component> components, string str) {
-      if (components != null) {
-        foreach (var p in components)
-          p.PrependPath(str);
-      }
-    }
-
-    #region Helper
-    private static bool IsInRangeList(IEnumerable<object> list, object value) {
-      foreach (var x in list)
-        if (x.Equals(value)) return true;
-      return false;
-    }
-
-    private static bool IsInNumericRange<T>(object value, object min, object max) where T : IComparable =>
-      (value != null && min != null && max != null && value is T && min is T && max is T &&
-        (((T)min).CompareTo(value) == -1 || ((T)min).CompareTo(value) == 0) &&
-        (((T)max).CompareTo(value) == 1 || ((T)max).CompareTo(value) == 0));
-    #endregion
-  }
-}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/Converters/BaseConverter.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/Converters/BaseConverter.cs	(revision 17282)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/Converters/BaseConverter.cs	(revision 17283)
@@ -10,19 +10,19 @@
   public abstract class BaseConverter : IJsonItemConverter
   {
-    public Component Extract(IItem value) {
-      Component data = ExtractData(value);
+    public JsonItem Extract(IItem value) {
+      JsonItem data = ExtractData(value);
       data.Name = String.IsNullOrEmpty(data.Name) ? value.ItemName : data.Name;
       return data;
     }
 
-    public void Inject(IItem item, Component data) {
+    public void Inject(IItem item, JsonItem data) {
       if(data.Reference != null) {
-        Component.Merge(data, data.Reference);
+        JsonItem.Merge(data, data.Reference);
       }
       InjectData(item, data);
     }
 
-    public abstract void InjectData(IItem item, Component data);
-    public abstract Component ExtractData(IItem value);
+    public abstract void InjectData(IItem item, JsonItem data);
+    public abstract JsonItem ExtractData(IItem value);
 
     #region Helper
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/Converters/ConstrainedValueParameterConverter.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/Converters/ConstrainedValueParameterConverter.cs	(revision 17282)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/Converters/ConstrainedValueParameterConverter.cs	(revision 17283)
@@ -8,5 +8,5 @@
 namespace HeuristicLab.Manufacture {
   public class ConstrainedValueParameterConverter : ParameterBaseConverter {
-    public override void InjectData(IParameter parameter, Component data) {
+    public override void InjectData(IParameter parameter, JsonItem data) {
       foreach (var x in parameter.Cast<dynamic>().ValidValues)
         if (x.GetType().Name == CastValue<string>(data.Default))
@@ -17,6 +17,6 @@
     }
 
-    public override Component ExtractData(IParameter value) =>
-      new Component() {
+    public override JsonItem ExtractData(IParameter value) =>
+      new JsonItem() {
         Name = value.Name,
         Default = value.ActualValue?.GetType().Name,
@@ -33,10 +33,10 @@
     }
     // id = kombi aus path + default 
-    private IList<Component> GetParameterizedChilds(IParameter value) {
-      List<Component> list = new List<Component>();
+    private IList<JsonItem> GetParameterizedChilds(IParameter value) {
+      List<JsonItem> list = new List<JsonItem>();
       var values = value.Cast<dynamic>().ValidValues;
       foreach(var x in values) {
         if (x is IParameterizedItem) {
-          Component tmp = JsonItemConverter.Extract(x);
+          JsonItem tmp = JsonItemConverter.Extract(x);
           tmp.PrependPath(value.Name);
           list.Add(tmp);
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/Converters/DummyConverter.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/Converters/DummyConverter.cs	(revision 17282)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/Converters/DummyConverter.cs	(revision 17283)
@@ -8,11 +8,11 @@
 namespace HeuristicLab.Manufacture {
   public class DummyConverter : BaseConverter {
-    public override void InjectData(IItem item, Component data) {
+    public override void InjectData(IItem item, JsonItem data) {
       // do nothing because the instance already exists and 
       // there are no values to inject
     }
 
-    public override Component ExtractData(IItem value) => 
-      new Component() { Default = value.GetType().Name };
+    public override JsonItem ExtractData(IItem value) => 
+      new JsonItem() { Default = value.GetType().Name };
   }
 }
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/Converters/EnumTypeConverter.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/Converters/EnumTypeConverter.cs	(revision 17282)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/Converters/EnumTypeConverter.cs	(revision 17283)
@@ -9,11 +9,11 @@
 namespace HeuristicLab.Manufacture {
   public class EnumTypeConverter : BaseConverter {
-    public override void InjectData(IItem item, Component data) =>
+    public override void InjectData(IItem item, JsonItem data) =>
       item.Cast<dynamic>().Value = Enum.Parse(
         item.GetType().GenericTypeArguments.First(), 
         CastValue<string>(data.Default));
 
-    public override Component ExtractData(IItem value) {
-      Component data = new Component();
+    public override JsonItem ExtractData(IItem value) {
+      JsonItem data = new JsonItem();
       object val = ((dynamic)value).Value;
       Type enumType = val.GetType();
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/Converters/LookupParameterConverter.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/Converters/LookupParameterConverter.cs	(revision 17282)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/Converters/LookupParameterConverter.cs	(revision 17283)
@@ -8,9 +8,9 @@
 namespace HeuristicLab.Manufacture {
   public class LookupParameterConverter : ParameterBaseConverter {
-    public override Component ExtractData(IParameter value) {
-      return new Component() { Name = value.Name };
+    public override JsonItem ExtractData(IParameter value) {
+      return new JsonItem() { Name = value.Name };
     }
 
-    public override void InjectData(IParameter parameter, Component data) {
+    public override void InjectData(IParameter parameter, JsonItem data) {
       
     }
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/Converters/MultiCheckedOperatorConverter.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/Converters/MultiCheckedOperatorConverter.cs	(revision 17282)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/Converters/MultiCheckedOperatorConverter.cs	(revision 17283)
@@ -8,17 +8,12 @@
 namespace HeuristicLab.Manufacture {
   public class MultiCheckedOperatorConverter : ParameterizedItemConverter {
-    public override Component ExtractData(IItem value) {
-      Component data = base.ExtractData(value);
+    public override JsonItem ExtractData(IItem value) {
+      JsonItem data = base.ExtractData(value);
 
       data.Default = value.GetType().Name;
-      data.Operators = new List<Component>();
-      /*
-      if (data.ParameterizedItems == null)
-        data.ParameterizedItems = new List<Component>();
-      data.ParameterizedItems.Add(data);
-      */
+      data.Operators = new List<JsonItem>();
       dynamic val = value.Cast<dynamic>();
       foreach (var op in val.Operators) {
-        data.Operators.Add(new Component() {
+        data.Operators.Add(new JsonItem() {
           Name = op.Name,
           Default = val.Operators.ItemChecked(op),
@@ -30,5 +25,5 @@
     }
 
-    public override void InjectData(IItem item, Component data) {
+    public override void InjectData(IItem item, JsonItem data) {
       base.InjectData(item, data);
 
@@ -39,5 +34,5 @@
     }
 
-    private bool GetOperatorState(string name, Component data) {
+    private bool GetOperatorState(string name, JsonItem data) {
       foreach(var op in data.Operators) {
         if (op.Name == name) return op.Default.Cast<bool>();
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/Converters/ParameterBaseConverter.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/Converters/ParameterBaseConverter.cs	(revision 17282)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/Converters/ParameterBaseConverter.cs	(revision 17283)
@@ -8,7 +8,7 @@
 namespace HeuristicLab.Manufacture {
   public abstract class ParameterBaseConverter : BaseConverter {
-    public override Component ExtractData(IItem value) {
+    public override JsonItem ExtractData(IItem value) {
       IParameter param = value.Cast<IParameter>();
-      Component comp = ExtractData(param);
+      JsonItem comp = ExtractData(param);
       //comp.Path = value.Cast<IParameter>().ActualValue?.ItemName;
       /*comp.Path = value.Cast<IParameter>().Name + "." + comp.Path;
@@ -20,9 +20,9 @@
       return comp;
     }
-    public abstract Component ExtractData(IParameter value);
+    public abstract JsonItem ExtractData(IParameter value);
 
-    public override void InjectData(IItem item, Component data) => InjectData(item.Cast<IParameter>(), data);
+    public override void InjectData(IItem item, JsonItem data) => InjectData(item.Cast<IParameter>(), data);
 
-    public abstract void InjectData(IParameter parameter, Component data);
+    public abstract void InjectData(IParameter parameter, JsonItem data);
   }
 }
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/Converters/ParameterizedItemConverter.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/Converters/ParameterizedItemConverter.cs	(revision 17282)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/Converters/ParameterizedItemConverter.cs	(revision 17283)
@@ -2,5 +2,5 @@
 using System.Collections.Generic;
 using System.Linq;
-using System.Text;
+using System.Text;JsonItem obj
 using System.Threading.Tasks;
 using HeuristicLab.Core;
@@ -9,5 +9,5 @@
 {
   public class ParameterizedItemConverter : BaseConverter {
-    public override void InjectData(IItem item, Component data) {
+    public override void InjectData(IItem item, JsonItem data) {
       IParameterizedItem pItem = item.Cast<IParameterizedItem>();
 
@@ -19,22 +19,22 @@
     }
 
-    public override Component ExtractData(IItem value) {
-      Component obj = new Component();
-      obj.Name = value.ItemName;
-      obj.Type = value.GetType().AssemblyQualifiedName;
-      obj.Path = value.ItemName;
+    public override JsonItem ExtractData(IItem value) {
+      JsonItem item = new JsonItem();
+      item.Name = value.ItemName;
+      item.Type = value.GetType().AssemblyQualifiedName;
+      item.Path = value.ItemName;
 
       foreach (var param in value.Cast<IParameterizedItem>().Parameters) {
-        Component data = JsonItemConverter.Extract(param);
+        JsonItem data = JsonItemConverter.Extract(param);
         data.Name = param.Name;
         data.Path = param.Name;
-        data.PrependPath(obj.Path);
+        data.PrependPath(item.Path);
         data.UpdatePaths();
         
-        if (obj.Parameters == null)
-          obj.Parameters = new List<Component>();
-        obj.Parameters.Add(data);
+        if (item.Parameters == null)
+          item.Parameters = new List<JsonItem>();
+        item.Parameters.Add(data);
       }
-      return obj;
+      return item;
     }
   }
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/Converters/StringValueConverter.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/Converters/StringValueConverter.cs	(revision 17282)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/Converters/StringValueConverter.cs	(revision 17283)
@@ -9,9 +9,9 @@
 namespace HeuristicLab.Manufacture {
   public class StringValueConverter : BaseConverter {
-    public override void InjectData(IItem item, Component data) =>
+    public override void InjectData(IItem item, JsonItem data) =>
       item.Cast<StringValue>().Value = CastValue<string>(data.Default);
 
-    public override Component ExtractData(IItem value) => 
-      new Component() {
+    public override JsonItem ExtractData(IItem value) => 
+      new JsonItem() {
         Default = value.Cast<StringValue>().Value
       };
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/Converters/ValueParameterConverter.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/Converters/ValueParameterConverter.cs	(revision 17282)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/Converters/ValueParameterConverter.cs	(revision 17283)
@@ -9,11 +9,11 @@
   public class ValueParameterConverter : ParameterBaseConverter {
 
-    public override void InjectData(IParameter parameter, Component data) => 
+    public override void InjectData(IParameter parameter, JsonItem data) => 
       JsonItemConverter.Inject(parameter.ActualValue, data);
 
-    public override Component ExtractData(IParameter value) {
-      Component data = null;
+    public override JsonItem ExtractData(IParameter value) {
+      JsonItem data = null;
       if (value.ActualValue == null)
-        data = new Component();
+        data = new JsonItem();
       else
         data = JsonItemConverter.Extract(value.ActualValue);
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/Converters/ValueTypeArrayConverter.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/Converters/ValueTypeArrayConverter.cs	(revision 17282)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/Converters/ValueTypeArrayConverter.cs	(revision 17283)
@@ -13,9 +13,9 @@
     where T : struct 
   {
-    public override void InjectData(IItem item, Component data) => 
+    public override void InjectData(IItem item, JsonItem data) => 
       CopyArrayData(item.Cast<ArrayType>(), CastValue<T[]>(data.Default));
 
-    public override Component ExtractData(IItem value) => 
-      new Component() {
+    public override JsonItem ExtractData(IItem value) => 
+      new JsonItem() {
         Default = value.Cast<ArrayType>().CloneAsArray()
       };
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/Converters/ValueTypeMatrixConverter.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/Converters/ValueTypeMatrixConverter.cs	(revision 17282)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/Converters/ValueTypeMatrixConverter.cs	(revision 17283)
@@ -13,9 +13,9 @@
     where T : struct 
   {
-    public override void InjectData(IItem item, Component data) => 
+    public override void InjectData(IItem item, JsonItem data) => 
       CopyMatrixData(item.Cast<MatrixType>(), CastValue<T[,]>(data.Default));
 
-    public override Component ExtractData(IItem value) =>
-      new Component() {
+    public override JsonItem ExtractData(IItem value) =>
+      new JsonItem() {
         Default = value.Cast<MatrixType>().CloneAsMatrix()
       };
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/Converters/ValueTypeValueConverter.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/Converters/ValueTypeValueConverter.cs	(revision 17282)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/Converters/ValueTypeValueConverter.cs	(revision 17283)
@@ -12,9 +12,9 @@
     where T : struct {
 
-    public override void InjectData(IItem item, Component data) =>
+    public override void InjectData(IItem item, JsonItem data) =>
       item.Cast<ValueType>().Value = CastValue<T>(data.Default);
 
-    public override Component ExtractData(IItem value) => 
-      new Component() {
+    public override JsonItem ExtractData(IItem value) => 
+      new JsonItem() {
         Default = value.Cast<ValueType>().Value,
         Range = new object[] { GetMinValue(), GetMaxValue() }
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/HeuristicLab.Manufacture.csproj
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/HeuristicLab.Manufacture.csproj	(revision 17282)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/HeuristicLab.Manufacture.csproj	(revision 17283)
@@ -71,5 +71,5 @@
     <Compile Include="Program.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="Component.cs" />
+    <Compile Include="JsonItem.cs" />
     <Compile Include="Interfaces\IJsonItemConverter.cs" />
     <Compile Include="JsonItemConverter.cs" />
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/Interfaces/IJsonItemConverter.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/Interfaces/IJsonItemConverter.cs	(revision 17282)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/Interfaces/IJsonItemConverter.cs	(revision 17283)
@@ -10,18 +10,18 @@
   public interface IJsonItemConverter {
     /// <summary>
-    /// Extracts all infos out of an IItem to create a Component. 
+    /// Extracts all infos out of an IItem to create a JsonItem. 
     /// (For template generation.)
     /// </summary>
     /// <param name="value">The IItem to extract infos.</param>
-    /// <returns>Component with infos to reinitialise the IItem.</returns>
-    Component Extract(IItem value);
+    /// <returns>JsonItem with infos to reinitialise the IItem.</returns>
+    JsonItem Extract(IItem value);
 
     /// <summary>
-    /// Injects the saved infos from the Component into the IItem.
+    /// Injects the saved infos from the JsonItem into the IItem.
     /// (Sets the necessary values.)
     /// </summary>
     /// <param name="item">The IItem which get the data injected.</param>
-    /// <param name="data">The Component with the saved values.</param>
-    void Inject(IItem item, Component data);
+    /// <param name="data">The JsonItem with the saved values.</param>
+    void Inject(IItem item, JsonItem data);
   }
 }
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/JCGenerator.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/JCGenerator.cs	(revision 17282)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/JCGenerator.cs	(revision 17283)
@@ -27,9 +27,9 @@
 
     JArray jsonItems = new JArray();
-    private void PopulateJsonItems(Component component) {
-      if (component.Parameters != null) {
-        if(component.Range == null)
-          jsonItems.Add(Serialize(component));
-        foreach (var p in component.Parameters)
+    private void PopulateJsonItems(JsonItem item) {
+      if (item.Parameters != null) {
+        if(item.Range == null)
+          jsonItems.Add(Serialize(item));
+        foreach (var p in item.Parameters)
           if(p.Parameters != null)
             PopulateJsonItems(p);
@@ -37,6 +37,6 @@
     }
 
-    private JObject Serialize(Component component) {
-      JObject obj = JObject.FromObject(component, Settings());
+    private JObject Serialize(JsonItem item) {
+      JObject obj = JObject.FromObject(item, Settings());
       obj["StaticParameters"] = obj["Parameters"];
       obj["FreeParameters"] = obj["Parameters"];
@@ -49,5 +49,5 @@
       obj.Property("Type")?.Remove();
 
-      TypeList.Add(component.Path, component.Type);
+      TypeList.Add(item.Path, item.Type);
       return obj;
     }
@@ -55,6 +55,6 @@
     public string GenerateTemplate(IAlgorithm algorithm, IProblem problem, params string[] freeParameters) {
       algorithm.Problem = problem;
-      Component algorithmData = JsonItemConverter.Extract(algorithm);
-      Component problemData = JsonItemConverter.Extract(problem);
+      JsonItem algorithmData = JsonItemConverter.Extract(algorithm);
+      JsonItem problemData = JsonItemConverter.Extract(problem);
       PopulateJsonItems(algorithmData);
       PopulateJsonItems(problemData);
@@ -74,5 +74,5 @@
       IList<JObject> objToRemove = new List<JObject>();
       TransformNodes(x => {
-        var p = x.ToObject<Component>();
+        var p = x.ToObject<JsonItem>();
 
         /*bool isSelected = false;
@@ -96,5 +96,5 @@
       IList<JObject> objToRemove = new List<JObject>();
       TransformNodes(x => {
-        var p = x.ToObject<Component>();
+        var p = x.ToObject<JsonItem>();
         x.Property("Range")?.Remove();
         x.Property("Operators")?.Remove();
@@ -105,5 +105,4 @@
       foreach (var x in objToRemove) x.Remove();
     }
-
 
     private JsonSerializer Settings() => new JsonSerializer() {
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/JCInstantiator.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/JCInstantiator.cs	(revision 17282)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/JCInstantiator.cs	(revision 17283)
@@ -22,9 +22,9 @@
       TypeList = Config["Types"].ToObject<Dictionary<string, string>>();
 
-      Component algorithmData = GetData(Config["Metadata"]["Algorithm"].ToString());
+      JsonItem algorithmData = GetData(Config["Metadata"]["Algorithm"].ToString());
       ResolveReferences(algorithmData);
       IAlgorithm algorithm = CreateObject<IAlgorithm>(algorithmData);
      
-      Component problemData = GetData(Config["Metadata"]["Problem"].ToString());
+      JsonItem problemData = GetData(Config["Metadata"]["Problem"].ToString());
       ResolveReferences(problemData);
       IProblem problem = CreateObject<IProblem>(problemData);
@@ -37,5 +37,5 @@
     }
 
-    private void ResolveReferences(Component data) {
+    private void ResolveReferences(JsonItem data) {
       foreach (var p in data.Parameters)
         if (p.Default is string && p.Reference == null)
@@ -43,9 +43,9 @@
     }
 
-    private Component GetData(string key)
+    private JsonItem GetData(string key)
     {
       foreach(JObject item in Config["Objects"])
       {
-        Component data = BuildComponent(item);
+        JsonItem data = BuildJsonItem(item);
         if (data.Name == key) return data;
       }
@@ -53,5 +53,5 @@
     }
 
-    private T CreateObject<T>(Component data) {
+    private T CreateObject<T>(JsonItem data) {
       if (TypeList.TryGetValue(data.Name, out string typeName)) {
         Type type = Type.GetType(typeName);
@@ -60,28 +60,28 @@
     }
 
-    private Component BuildComponent(JObject obj) =>
-      new Component() {
-        Name = obj[nameof(Component.Name)]?.ToString(),
-        Default = obj[nameof(Component.Default)]?.ToObject<object>(),
-        Range = obj[nameof(Component.Range)]?.ToObject<object[]>(),
-        Type = obj[nameof(Component.Type)]?.ToObject<string>(),
+    private JsonItem BuildJsonItem(JObject obj) =>
+      new JsonItem() {
+        Name = obj[nameof(JsonItem.Name)]?.ToString(),
+        Default = obj[nameof(JsonItem.Default)]?.ToObject<object>(),
+        Range = obj[nameof(JsonItem.Range)]?.ToObject<object[]>(),
+        Type = obj[nameof(JsonItem.Type)]?.ToObject<string>(),
         Parameters = PopulateParameters(obj),
         Operators = PopulateOperators(obj)
       };
 
-    private IList<Component> PopulateParameters(JObject obj) {
-      IList<Component> list = new List<Component>();
+    private IList<JsonItem> PopulateParameters(JObject obj) {
+      IList<JsonItem> list = new List<JsonItem>();
       if (obj["StaticParameters"] != null)
         foreach (JObject param in obj["StaticParameters"])
-          list.Add(BuildComponent(param));
+          list.Add(BuildJsonItem(param));
 
       if (obj["FreeParameters"] != null) {
         foreach (JObject param in obj["FreeParameters"]) {
-          Component tmp = BuildComponent(param);
-          Component comp = null;
+          JsonItem tmp = BuildJsonItem(param);
+          JsonItem comp = null;
           foreach (var p in list) // TODO: nicht notwendig, da immer alle params im static block sind
             if (p.Name == tmp.Name) comp = p;
           if (comp != null) 
-            Component.Merge(comp, tmp);
+            JsonItem.Merge(comp, tmp);
           else list.Add(tmp);
         }
@@ -90,9 +90,9 @@
     }
 
-    private IList<Component> PopulateOperators(JObject obj) {
-      IList<Component> list = new List<Component>();
+    private IList<JsonItem> PopulateOperators(JObject obj) {
+      IList<JsonItem> list = new List<JsonItem>();
       if (obj[nameof(Operators)] != null)
         foreach (JObject sp in obj[nameof(Operators)]) {
-          Component tmp = BuildComponent(sp);
+          JsonItem tmp = BuildJsonItem(sp);
           list.Add(tmp);
         }
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/JsonItem.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/JsonItem.cs	(revision 17283)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/JsonItem.cs	(revision 17283)
@@ -0,0 +1,113 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using HeuristicLab.Core;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace HeuristicLab.Manufacture {
+  //JsonItem
+  public class JsonItem {
+    private IList<object> range;
+    private object defaultValue;
+
+    public string Name { get; set; }
+    public string Type { get; set; }
+    public object Default {
+      get => defaultValue; 
+      set {
+        defaultValue = value;
+        if(Range != null && value != null && !FulfillConstraints())
+          throw new ArgumentOutOfRangeException("Default", "Default is not in range.");
+      } 
+    }
+    public string Path { get; set; } = "";
+
+    public IList<object> Range { 
+      get => range; 
+      set {
+        range = value;
+        if (Default != null && value != null && !FulfillConstraints())
+          throw new ArgumentOutOfRangeException("Default", "Default is not in range.");
+      } 
+    }
+
+    public IList<JsonItem> Parameters { get; set; }
+    public IList<JsonItem> Operators { get; set; }
+    
+    public override bool Equals(object obj) => 
+      (obj is JsonItem ? (obj.Cast<JsonItem>().Name == this.Name) : false);
+      
+    public override int GetHashCode() => Name.GetHashCode();
+
+    [JsonIgnore]
+    public JsonItem Reference { get; set; }
+    
+    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.Default = from.Default ?? target.Default;
+      target.Reference = from.Reference ?? target.Reference;
+      target.Parameters = from.Parameters ?? target.Parameters;
+      target.Operators = from.Operators ?? target.Operators;
+    }
+
+    public bool FulfillConstraints() => FulfillConstraints(this);
+
+    public static bool FulfillConstraints(JsonItem data) =>
+      data.Range != null && data.Default != null && (
+      IsInRangeList(data.Range, data.Default) ||
+      IsInNumericRange<long>(data.Default, data.Range[0], data.Range[1]) ||
+      IsInNumericRange<int>(data.Default, data.Range[0], data.Range[1]) ||
+      IsInNumericRange<short>(data.Default, data.Range[0], data.Range[1]) ||
+      IsInNumericRange<byte>(data.Default, data.Range[0], data.Range[1]) ||
+      IsInNumericRange<float>(data.Default, data.Range[0], data.Range[1]) ||
+      IsInNumericRange<double>(data.Default, data.Range[0], data.Range[1]));
+
+
+
+    public void UpdatePaths() {
+      if (Parameters != null) {
+        foreach (var p in Parameters) {
+          p.Path = Path + "." + p.Name;
+        }
+      }
+
+      if (Operators != null) {
+        foreach (var p in Operators) {
+          p.Path = Path + "." + p.Name;
+        }
+      }
+    }
+
+    public void PrependPath(string str) {
+      Path = $"{str}.{Path}";
+      PrependPathHelper(Parameters, str);
+      PrependPathHelper(Operators, str);
+    }
+
+    private void PrependPathHelper(IEnumerable<JsonItem> items, string str) {
+      if (items != null) {
+        foreach (var p in items)
+          p.PrependPath(str);
+      }
+    }
+
+    #region Helper
+    private static bool IsInRangeList(IEnumerable<object> list, object value) {
+      foreach (var x in list)
+        if (x.Equals(value)) return true;
+      return false;
+    }
+
+    private static bool IsInNumericRange<T>(object value, object min, object max) where T : IComparable =>
+      (value != null && min != null && max != null && value is T && min is T && max is T &&
+        (((T)min).CompareTo(value) == -1 || ((T)min).CompareTo(value) == 0) &&
+        (((T)max).CompareTo(value) == 1 || ((T)max).CompareTo(value) == 0));
+    #endregion
+  }
+}
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/JsonItemConverter.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/JsonItemConverter.cs	(revision 17282)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.Manufacture/JsonItemConverter.cs	(revision 17283)
@@ -22,5 +22,4 @@
     }
 
-
     public static void Register<T>(IJsonItemConverter converter, int priority) => Register(typeof(T), converter, priority);
 
@@ -43,8 +42,8 @@
     }
 
-    internal static void Inject(IItem item, Component data) =>
+    internal static void Inject(IItem item, JsonItem data) =>
       Get(item.GetType()).Inject(item, data);
 
-    internal static Component Extract(IItem item) => 
+    internal static JsonItem Extract(IItem item) => 
       Get(item.GetType()).Extract(item);
 
