Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/JsonItemBaseControl.Designer.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/JsonItemBaseControl.Designer.cs	(revision 17443)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/JsonItemBaseControl.Designer.cs	(revision 17444)
@@ -24,4 +24,5 @@
     /// </summary>
     private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
       this.labelEnable = new System.Windows.Forms.Label();
       this.checkBoxActive = new System.Windows.Forms.CheckBox();
@@ -32,4 +33,6 @@
       this.labelDescription = new System.Windows.Forms.Label();
       this.textBoxDescription = new System.Windows.Forms.TextBox();
+      this.errorProvider = new System.Windows.Forms.ErrorProvider(this.components);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
       this.SuspendLayout();
       // 
@@ -77,8 +80,10 @@
       this.textBoxName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
             | System.Windows.Forms.AnchorStyles.Right)));
+      this.errorProvider.SetIconAlignment(this.textBoxName, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
       this.textBoxName.Location = new System.Drawing.Point(92, 23);
       this.textBoxName.Name = "textBoxName";
       this.textBoxName.Size = new System.Drawing.Size(402, 20);
       this.textBoxName.TabIndex = 10;
+      this.textBoxName.Validating += new System.ComponentModel.CancelEventHandler(this.textBoxName_Validating);
       // 
       // label1
@@ -110,4 +115,9 @@
       this.textBoxDescription.TabIndex = 14;
       // 
+      // errorProvider
+      // 
+      this.errorProvider.BlinkStyle = System.Windows.Forms.ErrorBlinkStyle.NeverBlink;
+      this.errorProvider.ContainerControl = this;
+      // 
       // JsonItemBaseControl
       // 
@@ -122,7 +132,9 @@
       this.Controls.Add(this.textBoxName);
       this.Controls.Add(this.label1);
+      this.errorProvider.SetIconAlignment(this, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
       this.Name = "JsonItemBaseControl";
       this.Padding = new System.Windows.Forms.Padding(3);
       this.Size = new System.Drawing.Size(500, 154);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
       this.ResumeLayout(false);
       this.PerformLayout();
@@ -140,4 +152,5 @@
     private System.Windows.Forms.Label labelDescription;
     private System.Windows.Forms.TextBox textBoxDescription;
+    protected System.Windows.Forms.ErrorProvider errorProvider;
   }
 }
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/JsonItemBaseControl.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/JsonItemBaseControl.cs	(revision 17443)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/JsonItemBaseControl.cs	(revision 17444)
@@ -31,5 +31,14 @@
       else
         textBoxActualName.Text = VM.Item.ActualName;
-        
+
+    }
+
+    private void textBoxName_Validating(object sender, CancelEventArgs e) {
+      if(string.IsNullOrWhiteSpace(textBoxName.Text)) {
+        errorProvider.SetError(textBoxName, "Name must not be empty.");
+        e.Cancel = true;
+      } else {
+        errorProvider.SetError(textBoxName, null);
+      }
     }
   }
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/JsonItemBaseControl.resx
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/JsonItemBaseControl.resx	(revision 17443)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/JsonItemBaseControl.resx	(revision 17444)
@@ -118,3 +118,6 @@
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
+  <metadata name="errorProvider.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
 </root>
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/NumericRangeControl.Designer.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/NumericRangeControl.Designer.cs	(revision 17443)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/NumericRangeControl.Designer.cs	(revision 17444)
@@ -24,12 +24,15 @@
     /// </summary>
     private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
       this.textBoxFrom = new System.Windows.Forms.TextBox();
       this.label6 = new System.Windows.Forms.Label();
       this.groupBox2 = new System.Windows.Forms.GroupBox();
-      this.checkBoxFrom = new System.Windows.Forms.CheckBox();
       this.checkBoxTo = new System.Windows.Forms.CheckBox();
       this.textBoxTo = new System.Windows.Forms.TextBox();
       this.label1 = new System.Windows.Forms.Label();
+      this.checkBoxFrom = new System.Windows.Forms.CheckBox();
+      this.errorProvider = new System.Windows.Forms.ErrorProvider(this.components);
       this.groupBox2.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
       this.SuspendLayout();
       // 
@@ -38,9 +41,11 @@
       this.textBoxFrom.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
             | System.Windows.Forms.AnchorStyles.Right)));
