Index: /stable/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Creators/RandomBinaryVectorCreator.cs
===================================================================
--- /stable/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Creators/RandomBinaryVectorCreator.cs	(revision 11928)
+++ /stable/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Creators/RandomBinaryVectorCreator.cs	(revision 11929)
@@ -20,7 +20,9 @@
 #endregion
 
+using System;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
+using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
@@ -32,11 +34,36 @@
   [StorableClass]
   public sealed class RandomBinaryVectorCreator : BinaryVectorCreator {
+    private const string TrueProbabilityParameterName = "TruePropability";
+
+    private IValueLookupParameter<DoubleValue> TrueProbabilityParameter {
+      get { return (IValueLookupParameter<DoubleValue>)Parameters[TrueProbabilityParameterName]; }
+    }
+
+    public DoubleValue TrueProbability {
+      get { return TrueProbabilityParameter.Value; }
+      set { TrueProbabilityParameter.Value = value; }
+    }
+
     [StorableConstructor]
     private RandomBinaryVectorCreator(bool deserializing) : base(deserializing) { }
     private RandomBinaryVectorCreator(RandomBinaryVectorCreator original, Cloner cloner) : base(original, cloner) { }
-    public RandomBinaryVectorCreator() : base() { }
+    public override IDeepCloneable Clone(Cloner cloner) { return new RandomBinaryVectorCreator(this, cloner); }
+    public RandomBinaryVectorCreator()
+      : base() {
+      Parameters.Add(new ValueLookupParameter<DoubleValue>(TrueProbabilityParameterName, "Probability of true value", new DoubleValue(0.5)));
+    }
 
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new RandomBinaryVectorCreator(this, cloner);
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      // BackwardsCompatibility3.3
+      #region Backwards compatible code, remove with 3.4
+      var defaultValue = 0.5;
+      if (Parameters.ContainsKey(TrueProbabilityParameterName) && Parameters[TrueProbabilityParameterName] is IFixedValueParameter<DoubleValue>) {
+        defaultValue = ((IFixedValueParameter<DoubleValue>)Parameters[TrueProbabilityParameterName]).Value.Value;
+        Parameters.Remove(TrueProbabilityParameterName);
+      }
+      if (!Parameters.ContainsKey(TrueProbabilityParameterName))
+        Parameters.Add(new ValueLookupParameter<DoubleValue>(TrueProbabilityParameterName, "Probability of true value", new DoubleValue(defaultValue)));
+      #endregion
     }
 
@@ -46,12 +73,25 @@
     /// <param name="random">The random number generator.</param>
     /// <param name="length">The length of the binary vector.</param>
+    /// <param name="trueProbability">The propability for true to occur at a certain position in the binary vector</param>
     /// <returns>The newly created binary vector.</returns>
-    public static BinaryVector Apply(IRandom random, int length) {
-      BinaryVector result = new BinaryVector(length, random);
+    public static BinaryVector Apply(IRandom random, int length, double trueProbability = 0.5) {
+      BinaryVector result;
+
+      //Backwards compatiblity code to ensure the same behavior for existing algorithm runs
+      //remove with HL 3.4
+      if (trueProbability.IsAlmost(0.5))
+        result = new BinaryVector(length, random);
+      else {
+        var values = new bool[length];
+        for (int i = 0; i < length; i++)
+          values[i] = random.NextDouble() < trueProbability;
+        result = new BinaryVector(values);
+      }
       return result;
     }
 
     protected override BinaryVector Create(IRandom random, IntValue length) {
-      return Apply(random, length.Value);
+      if (TrueProbabilityParameter.ActualValue == null) throw new InvalidOperationException("RandomBinaryVectorCreator: Parameter " + TrueProbabilityParameter.ActualName + " could not be found.");
+      return Apply(random, length.Value, TrueProbabilityParameter.ActualValue.Value);
     }
   }
