Index: branches/HeuristicLab.MetaOptimization/HeuristicLab.MetaOptimization.Test/Program.cs
===================================================================
--- branches/HeuristicLab.MetaOptimization/HeuristicLab.MetaOptimization.Test/Program.cs	(revision 6034)
+++ branches/HeuristicLab.MetaOptimization/HeuristicLab.MetaOptimization.Test/Program.cs	(revision 6038)
@@ -63,5 +63,5 @@
       //TestDoubleSampling(); return;
       //TestTypeDiscovery();
-      //TestOperators();
+      TestOperators(); return;
       //TestCombinations();
       //TestCombinations2();
@@ -598,11 +598,12 @@
       IRandom random = new MersenneTwister();
 
-      var doubleRange = new DoubleValueRange(new DoubleValue(0), new DoubleValue(100), new DoubleValue(0.1));
+      var doubleRange = new DoubleValueRange(new DoubleValue(0), new DoubleValue(1), new DoubleValue(0.001));
       using (var sw = new StreamWriter("out-DoubleValue.txt")) {
         for (int i = 0; i < 10000; i++) {
-          var val = new DoubleValue(90);
+          var val = new DoubleValue(0.0);
           NormalDoubleValueManipulator.ApplyStatic(random, val, doubleRange);
 
           sw.WriteLine(val);
+          Debug.Assert(val.Value >= 0.0 && val.Value <= 1.0);
         }
       }
@@ -623,4 +624,15 @@
           UniformIntValueManipulator.ApplyStatic(random, val, intRange);
           sw.WriteLine(val);
+        }
+      }
+
+      using (var sw = new StreamWriter("out-DoubleValueCrossed.txt")) {
+        for (int i = 0; i < 10000; i++) {
+          var val1 = new DoubleValue(0.0);
+          var val2 = new DoubleValue(0.5);
+          var val3 = NormalDoubleValueCrossover.ApplyStatic(random, val1, val2, doubleRange);
+
+          sw.WriteLine(val3);
+          Debug.Assert(val3.Value >= 0.0 && val3.Value <= 1.0);
         }
       }
@@ -1071,14 +1083,16 @@
 
     private static void TestDoubleSampling() {
-      System.Random rand = new System.Random();
-      double lower = 2;
-      double upper = 3;
-      double stepsize = 0.6;
-      for (int i = 0; i < 100; i++) {
-        double val;
-        do {
-          val = Math.Round((rand.NextDouble() * (upper - lower) + lower) / stepsize, 0) * stepsize;
-        } while (val < lower || val > upper);
-        Console.WriteLine(val);
+      var random = new MersenneTwister();
+      double lower = 0;
+      double upper = 1;
+      double stepsize = 0.0000001;
+      DoubleValueRange range = new DoubleValueRange(new DoubleValue(lower), new DoubleValue(upper), new DoubleValue(stepsize));
+
+      using (var sw = new StreamWriter("out-DoubleValue.txt")) {
+        for (int i = 0; i < 10000; i++) {
+          var val = range.GetRandomValue(random);
+          Debug.Assert(val.Value >= lower && val.Value <= upper);
+          sw.WriteLine(val);
+        }
       }
     }
Index: branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Evaluators/AlgorithmRunsAnalyzer.cs
===================================================================
--- branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Evaluators/AlgorithmRunsAnalyzer.cs	(revision 6034)
+++ branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Evaluators/AlgorithmRunsAnalyzer.cs	(revision 6038)
@@ -59,5 +59,6 @@
     [StorableConstructor]
     protected AlgorithmRunsAnalyzer(bool deserializing) : base(deserializing) { }
-    public AlgorithmRunsAnalyzer() : base() {
+    public AlgorithmRunsAnalyzer()
+      : base() {
       Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator which should be used to initialize the new random permutation."));
       Parameters.Add(new LookupParameter<DoubleValue>("Quality", "The evaluated quality of the ParameterVector."));
@@ -134,9 +135,9 @@
         parameterConfiguration.AverageQualities = new DoubleArray(qualities.Select(q => q.Average()).ToArray());
 
-        if(maximization)
+        if (maximization)
           parameterConfiguration.BestQualities = new DoubleArray(qualities.Select(q => q.Max()).ToArray());
         else
           parameterConfiguration.BestQualities = new DoubleArray(qualities.Select(q => q.Min()).ToArray());
-        
+
         if (maximization)
           parameterConfiguration.WorstQualities = new DoubleArray(qualities.Select(q => q.Min()).ToArray());
@@ -148,10 +149,13 @@
         parameterConfiguration.Runs = runs;
 
-        this.QualityParameter.ActualValue = new DoubleValue(MetaOptimizationUtil.Normalize(parameterConfiguration, referenceQualityAverages, referenceQualityDeviations, referenceEvaluatedSolutionAverages, 1, 1, 1, maximization));
+        this.QualityParameter.ActualValue = new DoubleValue(MetaOptimizationUtil.Normalize(parameterConfiguration, referenceQualityAverages, referenceQualityDeviations, referenceEvaluatedSolutionAverages, 1, 0.1, 1, maximization));
       } else {
         // something terrible happened -> most probably due to invalid parameters.
         // penalty with worst quality from latest generation!
-
-        double penaltyValue = results.ContainsKey("CurrentWorstQuality") ? ((DoubleValue)results["CurrentWorstQuality"]).Value : referenceQualityAverages.Max(); // todo: respect min/max
+        double penaltyValue;
+        if (maximization)
+          penaltyValue = results.ContainsKey("CurrentWorstQuality") ? ((DoubleValue)results["CurrentWorstQuality"]).Value : referenceQualityAverages.Min();
+        else
+          penaltyValue = results.ContainsKey("CurrentWorstQuality") ? ((DoubleValue)results["CurrentWorstQuality"]).Value : referenceQualityAverages.Max();
         this.QualityParameter.ActualValue = new DoubleValue(penaltyValue);
       }
Index: branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Operators/Crossovers/DoubleValue/NormalDoubleValueCrossover.cs
===================================================================
--- branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Operators/Crossovers/DoubleValue/NormalDoubleValueCrossover.cs	(revision 6034)
+++ branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Operators/Crossovers/DoubleValue/NormalDoubleValueCrossover.cs	(revision 6038)
@@ -1,13 +1,10 @@
 ﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
 using HeuristicLab.Operators;
 using HeuristicLab.Optimization;
+using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Core;
-using HeuristicLab.Parameters;
-using HeuristicLab.Common;
-using HeuristicLab.Data;
 using HeuristicLab.Random;
 
@@ -19,5 +16,6 @@
     }
 
-    public NormalDoubleValueCrossover() : base() {
+    public NormalDoubleValueCrossover()
+      : base() {
     }
     [StorableConstructor]
@@ -35,5 +33,5 @@
 
     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));
