Index: /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/Crossovers/ParameterConfigurationCrossover.cs
===================================================================
--- /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/Crossovers/ParameterConfigurationCrossover.cs	(revision 8589)
+++ /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/Crossovers/ParameterConfigurationCrossover.cs	(revision 8590)
@@ -108,5 +108,5 @@
 
       Cross(RandomParameter.ActualValue, child1, child2, IntValueCrossoverParameter.ActualValue, DoubleValueCrossoverParameter.ActualValue);
-      this.ChildParameter.ActualValue = child1;
+      ChildParameter.ActualValue = child1;
 
       return base.Apply();
Index: /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/HeuristicLab.Encodings.ParameterConfigurationEncoding-3.3.csproj
===================================================================
--- /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/HeuristicLab.Encodings.ParameterConfigurationEncoding-3.3.csproj	(revision 8589)
+++ /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/HeuristicLab.Encodings.ParameterConfigurationEncoding-3.3.csproj	(revision 8590)
@@ -119,4 +119,5 @@
     <Compile Include="Operators\Crossovers\DoubleValue\AverageDoubleValueCrossover.cs" />
     <Compile Include="Operators\Crossovers\DoubleValue\DiscreteDoubleValueCrossover.cs" />
+    <Compile Include="Operators\Crossovers\DoubleValue\MultiDoubleValueCrossover.cs" />
     <Compile Include="Operators\Crossovers\DoubleValue\NormalDoubleValueCrossover.cs" />
     <Compile Include="Operators\Crossovers\IntValue\AverageIntValueCrossover.cs" />
Index: /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/Operators/Crossovers/DoubleValue/AverageDoubleValueCrossover.cs
===================================================================
--- /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/Operators/Crossovers/DoubleValue/AverageDoubleValueCrossover.cs	(revision 8589)
+++ /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/Operators/Crossovers/DoubleValue/AverageDoubleValueCrossover.cs	(revision 8590)
@@ -56,5 +56,4 @@
     public static void ApplyStatic(IRandom random, DoubleValue value, DoubleValue other, DoubleValueRange range) {
       value.Value = (value.Value + other.Value) / 2;
-      value.Value = range.ApplyStepSize(value.Value);
     }
   }
Index: /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/Operators/Crossovers/DoubleValue/DiscreteDoubleValueCrossover.cs
===================================================================
--- /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/Operators/Crossovers/DoubleValue/DiscreteDoubleValueCrossover.cs	(revision 8589)
+++ /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/Operators/Crossovers/DoubleValue/DiscreteDoubleValueCrossover.cs	(revision 8590)
@@ -55,7 +55,6 @@
 
     public static void ApplyStatic(IRandom random, DoubleValue value, DoubleValue other, DoubleValueRange range) {
-      if (random.NextDouble() > 0.5) {
+      if (random.NextDouble() > 0.5)
         value.Value = other.Value;
-      }
     }
   }
Index: /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/Operators/Crossovers/DoubleValue/MultiDoubleValueCrossover.cs
===================================================================
--- /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/Operators/Crossovers/DoubleValue/MultiDoubleValueCrossover.cs	(revision 8590)
+++ /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/Operators/Crossovers/DoubleValue/MultiDoubleValueCrossover.cs	(revision 8590)
@@ -0,0 +1,72 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.Optimization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Encodings.ParameterConfigurationEncoding {
+  /// <summary>
+  /// An operator which crosses two double values. TODO
+  /// </summary>
+  [Item("MultiDoubleValueCrossover", "An operator which crosses two double values. It randomly selects and applies one of its crossovers every time it is called.")]
+  [StorableClass]
+  public class MultiDoubleValueCrossover : StochasticMultiBranch<IDoubleValueCrossover>, IDoubleValueCrossover, IStochasticOperator {
+    public override bool CanChangeName {
+      get { return false; }
+    }
+    protected override bool CreateChildOperation {
+      get { return true; }
+    }
+
+    #region Constructors and Cloning
+    public MultiDoubleValueCrossover()
+      : base() {
+      foreach (Type type in ApplicationManager.Manager.GetTypes(typeof(IDoubleValueCrossover)).OrderBy(op => op.Name)) {
+        if (!typeof(MultiOperator<IDoubleValueCrossover>).IsAssignableFrom(type))
+          Operators.Add((IDoubleValueCrossover)Activator.CreateInstance(type), true);
+      }
+    }
+
+    [StorableConstructor]
+    protected MultiDoubleValueCrossover(bool deserializing) : base(deserializing) { }
+    protected MultiDoubleValueCrossover(MultiDoubleValueCrossover original, Cloner cloner) : base(original, cloner) { }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new MultiDoubleValueCrossover(this, cloner);
+    }
+    #endregion
+
+    public override IOperation Apply() {
+      if (Operators.Count == 0) throw new InvalidOperationException(Name + ": Please add at least one crossover to choose from.");
+      return base.Apply();
+    }
+
+    public void Apply(IRandom random, DoubleValue value, DoubleValue other, DoubleValueRange range) {
+      Operators[random.Next(Operators.Count)].Apply(random, value, other, range);
+    }
+  }
+}
Index: /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/Operators/Crossovers/DoubleValue/NormalDoubleValueCrossover.cs
===================================================================
--- /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/Operators/Crossovers/DoubleValue/NormalDoubleValueCrossover.cs	(revision 8589)
+++ /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/Operators/Crossovers/DoubleValue/NormalDoubleValueCrossover.cs	(revision 8590)
@@ -53,16 +53,17 @@
 
     public void Apply(IRandom random, DoubleValue value, DoubleValue other, DoubleValueRange range) {
-      value.Value = ApplyStatic(random, value, other, range).Value;
+      ApplyStatic(random, value, other, range);
     }
 
