Index: branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SingleObjective/StructuredSymbolicRegressionSingleObjectiveProblem.cs
===================================================================
--- branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SingleObjective/StructuredSymbolicRegressionSingleObjectiveProblem.cs	(revision 18066)
+++ branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SingleObjective/StructuredSymbolicRegressionSingleObjectiveProblem.cs	(revision 18067)
@@ -82,5 +82,5 @@
       Parameters.Add(new ValueParameter<ISymbolicDataAnalysisGrammar>(GrammarParameterName, grammar));
 
-      structureTemplate.Template = "f(x)*f(y)+5";
+      //structureTemplate.Template = "f(x)*f(y)+5";
     }
 
Index: branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/StructureTemplate/StructureTemplateView.Designer.cs
===================================================================
--- branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/StructureTemplate/StructureTemplateView.Designer.cs	(revision 18066)
+++ branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/StructureTemplate/StructureTemplateView.Designer.cs	(revision 18067)
@@ -1,3 +1,5 @@
 ﻿
+using System.Drawing;
+
 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Views {
   partial class StructureTemplateView {
@@ -25,4 +27,5 @@
     /// </summary>
     private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
       this.expressionInput = new System.Windows.Forms.TextBox();
       this.parseButton = new System.Windows.Forms.Button();
@@ -30,6 +33,7 @@
       this.symRegTreeChart = new HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views.GraphicalSymbolicExpressionTreeView();
       this.templateStructureGroupBox = new System.Windows.Forms.GroupBox();
+      this.treeChart = new HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views.SymbolicExpressionTreeChart();
       this.splitContainer = new System.Windows.Forms.SplitContainer();
-      this.subFunctionListView = new HeuristicLab.Problems.DataAnalysis.Symbolic.Views.SubFunctionListView();
+      this.viewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
       this.templateStructureGroupBox.SuspendLayout();
       ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit();
@@ -71,6 +75,5 @@
       // 
       this.symRegTreeChart.AllowDrop = true;
-      this.symRegTreeChart.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
+      this.symRegTreeChart.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
             | System.Windows.Forms.AnchorStyles.Right)));
       this.symRegTreeChart.Caption = "Graphical SymbolicExpressionTree View";
@@ -79,9 +82,10 @@
       this.symRegTreeChart.Name = "symRegTreeChart";
       this.symRegTreeChart.ReadOnly = false;
-      this.symRegTreeChart.Size = new System.Drawing.Size(288, 320);
+      this.symRegTreeChart.Size = new System.Drawing.Size(288, 153);
       this.symRegTreeChart.TabIndex = 6;
       // 
       // templateStructureGroupBox
       // 
+      this.templateStructureGroupBox.Controls.Add(this.treeChart);
       this.templateStructureGroupBox.Controls.Add(this.symRegTreeChart);
       this.templateStructureGroupBox.Controls.Add(this.parseButton);
@@ -95,4 +99,24 @@
       this.templateStructureGroupBox.TabStop = false;
       this.templateStructureGroupBox.Text = "Template Structure";
+      // 
+      // treeChart
+      // 
+      this.treeChart.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.treeChart.BackgroundColor = System.Drawing.Color.White;
+      this.treeChart.LineColor = System.Drawing.Color.Black;
+      this.treeChart.Location = new System.Drawing.Point(6, 233);
+      this.treeChart.MinimumHorizontalDistance = 30;
+      this.treeChart.MinimumHorizontalPadding = 20;
+      this.treeChart.MinimumVerticalDistance = 30;
+      this.treeChart.MinimumVerticalPadding = 20;
+      this.treeChart.Name = "treeChart";
+      this.treeChart.PreferredNodeHeight = 46;
+      this.treeChart.PreferredNodeWidth = 70;
+      this.treeChart.Size = new System.Drawing.Size(288, 150);
+      this.treeChart.SuspendRepaint = false;
+      this.treeChart.TabIndex = 7;
+      this.treeChart.TextFont = new System.Drawing.Font("Times New Roman", 8F);
+      this.treeChart.Tree = null;
       // 
       // splitContainer
@@ -110,5 +134,5 @@
       // splitContainer.Panel2
       // 
-      this.splitContainer.Panel2.Controls.Add(this.subFunctionListView);
+      this.splitContainer.Panel2.Controls.Add(this.viewHost);
       this.splitContainer.Panel2MinSize = 5;
       this.splitContainer.Size = new System.Drawing.Size(600, 400);