+      NormalDistributedRandom N = new NormalDistributedRandom(random, better.Value, Math.Abs(better.Value - worse.Value) / 3);
       var offspring = new DoubleValue();
       do {
Index: branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Operators/Crossovers/IntValue/NormalIntValueCrossover.cs
===================================================================
--- branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Operators/Crossovers/IntValue/NormalIntValueCrossover.cs	(revision 6034)
+++ branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Operators/Crossovers/IntValue/NormalIntValueCrossover.cs	(revision 6038)
@@ -1,13 +1,10 @@
 ﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
 using HeuristicLab.Operators;
 using HeuristicLab.Optimization;
+using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Core;
-using HeuristicLab.Parameters;
-using HeuristicLab.Common;
-using HeuristicLab.Data;
 using HeuristicLab.Random;
 
@@ -34,5 +31,5 @@
 
     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));
+      NormalDistributedRandom N = new NormalDistributedRandom(random, better.Value, Math.Abs(better.Value - worse.Value) / 3);
       var offspring = new IntValue();
       do {
Index: branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Operators/Manipulators/DoubleValue/NormalDoubleValueManipulator.cs
===================================================================
--- branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Operators/Manipulators/DoubleValue/NormalDoubleValueManipulator.cs	(revision 6034)
+++ branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Operators/Manipulators/DoubleValue/NormalDoubleValueManipulator.cs	(revision 6038)
@@ -1,14 +1,10 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
+﻿using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.RealVectorEncoding;
 using HeuristicLab.Operators;
 using HeuristicLab.Optimization;
+using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Core;
-using HeuristicLab.Parameters;
-using HeuristicLab.Common;
-using HeuristicLab.Encodings.RealVectorEncoding;
-using HeuristicLab.Data;
 
 namespace HeuristicLab.Problems.MetaOptimization {
@@ -36,16 +32,14 @@
 
     public static void ApplyStatic(IRandom random, DoubleValue value, DoubleValueRange range) {
-      bool ok = false;
       var strategy = new RealVector(new double[] { (range.UpperBound.Value - range.LowerBound.Value) / 10}); // todo: add strategy parameter
       var vector = new RealVector(1);
       double val = value.Value;
 
-      while (!ok) { 
+      do { 
         vector[0] = val;
         NormalAllPositionsManipulator.Apply(random, vector, strategy);
         value.Value = vector[0];
         value.Value = range.ApplyStepSize(value.Value);
-        ok = range.IsInRange(value.Value);
-      }
+      } while(!range.IsInRange(value.Value));
     }
   }
Index: branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Operators/Manipulators/DoubleValue/UniformDoubleValueManipulator.cs
===================================================================
--- branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Operators/Manipulators/DoubleValue/UniformDoubleValueManipulator.cs	(revision 6034)
+++ branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Operators/Manipulators/DoubleValue/UniformDoubleValueManipulator.cs	(revision 6038)
@@ -1,14 +1,10 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
+﻿using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.RealVectorEncoding;
 using HeuristicLab.Operators;
 using HeuristicLab.Optimization;
+using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Core;
-using HeuristicLab.Parameters;
-using HeuristicLab.Common;
-using HeuristicLab.Encodings.RealVectorEncoding;
-using HeuristicLab.Data;
 
 namespace HeuristicLab.Problems.MetaOptimization {
@@ -36,5 +32,4 @@
 
     public static void ApplyStatic(IRandom random, DoubleValue value, DoubleValueRange range) {
-      bool ok = false;
       var vector = new RealVector(1);
       var bounds = new DoubleMatrix(1, 2);
@@ -43,11 +38,10 @@
       double val = value.Value;
 
-      while (!ok) {
+      do {
         vector[0] = val;
         UniformOnePositionManipulator.Apply(random, vector, bounds);
         value.Value = vector[0];
         value.Value = range.ApplyStepSize(value.Value);
-        ok = range.IsInRange(value.Value);
-      }
+      } while (!range.IsInRange(value.Value));
     }
   }
Index: branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Operators/Manipulators/IntValue/NormalIntValueManipulator.cs
===================================================================
--- branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Operators/Manipulators/IntValue/NormalIntValueManipulator.cs	(revision 6034)
+++ branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Operators/Manipulators/IntValue/NormalIntValueManipulator.cs	(revision 6038)
@@ -1,15 +1,10 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
+﻿using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.RealVectorEncoding;
 using HeuristicLab.Operators;
 using HeuristicLab.Optimization;
+using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Core;
-using HeuristicLab.Parameters;
-using HeuristicLab.Common;
-using HeuristicLab.Encodings.IntegerVectorEncoding;
-using HeuristicLab.Data;
-using HeuristicLab.Encodings.RealVectorEncoding;
 
 namespace HeuristicLab.Problems.MetaOptimization {
@@ -38,16 +33,14 @@
 
     public static void ApplyStatic(IRandom random, IntValue value, IntValueRange range) {
-      bool ok = false;
       var strategy = new RealVector(new double[] { (range.UpperBound.Value - range.LowerBound.Value) / 10 }); // todo: add strategy parameter
       var vector = new RealVector(new double[] { value.Value });
       int val = value.Value;
 
-      while (!ok) {
+      do {
         vector[0] = val;
         NormalAllPositionsManipulator.Apply(random, vector, strategy);
         value.Value = (int)vector[0];
         value.Value = range.ApplyStepSize(value.Value);
-        ok = range.IsInRange(value.Value);
-      }
+      } while (!range.IsInRange(value.Value));
     }
   }
Index: branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Operators/Manipulators/IntValue/UniformIntValueManipulator.cs
===================================================================
--- branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Operators/Manipulators/IntValue/UniformIntValueManipulator.cs	(revision 6034)
+++ branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Operators/Manipulators/IntValue/UniformIntValueManipulator.cs	(revision 6038)
@@ -1,14 +1,10 @@
-﻿using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
+﻿using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.IntegerVectorEncoding;
 using HeuristicLab.Operators;
 using HeuristicLab.Optimization;
+using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Core;
-using HeuristicLab.Parameters;
-using HeuristicLab.Common;
-using HeuristicLab.Encodings.IntegerVectorEncoding;
-using HeuristicLab.Data;
 
 namespace HeuristicLab.Problems.MetaOptimization {
@@ -37,15 +33,13 @@
 
     public static void ApplyStatic(IRandom random, IntValue value, IntValueRange range) {
-      bool ok = false;
       var vector = new IntegerVector(new int[] { value.Value });
       int val = value.Value;
 
-      while (!ok) {
+      do {
         vector[0] = val;
         UniformOnePositionManipulator.Apply(random, vector, range.LowerBound, new IntValue(range.UpperBound.Value + 1));
         value.Value = vector[0];
         value.Value = range.ApplyStepSize(value.Value);
-        ok = range.IsInRange(value.Value);
-      }
+      } while (!range.IsInRange(value.Value));
     }
   }
