Index: trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Symbols/Argument.cs
===================================================================
--- trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Symbols/Argument.cs	(revision 3294)
+++ trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Symbols/Argument.cs	(revision 3338)
@@ -34,4 +34,16 @@
       }
     }
+
+    private int argumentIndex;
+    public int ArgumentIndex {
+      get { return argumentIndex; }
+    }
+
+    public Argument(int argumentIndex)
+      : base() {
+      this.argumentIndex = argumentIndex;
+      this.name = "ARG" + argumentIndex;
+    }
+
     public override SymbolicExpressionTreeNode CreateTreeNode() {
       return new ArgumentTreeNode(this);
Index: trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Symbols/ArgumentTreeNode.cs
===================================================================
--- trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Symbols/ArgumentTreeNode.cs	(revision 3294)
+++ trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Symbols/ArgumentTreeNode.cs	(revision 3338)
@@ -25,15 +25,16 @@
   [StorableClass]
   public sealed class ArgumentTreeNode : SymbolicExpressionTreeNode {
-    private int argumentIndex;
-    [Storable]
-    public int ArgumentIndex {
-      get { return argumentIndex; }
-      set { argumentIndex = value; }
+    public new Argument Symbol {
+      get { return (Argument)base.Symbol; }
+      set {
+        if (value == null) throw new ArgumentNullException();
+        if(!(value is Argument)) throw new ArgumentException();
+        base.Symbol = value; 
+      }
     }
-
+    
     // copy constructor
     private ArgumentTreeNode(ArgumentTreeNode original)
       : base(original) {
-      argumentIndex = original.argumentIndex;
     }
 
Index: trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Symbols/Defun.cs
===================================================================
--- trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Symbols/Defun.cs	(revision 3294)
+++ trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Symbols/Defun.cs	(revision 3338)
@@ -34,4 +34,5 @@
       }
     }
+
     public override SymbolicExpressionTreeNode CreateTreeNode() {
       return new DefunTreeNode(this);
Index: trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Symbols/DefunTreeNode.cs
===================================================================
--- trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Symbols/DefunTreeNode.cs	(revision 3294)
+++ trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Symbols/DefunTreeNode.cs	(revision 3338)
@@ -22,4 +22,5 @@
 using System;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Core;
 namespace HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.GeneralSymbols {
   [StorableClass]
@@ -31,9 +32,13 @@
       set { numberOfArguments = value; }
     }
-    private string name;
+    private string functionName;
     [Storable]
-    public string Name {
-      get { return name; }
-      set { this.name = value; }
+    public string FunctionName {
+      get { return functionName; }
+      set { this.functionName = value; }
+    }
+
+    private new Defun Symbol {
+      get { return (Defun)base.Symbol; }
     }
 
@@ -41,9 +46,10 @@
     private DefunTreeNode(DefunTreeNode original)
       : base(original) {
-      name = original.Name;
+      functionName = original.functionName;
       numberOfArguments = original.numberOfArguments;
     }
 
     public DefunTreeNode(Defun defunSymbol) : base(defunSymbol) { }
+
 
     public override object Clone() {
Index: trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Symbols/InvokeFunction.cs
===================================================================
--- trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Symbols/InvokeFunction.cs	(revision 3294)
+++ trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Symbols/InvokeFunction.cs	(revision 3338)
@@ -34,4 +34,12 @@
       }
     }
+    public string FunctionName { get; set; }
+
+    public InvokeFunction(string functionName)
+      : base() {
+      this.FunctionName = functionName;
+      this.name = "Invoke: " + functionName;
+    }
+
     public override SymbolicExpressionTreeNode CreateTreeNode() {
       return new InvokeFunctionTreeNode(this);
Index: trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Symbols/InvokeFunctionTreeNode.cs
===================================================================
--- trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Symbols/InvokeFunctionTreeNode.cs	(revision 3294)
+++ trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Symbols/InvokeFunctionTreeNode.cs	(revision 3338)
@@ -25,9 +25,6 @@
   [StorableClass]
   public sealed class InvokeFunctionTreeNode : SymbolicExpressionTreeNode {
-    private string invokedFunctionName;
-    [Storable]
-    public string InvokedFunctionName {
-      get { return invokedFunctionName; }
-      set { this.invokedFunctionName = value; }
+    public new InvokeFunction Symbol {
+      get { return (InvokeFunction)base.Symbol; }
     }
 
@@ -35,5 +32,4 @@
     private InvokeFunctionTreeNode(InvokeFunctionTreeNode original)
       : base(original) {
-      invokedFunctionName = original.invokedFunctionName;
     }
 
Index: trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Symbols/StartSymbol.cs
===================================================================
--- trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Symbols/StartSymbol.cs	(revision 3294)
+++ trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Symbols/StartSymbol.cs	(revision 3338)
@@ -31,4 +31,8 @@
       }
     }
+
+    public override SymbolicExpressionTreeNode CreateTreeNode() {
+      return new StartSymbolTreeNode(this);
+    }
   }
 }
Index: trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Symbols/StartSymbolTreeNode.cs
===================================================================
--- trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Symbols/StartSymbolTreeNode.cs	(revision 3338)
+++ trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Symbols/StartSymbolTreeNode.cs	(revision 3338)
@@ -0,0 +1,38 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+namespace HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.GeneralSymbols {
+  [StorableClass]
+  public sealed class StartSymbolTreeNode : SymbolicExpressionTreeNode {
+    // copy constructor
+    private StartSymbolTreeNode(StartSymbolTreeNode original)
+      : base(original) {
+    }
+
+    public StartSymbolTreeNode(StartSymbol startSymbol) : base(startSymbol) { }
+
+    public override object Clone() {
+      return new StartSymbolTreeNode(this);
+    }
+  }
+}
