Index: branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolicExpressionGrammarAllowedChildSymbolsControl.cs
===================================================================
--- branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolicExpressionGrammarAllowedChildSymbolsControl.cs	(revision 6965)
+++ branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolicExpressionGrammarAllowedChildSymbolsControl.cs	(revision 7085)
@@ -96,6 +96,8 @@
         for (int i = 0; i < Grammar.GetMaximumSubtreeCount(Symbol); i++) {
           var node = new DummySymbol("Subtree " + i).CreateTreeNode();
+          var groupSymbols = grammar.GetAllowedChildSymbols(Symbol, i).OfType<GroupSymbol>().ToList();
           foreach (var childSymbol in Grammar.GetAllowedChildSymbols(Symbol, i)) {
-            node.AddSubtree(new SymbolicExpressionTreeNode(childSymbol));
+            if (!groupSymbols.Any(g => g != childSymbol && g.Flatten().Contains(childSymbol)))
+              node.AddSubtree(new SymbolicExpressionTreeNode(childSymbol));
           }
           tree.Root.AddSubtree(node);
@@ -192,5 +194,4 @@
           var node = visualNode.SymbolicExpressionTreeNode;
           var root = symbolicExpressionTreeChart.Tree.Root;
-          if (root.Symbol is ProgramRootSymbol) return;
           if (node == root || node.Parent == root) e.Effect = DragDropEffects.Copy;
         }
Index: branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolicExpressionGrammarEditorView.cs
===================================================================
--- branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolicExpressionGrammarEditorView.cs	(revision 6965)
+++ branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolicExpressionGrammarEditorView.cs	(revision 7085)
@@ -129,4 +129,7 @@
     private void UpdateChildTreeNodes(TreeNodeCollection collection, IEnumerable<ISymbol> symbols) {
       foreach (ISymbol symbol in symbols) {
+        if (symbol is ProgramRootSymbol) continue;
+        if (symbol is Defun) continue;
+
         TreeNode node = collection.Cast<TreeNode>().Where(n => n.Tag == symbol).FirstOrDefault();
         if (node == null) {
Index: branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolicExpressionGrammarSampleExpressionTreeView.Designer.cs
===================================================================
--- branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolicExpressionGrammarSampleExpressionTreeView.Designer.cs	(revision 6965)
+++ branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolicExpressionGrammarSampleExpressionTreeView.Designer.cs	(revision 7085)
@@ -52,4 +52,6 @@
       this.maxTreeDepthTextBox = new System.Windows.Forms.TextBox();
       this.generateSampleTreeButton = new System.Windows.Forms.Button();
+      this.treeCreatorComboBox = new System.Windows.Forms.ComboBox();
+      this.treeCreatorLabel = new System.Windows.Forms.Label();
       ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
       this.sampleTreeGroupBox.SuspendLayout();
@@ -69,11 +71,11 @@
       // sampleTreeGroupBox
       // 
-      this.sampleTreeGroupBox.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.sampleTreeGroupBox.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.sampleTreeGroupBox.Controls.Add(this.sampleTreeView);
-      this.sampleTreeGroupBox.Location = new System.Drawing.Point(3, 107);
+      this.sampleTreeGroupBox.Location = new System.Drawing.Point(3, 134);
       this.sampleTreeGroupBox.Name = "sampleTreeGroupBox";
-      this.sampleTreeGroupBox.Size = new System.Drawing.Size(431, 292);
+      this.sampleTreeGroupBox.Size = new System.Drawing.Size(431, 265);
       this.sampleTreeGroupBox.TabIndex = 3;
       this.sampleTreeGroupBox.TabStop = false;
@@ -89,5 +91,5 @@
       this.sampleTreeView.Name = "sampleTreeView";
       this.sampleTreeView.ReadOnly = false;
-      this.sampleTreeView.Size = new System.Drawing.Size(425, 273);
+      this.sampleTreeView.Size = new System.Drawing.Size(425, 246);
       this.sampleTreeView.TabIndex = 0;
       // 
@@ -112,6 +114,6 @@
       // maxTreeLengthTextBox
       // 
-      this.maxTreeLengthTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
+      this.maxTreeLengthTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
       this.maxTreeLengthTextBox.Location = new System.Drawing.Point(93, 26);
       this.maxTreeLengthTextBox.Name = "maxTreeLengthTextBox";
@@ -124,6 +126,6 @@
       // maxTreeDepthTextBox
       // 
-      this.maxTreeDepthTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
+      this.maxTreeDepthTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
       this.maxTreeDepthTextBox.Location = new System.Drawing.Point(93, 52);
       this.maxTreeDepthTextBox.Name = "maxTreeDepthTextBox";
@@ -136,7 +138,7 @@
       // generateSampleTreeButton
       // 
-      this.generateSampleTreeButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-      this.generateSampleTreeButton.Location = new System.Drawing.Point(3, 78);
+      this.generateSampleTreeButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.generateSampleTreeButton.Location = new System.Drawing.Point(6, 105);
       this.generateSampleTreeButton.Name = "generateSampleTreeButton";
       this.generateSampleTreeButton.Size = new System.Drawing.Size(431, 23);
@@ -146,11 +148,34 @@
       this.generateSampleTreeButton.Click += new System.EventHandler(this.generateSampleTreeButton_Click);
       // 
+      // treeCreatorComboBox
+      // 
+      this.treeCreatorComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.treeCreatorComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.treeCreatorComboBox.FormattingEnabled = true;
+      this.treeCreatorComboBox.Location = new System.Drawing.Point(93, 78);
+      this.treeCreatorComboBox.Name = "treeCreatorComboBox";
+      this.treeCreatorComboBox.Size = new System.Drawing.Size(341, 21);
+      this.treeCreatorComboBox.TabIndex = 9;
+      this.treeCreatorComboBox.SelectedIndexChanged += new System.EventHandler(this.treeCreatorComboBox_SelectedIndexChanged);
+      // 
+      // treeCreatorLabel
+      // 
+      this.treeCreatorLabel.AutoSize = true;
+      this.treeCreatorLabel.Location = new System.Drawing.Point(3, 81);
+      this.treeCreatorLabel.Name = "treeCreatorLabel";
+      this.treeCreatorLabel.Size = new System.Drawing.Size(69, 13);
+      this.treeCreatorLabel.TabIndex = 10;
+      this.treeCreatorLabel.Text = "Tree Creator:";
+      // 
       // SymbolicExpressionGrammarSampleExpressionTreeView
       // 
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.treeCreatorLabel);
       this.Controls.Add(this.sampleTreeGroupBox);
       this.Controls.Add(this.maxTreeDepthLabel);
       this.Controls.Add(this.maxTreeLengthTextBox);
+      this.Controls.Add(this.treeCreatorComboBox);
       this.Controls.Add(this.maxTreeLengthLabel);
       this.Controls.Add(this.maxTreeDepthTextBox);
@@ -161,7 +186,9 @@
       this.Controls.SetChildIndex(this.maxTreeDepthTextBox, 0);
       this.Controls.SetChildIndex(this.maxTreeLengthLabel, 0);
+      this.Controls.SetChildIndex(this.treeCreatorComboBox, 0);
       this.Controls.SetChildIndex(this.maxTreeLengthTextBox, 0);
       this.Controls.SetChildIndex(this.maxTreeDepthLabel, 0);
       this.Controls.SetChildIndex(this.sampleTreeGroupBox, 0);
+      this.Controls.SetChildIndex(this.treeCreatorLabel, 0);
       this.Controls.SetChildIndex(this.nameTextBox, 0);
       this.Controls.SetChildIndex(this.infoLabel, 0);
@@ -183,4 +210,6 @@
     private System.Windows.Forms.Button generateSampleTreeButton;
     private GraphicalSymbolicExpressionTreeView sampleTreeView;
+    private System.Windows.Forms.ComboBox treeCreatorComboBox;
+    private System.Windows.Forms.Label treeCreatorLabel;
   }
 }