@@ -116,14 +140,17 @@
       this.splitContainer.TabIndex = 10;
       // 
-      // subFunctionListView
+      // viewHost
       // 
-      this.subFunctionListView.Caption = "View";
-      this.subFunctionListView.Content = null;
-      this.subFunctionListView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.subFunctionListView.Location = new System.Drawing.Point(0, 0);
-      this.subFunctionListView.Name = "subFunctionListView";
-      this.subFunctionListView.ReadOnly = false;
-      this.subFunctionListView.Size = new System.Drawing.Size(296, 400);
-      this.subFunctionListView.TabIndex = 7;
+      this.viewHost.Caption = "View";
+      this.viewHost.Content = null;
+      this.viewHost.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.viewHost.Enabled = false;
+      this.viewHost.Location = new System.Drawing.Point(0, 0);
+      this.viewHost.Name = "viewHost";
+      this.viewHost.ReadOnly = false;
+      this.viewHost.Size = new System.Drawing.Size(296, 400);
+      this.viewHost.TabIndex = 8;
+      this.viewHost.ViewsLabelVisible = true;
+      this.viewHost.ViewType = null;
       // 
       // StructureTemplateView
@@ -149,7 +176,8 @@
     private System.Windows.Forms.Label errorLabel;
     private Encodings.SymbolicExpressionTreeEncoding.Views.GraphicalSymbolicExpressionTreeView symRegTreeChart;
-    private SubFunctionListView subFunctionListView;
     private System.Windows.Forms.GroupBox templateStructureGroupBox;
     private System.Windows.Forms.SplitContainer splitContainer;
+    private Encodings.SymbolicExpressionTreeEncoding.Views.SymbolicExpressionTreeChart treeChart;
+    private MainForm.WindowsForms.ViewHost viewHost;
   }
 }
Index: branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/StructureTemplate/StructureTemplateView.cs
===================================================================
--- branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/StructureTemplate/StructureTemplateView.cs	(revision 18066)
+++ branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/StructureTemplate/StructureTemplateView.cs	(revision 18067)
@@ -8,4 +8,5 @@
 using HeuristicLab.Data;
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views;
 using HeuristicLab.MainForm;
 using HeuristicLab.MainForm.WindowsForms;
@@ -24,4 +25,13 @@
       InitializeComponent();
       errorLabel.Text = "";
+      treeChart.SymbolicExpressionTreeNodeClicked += TreeChart_SymbolicExpressionTreeNodeClicked;
+    }
+
+    private void TreeChart_SymbolicExpressionTreeNodeClicked(object sender, MouseEventArgs e) {
+      var visualTreeNode = sender as VisualTreeNode<ISymbolicExpressionTreeNode>;
+      if(visualTreeNode != null) {
+        var subFunctionTreeNode = visualTreeNode.Content as SubFunctionTreeNode;
+        viewHost.Content = subFunctionTreeNode?.SubFunction;
+      }
     }
 
@@ -32,6 +42,7 @@
       expressionInput.Text = Content.Template;
       symRegTreeChart.Content = Content.Tree;
-      subFunctionListView.Content = new ItemList<SubFunction>(Content.SubFunctions.Values).AsReadOnly();
-      
+
+      treeChart.Tree = Content.Tree;
+
       errorLabel.Text = "";
       
@@ -43,9 +54,5 @@
           Content.Template = expressionInput.Text;
           symRegTreeChart.Content = Content.Tree;
-
-          var subFunctionList = new ItemList<SubFunction>();
-          foreach (var func in Content.SubFunctions.Values)
-            subFunctionList.Add(func);
-          subFunctionListView.Content = subFunctionList.AsReadOnly();
+          treeChart.Tree = Content.Tree;
 
           errorLabel.Text = "Template structure successfully parsed.";
Index: branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Importer/InfixExpressionParser.cs
===================================================================
--- branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Importer/InfixExpressionParser.cs	(revision 18066)
+++ branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Importer/InfixExpressionParser.cs	(revision 18067)
@@ -81,4 +81,5 @@
     internal static readonly BidirectionalLookup<string, ISymbol>
       knownSymbols = new BidirectionalLookup<string, ISymbol>(StringComparer.InvariantCulture, new SymbolComparer());
+    internal static readonly SubFunctionSymbol subFunctionSymbol = new SubFunctionSymbol();
 
     private Constant constant = new Constant();
@@ -137,6 +138,6 @@
         { "XOR", new Xor()},
         { "DIFF", new Derivative()},