-      this.textBoxFrom.Location = new System.Drawing.Point(36, 36);
+      this.errorProvider.SetIconAlignment(this.textBoxFrom, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
+      this.textBoxFrom.Location = new System.Drawing.Point(67, 17);
       this.textBoxFrom.Name = "textBoxFrom";
       this.textBoxFrom.ReadOnly = true;
-      this.textBoxFrom.Size = new System.Drawing.Size(164, 20);
+      this.textBoxFrom.Size = new System.Drawing.Size(253, 20);
       this.textBoxFrom.TabIndex = 2;
+      this.textBoxFrom.Validating += new System.ComponentModel.CancelEventHandler(this.textBoxFrom_Validating);
       // 
       // label6
@@ -49,5 +54,5 @@
             | System.Windows.Forms.AnchorStyles.Right)));
       this.label6.AutoSize = true;
-      this.label6.Location = new System.Drawing.Point(7, 20);
+      this.label6.Location = new System.Drawing.Point(31, 21);
       this.label6.Name = "label6";
       this.label6.Size = new System.Drawing.Size(30, 13);
@@ -57,6 +62,4 @@
       // groupBox2
       // 
-      this.groupBox2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
       this.groupBox2.Controls.Add(this.checkBoxTo);
       this.groupBox2.Controls.Add(this.textBoxTo);
@@ -65,24 +68,16 @@
       this.groupBox2.Controls.Add(this.textBoxFrom);
       this.groupBox2.Controls.Add(this.label6);
-      this.groupBox2.Location = new System.Drawing.Point(0, 3);
+      this.groupBox2.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.groupBox2.Location = new System.Drawing.Point(0, 0);
       this.groupBox2.Name = "groupBox2";
-      this.groupBox2.Size = new System.Drawing.Size(206, 109);
+      this.groupBox2.Size = new System.Drawing.Size(326, 75);
       this.groupBox2.TabIndex = 19;
       this.groupBox2.TabStop = false;
       this.groupBox2.Text = "Range";
       // 
-      // checkBoxFrom
-      // 
-      this.checkBoxFrom.AutoSize = true;
-      this.checkBoxFrom.Location = new System.Drawing.Point(10, 39);
-      this.checkBoxFrom.Name = "checkBoxFrom";
-      this.checkBoxFrom.Size = new System.Drawing.Size(15, 14);
-      this.checkBoxFrom.TabIndex = 4;
-      this.checkBoxFrom.UseVisualStyleBackColor = true;
-      // 
       // checkBoxTo
       // 
       this.checkBoxTo.AutoSize = true;
-      this.checkBoxTo.Location = new System.Drawing.Point(10, 78);
+      this.checkBoxTo.Location = new System.Drawing.Point(10, 46);
       this.checkBoxTo.Name = "checkBoxTo";
       this.checkBoxTo.Size = new System.Drawing.Size(15, 14);
@@ -94,9 +89,11 @@
       this.textBoxTo.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
             | System.Windows.Forms.AnchorStyles.Right)));
-      this.textBoxTo.Location = new System.Drawing.Point(36, 75);
+      this.errorProvider.SetIconAlignment(this.textBoxTo, System.Windows.Forms.ErrorIconAlignment.TopLeft);
+      this.textBoxTo.Location = new System.Drawing.Point(67, 43);
       this.textBoxTo.Name = "textBoxTo";
       this.textBoxTo.ReadOnly = true;
-      this.textBoxTo.Size = new System.Drawing.Size(164, 20);
+      this.textBoxTo.Size = new System.Drawing.Size(253, 20);
       this.textBoxTo.TabIndex = 6;
+      this.textBoxTo.Validating += new System.ComponentModel.CancelEventHandler(this.textBoxTo_Validating);
       // 
       // label1
@@ -105,9 +102,23 @@
             | System.Windows.Forms.AnchorStyles.Right)));
       this.label1.AutoSize = true;
-      this.label1.Location = new System.Drawing.Point(7, 59);
+      this.label1.Location = new System.Drawing.Point(31, 46);
       this.label1.Name = "label1";
       this.label1.Size = new System.Drawing.Size(20, 13);
       this.label1.TabIndex = 5;
       this.label1.Text = "To";
+      // 
+      // checkBoxFrom
+      // 
+      this.checkBoxFrom.AutoSize = true;
+      this.checkBoxFrom.Location = new System.Drawing.Point(10, 20);
+      this.checkBoxFrom.Name = "checkBoxFrom";
+      this.checkBoxFrom.Size = new System.Drawing.Size(15, 14);
+      this.checkBoxFrom.TabIndex = 4;
+      this.checkBoxFrom.UseVisualStyleBackColor = true;
+      // 
+      // errorProvider
+      // 
+      this.errorProvider.BlinkStyle = System.Windows.Forms.ErrorBlinkStyle.NeverBlink;
+      this.errorProvider.ContainerControl = this;
       // 
       // NumericRangeControl
