Index: trunk/sources/HeuristicLab.Evolutionary/3.3/ChildrenCreator.cs
===================================================================
--- trunk/sources/HeuristicLab.Evolutionary/3.3/ChildrenCreator.cs	(revision 2794)
+++ trunk/sources/HeuristicLab.Evolutionary/3.3/ChildrenCreator.cs	(revision 2794)
@@ -0,0 +1,80 @@
+﻿#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.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Evolutionary {
+  /// <summary>
+  /// An operator which is used to prepare crossover.
+  /// </summary>
+  /// <remarks>
+  /// The sub-scopes of the current scope the operator is applied on represent the parents. The operator creates
+  /// new and empty scopes for each child, adds the scopes that represent the child's parents as sub-scopes to
+  /// the child and adds the child as sub-scope to the current scope.
+  /// </remarks>
+  [Item("ChildrenCreator", "An operator which is used to prepare crossover. The sub-scopes of the current scope the operator is applied on represent the parents. The operator creates new and empty scopes for each child, adds the scopes that represent the child's parents as sub-scopes to the child and adds the child as sub-scope to the current scope.")]
+  [EmptyStorableClass]
+  [Creatable("Test")]
+  public sealed class ChildrenCreator : SingleSuccessorOperator {
+    private ScopeParameter CurrentScopeParameter {
+      get { return (ScopeParameter)Parameters["CurrentScope"]; }
+    }
+    public ValueLookupParameter<IntData> ParentsPerChildParameter {
+      get { return (ValueLookupParameter<IntData>)Parameters["ParentsPerChild"]; }
+    }
+    public IScope CurrentScope {
+      get { return CurrentScopeParameter.ActualValue; }
+    }
+    public IntData ParentsPerChild {
+      get { return ParentsPerChildParameter.Value; }
+      set { ParentsPerChildParameter.Value = value; }
+    }
+
+    public ChildrenCreator()
+      : base() {
+      Parameters.Add(new ScopeParameter("CurrentScope", "The current scope whose sub-scopes represent the parents."));
+      Parameters.Add(new ValueLookupParameter<IntData>("ParentsPerChild", "The number of parents that should be crossed per child. Note that some of the typical crossover operators require exactly two parents.", new IntData(2)));
+    }
+
+    public override IExecutionSequence Apply() {
+      int parentsPerChild = ParentsPerChildParameter.ActualValue.Value;
+      int parents = CurrentScope.SubScopes.Count;
+      if (parents % parentsPerChild > 0) throw new InvalidOperationException("Number of parents is not an integral multiple of ParentsPerChild.");
+      int children = parents / parentsPerChild;
+
+      for (int i = 0; i < children; i++) {
+        IScope child = new Scope(i.ToString());
+        for (int j = 0; j < parents; j++) {
+          IScope parent = CurrentScope.SubScopes[0];
+          CurrentScope.SubScopes.RemoveAt(0);
+          child.SubScopes.Add(parent);
+        }
+        CurrentScope.SubScopes.Add(child);
+      }
+      return base.Apply();
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.Evolutionary/3.3/ChildrenInitializer.cs
===================================================================
--- trunk/sources/HeuristicLab.Evolutionary/3.3/ChildrenInitializer.cs	(revision 2790)
+++ 	(revision )
@@ -1,76 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2009 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.Core;
-using HeuristicLab.Data;
-using HeuristicLab.Operators;
-
-namespace HeuristicLab.Evolutionary {
-  /// <summary>
-  /// Initializes and prepares the children for crossover
-  /// </summary>
-  public class ChildrenInitializer : OperatorBase {
-    /// <inheritdoc select="summary"/>
-    public override string Description {
-      get {
-        return @"This operator prepares the individuals for crossover.";
-      }
-    }
-
-    /// <summary>
-    /// Initializes a new instance of <see cref="ChildrenInitializer"/> with one variable info: <c>ParentsPerChild</c>.
-    /// </summary>
-    public ChildrenInitializer()
-      : base() {
-      AddVariableInfo(new VariableInfo("ParentsPerChild", "Denotes the number of parents that should be crossed per child. Note that some of the typical crossover operators can only work with 2 parents.", typeof(IntData), VariableKind.In));
-      GetVariableInfo("ParentsPerChild").Local = true;
-      AddVariable(new Variable("ParentsPerChild", new IntData(2)));
-    }
-
-    /// <summary>
-    /// Initializes the children as new scopes and inserts their parents as subscopes.
-    /// </summary>
-    /// <exception cref="InvalidOperationException">Thrown when the number of selected parents is not a natural multiple of <c>ParentsPerChild</c>.</exception>
-    /// <param name="scope">The scope that houses all the selected parents as subscopes.</param>
-    /// <returns><c>null</c>.</returns>
-    public override IOperation Apply(IScope scope) {
-      int parents = GetVariableValue<IntData>("ParentsPerChild", scope, true).Data;
-      int children = scope.SubScopes.Count;
-      if (children % parents > 0) throw new InvalidOperationException("ERROR in ChildrenInitializer: The number of selected parents is not a natural multiple of ParentsPerChild");
-      children /= parents;
-
-      for (int i = 0; i < children; i++) {
-        IScope child = new Scope(i.ToString());
-        for (int y = 0; y < parents; y++) {
-          IScope parenty = scope.SubScopes[0];
-          scope.RemoveSubScope(parenty);
-          child.AddSubScope(parenty);
-        }
-        scope.AddSubScope(child);
-      }
-
-      return null;
-    }
-  }
-}
Index: trunk/sources/HeuristicLab.Evolutionary/3.3/CrossoverBase.cs
===================================================================
--- trunk/sources/HeuristicLab.Evolutionary/3.3/CrossoverBase.cs	(revision 2790)
+++ 	(revision )
@@ -1,60 +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.Core;
-using HeuristicLab.Operators;
-
-namespace HeuristicLab.Evolutionary {
-  /// <summary>
-  /// Base class for crossover operators.
-  /// </summary>
-  public abstract class CrossoverBase : OperatorBase {
-    /// <summary>
-    /// Initializes a new instance of <see cref="CrossoverBase"/> with one variable info (<c>Random</c>).
-    /// </summary>
-    public CrossoverBase()
-      : base() {
-      AddVariableInfo(new VariableInfo("Random", "Pseudo random number generator", typeof(IRandom), VariableKind.In));
-    }
-
-    /// <summary>
-    /// Retrieves the random number generator and calls <see cref="Cross(HeuristicLab.Core.IScope, HeuristicLab.Core.IRandom)"/>.
-    /// </summary>
-    /// <param name="scope">The current scope which represents a new child.</param>
-    /// <returns><c>null</c>.</returns>
-    public override IOperation Apply(IScope scope) {
-      IRandom random = GetVariableValue<IRandom>("Random", scope, true);
-      Cross(scope, random);
-      return null;
-    }
-
-    /// <summary>
-    /// Performs a crossover of all parents (sub-scopes) of <paramref name="scope"/> to create a new child.
-    /// Note that all children have to be prepared using the <see cref="HeuristicLab.Evolutionary.ChildrenInitializer"/>.
-    /// </summary>
-    /// <param name="scope">The current scope which represents a new child.</param>
-    /// <param name="random">A random number generator.</param>
-    protected abstract void Cross(IScope scope, IRandom random);
-  }
-}
Index: trunk/sources/HeuristicLab.Evolutionary/3.3/HeuristicLab.Evolutionary-3.3.csproj
===================================================================
--- trunk/sources/HeuristicLab.Evolutionary/3.3/HeuristicLab.Evolutionary-3.3.csproj	(revision 2790)
+++ trunk/sources/HeuristicLab.Evolutionary/3.3/HeuristicLab.Evolutionary-3.3.csproj	(revision 2794)
@@ -84,4 +84,5 @@
     <Compile Include="HeuristicLabEvolutionaryPlugin.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="ChildrenCreator.cs" />
   </ItemGroup>
   <ItemGroup>
@@ -90,4 +91,8 @@
   </ItemGroup>
   <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Collections\3.3\HeuristicLab.Collections-3.3.csproj">
+      <Project>{958B43BC-CC5C-4FA2-8628-2B3B01D890B6}</Project>
+      <Name>HeuristicLab.Collections-3.3</Name>
+    </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Core\3.3\HeuristicLab.Core-3.3.csproj">
       <Project>{C36BD924-A541-4A00-AFA8-41701378DDC5}</Project>
@@ -101,4 +106,12 @@
       <Project>{23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE}</Project>
       <Name>HeuristicLab.Operators-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Parameters\3.3\HeuristicLab.Parameters-3.3.csproj">
+      <Project>{56F9106A-079F-4C61-92F6-86A84C2D84B7}</Project>
+      <Name>HeuristicLab.Parameters-3.3</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Persistence\3.3\HeuristicLab.Persistence-3.3.csproj">
+      <Project>{102BC7D3-0EF9-439C-8F6D-96FF0FDB8E1B}</Project>
+      <Name>HeuristicLab.Persistence-3.3</Name>
     </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
Index: trunk/sources/HeuristicLab.Evolutionary/3.3/HeuristicLabEvolutionaryPlugin.cs.frame
===================================================================
--- trunk/sources/HeuristicLab.Evolutionary/3.3/HeuristicLabEvolutionaryPlugin.cs.frame	(revision 2790)
+++ trunk/sources/HeuristicLab.Evolutionary/3.3/HeuristicLabEvolutionaryPlugin.cs.frame	(revision 2794)
@@ -20,7 +20,4 @@
 #endregion
 
-using System;
-using System.Collections.Generic;
-using System.Text;
 using HeuristicLab.PluginInfrastructure;
 
@@ -31,7 +28,10 @@
   [Plugin("HeuristicLab.Evolutionary", "3.3.0.$WCREV$")]
   [PluginFile("HeuristicLab.Evolutionary-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Collections", "3.3")]
   [PluginDependency("HeuristicLab.Core", "3.3")]
   [PluginDependency("HeuristicLab.Data", "3.3")]
   [PluginDependency("HeuristicLab.Operators", "3.3")]
+  [PluginDependency("HeuristicLab.Parameters", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")]
   public class HeuristicLabEvolutionaryPlugin : PluginBase {
   }
