Index: /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/RealVectorCrossover.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/RealVectorCrossover.cs	(revision 5433)
+++ /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/RealVectorCrossover.cs	(revision 5434)
@@ -20,4 +20,5 @@
 #endregion
 
+using System;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -51,11 +52,18 @@
       get { return (IValueLookupParameter<DoubleMatrix>)Parameters["Bounds"]; }
     }
-    public OptionalValueParameter<IRealVectorBoundsChecker> BoundsCheckerParameter {
+    protected OptionalValueParameter<IRealVectorBoundsChecker> BoundsCheckerParameter {
       get { return (OptionalValueParameter<IRealVectorBoundsChecker>)Parameters["BoundsChecker"]; }
+    }
+    public IRealVectorBoundsChecker BoundsChecker {
+      get { return BoundsCheckerParameter.Value; }
+      set { BoundsCheckerParameter.Value = value; }
     }
 
     [StorableConstructor]
     protected RealVectorCrossover(bool deserializing) : base(deserializing) { }
-    protected RealVectorCrossover(RealVectorCrossover original, Cloner cloner) : base(original, cloner) { }
+    protected RealVectorCrossover(RealVectorCrossover original, Cloner cloner)
+      : base(original, cloner) {
+      RegisterEventHandlers();
+    }
     protected RealVectorCrossover()
       : base() {
@@ -67,14 +75,24 @@
       Parameters.Add(new ValueLookupParameter<DoubleMatrix>("Bounds", "The lower and upper bounds of the real vector."));
       Parameters.Add(new OptionalValueParameter<IRealVectorBoundsChecker>("BoundsChecker", "The bounds checker that ensures that the values stay within the bounds.", new BoundsChecker()));
+
+      RegisterEventHandlers();
+      ParameterizeBoundsChecker();
     }
 
-    // BackwardsCompatibility3.3
-    #region Backwards compatible code (remove with 3.4)
     [StorableHook(HookType.AfterDeserialization)]
     private void AfterDeserialization() {
-      if (!Parameters.ContainsKey("BoundsChecker"))
+      // BackwardsCompatibility3.3
+      #region Backwards compatible code (remove with 3.4)
+      if (!Parameters.ContainsKey("BoundsChecker")) {
         Parameters.Add(new OptionalValueParameter<IRealVectorBoundsChecker>("BoundsChecker", "The bounds checker that ensures that the values stay within the bounds.", new BoundsChecker()));
+        ParameterizeBoundsChecker();
+      }
+      #endregion
+      RegisterEventHandlers();
     }
-    #endregion
+
+    protected virtual void RegisterEventHandlers() {
+      BoundsCheckerParameter.ValueChanged += new System.EventHandler(BoundsCheckerParameter_ValueChanged);
+    }
 
     public sealed override IOperation Apply() {
@@ -82,10 +100,7 @@
       ChildParameter.ActualValue = result;
 
-      IRealVectorBoundsChecker checker = BoundsCheckerParameter.Value;
       IOperation successor = base.Apply();
-      if (checker != null) {
-        checker.BoundsParameter.ActualName = BoundsParameter.ActualName;
-        checker.RealVectorParameter.ActualName = ChildParameter.ActualName;
-        IOperation checkerOperation = ExecutionContext.CreateChildOperation(checker);
+      if (BoundsChecker != null) {
+        IOperation checkerOperation = ExecutionContext.CreateChildOperation(BoundsChecker);
         if (successor == null) return checkerOperation;
         else return new OperationCollection(checkerOperation, successor);
@@ -94,4 +109,15 @@
 
     protected abstract RealVector Cross(IRandom random, ItemArray<RealVector> parents);
+
+    protected virtual void BoundsCheckerParameter_ValueChanged(object sender, EventArgs e) {
+      ParameterizeBoundsChecker();
+    }
+
+    protected virtual void ParameterizeBoundsChecker() {
+      if (BoundsChecker != null) {
+        BoundsChecker.BoundsParameter.ActualName = BoundsParameter.Name;
+        BoundsChecker.RealVectorParameter.ActualName = ChildParameter.Name;
+      }
+    }
   }
 }
Index: /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/RealVectorManipulator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/RealVectorManipulator.cs	(revision 5433)
+++ /trunk/sources/HeuristicLab.Encodings.RealVectorEncoding/3.3/RealVectorManipulator.cs	(revision 5434)
@@ -20,4 +20,5 @@
 #endregion
 
+using System;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -48,11 +49,18 @@
       get { return (IValueLookupParameter<DoubleMatrix>)Parameters["Bounds"]; }
     }
-    public OptionalValueParameter<IRealVectorBoundsChecker> BoundsCheckerParameter {
+    protected OptionalValueParameter<IRealVectorBoundsChecker> BoundsCheckerParameter {
       get { return (OptionalValueParameter<IRealVectorBoundsChecker>)Parameters["BoundsChecker"]; }
+    }
+    public IRealVectorBoundsChecker BoundsChecker {
+      get { return BoundsCheckerParameter.Value; }
+      set { BoundsCheckerParameter.Value = value; }
     }
 
     [StorableConstructor]
     protected RealVectorManipulator(bool deserializing) : base(deserializing) { }
-    protected RealVectorManipulator(RealVectorManipulator original, Cloner cloner) : base(original, cloner) { }
+    protected RealVectorManipulator(RealVectorManipulator original, Cloner cloner)
+      : base(original, cloner) {
+      RegisterEventHandlers();
+    }
     protected RealVectorManipulator()
       : base() {
@@ -61,14 +69,24 @@
       Parameters.Add(new ValueLookupParameter<DoubleMatrix>("Bounds", "The lower and upper bounds of the real vector."));
       Parameters.Add(new OptionalValueParameter<IRealVectorBoundsChecker>("BoundsChecker", "The bounds checker that ensures that the values stay within the bounds.", new BoundsChecker()));
+
+      RegisterEventHandlers();
+      ParameterizeBoundsChecker();
     }
 
-    // BackwardsCompatibility3.3
-    #region Backwards compatible code (remove with 3.4)
     [StorableHook(HookType.AfterDeserialization)]
     private void AfterDeserialization() {
-      if (!Parameters.ContainsKey("BoundsChecker"))
+      // BackwardsCompatibility3.3
+      #region Backwards compatible code (remove with 3.4)
+      if (!Parameters.ContainsKey("BoundsChecker")) {
         Parameters.Add(new OptionalValueParameter<IRealVectorBoundsChecker>("BoundsChecker", "The bounds checker that ensures that the values stay within the bounds.", new BoundsChecker()));
+        ParameterizeBoundsChecker();
+      }
+      #endregion
+      RegisterEventHandlers();
     }
-    #endregion
+
+    protected virtual void RegisterEventHandlers() {
+      BoundsCheckerParameter.ValueChanged += new System.EventHandler(BoundsCheckerParameter_ValueChanged);
+    }
 
     public sealed override IOperation Apply() {
@@ -76,10 +94,7 @@
       Manipulate(RandomParameter.ActualValue, vector);
 
-      IRealVectorBoundsChecker checker = BoundsCheckerParameter.Value;
       IOperation successor = base.Apply();
-      if (checker != null) {
-        checker.BoundsParameter.ActualName = BoundsParameter.ActualName;
-        checker.RealVectorParameter.ActualName = RealVectorParameter.ActualName;
-        IOperation checkerOperation = ExecutionContext.CreateChildOperation(checker);
+      if (BoundsChecker != null) {
+        IOperation checkerOperation = ExecutionContext.CreateChildOperation(BoundsChecker);
         if (successor == null) return checkerOperation;
         else return new OperationCollection(checkerOperation, successor);
@@ -88,4 +103,15 @@
 
     protected abstract void Manipulate(IRandom random, RealVector realVector);
+
+    protected virtual void BoundsCheckerParameter_ValueChanged(object sender, EventArgs e) {
+      ParameterizeBoundsChecker();
+    }
+
+    protected virtual void ParameterizeBoundsChecker() {
+      if (BoundsChecker != null) {
+        BoundsChecker.BoundsParameter.ActualName = BoundsParameter.Name;
+        BoundsChecker.RealVectorParameter.ActualName = RealVectorParameter.Name;
+      }
+    }
   }
 }