@@ -117,7 +128,8 @@
       this.Controls.Add(this.groupBox2);
       this.Name = "NumericRangeControl";
-      this.Size = new System.Drawing.Size(206, 112);
+      this.Size = new System.Drawing.Size(326, 75);
       this.groupBox2.ResumeLayout(false);
       this.groupBox2.PerformLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
       this.ResumeLayout(false);
 
@@ -132,4 +144,5 @@
     private System.Windows.Forms.Label label1;
     private System.Windows.Forms.CheckBox checkBoxFrom;
+    private System.Windows.Forms.ErrorProvider errorProvider;
   }
 }
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/NumericRangeControl.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/NumericRangeControl.cs	(revision 17443)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/NumericRangeControl.cs	(revision 17444)
@@ -33,4 +33,22 @@
       textBoxFrom.ReadOnly = !checkBoxFrom.Checked;
     }
+
+    private void textBoxFrom_Validating(object sender, CancelEventArgs e) {
+      if (string.IsNullOrWhiteSpace(textBoxFrom.Text)) {
+        errorProvider.SetError(textBoxFrom, "'From' must not be empty.");
+        e.Cancel = true;
+      } else {
+        errorProvider.SetError(textBoxFrom, null);
+      }
+    }
+
+    private void textBoxTo_Validating(object sender, CancelEventArgs e) {
+      if (string.IsNullOrWhiteSpace(textBoxTo.Text)) {
+        errorProvider.SetError(textBoxTo, "'To' must not be empty.");
+        e.Cancel = true;
+      } else {
+        errorProvider.SetError(textBoxTo, null);
+      }
+    }
   }
 }
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/NumericRangeControl.resx
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/NumericRangeControl.resx	(revision 17443)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Shared/NumericRangeControl.resx	(revision 17444)
@@ -118,3 +118,6 @@
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
+  <metadata name="errorProvider.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
 </root>
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/JsonItemVMBase.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/JsonItemVMBase.cs	(revision 17443)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/ViewModels/JsonItemVMBase.cs	(revision 17444)
@@ -9,5 +9,5 @@
 
 namespace HeuristicLab.JsonInterface.OptimizerIntegration {
-  public class JsonItemVMBase : INotifyPropertyChanged {
+  public class JsonItemVMBase : INotifyPropertyChanged, IDisposable {
     public event PropertyChangedEventHandler PropertyChanged;
     public event Action ItemChanged;
@@ -17,5 +17,7 @@
       get => item;
       set {
+        item?.LoosenPath();
         item = value;
+        item.FixatePath();
         ItemChanged?.Invoke();
       }
@@ -80,4 +82,23 @@
     }
 
+    #region IDisposable Support
+    private bool disposedValue = false; // To detect redundant calls
+
+    protected virtual void Dispose(bool disposing) {
+      if (!disposedValue) {
+        if (disposing) {
+          item.LoosenPath();
+          item = null;
+        }
+        disposedValue = true;
+      }
+    }
+
+    // This code added to correctly implement the disposable pattern.
+    public void Dispose() {
+      // Do not change this code. Put cleanup code in Dispose(bool disposing) above.
+      Dispose(true);
+    }
+    #endregion
   }
 }
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ExportJsonDialog.Designer.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ExportJsonDialog.Designer.cs	(revision 17443)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ExportJsonDialog.Designer.cs	(revision 17444)
@@ -33,10 +33,13 @@
       this.groupBox2 = new System.Windows.Forms.GroupBox();
       this.groupBox3 = new System.Windows.Forms.GroupBox();
+      this.treeViewResults = new System.Windows.Forms.TreeView();
       this.splitContainer2 = new System.Windows.Forms.SplitContainer();
       this.tabControl1 = new System.Windows.Forms.TabControl();
       this.tabPage1 = new System.Windows.Forms.TabPage();
       this.tabPage2 = new System.Windows.Forms.TabPage();
+      this.label1 = new System.Windows.Forms.Label();
+      this.textBoxTemplateName = new System.Windows.Forms.TextBox();
+      this.errorProvider = new System.Windows.Forms.ErrorProvider(this.components);
       this.jsonItemBindingSource = new System.Windows.Forms.BindingSource(this.components);