Index: branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolicExpressionGrammarSampleExpressionTreeView.cs
===================================================================
--- branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolicExpressionGrammarSampleExpressionTreeView.cs	(revision 6965)
+++ branches/RegressionBenchmarks/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/SymbolicExpressionGrammarSampleExpressionTreeView.cs	(revision 7085)
@@ -39,4 +39,8 @@
       maxSampleTreeLength = int.Parse(maxTreeLengthTextBox.Text);
       maxSampleTreeDepth = int.Parse(maxTreeDepthTextBox.Text);
+      foreach (var treeCreator in ApplicationManager.Manager.GetInstances<ISymbolicExpressionTreeCreator>()) {
+        treeCreatorComboBox.Items.Add(treeCreator);
+      }
+      treeCreatorComboBox.SelectedIndex = 0;
     }
 
@@ -97,5 +101,6 @@
     private void UpdateSampleTreeView() {
       try {
-        ISymbolicExpressionTree tree = ProbabilisticTreeCreator.Create(random, Content, MaxSampleTreeLength, MaxSampleTreeDepth);
+        ISymbolicExpressionTreeCreator creator = (ISymbolicExpressionTreeCreator)treeCreatorComboBox.SelectedItem;
+        ISymbolicExpressionTree tree = creator.CreateTree(random, Content, MaxSampleTreeLength, MaxSampleTreeDepth);
         foreach (var node in tree.Root.IterateNodesPrefix().OfType<SymbolicExpressionTreeTopLevelNode>())
           node.SetGrammar(null);
@@ -147,4 +152,7 @@
     }
     #endregion
+
+    private void treeCreatorComboBox_SelectedIndexChanged(object sender, EventArgs e) {
+    }
   }
 }
