Index: trunk/sources/HeuristicLab.GP.Boolean/3.3/And.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.Boolean/3.3/And.cs	(revision 2174)
+++ 	(revision )
@@ -1,45 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 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 System.Collections.Generic;
-using System.Text;
-using HeuristicLab.Data;
-using HeuristicLab.Core;
-using System.Xml;
-using HeuristicLab.Constraints;
-using HeuristicLab.DataAnalysis;
-
-namespace HeuristicLab.GP.Boolean{
-  public sealed class And : FunctionBase {
-
-    public override string Description {
-      get { return ""; }
-    }
-
-    public And()
-      : base() {
-      AddConstraint(new NumberOfSubOperatorsConstraint(2, 2));
-      AddConstraint(new SubOperatorTypeConstraint(0));
-      AddConstraint(new SubOperatorTypeConstraint(1));
-    }
-  }
-}
Index: trunk/sources/HeuristicLab.GP.Boolean/3.3/BooleanTreeInterpreter.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.Boolean/3.3/BooleanTreeInterpreter.cs	(revision 2174)
+++ trunk/sources/HeuristicLab.GP.Boolean/3.3/BooleanTreeInterpreter.cs	(revision 2222)
@@ -24,9 +24,10 @@
 using System.Linq;
 using System.Text;
-using HeuristicLab.DataAnalysis;
 using HeuristicLab.Core;
 using System.Xml;
 using System.Diagnostics;
 using HeuristicLab.Data;
+using HeuristicLab.GP.Interfaces;
+using HeuristicLab.DataAnalysis;
 
 namespace HeuristicLab.GP.Boolean {
@@ -34,12 +35,11 @@
     private const double EPSILON = 0.00001;
     private Dataset dataset;
-    private List<LightWeightFunction> expression;
+    private IFunctionTree tree;
     private int targetVariable;
     private int currentRow;
-    private int pc;
 
-    public void Reset(Dataset dataset, BakedFunctionTree tree, int targetVariable) {
+    public void Reset(Dataset dataset, IFunctionTree tree, int targetVariable) {
       this.dataset = dataset;
-      this.expression = tree.LinearRepresentation;
+      this.tree = tree;
       this.targetVariable = targetVariable;
     }
@@ -48,7 +48,6 @@
       int errors = 0;
       for (int i = start; i < end; i++) {
-        pc = 0;
         currentRow = i;
-        int result = Step() ? 1 : 0;
+        int result = Step(tree) ? 1 : 0;
         if (Math.Abs(result - dataset.GetValue(i, targetVariable)) > EPSILON) errors++;
       }
@@ -56,21 +55,26 @@
     }
 
-    internal bool Step() {
-      LightWeightFunction curFun = expression[pc++];
-      int symbol = SymbolTable.MapFunction(curFun.functionType);
+    internal bool Step(IFunctionTree t) {
+      int symbol = SymbolTable.MapFunction(t.Function);
       switch (symbol) {
-        case SymbolTable.AND: return Step() & Step();
-        case SymbolTable.OR: return Step() | Step();
-        case SymbolTable.NOT: return !Step();
-        case SymbolTable.XOR: return Step() ^ Step();
-        case SymbolTable.NAND: return !(Step() & Step());
-        case SymbolTable.NOR: return !(Step() | Step());
-        case SymbolTable.VARIABLE:
-          return dataset.GetValue(currentRow, (int)curFun.localData[0]) != 0.0;
+        case SymbolTable.AND: return Step(t.SubTrees[0]) && Step(t.SubTrees[1]);
+        case SymbolTable.OR: return Step(t.SubTrees[0]) || Step(t.SubTrees[1]);
+        case SymbolTable.NOT: return !Step(t.SubTrees[0]);
+        case SymbolTable.XOR: return Step(t.SubTrees[0]) ^ Step(t.SubTrees[1]);
+        case SymbolTable.NAND: return !(Step(t.SubTrees[0]) && Step(t.SubTrees[1]));
+        case SymbolTable.NOR: return !(Step(t.SubTrees[0]) || Step(t.SubTrees[1]));
+        case SymbolTable.VARIABLE: {
+            var varNode = (VariableFunctionTree)t;
+            int index = dataset.GetVariableIndex(varNode.VariableName);
+            return !IsAlmost(dataset.GetValue(currentRow, index), 0.0);
+          }
         case SymbolTable.UNKNOWN:
         default:
-          throw new InvalidOperationException(curFun.functionType.ToString());
+          throw new UnknownFunctionException(t.Function.Name);
+      }
+    }
 
-      }
+    private bool IsAlmost(double x, double y) {
+      return Math.Abs(x - y) < EPSILON;
     }
   }