-      this.treeViewResults = new System.Windows.Forms.TreeView();
       this.groupBoxDetails.SuspendLayout();
       this.groupBox2.SuspendLayout();
@@ -49,4 +52,5 @@
       this.tabPage1.SuspendLayout();
       this.tabPage2.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
       ((System.ComponentModel.ISupportInitialize)(this.jsonItemBindingSource)).BeginInit();
       this.SuspendLayout();
@@ -60,9 +64,8 @@
       // exportButton
       // 
-      this.exportButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-      this.exportButton.Location = new System.Drawing.Point(591, 578);
+      this.exportButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.exportButton.Location = new System.Drawing.Point(629, 578);
       this.exportButton.Name = "exportButton";
-      this.exportButton.Size = new System.Drawing.Size(229, 29);
+      this.exportButton.Size = new System.Drawing.Size(191, 29);
       this.exportButton.TabIndex = 1;
       this.exportButton.Text = "Export";
@@ -78,5 +81,5 @@
       this.treeView.Location = new System.Drawing.Point(6, 19);
       this.treeView.Name = "treeView";
-      this.treeView.Size = new System.Drawing.Size(352, 497);
+      this.treeView.Size = new System.Drawing.Size(352, 471);
       this.treeView.TabIndex = 3;
       this.treeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView_AfterSelect);
@@ -90,5 +93,5 @@
       this.groupBoxDetails.Location = new System.Drawing.Point(3, 0);
       this.groupBoxDetails.Name = "groupBoxDetails";
-      this.groupBoxDetails.Size = new System.Drawing.Size(415, 522);
+      this.groupBoxDetails.Size = new System.Drawing.Size(415, 496);
       this.groupBoxDetails.TabIndex = 4;
       this.groupBoxDetails.TabStop = false;
@@ -103,5 +106,5 @@
       this.panel.Location = new System.Drawing.Point(7, 20);
       this.panel.Name = "panel";
-      this.panel.Size = new System.Drawing.Size(402, 496);
+      this.panel.Size = new System.Drawing.Size(402, 470);
       this.panel.TabIndex = 0;
       // 
@@ -114,5 +117,5 @@
       this.resultItems.Location = new System.Drawing.Point(6, 364);
       this.resultItems.Name = "resultItems";
-      this.resultItems.Size = new System.Drawing.Size(777, 154);
+      this.resultItems.Size = new System.Drawing.Size(777, 124);
       this.resultItems.TabIndex = 5;
       // 
@@ -125,5 +128,5 @@
       this.groupBox2.Location = new System.Drawing.Point(0, 0);
       this.groupBox2.Name = "groupBox2";
-      this.groupBox2.Size = new System.Drawing.Size(364, 522);
+      this.groupBox2.Size = new System.Drawing.Size(364, 496);
       this.groupBox2.TabIndex = 6;
       this.groupBox2.TabStop = false;
@@ -139,66 +142,8 @@
       this.groupBox3.Location = new System.Drawing.Point(6, 6);
       this.groupBox3.Name = "groupBox3";
-      this.groupBox3.Size = new System.Drawing.Size(789, 522);
+      this.groupBox3.Size = new System.Drawing.Size(789, 496);
       this.groupBox3.TabIndex = 7;
       this.groupBox3.TabStop = false;
       this.groupBox3.Text = "Result Elements";
