Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/FileManager.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/FileManager.cs	(revision 17353)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/FileManager.cs	(revision 17354)
@@ -23,5 +23,6 @@
       }
     }
-    public static void ExportJsonTemplate(IContentView view) {
+    public static void ExportJsonTemplate(IContentView view) { 
+      // TODO: view to select free params, warning if no results are generated
       IStorableContent content = view.Content as IStorableContent;
       if (!view.Locked && content != null) {
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JCGenerator.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JCGenerator.cs	(revision 17353)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JCGenerator.cs	(revision 17354)
@@ -75,6 +75,6 @@
 
       obj.Property(nameof(JsonItem.Parameters))?.Remove();
-      RefactorFreeParameters(obj);
-      RefactorStaticParameters(obj);
+      RefactorFreeParameters(obj, genData);
+      RefactorStaticParameters(obj, genData);
 
       obj.Property(nameof(JsonItem.Value))?.Remove();
@@ -87,8 +87,8 @@
 
     // deletes unnecessary properties for free parameters.
-    private static void RefactorFreeParameters(JToken token) {
+    private static void RefactorFreeParameters(JToken token, GenData genData) {
       IList<JObject> objToRemove = new List<JObject>();
       TransformNodes(x => {
-        var p = x.ToObject<JsonItem>();
+        var p = JsonItem.BuildJsonItem(x, genData.TypeList);
         x.Property(nameof(JsonItem.Type))?.Remove();
         x.Property(nameof(JsonItem.Parameters))?.Remove();
@@ -105,8 +105,8 @@
 
     // deletes unnecessary properties for static parameters.
-    private static void RefactorStaticParameters(JToken token) {
+    private static void RefactorStaticParameters(JToken token, GenData genData) {
       IList<JObject> objToRemove = new List<JObject>();
       TransformNodes(x => {
-        var p = x.ToObject<JsonItem>();
+        var p = JsonItem.BuildJsonItem(x, genData.TypeList);
         x.Property(nameof(JsonItem.Range))?.Remove();
         x.Property(nameof(JsonItem.Operators))?.Remove();
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JCInstantiator.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JCInstantiator.cs	(revision 17353)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JCInstantiator.cs	(revision 17354)
@@ -83,5 +83,5 @@
     private static void CollectParameterizedItems(InstData instData) {
       foreach (JObject item in instData.Template[Constants.Objects]) {
-        JsonItem data = BuildJsonItem(item, instData);
+        JsonItem data = JsonItem.BuildJsonItem(item, instData.TypeList);
         instData.ParameterizedItems.Add(data.Path, data);
       }
@@ -120,5 +120,5 @@
       foreach (JObject obj in instData.Config) {
         // build item from config object
-        JsonItem item = BuildJsonItem(obj, instData);
+        JsonItem item = JsonItem.BuildJsonItem(obj, instData.TypeList);
         // override default value
         if (instData.ConfigurableItems.TryGetValue(item.Path, out JsonItem param)) {
@@ -145,60 +145,4 @@
       } else throw new TypeLoadException($"Cannot find AssemblyQualifiedName for {data.Name}.");
     }
-
-    #region BuildJsonItemMethods
-    private static JsonItem BuildJsonItem(JObject obj, InstData instData) =>
-      new JsonItem() {
-        Name = obj[nameof(JsonItem.Name)]?.ToString(),
-        Path = obj[nameof(JsonItem.Path)]?.ToString(),
-        Value = obj[nameof(JsonItem.Value)]?.ToObject<object>(),
-        Range = obj[nameof(JsonItem.Range)]?.ToObject<object[]>(),
-        Type = GetType(obj[nameof(JsonItem.Path)]?.ToObject<string>(), instData),
-        ActualName = obj[nameof(JsonItem.ActualName)]?.ToString(),
-        Parameters = PopulateParameters(obj, instData),
-        Operators = PopulateOperators(obj, instData)
-      };
-
-    private static string GetType(string path, InstData instData) {
-      if(!string.IsNullOrEmpty(path))
-        if (instData.TypeList.TryGetValue(path, out string value))
-          return value;
-      return null;
-    }
-
-    private static IList<JsonItem> PopulateParameters(JObject obj, InstData instData) {
-      IList<JsonItem> list = new List<JsonItem>();
-
-      // add staticParameters
-      if (obj[Constants.StaticParameters] != null)
-        foreach (JObject param in obj[Constants.StaticParameters])
-          list.Add(BuildJsonItem(param, instData));
-
-      // merge staticParameter with freeParameter
-      if (obj[Constants.FreeParameters] != null) {
-        foreach (JObject param in obj[Constants.FreeParameters]) {
-          JsonItem tmp = BuildJsonItem(param, instData);
-          
-          // 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, InstData instData) {
-      IList<JsonItem> list = new List<JsonItem>();
-      JToken operators = obj[nameof(JsonItem.Operators)];
-      if (operators != null)
-        foreach (JObject sp in operators)
-          list.Add(BuildJsonItem(sp, instData));
-      return list;
-    }
-    #endregion
     #endregion
   }
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItem.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItem.cs	(revision 17353)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/JsonItem.cs	(revision 17354)
@@ -1,4 +1,5 @@
 ﻿using System;
 using System.Collections.Generic;
+using System.IO;
 using System.Linq;
 using System.Text;
@@ -19,12 +20,12 @@
     private IEnumerable<object> range;
     #endregion
-    
-    public string Name { 
-      get => name; 
+
+    public string Name {
+      get => name;
       set {
         name = value;
         Path = Name;
         UpdatePath();
-      } 
+      }
     }
     public string Type { get; set; }
@@ -33,19 +34,16 @@
     public IList<JsonItem> Operators { get; set; }
     public object Value {
-      get => value; 
+      get => value;
       set {
-        if (value is JContainer)
-          this.value = ((JContainer)value).ToObject<object[]>();
-        else
-          this.value = value;
+        this.value = value;
         CheckConstraints();
-      } 
+      }
     }
-    public IEnumerable<object> Range { 
-      get => range; 
+    public IEnumerable<object> Range {
+      get => range;
       set {
         range = value;
         CheckConstraints();
-      } 
+      }
     }
     public string ActualName { get; set; }
@@ -84,5 +82,5 @@
         UpdatePathHelper(Operators);
 
-      if(Reference != null)
+      if (Reference != null)
         UpdatePathHelper(Reference);
     }
@@ -90,5 +88,5 @@
 
     #region Helper
-    private void UpdatePathHelper(params JsonItem[] items) => 
+    private void UpdatePathHelper(params JsonItem[] items) =>
       UpdatePathHelper((IEnumerable<JsonItem>)items);
 
@@ -105,5 +103,5 @@
     }
 
-    private bool IsInRange() => IsInRangeList() || 
+    private bool IsInRange() => IsInRangeList() ||
       (Value.GetType().IsArray && ((object[])Value).All(x => IsInNumericRange(x))) ||
       (!Value.GetType().IsArray && IsInNumericRange(Value));
@@ -129,5 +127,66 @@
             (((T)max).CompareTo(value) == 1 || ((T)max).CompareTo(value) == 0);
     }
-      
+
+    #endregion
+
+    #region BuildJsonItemMethods
+    public static JsonItem BuildJsonItem(JObject obj, IDictionary<string, string> typeList) {
+      object val = obj[nameof(Value)]?.ToObject<object>();
+      if (val is JContainer)
+        val = ((JContainer)val).ToObject<object[]>();
+
+      return new JsonItem() {
+        Name = obj[nameof(Name)]?.ToString(),
+        Path = obj[nameof(Path)]?.ToString(),
+        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)
+      };
+  }
+
+    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
   }