Index: /stable/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Crossovers/NPointCrossover.cs
===================================================================
--- /stable/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Crossovers/NPointCrossover.cs	(revision 11928)
+++ /stable/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Crossovers/NPointCrossover.cs	(revision 11929)
@@ -41,6 +41,6 @@
     /// Number of crossover points.
     /// </summary>
-    public ValueLookupParameter<IntValue> NParameter {
-      get { return (ValueLookupParameter<IntValue>)Parameters["N"]; }
+    public IValueLookupParameter<IntValue> NParameter {
+      get { return (IValueLookupParameter<IntValue>)Parameters["N"]; }
     }
 
@@ -137,5 +137,5 @@
       if (NParameter.ActualValue == null) throw new InvalidOperationException("NPointCrossover: Parameter " + NParameter.ActualName + " could not be found.");
 
-      return Apply(random, parents[0], parents[1], NParameter.Value);
+      return Apply(random, parents[0], parents[1], NParameter.ActualValue);
     }
   }
Index: /stable/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Manipulators/SomePositionsBitflipManipulator.cs
===================================================================
--- /stable/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Manipulators/SomePositionsBitflipManipulator.cs	(revision 11928)
+++ /stable/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Manipulators/SomePositionsBitflipManipulator.cs	(revision 11929)
@@ -20,4 +20,5 @@
 #endregion
 
+using System;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -39,6 +40,6 @@
     /// Mmutation probability for each position.
     /// </summary>
-    public ValueLookupParameter<DoubleValue> MutationProbabilityParameter {
-      get { return (ValueLookupParameter<DoubleValue>)Parameters["MutationProbability"]; }
+    public IValueLookupParameter<DoubleValue> MutationProbabilityParameter {
+      get { return (IValueLookupParameter<DoubleValue>)Parameters["MutationProbability"]; }
     }
 
@@ -78,5 +79,6 @@
     /// <param name="realVector">The vector of binary values to manipulate.</param>
     protected override void Manipulate(IRandom random, BinaryVector binaryVector) {
-      Apply(random, binaryVector, MutationProbabilityParameter.Value);
+      if (MutationProbabilityParameter.ActualValue == null) throw new InvalidOperationException("SomePositionsBitflipManipulator: Parameter " + MutationProbabilityParameter.ActualName + " could not be found.");
+      Apply(random, binaryVector, MutationProbabilityParameter.ActualValue);
     }
   }
Index: /stable/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Moves/OneBitflipMove/StochasticOneBitflipMultiMoveGenerator.cs
===================================================================
--- /stable/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Moves/OneBitflipMove/StochasticOneBitflipMultiMoveGenerator.cs	(revision 11928)
+++ /stable/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Moves/OneBitflipMove/StochasticOneBitflipMultiMoveGenerator.cs	(revision 11929)
@@ -20,4 +20,5 @@
 #endregion
 
+using System;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -30,5 +31,5 @@
   [Item("StochasticOneBitflipMultiMoveGenerator", "Randomly samples n from all possible one bitflip moves from a given BinaryVector.")]
   [StorableClass]
-  public class StochasticOneBitflipMultiMoveGenerator : OneBitflipMoveGenerator, IMultiMoveGenerator {
+  public class StochasticOneBitflipMultiMoveGenerator : OneBitflipMoveGenerator, IStochasticOperator, IMultiMoveGenerator {
     public ILookupParameter<IRandom> RandomParameter {
       get { return (ILookupParameter<IRandom>)Parameters["Random"]; }
@@ -66,4 +67,5 @@
     protected override OneBitflipMove[] GenerateMoves(BinaryVector binaryVector) {
       IRandom random = RandomParameter.ActualValue;
+      if (SampleSizeParameter.ActualValue == null) throw new InvalidOperationException("StochasticOneBitflipMultiMoveGenerator: Parameter " + SampleSizeParameter.ActualName + " could not be found.");
       return Apply(binaryVector, random, SampleSizeParameter.ActualValue.Value);
     }