-      // 
-      // splitContainer2
-      // 
-      this.splitContainer2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-      this.splitContainer2.Location = new System.Drawing.Point(6, 6);
-      this.splitContainer2.Name = "splitContainer2";
-      // 
-      // splitContainer2.Panel1
-      // 
-      this.splitContainer2.Panel1.Controls.Add(this.groupBox2);
-      // 
-      // splitContainer2.Panel2
-      // 
-      this.splitContainer2.Panel2.Controls.Add(this.groupBoxDetails);
-      this.splitContainer2.Size = new System.Drawing.Size(789, 522);
-      this.splitContainer2.SplitterDistance = 367;
-      this.splitContainer2.TabIndex = 9;
-      // 
-      // tabControl1
-      // 
-      this.tabControl1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-      this.tabControl1.Controls.Add(this.tabPage1);
-      this.tabControl1.Controls.Add(this.tabPage2);
-      this.tabControl1.Location = new System.Drawing.Point(12, 12);
-      this.tabControl1.Name = "tabControl1";
-      this.tabControl1.SelectedIndex = 0;
-      this.tabControl1.Size = new System.Drawing.Size(809, 560);
-      this.tabControl1.TabIndex = 10;
-      // 
-      // tabPage1
-      // 
-      this.tabPage1.Controls.Add(this.splitContainer2);
-      this.tabPage1.Location = new System.Drawing.Point(4, 22);
-      this.tabPage1.Name = "tabPage1";
-      this.tabPage1.Padding = new System.Windows.Forms.Padding(3);
-      this.tabPage1.Size = new System.Drawing.Size(801, 534);
-      this.tabPage1.TabIndex = 0;
-      this.tabPage1.Text = "Parameters";
-      this.tabPage1.UseVisualStyleBackColor = true;
-      // 
-      // tabPage2
-      // 
-      this.tabPage2.Controls.Add(this.groupBox3);
-      this.tabPage2.Location = new System.Drawing.Point(4, 22);
-      this.tabPage2.Name = "tabPage2";
-      this.tabPage2.Padding = new System.Windows.Forms.Padding(3);
-      this.tabPage2.Size = new System.Drawing.Size(801, 534);
-      this.tabPage2.TabIndex = 1;
-      this.tabPage2.Text = "Results";
-      this.tabPage2.UseVisualStyleBackColor = true;
-      // 
-      // jsonItemBindingSource
-      // 
-      this.jsonItemBindingSource.DataSource = typeof(HeuristicLab.JsonInterface.IJsonItem);
       // 
       // treeViewResults
@@ -210,4 +155,88 @@
       this.treeViewResults.TabIndex = 6;
       // 
+      // splitContainer2
+      // 
+      this.splitContainer2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.splitContainer2.Location = new System.Drawing.Point(6, 6);
+      this.splitContainer2.Name = "splitContainer2";
+      // 
+      // splitContainer2.Panel1
+      // 
+      this.splitContainer2.Panel1.Controls.Add(this.groupBox2);
+      // 
+      // splitContainer2.Panel2
+      // 
+      this.splitContainer2.Panel2.Controls.Add(this.groupBoxDetails);
+      this.splitContainer2.Size = new System.Drawing.Size(789, 496);
+      this.splitContainer2.SplitterDistance = 367;
+      this.splitContainer2.TabIndex = 9;
+      // 
+      // tabControl1
+      // 
+      this.tabControl1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.tabControl1.Controls.Add(this.tabPage1);
+      this.tabControl1.Controls.Add(this.tabPage2);
+      this.tabControl1.Location = new System.Drawing.Point(12, 38);
+      this.tabControl1.Name = "tabControl1";
+      this.tabControl1.SelectedIndex = 0;
+      this.tabControl1.Size = new System.Drawing.Size(809, 534);
+      this.tabControl1.TabIndex = 10;
+      // 
+      // tabPage1
+      // 
+      this.tabPage1.Controls.Add(this.splitContainer2);
+      this.tabPage1.Location = new System.Drawing.Point(4, 22);
+      this.tabPage1.Name = "tabPage1";
+      this.tabPage1.Padding = new System.Windows.Forms.Padding(3);
+      this.tabPage1.Size = new System.Drawing.Size(801, 508);
+      this.tabPage1.TabIndex = 0;
+      this.tabPage1.Text = "Parameters";
+      this.tabPage1.UseVisualStyleBackColor = true;
+      // 
+      // tabPage2
+      // 
+      this.tabPage2.Controls.Add(this.groupBox3);
+      this.tabPage2.Location = new System.Drawing.Point(4, 22);
+      this.tabPage2.Name = "tabPage2";
+      this.tabPage2.Padding = new System.Windows.Forms.Padding(3);
+      this.tabPage2.Size = new System.Drawing.Size(801, 508);
+      this.tabPage2.TabIndex = 1;
+      this.tabPage2.Text = "Results";
+      this.tabPage2.UseVisualStyleBackColor = true;
+      // 
+      // label1
+      // 
+      this.label1.AutoSize = true;
+      this.label1.Location = new System.Drawing.Point(12, 15);
+      this.label1.Name = "label1";
+      this.label1.Size = new System.Drawing.Size(82, 13);
+      this.label1.TabIndex = 11;
+      this.label1.Text = "Template Name";
+      // 
+      // textBoxTemplateName
+      // 
+      this.textBoxTemplateName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.errorProvider.SetIconAlignment(this.textBoxTemplateName, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
+      this.textBoxTemplateName.Location = new System.Drawing.Point(100, 12);
+      this.textBoxTemplateName.Name = "textBoxTemplateName";
+      this.textBoxTemplateName.Size = new System.Drawing.Size(720, 20);
+      this.textBoxTemplateName.TabIndex = 12;
+      this.textBoxTemplateName.Text = "Template";
+      this.textBoxTemplateName.Validating += new System.ComponentModel.CancelEventHandler(this.textBoxTemplateName_Validating);
+      // 
+      // errorProvider
+      // 
+      this.errorProvider.BlinkStyle = System.Windows.Forms.ErrorBlinkStyle.NeverBlink;
+      this.errorProvider.ContainerControl = this;
+      // 
+      // jsonItemBindingSource
+      // 
+      this.jsonItemBindingSource.DataSource = typeof(HeuristicLab.JsonInterface.IJsonItem);
+      // 
       // ExportJsonDialog
       // 
@@ -215,4 +244,6 @@
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
       this.ClientSize = new System.Drawing.Size(833, 619);
+      this.Controls.Add(this.textBoxTemplateName);
+      this.Controls.Add(this.label1);
       this.Controls.Add(this.exportButton);
       this.Controls.Add(this.tabControl1);
@@ -231,6 +262,8 @@
       this.tabPage1.ResumeLayout(false);
       this.tabPage2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
       ((System.ComponentModel.ISupportInitialize)(this.jsonItemBindingSource)).EndInit();
       this.ResumeLayout(false);
+      this.PerformLayout();
 
     }