Index: trunk/sources/HeuristicLab.GP.Boolean/3.3/Evaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.Boolean/3.3/Evaluator.cs	(revision 2174)
+++ trunk/sources/HeuristicLab.GP.Boolean/3.3/Evaluator.cs	(revision 2222)
@@ -26,4 +26,5 @@
 using HeuristicLab.Core;
 using HeuristicLab.Data;
+using HeuristicLab.GP.Interfaces;
 using HeuristicLab.DataAnalysis;
 
@@ -32,5 +33,5 @@
     public Evaluator()
       : base() {
-      AddVariableInfo(new VariableInfo("FunctionTree", "The function tree representing the ant", typeof(BakedFunctionTree), VariableKind.In));
+      AddVariableInfo(new VariableInfo("FunctionTree", "The function tree representing the boolean expression to evaluate", typeof(IGeneticProgrammingModel), VariableKind.In));
       AddVariableInfo(new VariableInfo("Dataset", "The boolean dataset (values 0.0 = false, 1.0=true)", typeof(Dataset), VariableKind.In));
       AddVariableInfo(new VariableInfo("TargetVariable", "Index of the column of the dataset that holds the target variable", typeof(IntData), VariableKind.In));
@@ -41,5 +42,5 @@
 
     public override IOperation Apply(IScope scope) {
-      BakedFunctionTree tree = GetVariableValue<BakedFunctionTree>("FunctionTree", scope, true);
+      IGeneticProgrammingModel gpModel = GetVariableValue<IGeneticProgrammingModel>("FunctionTree", scope, true);
       Dataset dataset = GetVariableValue<Dataset>("Dataset", scope, true);
       int targetVariable = GetVariableValue<IntData>("TargetVariable", scope, true).Data;
@@ -48,5 +49,5 @@
 
       BooleanTreeInterpreter interpreter = new BooleanTreeInterpreter();
-      interpreter.Reset(dataset, tree, targetVariable);
+      interpreter.Reset(dataset, gpModel.FunctionTree, targetVariable);
       int errors = interpreter.GetNumberOfErrors(start, end);
 
Index: trunk/sources/HeuristicLab.GP.Boolean/3.3/FunctionLibraryInjector.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.Boolean/3.3/FunctionLibraryInjector.cs	(revision 2174)
+++ trunk/sources/HeuristicLab.GP.Boolean/3.3/FunctionLibraryInjector.cs	(revision 2222)
@@ -27,14 +27,9 @@
 using HeuristicLab.Data;
 using HeuristicLab.DataAnalysis;
-using HeuristicLab.Constraints;
+using HeuristicLab.GP.Interfaces;
+using HeuristicLab.GP.SantaFe;
 
 namespace HeuristicLab.GP.Boolean {
-  public class FunctionLibraryInjector : OperatorBase {
-    private const string TARGETVARIABLE = "TargetVariable";
-    private const string OPERATORLIBRARY = "FunctionLibrary";
-
-    private GPOperatorLibrary operatorLibrary;
-    private Variable variable;
-
+  public class FunctionLibraryInjector : FunctionLibraryInjectorBase {
     public override string Description {
       get { return @"Injects a function library for boolean logic."; }
@@ -43,33 +38,22 @@
     public FunctionLibraryInjector()
       : base() {
-      AddVariableInfo(new VariableInfo(TARGETVARIABLE, "The target variable", typeof(IntData), VariableKind.In));
-      AddVariableInfo(new VariableInfo(OPERATORLIBRARY, "Preconfigured default operator library", typeof(GPOperatorLibrary), VariableKind.New));
     }
 
-    public override IOperation Apply(IScope scope) {
-      int targetVariable = GetVariableValue<IntData>(TARGETVARIABLE, scope, true).Data;
-
-      InitDefaultOperatorLibrary();
-
-      scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName(OPERATORLIBRARY), operatorLibrary));
-      return null;
-    }
-
-    private void InitDefaultOperatorLibrary() {
+    protected override FunctionLibrary CreateFunctionLibrary() {
       And and = new And();
       Or or = new Or();
-      //Not not = new Not();
+      Not not = new Not();
       Nand nand = new Nand();
       Nor nor = new Nor();
-      //Xor xor = new Xor();
-      variable = new HeuristicLab.GP.Boolean.Variable();
+      Xor xor = new Xor();
+      Variable variable = new Variable();
 
       IFunction[] allFunctions = new IFunction[] {
         and,
         or,
-        //not,
+        not,
         nand,
         nor,
-        //xor,
+        xor,
         variable
       };
@@ -77,35 +61,18 @@
       SetAllowedSubOperators(and, allFunctions);
       SetAllowedSubOperators(or, allFunctions);
-      //SetAllowedSubOperators(not, allFunctions);
+      SetAllowedSubOperators(not, allFunctions);
       SetAllowedSubOperators(nand, allFunctions);
       SetAllowedSubOperators(nor, allFunctions);
-      //SetAllowedSubOperators(xor, allFunctions);
+      SetAllowedSubOperators(xor, allFunctions);
 
-      operatorLibrary = new GPOperatorLibrary();
-      operatorLibrary.GPOperatorGroup.AddOperator(and);
-      operatorLibrary.GPOperatorGroup.AddOperator(or);
-      //operatorLibrary.GPOperatorGroup.AddOperator(not);
-      operatorLibrary.GPOperatorGroup.AddOperator(nand);
-      operatorLibrary.GPOperatorGroup.AddOperator(nor);
-      //operatorLibrary.GPOperatorGroup.AddOperator(xor);
-      operatorLibrary.GPOperatorGroup.AddOperator(variable);
-    }
-
-    private void SetAllowedSubOperators(IFunction f, IFunction[] gs) {
-      foreach (IConstraint c in f.Constraints) {
-        if (c is SubOperatorTypeConstraint) {
-          SubOperatorTypeConstraint typeConstraint = c as SubOperatorTypeConstraint;
-          typeConstraint.Clear();
-          foreach (IFunction g in gs) {
-            typeConstraint.AddOperator(g);
-          }
-        } else if (c is AllSubOperatorsTypeConstraint) {
-          AllSubOperatorsTypeConstraint typeConstraint = c as AllSubOperatorsTypeConstraint;
-          typeConstraint.Clear();
-          foreach (IFunction g in gs) {
-            typeConstraint.AddOperator(g);
-          }
-        }
-      }
+      var functionLibrary = new FunctionLibrary();
+      functionLibrary.AddFunction(and);
+      functionLibrary.AddFunction(or);
+      functionLibrary.AddFunction(not);
+      functionLibrary.AddFunction(nand);
+      functionLibrary.AddFunction(nor);
+      functionLibrary.AddFunction(xor);
+      functionLibrary.AddFunction(variable);
+      return functionLibrary;
     }
   }
Index: trunk/sources/HeuristicLab.GP.Boolean/3.3/HeuristicLab.GP.Boolean-3.3.csproj
===================================================================
--- trunk/sources/HeuristicLab.GP.Boolean/3.3/HeuristicLab.GP.Boolean-3.3.csproj	(revision 2174)
+++ trunk/sources/HeuristicLab.GP.Boolean/3.3/HeuristicLab.GP.Boolean-3.3.csproj	(revision 2222)
@@ -81,16 +81,17 @@
   <ItemGroup>
     <Compile Include="BooleanTreeInterpreter.cs" />
-    <Compile Include="Not.cs" />
-    <Compile Include="Xor.cs" />
-    <Compile Include="Or.cs" />
-    <Compile Include="Nand.cs" />
-    <Compile Include="Nor.cs" />
+    <Compile Include="Symbols\And.cs" />
+    <Compile Include="Symbols\Nand.cs" />
+    <Compile Include="Symbols\Nor.cs" />
+    <Compile Include="Symbols\Not.cs" />
+    <Compile Include="Symbols\Or.cs" />
+    <Compile Include="Symbols\SymbolTable.cs" />
+    <Compile Include="Symbols\Variable.cs" />
+    <Compile Include="Symbols\VariableFunctionTree.cs" />
+    <Compile Include="Symbols\Xor.cs" />
     <Compile Include="Evaluator.cs" />
     <Compile Include="FunctionLibraryInjector.cs" />
     <Compile Include="HeuristicLabGPBooleanPlugin.cs" />
-    <Compile Include="And.cs" />
-    <Compile Include="Variable.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="SymbolTable.cs" />
   </ItemGroup>
   <ItemGroup>
@@ -99,8 +100,4 @@
   </ItemGroup>
   <ItemGroup>
-    <ProjectReference Include="..\..\HeuristicLab.Constraints\3.2\HeuristicLab.Constraints-3.2.csproj">
-      <Project>{FCD62C6F-4793-4593-AE9A-0BDCA256EE99}</Project>
-      <Name>HeuristicLab.Constraints-3.2</Name>
-    </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Core\3.2\HeuristicLab.Core-3.2.csproj">
       <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
@@ -114,4 +111,8 @@
       <Project>{F473D9AF-3F09-4296-9F28-3C65118DAFFA}</Project>
       <Name>HeuristicLab.Data-3.2</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.GP.Interfaces\3.3\HeuristicLab.GP.Interfaces-3.3.csproj">
+      <Project>{924B6BEA-9A99-40FE-9334-5C01E8D540EC}</Project>
+      <Name>HeuristicLab.GP.Interfaces-3.3</Name>
     </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.GP\3.3\HeuristicLab.GP-3.3.csproj">
Index: trunk/sources/HeuristicLab.GP.Boolean/3.3/HeuristicLabGPBooleanPlugin.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.Boolean/3.3/HeuristicLabGPBooleanPlugin.cs	(revision 2174)
+++ trunk/sources/HeuristicLab.GP.Boolean/3.3/HeuristicLabGPBooleanPlugin.cs	(revision 2222)
@@ -28,9 +28,9 @@
   [ClassInfo(Name = "HeuristicLab.GP.Boolean-3.3")]
   [PluginFile(Filename = "HeuristicLab.GP.Boolean-3.3.dll", Filetype = PluginFileType.Assembly)]
-  [Dependency(Dependency = "HeuristicLab.Constraints-3.2")]
-  [Dependency(Dependency = "HeuristicLab.GP-3.3")]
   [Dependency(Dependency = "HeuristicLab.Core-3.2")]
   [Dependency(Dependency = "HeuristicLab.Data-3.2")]
   [Dependency(Dependency = "HeuristicLab.DataAnalysis-3.2")]
+  [Dependency(Dependency = "HeuristicLab.GP-3.3")]
+  [Dependency(Dependency = "HeuristicLab.GP.Interfaces-3.3")]
   [Dependency(Dependency = "HeuristicLab.Operators-3.2")]
   [Dependency(Dependency = "HeuristicLab.Random-3.2")]
Index: trunk/sources/HeuristicLab.GP.Boolean/3.3/Nand.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.Boolean/3.3/Nand.cs	(revision 2174)
+++ 	(revision )
@@ -1,45 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 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 System.Collections.Generic;
-using System.Text;
-using HeuristicLab.Data;
-using HeuristicLab.Core;
-using System.Xml;
-using HeuristicLab.Constraints;
-using HeuristicLab.DataAnalysis;
-
-namespace HeuristicLab.GP.Boolean{
-  public sealed class Nand : FunctionBase {
-
-    public override string Description {
-      get { return ""; }
-    }
-
-    public Nand()
-      : base() {
-      AddConstraint(new NumberOfSubOperatorsConstraint(2, 2));
-      AddConstraint(new SubOperatorTypeConstraint(0));
-      AddConstraint(new SubOperatorTypeConstraint(1));
-    }
-  }
-}
Index: trunk/sources/HeuristicLab.GP.Boolean/3.3/Nor.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.Boolean/3.3/Nor.cs	(revision 2174)
+++ 	(revision )
@@ -1,45 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 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 System.Collections.Generic;
-using System.Text;
-using HeuristicLab.Data;
-using HeuristicLab.Core;
-using System.Xml;
-using HeuristicLab.Constraints;
-using HeuristicLab.DataAnalysis;
-
-namespace HeuristicLab.GP.Boolean{
-  public sealed class Nor : FunctionBase {
-
-    public override string Description {
-      get { return ""; }
-    }
-
-    public Nor()
-      : base() {
-      AddConstraint(new NumberOfSubOperatorsConstraint(2, 2));
-      AddConstraint(new SubOperatorTypeConstraint(0));
-      AddConstraint(new SubOperatorTypeConstraint(1));
-    }
-  }
-}
Index: trunk/sources/HeuristicLab.GP.Boolean/3.3/Not.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.Boolean/3.3/Not.cs	(revision 2174)
+++ 	(revision )
@@ -1,44 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 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 System.Collections.Generic;
-using System.Text;
-using HeuristicLab.Data;
-using HeuristicLab.Core;
-using System.Xml;
-using HeuristicLab.Constraints;
-using HeuristicLab.DataAnalysis;
-
-namespace HeuristicLab.GP.Boolean{
-  public sealed class Not : FunctionBase {
-
-    public override string Description {
-      get { return ""; }
-    }
-
-    public Not()
-      : base() {
-      AddConstraint(new NumberOfSubOperatorsConstraint(1, 1));
-      AddConstraint(new SubOperatorTypeConstraint(0));
-    }
-  }
-}
Index: trunk/sources/HeuristicLab.GP.Boolean/3.3/Or.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.Boolean/3.3/Or.cs	(revision 2174)
+++ 	(revision )
@@ -1,45 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 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 System.Collections.Generic;
-using System.Text;
-using HeuristicLab.Data;
-using HeuristicLab.Core;
-using System.Xml;
-using HeuristicLab.Constraints;
-using HeuristicLab.DataAnalysis;
-
-namespace HeuristicLab.GP.Boolean{
-  public sealed class Or : FunctionBase {
-
-    public override string Description {
-      get { return ""; }
-    }
-
-    public Or()
-      : base() {
-      AddConstraint(new NumberOfSubOperatorsConstraint(2, 2));
-      AddConstraint(new SubOperatorTypeConstraint(0));
-      AddConstraint(new SubOperatorTypeConstraint(1));
-    }
-  }
-}
Index: trunk/sources/HeuristicLab.GP.Boolean/3.3/SymbolTable.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.Boolean/3.3/SymbolTable.cs	(revision 2174)
+++ 	(revision )
@@ -1,58 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 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 System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using HeuristicLab.Core;
-using System.Xml;
-
-namespace HeuristicLab.GP.Boolean {
-  class SymbolTable : StorableBase {
-    public const int VARIABLE = 1;
-    public const int NOT = 2;
-    public const int AND = 3;
-    public const int OR = 4;
-    public const int NAND = 5;
-    public const int NOR = 6;
-    public const int XOR = 7;
-    public const int UNKNOWN = 8;
-    private static Dictionary<Type, int> staticTypes = new Dictionary<Type, int>();
-
-    // needs to be public for persistence mechanism (Activator.CreateInstance needs empty constructor)
-    static SymbolTable() {
-      staticTypes = new Dictionary<Type, int>();
-      staticTypes[typeof(Variable)] = VARIABLE;
-      staticTypes[typeof(Not)] = NOT;
-      staticTypes[typeof(And)] = AND;
-      staticTypes[typeof(Or)] = OR;
-      staticTypes[typeof(Nand)] = NAND;
-      staticTypes[typeof(Nor)] = NOR;
-      staticTypes[typeof(Xor)] = XOR;
-    }
-
-    internal static int MapFunction(IFunction function) {
-      if(staticTypes.ContainsKey(function.GetType())) return staticTypes[function.GetType()];
-      else return UNKNOWN;
-    }
-  }
-}
Index: trunk/sources/HeuristicLab.GP.Boolean/3.3/Symbols/And.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.Boolean/3.3/Symbols/And.cs	(revision 2222)
+++ trunk/sources/HeuristicLab.GP.Boolean/3.3/Symbols/And.cs	(revision 2222)
@@ -0,0 +1,26 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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
+
+
+namespace HeuristicLab.GP.Boolean{
+  public sealed class And : BinaryFunction {
+  }
+}
Index: trunk/sources/HeuristicLab.GP.Boolean/3.3/Symbols/Nand.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.Boolean/3.3/Symbols/Nand.cs	(revision 2222)
+++ trunk/sources/HeuristicLab.GP.Boolean/3.3/Symbols/Nand.cs	(revision 2222)
@@ -0,0 +1,26 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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
+
+
+namespace HeuristicLab.GP.Boolean{
+  public sealed class Nand : BinaryFunction {
+  }
+}
Index: trunk/sources/HeuristicLab.GP.Boolean/3.3/Symbols/Nor.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.Boolean/3.3/Symbols/Nor.cs	(revision 2222)
+++ trunk/sources/HeuristicLab.GP.Boolean/3.3/Symbols/Nor.cs	(revision 2222)
@@ -0,0 +1,25 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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
+
+namespace HeuristicLab.GP.Boolean{
+  public sealed class Nor : BinaryFunction {
+  }
+}
Index: trunk/sources/HeuristicLab.GP.Boolean/3.3/Symbols/Not.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.Boolean/3.3/Symbols/Not.cs	(revision 2222)
+++ trunk/sources/HeuristicLab.GP.Boolean/3.3/Symbols/Not.cs	(revision 2222)
@@ -0,0 +1,25 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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
+
+namespace HeuristicLab.GP.Boolean{
+  public sealed class Not : UnaryFunction {
+  }
+}
Index: trunk/sources/HeuristicLab.GP.Boolean/3.3/Symbols/Or.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.Boolean/3.3/Symbols/Or.cs	(revision 2222)
+++ trunk/sources/HeuristicLab.GP.Boolean/3.3/Symbols/Or.cs	(revision 2222)
@@ -0,0 +1,25 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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
+
+namespace HeuristicLab.GP.Boolean{
+  public sealed class Or : BinaryFunction {
+  }
+}
Index: trunk/sources/HeuristicLab.GP.Boolean/3.3/Symbols/SymbolTable.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.Boolean/3.3/Symbols/SymbolTable.cs	(revision 2222)
+++ trunk/sources/HeuristicLab.GP.Boolean/3.3/Symbols/SymbolTable.cs	(revision 2222)
@@ -0,0 +1,56 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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 System.Collections.Generic;
+using HeuristicLab.Core;
+using HeuristicLab.GP.Interfaces;
+
+namespace HeuristicLab.GP.Boolean {
+  class SymbolTable : StorableBase {
+    public const int VARIABLE = 1;
+    public const int NOT = 2;
+    public const int AND = 3;
+    public const int OR = 4;
+    public const int NAND = 5;
+    public const int NOR = 6;
+    public const int XOR = 7;
+    public const int UNKNOWN = 8;
+    private static Dictionary<Type, int> staticTypes = new Dictionary<Type, int>();
+
+    // needs to be public for persistence mechanism (Activator.CreateInstance needs empty constructor)
+    static SymbolTable() {
+      staticTypes = new Dictionary<Type, int>();
+      staticTypes[typeof(Variable)] = VARIABLE;
+      staticTypes[typeof(Not)] = NOT;
+      staticTypes[typeof(And)] = AND;
+      staticTypes[typeof(Or)] = OR;
+      staticTypes[typeof(Nand)] = NAND;
+      staticTypes[typeof(Nor)] = NOR;
+      staticTypes[typeof(Xor)] = XOR;
+    }
+
+    internal static int MapFunction(IFunction function) {
+      if(staticTypes.ContainsKey(function.GetType())) return staticTypes[function.GetType()];
+      else return UNKNOWN;
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.GP.Boolean/3.3/Symbols/Variable.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.Boolean/3.3/Symbols/Variable.cs	(revision 2222)
+++ trunk/sources/HeuristicLab.GP.Boolean/3.3/Symbols/Variable.cs	(revision 2222)
@@ -0,0 +1,76 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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 System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Data;
+using HeuristicLab.Core;
+using System.Xml;
+using HeuristicLab.Operators;
+using HeuristicLab.Random;
+
+namespace HeuristicLab.GP.Boolean {
+  public sealed class Variable : Terminal {
+    public const string VARIABLENAME = "Variable";
+
+    public Variable()
+      : base() {
+      SetupInitialization();
+      SetupManipulation();
+    }
+
+    public override HeuristicLab.GP.Interfaces.IFunctionTree GetTreeNode() {
+      return new VariableFunctionTree(this);
+    }
+
+    private void SetupInitialization() {
+      CombinedOperator combinedOp = new CombinedOperator();
+      SequentialProcessor seq = new SequentialProcessor();
+      UniformItemChooser variableRandomizer = new UniformItemChooser();
+      variableRandomizer.GetVariableInfo("Value").ActualName = VARIABLENAME;
+      variableRandomizer.GetVariableInfo("Values").ActualName = "InputVariables";
+      variableRandomizer.Name = "Variable randomizer";
+
+      combinedOp.OperatorGraph.AddOperator(seq);
+      combinedOp.OperatorGraph.AddOperator(variableRandomizer);
+      combinedOp.OperatorGraph.InitialOperator = seq;
+      seq.AddSubOperator(variableRandomizer);
+      Initializer = combinedOp;
+    }
+
+    private void SetupManipulation() {
+      // manipulation operator
+      CombinedOperator combinedOp = new CombinedOperator();
+      SequentialProcessor seq = new SequentialProcessor();
+      UniformItemChooser variableRandomizer = new UniformItemChooser();
+      variableRandomizer.GetVariableInfo("Value").ActualName = VARIABLENAME;
+      variableRandomizer.GetVariableInfo("Values").ActualName = "InputVariables";
+      variableRandomizer.Name = "Variable randomizer";
+
+      combinedOp.OperatorGraph.AddOperator(seq);
+      combinedOp.OperatorGraph.AddOperator(variableRandomizer);
+      combinedOp.OperatorGraph.InitialOperator = seq;
+      seq.AddSubOperator(variableRandomizer);
+      Manipulator = combinedOp;
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.GP.Boolean/3.3/Symbols/VariableFunctionTree.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.Boolean/3.3/Symbols/VariableFunctionTree.cs	(revision 2222)
+++ trunk/sources/HeuristicLab.GP.Boolean/3.3/Symbols/VariableFunctionTree.cs	(revision 2222)
@@ -0,0 +1,86 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Collections.Generic;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.GP.Interfaces;
+using System.Xml;
+
+namespace HeuristicLab.GP.Boolean {
+  public class VariableFunctionTree : TerminalTreeNode {
+    public string VariableName { get; set; }
+
+    public VariableFunctionTree(Variable variable)
+      : base(variable) {
+    }
+
+    protected VariableFunctionTree(VariableFunctionTree original)
+      : base(original) {
+      VariableName = original.VariableName;
+    }
+
+    public override bool HasLocalParameters {
+      get {
+        return true;
+      }
+    }
+
+    public override IOperation CreateShakingOperation(IScope scope) {
+      Scope myVariableScope = new Scope();
+      scope.AddSubScope(myVariableScope);
+      myVariableScope.AddVariable(CreateVariableIndexVariable());
+      return new AtomicOperation(Function.Manipulator, myVariableScope);
+    }
+
+    public override IOperation CreateInitOperation(IScope scope) {
+      Scope myVariableScope = new Scope();
+      scope.AddSubScope(myVariableScope);
+      myVariableScope.AddVariable(CreateVariableIndexVariable());
+      return new AtomicOperation(Function.Initializer, myVariableScope);
+    }
+
+    public override object Clone() {
+      return new VariableFunctionTree(this);
+    }
+
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<System.Guid, IStorable> persistedObjects) {
+      XmlNode node = document.CreateElement(name);
+      XmlAttribute varAttr = document.CreateAttribute("Variable");
+      varAttr.Value = VariableName;
+      node.Attributes.Append(varAttr);
+      return node;
+    }
+
+    public override void Populate(XmlNode node, IDictionary<System.Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      VariableName = node.Attributes["Variable"].Value;
+    }
+
+    private IVariable CreateVariableIndexVariable() {
+      StringData data = new StringData(VariableName);
+      data.Changed += (sender, args) => VariableName = data.Data;
+      var variable = new HeuristicLab.Core.Variable(Variable.VARIABLENAME, data);
+      variable.ValueChanged += (sender, args) => VariableName = ((StringData)variable.Value).Data;
+      return variable;
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.GP.Boolean/3.3/Symbols/Xor.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.Boolean/3.3/Symbols/Xor.cs	(revision 2222)
+++ trunk/sources/HeuristicLab.GP.Boolean/3.3/Symbols/Xor.cs	(revision 2222)
@@ -0,0 +1,25 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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
+
+namespace HeuristicLab.GP.Boolean{
+  public sealed class Xor : BinaryFunction {
+  }
+}
Index: trunk/sources/HeuristicLab.GP.Boolean/3.3/Variable.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.Boolean/3.3/Variable.cs	(revision 2174)
+++ 	(revision )
@@ -1,149 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 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 System.Collections.Generic;
-using System.Text;
-using HeuristicLab.Data;
-using HeuristicLab.Core;
-using System.Xml;
-using HeuristicLab.Constraints;
-using HeuristicLab.DataAnalysis;
-using HeuristicLab.Operators;
-using HeuristicLab.Random;
-
-namespace HeuristicLab.GP.Boolean {
-  public sealed class Variable : FunctionBase {
-    public const string INDEX = "Variable";
-
-    private int minIndex;
-    private int maxIndex;
-
-    public override string Description {
-      get { return ""; }
-    }
-
-    public Variable()
-      : base() {
-      AddVariableInfo(new VariableInfo(INDEX, "Index of the variable in the dataset representing this feature", typeof(ConstrainedIntData), VariableKind.None));
-      GetVariableInfo(INDEX).Local = true;
-      AddVariableInfo(new VariableInfo(INITIALIZATION, "Initialization operator for variables", typeof(CombinedOperator), VariableKind.None));
-      GetVariableInfo(INITIALIZATION).Local = false;
-      AddVariableInfo(new VariableInfo(MANIPULATION, "Manipulation operator for variables", typeof(CombinedOperator), VariableKind.None));
-      GetVariableInfo(MANIPULATION).Local = false;
-
-      AddConstraint(new NumberOfSubOperatorsConstraint(0, 0));
-
-      ConstrainedIntData variable = new ConstrainedIntData();
-      AddVariable(new HeuristicLab.Core.Variable(INDEX, variable));
-      minIndex = 0; maxIndex = 100;
-
-      SetupInitialization();
-      SetupManipulation();
-
-    }
-
-    private void SetupInitialization() {
-      CombinedOperator combinedOp = new CombinedOperator();
-      SequentialProcessor seq = new SequentialProcessor();
-      UniformRandomizer indexRandomizer = new UniformRandomizer();
-      indexRandomizer.Min = minIndex;
-      indexRandomizer.Max = maxIndex + 1; // uniform randomizer generates numbers in the range [min, max[
-      indexRandomizer.GetVariableInfo("Value").ActualName = INDEX;
-      indexRandomizer.Name = "Index Randomizer";
-
-      combinedOp.OperatorGraph.AddOperator(seq);
-      combinedOp.OperatorGraph.AddOperator(indexRandomizer);
-      combinedOp.OperatorGraph.InitialOperator = seq;
-      seq.AddSubOperator(indexRandomizer);
-      HeuristicLab.Core.IVariable initOp = GetVariable(INITIALIZATION);
-      if(initOp == null) {
-        AddVariable(new HeuristicLab.Core.Variable(INITIALIZATION, combinedOp));
-      } else {
-        initOp.Value = combinedOp;
-      }
-    }
-
-    private void SetupManipulation() {
-      // manipulation operator
-      CombinedOperator combinedOp = new CombinedOperator();
-      SequentialProcessor seq = new SequentialProcessor();
-      UniformRandomizer indexRandomizer = new UniformRandomizer();
-      indexRandomizer.Min = minIndex;
-      indexRandomizer.Max = maxIndex + 1;
-      indexRandomizer.GetVariableInfo("Value").ActualName = INDEX;
-      indexRandomizer.Name = "Index Randomizer";
-
-      combinedOp.OperatorGraph.AddOperator(seq);
-      combinedOp.OperatorGraph.AddOperator(indexRandomizer);
-      combinedOp.OperatorGraph.InitialOperator = seq;
-      seq.AddSubOperator(indexRandomizer);
-      HeuristicLab.Core.IVariable manipulationOp = GetVariable(MANIPULATION);
-      if(manipulationOp == null) {
-        AddVariable(new HeuristicLab.Core.Variable(MANIPULATION, combinedOp));
-      } else {
-        manipulationOp.Value = combinedOp;
-      }
-    }
-
-    public void SetConstraints(int[] allowedIndexes) {
-      ConstrainedIntData index = GetVariableValue<ConstrainedIntData>(INDEX, null, false);
-      Array.Sort(allowedIndexes);
-      minIndex = allowedIndexes[0]; maxIndex = allowedIndexes[allowedIndexes.Length - 1];
-      List<IConstraint> constraints = new List<IConstraint>();
-      int start = allowedIndexes[0];
-      int prev = start;
-      for(int i = 1; i < allowedIndexes.Length; i++) {
-        if(allowedIndexes[i] != prev + 1) {
-          IntBoundedConstraint lastRange = new IntBoundedConstraint();
-          lastRange.LowerBound = start;
-          lastRange.LowerBoundEnabled = true;
-          lastRange.LowerBoundIncluded = true;
-          lastRange.UpperBound = prev;
-          lastRange.UpperBoundEnabled = true;
-          lastRange.UpperBoundIncluded = true;
-          constraints.Add(lastRange);
-          start = allowedIndexes[i];
-          prev = start;
-        }
-        prev = allowedIndexes[i];
-      }
-      IntBoundedConstraint range = new IntBoundedConstraint();
-      range.LowerBound = start;
-      range.LowerBoundEnabled = true;
-      range.LowerBoundIncluded = true;
-      range.UpperBound = prev;
-      range.UpperBoundEnabled = true;
-      range.UpperBoundIncluded = true;
-      constraints.Add(range);
-      if(constraints.Count > 1) {
-        OrConstraint or = new OrConstraint();
-        foreach(IConstraint c in constraints) or.Clauses.Add(c);
-        index.AddConstraint(or);
-      } else {
-        index.AddConstraint(constraints[0]);
-      }
-
-      SetupInitialization();
-      SetupManipulation();
-    }
-  }
-}
Index: trunk/sources/HeuristicLab.GP.Boolean/3.3/Xor.cs
===================================================================
--- trunk/sources/HeuristicLab.GP.Boolean/3.3/Xor.cs	(revision 2174)
+++ 	(revision )
@@ -1,45 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 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 System.Collections.Generic;
-using System.Text;
-using HeuristicLab.Data;
-using HeuristicLab.Core;
-using System.Xml;
-using HeuristicLab.Constraints;
-using HeuristicLab.DataAnalysis;
-
-namespace HeuristicLab.GP.Boolean{
-  public sealed class Xor : FunctionBase {
-
-    public override string Description {
-      get { return ""; }
-    }
-
-    public Xor()
-      : base() {
-      AddConstraint(new NumberOfSubOperatorsConstraint(2, 2));
-      AddConstraint(new SubOperatorTypeConstraint(0));
-      AddConstraint(new SubOperatorTypeConstraint(1));
-    }
-  }
-}