-    public static DoubleValue ApplyStatic(IRandom random, DoubleValue better, DoubleValue worse, DoubleValueRange range) {
-      NormalDistributedRandom N = new NormalDistributedRandom(random, better.Value, Math.Abs(better.Value - worse.Value) / 3);
-      var offspring = new DoubleValue();
+    public static void ApplyStatic(IRandom random, DoubleValue value, DoubleValue other, DoubleValueRange range) {
+      var N = new NormalDistributedRandom(random, value.Value, Math.Abs(value.Value - other.Value) / 3);
+
+      double offspring;
       do {
-        offspring.Value = N.NextDouble();
-        offspring.Value = range.ApplyStepSize(offspring.Value);
-      } while (!range.IsInRange(offspring.Value));
+        offspring = N.NextDouble();
+        offspring = range.ApplyStepSize(offspring);
+      } while (!range.IsInRange(offspring));
 
-      return offspring;
+      value.Value = offspring;
     }
   }
Index: /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/Operators/Crossovers/IntValue/DiscreteIntValueCrossover.cs
===================================================================
--- /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/Operators/Crossovers/IntValue/DiscreteIntValueCrossover.cs	(revision 8589)
+++ /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/Operators/Crossovers/IntValue/DiscreteIntValueCrossover.cs	(revision 8590)
@@ -55,7 +55,6 @@
 
     public static void ApplyStatic(IRandom random, IntValue value, IntValue other, IntValueRange range) {
-      if (random.NextDouble() > 0.5) {
+      if (random.NextDouble() > 0.5)
         value.Value = other.Value;
-      }
     }
   }
Index: /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/Operators/Crossovers/IntValue/MultiIntValueCrossover.cs
===================================================================
--- /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/Operators/Crossovers/IntValue/MultiIntValueCrossover.cs	(revision 8589)
+++ /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/Operators/Crossovers/IntValue/MultiIntValueCrossover.cs	(revision 8590)
@@ -67,5 +67,5 @@
 
     public void Apply(IRandom random, IntValue value, IntValue other, IntValueRange range) {
-      // TODO
+      Operators[random.Next(Operators.Count)].Apply(random, value, other, range);
     }
   }
Index: /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/Operators/Crossovers/IntValue/NormalIntValueCrossover.cs
===================================================================
--- /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/Operators/Crossovers/IntValue/NormalIntValueCrossover.cs	(revision 8589)
+++ /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/Operators/Crossovers/IntValue/NormalIntValueCrossover.cs	(revision 8590)
@@ -53,15 +53,17 @@
 
     public void Apply(IRandom random, IntValue value, IntValue other, IntValueRange range) {
-      value.Value = ApplyStatic(random, value, other, range).Value;
+      ApplyStatic(random, value, other, range);
     }
 
-    public static IntValue ApplyStatic(IRandom random, IntValue better, IntValue worse, IntValueRange range) {
-      NormalDistributedRandom N = new NormalDistributedRandom(random, better.Value, Math.Abs(better.Value - worse.Value) / 3);
-      var offspring = new IntValue();
+    public static void ApplyStatic(IRandom random, IntValue value, IntValue other, IntValueRange range) {
+      var N = new NormalDistributedRandom(random, value.Value, Math.Abs(value.Value - other.Value) / 3);
+
+      int offspring;
       do {
-        offspring.Value = (int)N.NextDouble();
-        offspring.Value = range.ApplyStepSize(offspring.Value);
-      } while (!range.IsInRange(offspring.Value));
-      return offspring;
+        offspring = (int)N.NextDouble();
+        offspring = range.ApplyStepSize(offspring);
+      } while (!range.IsInRange(offspring));
+
+      value.Value = offspring;
     }
   }