@@ -253,4 +286,7 @@
     private System.Windows.Forms.TabPage tabPage2;
     private System.Windows.Forms.TreeView treeViewResults;
+    private System.Windows.Forms.Label label1;
+    private System.Windows.Forms.TextBox textBoxTemplateName;
+    private System.Windows.Forms.ErrorProvider errorProvider;
   }
 }
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ExportJsonDialog.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ExportJsonDialog.cs	(revision 17443)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ExportJsonDialog.cs	(revision 17444)
@@ -16,5 +16,5 @@
 namespace HeuristicLab.JsonInterface.OptimizerIntegration {
   public partial class ExportJsonDialog : Form {
-    private static SaveFileDialog SaveFileDialog { get; set; }
+    private static FolderBrowserDialog FolderBrowserDialog { get; set; }
     private IDictionary<int, UserControl> Hash2Control { get; set; } = new Dictionary<int, UserControl>();
     private IDictionary<TreeNode, JsonItemVMBase> Node2VM { get; set; } = new Dictionary<TreeNode, JsonItemVMBase>();
@@ -71,5 +71,5 @@
 
     private void exportButton_Click(object sender, EventArgs e) {
-      foreach(var x in VMs) {
+      foreach (var x in VMs) {
         if (!x.Selected) {
           x.Item.Parent.Children.Remove(x.Item);
@@ -77,10 +77,10 @@
       }
 
-      foreach(var x in ResultItems.Values) {
+      foreach (var x in ResultItems.Values) {
         x.Parent.Children.Remove(x);
       }
 
-      foreach(var x in resultItems.CheckedItems) {
-        if(ResultItems.TryGetValue((string)x, out IJsonItem item)) {
+      foreach (var x in resultItems.CheckedItems) {
+        if (ResultItems.TryGetValue((string)x, out IJsonItem item)) {
           Root.AddChildren(item);
         }
@@ -88,23 +88,24 @@
 
       IList<IJsonItem> faultyItems = new List<IJsonItem>();
-      if(!Root.GetValidator().Validate(ref faultyItems)) {
+      
+      if (!Root.GetValidator().Validate(ref faultyItems)) {
+        IList<Exception> list = new List<Exception>();
         //print faultyItems
+        foreach (var x in faultyItems) {
+          list.Add(new Exception($"Combination of value and range is not valid for {x.Name}"));
+        }
+        ErrorHandling.ShowErrorDialog(this, new AggregateException(list));
+      } else {
+        if (FolderBrowserDialog == null) {
+          FolderBrowserDialog = new FolderBrowserDialog();
+          FolderBrowserDialog.Description = "Select .json-Template Dictionary";
+        }
+
+        if (FolderBrowserDialog.ShowDialog() == DialogResult.OK) {
+          Generator.GenerateTemplate(FolderBrowserDialog.SelectedPath, textBoxTemplateName.Text, Optimizer, Root);
+        }
+
+        Close();
       }
-
-      if (SaveFileDialog == null) {
-        SaveFileDialog = new SaveFileDialog();
-        SaveFileDialog.Title = "Export .json-Template";
-        SaveFileDialog.DefaultExt = "json";
-        SaveFileDialog.Filter = ".json-Template|*.json|All Files|*.*";
-        SaveFileDialog.FilterIndex = 1;
-      }
-      
-      SaveFileDialog.FileName = "template";
-
-      if (SaveFileDialog.ShowDialog() == DialogResult.OK) {
-        Generator.GenerateTemplate(@"C:\Users\p41997\Desktop", "template", Optimizer, Root);
-      }
-
-      Close();
     }
 
@@ -162,4 +163,13 @@
       }
     }
+
+    private void textBoxTemplateName_Validating(object sender, CancelEventArgs e) {
+      if (string.IsNullOrWhiteSpace(textBoxTemplateName.Text)) {
+        errorProvider.SetError(textBoxTemplateName, "Template name must not be empty.");
+        e.Cancel = true;
+      } else {
+        errorProvider.SetError(textBoxTemplateName, null);
+      }
+    }
   }
 }
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ExportJsonDialog.resx
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ExportJsonDialog.resx	(revision 17443)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/ExportJsonDialog.resx	(revision 17444)
@@ -118,4 +118,7 @@
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
+  <metadata name="errorProvider.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>194, 17</value>
+  </metadata>
   <metadata name="jsonItemBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
     <value>17, 17</value>
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValueControl.Designer.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValueControl.Designer.cs	(revision 17443)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValueControl.Designer.cs	(revision 17444)
@@ -37,4 +37,5 @@
       this.textBoxValue.Size = new System.Drawing.Size(402, 20);
       this.textBoxValue.TabIndex = 14;
+      this.textBoxValue.Validating += new System.ComponentModel.CancelEventHandler(this.textBoxValue_Validating);
       // 
       // label2
@@ -51,7 +52,7 @@
       this.numericRangeControl1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
             | System.Windows.Forms.AnchorStyles.Right)));
-      this.numericRangeControl1.Location = new System.Drawing.Point(9, 127);
+      this.numericRangeControl1.Location = new System.Drawing.Point(9, 125);
       this.numericRangeControl1.Name = "numericRangeControl1";
-      this.numericRangeControl1.Size = new System.Drawing.Size(485, 112);
+      this.numericRangeControl1.Size = new System.Drawing.Size(485, 72);
       this.numericRangeControl1.TabIndex = 16;
       // 
@@ -64,5 +65,5 @@
       this.Controls.Add(this.textBoxValue);
       this.Name = "JsonItemValueControl";
-      this.Size = new System.Drawing.Size(500, 247);
+      this.Size = new System.Drawing.Size(500, 199);
       this.Controls.SetChildIndex(this.textBoxValue, 0);
       this.Controls.SetChildIndex(this.label2, 0);
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValueControl.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValueControl.cs	(revision 17443)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface.OptimizerIntegration/Views/JsonItemValueControl.cs	(revision 17444)
@@ -50,5 +50,5 @@
     }
     
-    protected void Init() {
+    protected void Init() { 
       TBValue.DataBindings.Add("Text", base.VM, ValuePropertyId);
       NumericRangeControl.TBMinRange.DataBindings.Add("Text", VM, nameof(RangedValueBaseVM.MinRange));
@@ -60,4 +60,12 @@
     }
 
+    private void textBoxValue_Validating(object sender, CancelEventArgs e) {
+      if (string.IsNullOrWhiteSpace(textBoxValue.Text)) {
+        errorProvider.SetError(textBoxValue, "Value must not be empty.");
+        e.Cancel = true;
+      } else {
+        errorProvider.SetError(textBoxValue, null);
+      }
+    }
   }
 }
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/AlgorithmConverter.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/AlgorithmConverter.cs	(revision 17443)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Converters/AlgorithmConverter.cs	(revision 17444)
@@ -16,7 +16,9 @@
       base.Inject(item, data, root);
       IAlgorithm algorithm = item as IAlgorithm;