-        { "LAG", new LaggedVariable() },
-        { "F", new SubFunctionSymbol() }
+        { "LAG", new LaggedVariable() }/*,
+        { "F", new SubFunctionSymbol() }*/
       };
 
@@ -341,7 +342,8 @@
 
     private ISymbol GetSymbol(string tok) {
-      var symb = knownSymbols.GetByFirst(tok).FirstOrDefault();
-      if (symb == null) throw new ArgumentException(string.Format("Unknown token {0} found.", tok));
-      return symb;
+      if(knownSymbols.ContainsFirst(tok))
+        return knownSymbols.GetByFirst(tok).FirstOrDefault();
+      else
+        return subFunctionSymbol;
     }
 
@@ -453,13 +455,14 @@
             laggedVarNode.Lag = (int)Math.Round(sign * lagToken.doubleVal);
             laggedVarNode.Weight = 1.0;
-          } else if (funcNode.Symbol is SubFunctionSymbol) {
+          } else if (funcNode.Symbol is SubFunctionSymbol) { // SubFunction
             var subFunction = funcNode as SubFunctionTreeNode;
+            subFunction.Name = next.strVal;
             // input arguments
             var args = ParseArgList(tokens);
-            IList<string> functionArguments = new List<string>();
+            IList<string> arguments = new List<string>();
             foreach (var arg in args) 
               if(arg is VariableTreeNode varTreeNode)
-                functionArguments.Add(varTreeNode.VariableName);
-            subFunction.FunctionArguments = functionArguments;
+                arguments.Add(varTreeNode.VariableName);
+            subFunction.Arguments = arguments;
           } else {
             // functions
Index: branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/StructureTemplate/StructureTemplate.cs
===================================================================
--- branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/StructureTemplate/StructureTemplate.cs	(revision 18066)
+++ branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/StructureTemplate/StructureTemplate.cs	(revision 18067)
@@ -62,6 +62,6 @@
         if (node is SubFunctionTreeNode subFunctionTreeNode) { 
           var subFunction = new SubFunction() { 
-            Name = $"f{count++}({string.Join(",", subFunctionTreeNode.FunctionArguments)})", 
-            FunctionArguments = subFunctionTreeNode.FunctionArguments 
+            Name = $"f{count++}({string.Join(",", subFunctionTreeNode.Arguments)})", 
+            FunctionArguments = subFunctionTreeNode.Arguments 
           };
           subFunctionTreeNode.SubFunction = subFunction;
Index: branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/StructureTemplate/SubFunction.cs
===================================================================
--- branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/StructureTemplate/SubFunction.cs	(revision 18066)
+++ branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/StructureTemplate/SubFunction.cs	(revision 18067)
@@ -44,5 +44,5 @@
     }
 
-    public IEnumerable<string> FunctionArguments {
+    public IEnumerable<string> FunctionArguments { // TODO: gehört weg
       get => FunctionArgumentsParameter.Value.Select(x => x.Value); 
       set {
Index: branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Symbols/SubFunctionTreeNode.cs
===================================================================
--- branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Symbols/SubFunctionTreeNode.cs	(revision 18066)
+++ branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Symbols/SubFunctionTreeNode.cs	(revision 18067)
@@ -10,12 +10,14 @@
 namespace HeuristicLab.Problems.DataAnalysis.Symbolic {
   [StorableType("05130B5F-0125-4367-A4E9-C42D1085024E")]
-  public class SubFunctionTreeNode : SymbolicExpressionTreeNode {
+  public class SubFunctionTreeNode : SymbolicExpressionTreeNode { //TODO: as TerminalNode? -> but has children in a fully builded tree
 
     #region Properties
     public new SubFunctionSymbol Symbol => (SubFunctionSymbol)base.Symbol;
 
-    public IEnumerable<string> FunctionArguments { get; set; } = Enumerable.Empty<string>();
+    public IEnumerable<string> Arguments { get; set; } = Enumerable.Empty<string>();
     
     public SubFunction SubFunction { get; set; }
+
+    public string Name { get; set; }
     #endregion
 
@@ -34,4 +36,11 @@
     public override IDeepCloneable Clone(Cloner cloner) => new SubFunctionTreeNode(this, cloner);
     #endregion
+
+    public override string ToString() {
+      if (string.IsNullOrEmpty(Name))
+        return base.ToString();
+      return Name;
+    }
+    
   }
 }
