Index: /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/BoundsChecker.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/BoundsChecker.cs	(revision 3181)
+++ /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/BoundsChecker.cs	(revision 3182)
@@ -20,10 +20,10 @@
 #endregion
 
+using System;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
 using HeuristicLab.Operators;
+using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Parameters;
-using System;
 
 namespace HeuristicLab.Encodings.RealVectorEncoding {
@@ -34,5 +34,5 @@
   [Item("BoundsChecker", "Checks if all elements of a real vector are inside the bounds. If not, elements are corrected.")]
   [StorableClass]
-  public class BoundsChecker : SingleSuccessorOperator {
+  public class BoundsChecker : SingleSuccessorOperator, IRealVectorBoundsChecker {
     public LookupParameter<RealVector> RealVectorParameter {
       get { return (LookupParameter<RealVector>)Parameters["RealVector"]; }
Index: /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/HeuristicLab.Encodings.RealVectorEncoding-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/HeuristicLab.Encodings.RealVectorEncoding-3.3.csproj	(revision 3181)
+++ /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/HeuristicLab.Encodings.RealVectorEncoding-3.3.csproj	(revision 3182)
@@ -103,4 +103,5 @@
     <Compile Include="Crossovers\UniformSomePositionsArithmeticCrossover.cs" />
     <Compile Include="HeuristicLabEncodingsRealVectorEncodingPlugin.cs" />
+    <Compile Include="Interfaces\IRealVectorBoundsChecker.cs" />
     <Compile Include="RealVector.cs" />
     <Compile Include="Manipulators\BreederGeneticAlgorithmManipulator.cs" />
Index: /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Interfaces/IRealVectorBoundsChecker.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Interfaces/IRealVectorBoundsChecker.cs	(revision 3182)
+++ /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Interfaces/IRealVectorBoundsChecker.cs	(revision 3182)
@@ -0,0 +1,31 @@
+﻿#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 HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Parameters;
+
+namespace HeuristicLab.Encodings.RealVectorEncoding {
+  public interface IRealVectorBoundsChecker : IOperator {
+    LookupParameter<RealVector> RealVectorParameter { get; }
+    ValueLookupParameter<DoubleMatrix> BoundsParameter { get; }
+  }
+}
Index: /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Interfaces/IRealVectorCrossover.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Interfaces/IRealVectorCrossover.cs	(revision 3181)
+++ /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Interfaces/IRealVectorCrossover.cs	(revision 3182)
@@ -31,4 +31,5 @@
     ILookupParameter<ItemArray<RealVector>> ParentsParameter { get; }
     ILookupParameter<RealVector> ChildParameter { get; }
+    IValueLookupParameter<DoubleMatrix> BoundsParameter { get; }
   }
 }
Index: /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Interfaces/IRealVectorManipulator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Interfaces/IRealVectorManipulator.cs	(revision 3181)
+++ /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Interfaces/IRealVectorManipulator.cs	(revision 3182)
@@ -30,4 +30,5 @@
   public interface IRealVectorManipulator : IRealVectorOperator, IManipulator {
     ILookupParameter<RealVector> RealVectorParameter { get; }
+    IValueLookupParameter<DoubleMatrix> BoundsParameter { get; }
   }
 }
Index: /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Manipulators/BreederGeneticAlgorithmManipulator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Manipulators/BreederGeneticAlgorithmManipulator.cs	(revision 3181)
+++ /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Manipulators/BreederGeneticAlgorithmManipulator.cs	(revision 3182)
@@ -38,7 +38,4 @@
   public class BreederGeneticAlgorithmManipulator : RealVectorManipulator {
     private static readonly double[] powerOfTwo = new double[] { 1, 0.5, 0.25, 0.125, 0.0625, 0.03125, 0.015625, 0.0078125, 0.00390625, 0.001953125, 0.0009765625, 0.00048828125, 0.000244140625, 0.0001220703125, 0.00006103515625, 0.000030517578125 };
-    public ValueLookupParameter<DoubleMatrix> BoundsParameter {
-      get { return (ValueLookupParameter<DoubleMatrix>)Parameters["Bounds"]; }
-    }
     public ValueLookupParameter<DoubleValue> SearchIntervalFactorParameter {
       get { return (ValueLookupParameter<DoubleValue>)Parameters["SearchIntervalFactor"]; }
@@ -50,6 +47,5 @@
     public BreederGeneticAlgorithmManipulator()
       : base() {
-      Parameters.Add(new ValueLookupParameter<DoubleMatrix>("Bounds", "The lower and upper bounds for each element in the vector."));
-      Parameters.Add(new ValueLookupParameter<DoubleValue>("SearchIntervalFactor", "The factor determining the size of the search interval, that will be added/removed to/from the allele selected for manipulation.", new DoubleValue(0.1)));
+      Parameters.Add(new ValueLookupParameter<DoubleValue>("SearchIntervalFactor", "The factor determining the size of the search interval, that will be added/removed to/from the allele selected for manipulation. E.g. a value of 0.1 means 10% of the range will be maximally added/removed.", new DoubleValue(0.1)));
     }
 
Index: /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Manipulators/MichalewiczNonUniformAllPositionsManipulator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Manipulators/MichalewiczNonUniformAllPositionsManipulator.cs	(revision 3181)
+++ /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Manipulators/MichalewiczNonUniformAllPositionsManipulator.cs	(revision 3182)
@@ -38,10 +38,4 @@
   public class MichalewiczNonUniformAllPositionsManipulator : RealVectorManipulator {
     /// <summary>
-    /// The lower and upper bound (1st and 2nd column) of the positions in the vector. If there are less rows than dimensions, the rows are cycled.
-    /// </summary>
-    public ValueLookupParameter<DoubleMatrix> BoundsParameter {
-      get { return (ValueLookupParameter<DoubleMatrix>)Parameters["Bounds"]; }
-    }
-    /// <summary>
     /// The current generation.
     /// </summary>
@@ -69,5 +63,4 @@
     public MichalewiczNonUniformAllPositionsManipulator()
       : base() {
-      Parameters.Add(new ValueLookupParameter<DoubleMatrix>("Bounds", "The lower and upper bound (1st and 2nd column) of the positions in the vector. If there are less rows than dimensions, the rows are cycled."));
       Parameters.Add(new LookupParameter<IntValue>("Generation", "Current generation of the algorithm"));
       Parameters.Add(new LookupParameter<IntValue>("MaximumGenerations", "Maximum number of generations"));
Index: /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Manipulators/MichalewiczNonUniformOnePositionManipulator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Manipulators/MichalewiczNonUniformOnePositionManipulator.cs	(revision 3181)
+++ /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Manipulators/MichalewiczNonUniformOnePositionManipulator.cs	(revision 3182)
@@ -38,10 +38,4 @@
   public class MichalewiczNonUniformOnePositionManipulator : RealVectorManipulator {
     /// <summary>
-    /// The lower and upper bound (1st and 2nd column) of the positions in the vector. If there are less rows than dimensions, the rows are cycled.
-    /// </summary>
-    public ValueLookupParameter<DoubleMatrix> BoundsParameter {
-      get { return (ValueLookupParameter<DoubleMatrix>)Parameters["Bounds"]; }
-    }
-    /// <summary>
     /// The current generation.
     /// </summary>
@@ -69,5 +63,4 @@
     public MichalewiczNonUniformOnePositionManipulator()
       : base() {
-      Parameters.Add(new ValueLookupParameter<DoubleMatrix>("Bounds", "The lower and upper bound (1st and 2nd column) of the positions in the vector. If there are less rows than dimensions, the rows are cycled."));
       Parameters.Add(new LookupParameter<IntValue>("Generation", "Current generation of the algorithm"));
       Parameters.Add(new LookupParameter<IntValue>("MaximumGenerations", "Maximum number of generations"));
Index: /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Manipulators/UniformOnePositionManipulator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Manipulators/UniformOnePositionManipulator.cs	(revision 3181)
+++ /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/Manipulators/UniformOnePositionManipulator.cs	(revision 3182)
@@ -37,19 +37,4 @@
   public class UniformOnePositionManipulator : RealVectorManipulator {
     /// <summary>
-    /// The bounds of the values in the real vector.
-    /// </summary>
-    public ValueLookupParameter<DoubleMatrix> BoundsParameter {
-      get { return (ValueLookupParameter<DoubleMatrix>)Parameters["Bounds"]; }
-    }
-
-    /// <summary>
-    /// Initializes a new instance of <see cref="UniformOnePositionManipulator"/> with one parameter
-    /// (<c>Bounds</c>).
-    /// </summary>
-    public UniformOnePositionManipulator() {
-      Parameters.Add(new ValueLookupParameter<DoubleMatrix>("Bounds", "Lower and upper bound of the positions in the vector."));
-    }
-
-    /// <summary>
     /// Changes randomly a single position in the given real <paramref name="vector"/>.
     /// </summary>
Index: /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/RealVectorCrossover.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/RealVectorCrossover.cs	(revision 3181)
+++ /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/RealVectorCrossover.cs	(revision 3182)
@@ -47,4 +47,7 @@
       get { return (ILookupParameter<RealVector>)Parameters["Child"]; }
     }
+    public IValueLookupParameter<DoubleMatrix> BoundsParameter {
+      get { return (IValueLookupParameter<DoubleMatrix>)Parameters["Bounds"]; }
+    }
 
     protected RealVectorCrossover()
@@ -53,8 +56,12 @@
       Parameters.Add(new SubScopesLookupParameter<RealVector>("Parents", "The parent vectors which should be crossed."));
       Parameters.Add(new LookupParameter<RealVector>("Child", "The child vector resulting from the crossover."));
+      Parameters.Add(new ValueLookupParameter<DoubleMatrix>("Bounds", "The lower and upper bounds of the real vector."));
     }
 
     public sealed override IOperation Apply() {
-      ChildParameter.ActualValue = Cross(RandomParameter.ActualValue, ParentsParameter.ActualValue);
+      RealVector result = Cross(RandomParameter.ActualValue, ParentsParameter.ActualValue);
+      DoubleMatrix bounds = BoundsParameter.ActualValue;
+      if (bounds != null) BoundsChecker.Apply(result, bounds);
+      ChildParameter.ActualValue = result;
       return base.Apply();
     }
Index: /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/RealVectorManipulator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/RealVectorManipulator.cs	(revision 3181)
+++ /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/RealVectorManipulator.cs	(revision 3182)
@@ -44,4 +44,7 @@
       get { return (ILookupParameter<RealVector>)Parameters["RealVector"]; }
     }
+    public IValueLookupParameter<DoubleMatrix> BoundsParameter {
+      get { return (IValueLookupParameter<DoubleMatrix>)Parameters["Bounds"]; }
+    }
 
     protected RealVectorManipulator()
@@ -49,8 +52,12 @@
       Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator which should be used for stochastic manipulation operators."));
       Parameters.Add(new LookupParameter<RealVector>("RealVector", "The vector which should be manipulated."));
+      Parameters.Add(new ValueLookupParameter<DoubleMatrix>("Bounds", "The lower and upper bounds of the real vector."));
     }
 
     public sealed override IOperation Apply() {
-      Manipulate(RandomParameter.ActualValue, RealVectorParameter.ActualValue);
+      RealVector vector = RealVectorParameter.ActualValue;
+      Manipulate(RandomParameter.ActualValue, vector);
+      DoubleMatrix bounds = BoundsParameter.ActualValue;
+      if (bounds != null) BoundsChecker.Apply(vector, bounds);
       return base.Apply();
     }
Index: /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/SingleObjectiveTestFunctionProblem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/SingleObjectiveTestFunctionProblem.cs	(revision 3181)
+++ /trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/SingleObjectiveTestFunctionProblem.cs	(revision 3182)
@@ -226,4 +226,7 @@
         Bounds[e.Value, 0] = Bounds[e.Value, 1] - 0.1;
     }
+    private void BoundsParameter_NameChanged(object sender, EventArgs e) {
+      ParameterizeOperators();
+    }
     #endregion
 
@@ -234,4 +237,5 @@
       ProblemSizeParameter.ValueChanged += new EventHandler(ProblemSizeParameter_ValueChanged);
       ProblemSize.ValueChanged += new EventHandler(ProblemSize_ValueChanged);
+      BoundsParameter.NameChanged += new EventHandler(BoundsParameter_NameChanged);
       BoundsParameter.ValueChanged += new EventHandler(BoundsParameter_ValueChanged);
       Bounds.ToStringChanged += new EventHandler(Bounds_ToStringChanged);
@@ -243,5 +247,4 @@
       VisualizerParameter.ValueChanged += new EventHandler(VisualizerParameter_ValueChanged);
     }
-
     private void InitializeOperators() {
       operators = new List<IRealVectorOperator>();
@@ -280,7 +283,9 @@
         op.ParentsParameter.ActualName = SolutionCreator.RealVectorParameter.ActualName;
         op.ChildParameter.ActualName = SolutionCreator.RealVectorParameter.ActualName;
+        op.BoundsParameter.ActualName = BoundsParameter.Name;
       }
       foreach (IRealVectorManipulator op in Operators.OfType<IRealVectorManipulator>()) {
         op.RealVectorParameter.ActualName = SolutionCreator.RealVectorParameter.ActualName;
+        op.BoundsParameter.ActualName = BoundsParameter.Name;
       }
       /*foreach (IPermutationMoveOperator op in Operators.OfType<IPermutationMoveOperator>()) {