-      IJsonItem problemData = data.Children.Where(x => x.Name == algorithm.Problem.ItemName).First();
-      root.Inject(algorithm.Problem, problemData, root);
-
+      var collection = data.Children.Where(x => x.Name == algorithm.Problem.ItemName);
+      if(collection.Count() > 0) {
+        IJsonItem problemData = collection.First();
+        root.Inject(algorithm.Problem, problemData, root);
+      }
     }
     
@@ -27,7 +29,5 @@
         item.AddChildren(new ResultItem() {
           Name = res.Name,
-          Description = res.Description,
-          Value = true,
-          Range = new object[] { true, false }
+          Description = res.Description
         });
       }
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Interfaces/IJsonItem.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Interfaces/IJsonItem.cs	(revision 17443)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Interfaces/IJsonItem.cs	(revision 17444)
@@ -33,4 +33,16 @@
 
     void AddChildren(IEnumerable<IJsonItem> childs);
+
+    /// <summary>
+    /// This method fixates the path. 
+    /// After calling, the path cannot be changed by changing the name or parent.
+    /// </summary>
+    void FixatePath();
+
+    /// <summary>
+    /// This method looses the path again after a call of FixatePath.
+    /// After calling, the path is calculated by the position in item tree again.
+    /// </summary>
+    void LoosenPath();
   }
 }
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/JsonItem.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/JsonItem.cs	(revision 17443)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/JsonItem.cs	(revision 17444)
@@ -45,6 +45,10 @@
     public virtual string Description { get; set; }
 