Index: /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/Operators/Manipulators/DoubleValue/NormalDoubleValueManipulator.cs
===================================================================
--- /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/Operators/Manipulators/DoubleValue/NormalDoubleValueManipulator.cs	(revision 8589)
+++ /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/Operators/Manipulators/DoubleValue/NormalDoubleValueManipulator.cs	(revision 8590)
Index: /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/Operators/Manipulators/IntValue/NormalIntValueManipulator.cs
===================================================================
--- /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/Operators/Manipulators/IntValue/NormalIntValueManipulator.cs	(revision 8589)
+++ /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/Operators/Manipulators/IntValue/NormalIntValueManipulator.cs	(revision 8590)
@@ -36,5 +36,4 @@
   [StorableClass]
   public class NormalIntValueManipulator : SingleSuccessorOperator, IIntValueManipulator, IStochasticOperator {
-
     public ILookupParameter<IRandom> RandomParameter {
       get { return (LookupParameter<IRandom>)Parameters["Random"]; }
@@ -59,5 +58,5 @@
     public static void ApplyStatic(IRandom random, IntValue value, IntValueRange range) {
       var strategy = new RealVector(new double[] { (range.UpperBound.Value - range.LowerBound.Value) / 10 });
-      var vector = new RealVector(new double[] { value.Value });
+      var vector = new RealVector(1);
       int val = value.Value;
 
Index: /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/Operators/Manipulators/IntValue/UniformIntValueManipulator.cs
===================================================================
--- /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/Operators/Manipulators/IntValue/UniformIntValueManipulator.cs	(revision 8589)
+++ /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/Operators/Manipulators/IntValue/UniformIntValueManipulator.cs	(revision 8590)
@@ -36,5 +36,4 @@
   [StorableClass]
   public class UniformIntValueManipulator : SingleSuccessorOperator, IIntValueManipulator, IStochasticOperator {
-
     public ILookupParameter<IRandom> RandomParameter {
       get { return (LookupParameter<IRandom>)Parameters["Random"]; }
@@ -58,10 +57,13 @@
 
     public static void ApplyStatic(IRandom random, IntValue value, IntValueRange range) {
-      var vector = new IntegerVector(new int[] { value.Value });
+      var vector = new IntegerVector(1);
+      var bounds = new IntMatrix(1, 2);
+      bounds[0, 0] = range.LowerBound.Value;
+      bounds[0, 1] = range.UpperBound.Value;
       int val = value.Value;
 
       do {
         vector[0] = val;
-        UniformOnePositionManipulator.Apply(random, vector, new IntMatrix(new int[,] { { range.LowerBound.Value, range.UpperBound.Value } }));
+        UniformOnePositionManipulator.Apply(random, vector, bounds);
         value.Value = vector[0];
         value.Value = range.ApplyStepSize(value.Value);
Index: /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/ParameterConfigurations/ParameterConfiguration.cs
===================================================================
--- /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/ParameterConfigurations/ParameterConfiguration.cs	(revision 8589)
+++ /branches/ParameterConfigurationEncoding/HeuristicLab.Encodings.ParameterConfigurationEncoding/3.3/ParameterConfigurations/ParameterConfiguration.cs	(revision 8590)
@@ -96,5 +96,5 @@
     protected Type parameterDataType;
     public Type ParameterDataType {
-      get { return this.parameterDataType; }
+      get { return parameterDataType; }
     }
 
@@ -103,6 +103,6 @@
       get { return validTypes; }
       protected set {
-        if (this.validTypes != value) {
-          this.validTypes = value;
+        if (validTypes != value) {
+          validTypes = value;
         }
       }
@@ -113,5 +113,5 @@
     public Type ValueDataType {
       get { return valueDataType; }
-      protected set { this.valueDataType = value; }
+      protected set { valueDataType = value; }
     }
 
@@ -119,17 +119,17 @@
     protected ICheckedValueConfigurationList valueConfigurations;
     public ICheckedValueConfigurationList ValueConfigurations {
-      get { return this.valueConfigurations; }
+      get { return valueConfigurations; }
       protected set {
-        if (this.valueConfigurations != value) {
-          if (this.valueConfigurations != null) DeregisterValueConfigurationEvents();
-          this.valueConfigurations = value;
+        if (valueConfigurations != value) {
+          if (valueConfigurations != null) DeregisterValueConfigurationEvents();
+          valueConfigurations = value;
           KeepActualValueConfigurationIndexConsistent();
-          if (this.valueConfigurations != null) RegisterValueConfigurationEvents();
-        }
-      }
-    }
-
-    [Storable]
-    private int actualValueConfigurationIndex = 0;
+          if (valueConfigurations != null) RegisterValueConfigurationEvents();
+        }
+      }
+    }
+
+    [Storable]
+    private int actualValueConfigurationIndex;
     public int ActualValueConfigurationIndex {
       get { return actualValueConfigurationIndex; }
@@ -155,6 +155,6 @@
       get { return isNullable; }
       protected set {
-        if (this.isNullable != value) {
-          this.isNullable = value;
+        if (isNullable != value) {
+          isNullable = value;
         }
       }
@@ -182,7 +182,7 @@
       get { return valuesReadOnly; }
       set {
-        if (value != this.valuesReadOnly) {
-          this.valuesReadOnly = value;
-          foreach (var vc in this.valueConfigurations) {
+        if (valuesReadOnly != value) {
+          valuesReadOnly = value;
+          foreach (var vc in valueConfigurations) {
             vc.ValuesReadOnly = value;
           }