+    private string fixedPath = "";
     public virtual string Path {
       get {
+        if (!string.IsNullOrWhiteSpace(fixedPath))
+          return fixedPath;
+
         IJsonItem tmp = Parent;
         StringBuilder builder = new StringBuilder(this.Name);
@@ -57,4 +61,10 @@
     }
 
+    public virtual object Value { get; set; }
+
+    public virtual IEnumerable<object> Range { get; set; }
+    
+    public virtual string ActualName { get; set; }
+
     [JsonIgnore]
     public virtual IList<IJsonItem> Children { get; protected set; }
@@ -62,10 +72,4 @@
     [JsonIgnore]
     public virtual IJsonItem Parent { get; set; }
-
-    public virtual object Value { get; set; }
-
-    public virtual IEnumerable<object> Range { get; set; }
-    
-    public virtual string ActualName { get; set; }
 
     #region Constructors
@@ -97,4 +101,5 @@
 
     public void AddChildren(IEnumerable<IJsonItem> childs) {
+      if (childs == null) return;
       if (Children == null)
         Children = new List<IJsonItem>();
@@ -106,8 +111,11 @@
 
     public virtual IJsonItemValidator GetValidator() => new JsonItemValidator(this);
+
+    public void FixatePath() => fixedPath = Path;
+    public void LoosenPath() => fixedPath = "";
     #endregion
 
     #region Helper
-    protected bool IsInRange() {
+    protected virtual bool IsInRange() {
       bool b1 = true, b2 = true;
       if (Value is IEnumerable && !(Value is string)) {
Index: /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/JsonItems.cs
===================================================================
--- /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/JsonItems.cs	(revision 17443)
+++ /branches/3026_IntegrationIntoSymSpace/HeuristicLab.JsonInterface/Models/JsonItems.cs	(revision 17444)
@@ -9,10 +9,30 @@
   public class IntArrayJsonItem: JsonItem<int[], int> { }
   public class IntRangeJsonItem : JsonItem<int[], int> { }
-  public class IntMatrixJsonItem : JsonItem<int[][], int> { }
+  public class IntMatrixJsonItem : JsonItem<int[][], int> {
+    protected override bool IsInRange() {
+      for (int c = 0; c < Value.Length; ++c) {
+        for (int r = 0; r < Value[c].Length; ++r) {
+          if (Value[c][r] < Range.First() && Range.Last() < Value[c][r])
+            return false;
+        }
+      }
+      return true;
+    }
+  }
 
   public class DoubleJsonItem: JsonItem<double> {}
   public class DoubleArrayJsonItem: JsonItem<double[], double> { }
   public class DoubleRangeJsonItem : JsonItem<double[], double> { }
-  public class DoubleMatrixJsonItem : JsonItem<double[][], double> { }
+  public class DoubleMatrixJsonItem : JsonItem<double[][], double> {
+    protected override bool IsInRange() {
+      for(int c = 0; c < Value.Length; ++c) {
+        for(int r = 0; r < Value[c].Length; ++r) {
+          if (Value[c][r] < Range.First() && Range.Last() < Value[c][r])
+            return false;
+        }
+      }
+      return true;
+    }
+  }
 
   public class BoolJsonItem: JsonItem<bool> { }
