Index: branches/HeuristicLab.MetaOptimization/HeuristicLab.MetaOptimization.Test/Program.cs
===================================================================
--- branches/HeuristicLab.MetaOptimization/HeuristicLab.MetaOptimization.Test/Program.cs	(revision 5359)
+++ branches/HeuristicLab.MetaOptimization/HeuristicLab.MetaOptimization.Test/Program.cs	(revision 5361)
@@ -51,5 +51,5 @@
       //TestCombinations3();
       //TestEnumeratorCollectionEnumerator();
-      //TestCombinations4(); return;
+      TestCombinations4(); return;
       //TestAlgorithmPerformanceIssue();
       //TestWaitAny();
@@ -406,6 +406,6 @@
       ConfigurePopulationSize(vc, 20, 100, 20);
       //ConfigureMutationRate(vc, 0.10, 0.60, 0.10);
-      //ConfigureMutationOperator(vc);
-      ConfigureSelectionOperator(vc, true);
+      ConfigureMutationOperator(vc);
+      //ConfigureSelectionOperator(vc, true);
 
       int count = 0;
@@ -653,4 +653,7 @@
         mutationOperator.ValueConfigurations.SetItemCheckedState(multiMutator, false);
       }
+
+      // add another normal
+      mutationOperator.ValueConfigurations.Add(new ValueConfiguration(new NormalAllPositionsManipulator(), typeof(NormalAllPositionsManipulator)), true);
     }
 
Index: branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Analyzers/RunsAnalyzer.cs
===================================================================
--- branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Analyzers/RunsAnalyzer.cs	(revision 5359)
+++ 	(revision )
@@ -1,83 +1,0 @@
-﻿using System.Linq;
-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 System.Collections.Generic;
-using System;
-
-namespace HeuristicLab.Problems.MetaOptimization {
-  /// <summary>
-  /// TODO
-  /// </summary>
-  [Item("RunsAnalyzer", "")]
-  [StorableClass]
-  public sealed class RunsAnalyzer : SingleSuccessorOperator, IAnalyzer {
-
-    public ValueLookupParameter<ResultCollection> ResultsParameter {
-      get { return (ValueLookupParameter<ResultCollection>)Parameters["Results"]; }
-    }
-    public ScopeTreeLookupParameter<ParameterConfigurationTree> ParameterConfigurationParameter {
-      get { return (ScopeTreeLookupParameter<ParameterConfigurationTree>)Parameters["ParameterConfigurationTree"]; }
-    }
-    public ScopeTreeLookupParameter<DoubleValue> QualityParameter {
-      get { return (ScopeTreeLookupParameter<DoubleValue>)Parameters["Quality"]; }
-    }
-    public LookupParameter<DoubleArray> ProblemQualityReferenceParameter {
-      get { return (LookupParameter<DoubleArray>)Parameters["ProblemQualityReferences"]; }
-    }
-    public LookupParameter<ConstrainedItemList<IProblem>> ProblemsParameter {
-      get { return (LookupParameter<ConstrainedItemList<IProblem>>)Parameters[MetaOptimizationProblem.ProblemsParameterName]; }
-    }
-    public ValueLookupParameter<ItemDictionary<StringValue, RunCollection>> RunsParameter {
-      get { return (ValueLookupParameter<ItemDictionary<StringValue, RunCollection>>)Parameters["Runs"]; }
-    }
-
-    public RunsAnalyzer()
-      : base() {
-      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", ""));
-      Parameters.Add(new ValueLookupParameter<ResultCollection>("Results", ""));
-      Parameters.Add(new ScopeTreeLookupParameter<ParameterConfigurationTree>("ParameterConfigurationTree", ""));
-      Parameters.Add(new LookupParameter<DoubleArray>("ProblemQualityReferences", ""));
-      Parameters.Add(new LookupParameter<ConstrainedItemList<IProblem>>(MetaOptimizationProblem.ProblemsParameterName, ""));
-      Parameters.Add(new ValueLookupParameter<ItemDictionary<StringValue, RunCollection>>("Runs", "", new ItemDictionary<StringValue, RunCollection>()));
-    }
-
-    [StorableConstructor]
-    private RunsAnalyzer(bool deserializing) : base(deserializing) { }
-    private RunsAnalyzer(RunsAnalyzer original, Cloner cloner) : base(original, cloner) { }
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new RunsAnalyzer(this, cloner);
-    }
-
-    public override IOperation Apply() {
-      ResultCollection results = ResultsParameter.ActualValue;
-      ItemArray<ParameterConfigurationTree> solutions = ParameterConfigurationParameter.ActualValue;
-      ItemArray<DoubleValue> qualities = QualityParameter.ActualValue;
-      ItemDictionary<StringValue, RunCollection> allRuns = RunsParameter.ActualValue;
-
-      foreach (var solution in solutions) {
-        string key = solution.ParameterInfoString;
-        if (allRuns.Count(x => x.Key.Value == key) == 0) {
-          allRuns.Add(new StringValue(key), new RunCollection());
-        }
-
-        foreach (var run in solution.Runs) {
-          if (!((BoolValue)run.Results["Meta.FromCache"]).Value) {
-            run.Results["Meta.FromCache"] = new BoolValue(true);
-            allRuns.Single(x => x.Key.Value == key).Value.Add(run);
-          }
-        }
-      }
-
-      if (!results.ContainsKey("Runs")) {
-        results.Add(new Result("Runs", allRuns));
-      }
-
-      return base.Apply();
-    }
-  }
-}
Index: branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ParameterConfigurations/ParameterConfiguration.cs
===================================================================
--- branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ParameterConfigurations/ParameterConfiguration.cs	(revision 5359)
+++ branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ParameterConfigurations/ParameterConfiguration.cs	(revision 5361)
@@ -146,5 +146,5 @@
       this.ValueConfigurations = new CheckedValueConfigurationList(this.validValues ?? CreateValidValues());
       this.ActualValue = new ConstrainedValue(
-        valueParameter.Value != null ? (IItem)valueParameter.Value.Clone() : null, 
+        valueParameter.Value != null ? valueParameter.Value : null, // don't clone here; otherwise settings of a non-optimized ValueParameter will not be synchronized with the ConstrainedValue
         valueParameter.DataType, 
         this.validValues != null ? new ItemSet<IItem>(this.validValues) : CreateValidValues(), 
@@ -200,5 +200,5 @@
       if (this.ActualValue != null) this.ActualValue.ToStringChanged -= new EventHandler(ActualValue_ToStringChanged);
     }
-
+    
     private void PopulateValueConfigurations() {
       foreach (Type t in this.validTypes) {
@@ -370,7 +370,9 @@
         if (this.Optimize) {
           var vc = this.ValueConfigurations[actualValueConfigurationIndex];
-          if (IsSubclassOfRawGeneric(typeof(ValueTypeValue<>), vc.GetType())) {
+          if (vc.ActualValue == null || vc.ActualValue.Value == null) {
+            sb.Append(string.Format("{0}: null", parameterName));
+          } else if (IsSubclassOfRawGeneric(typeof(ValueTypeValue<>), vc.ActualValue.Value.GetType())) {
             // for int, double, bool use the value directly
-            sb.Append(string.Format("{0}: {1}", parameterName, this.ActualValue.Value != null ? this.ActualValue.Value.ToString() : "null"));
+            sb.Append(string.Format("{0}: {1}", parameterName, this.ActualValue.Value.ToString()));
           } else {
             // for other types use NumberedName (this also uses the Number-Property for otherwise ambiguous ValueConfigurations)
Index: branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ValueConfigurations/CheckedValueConfigurationCollection.cs
===================================================================
--- branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ValueConfigurations/CheckedValueConfigurationCollection.cs	(revision 5359)
+++ branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ValueConfigurations/CheckedValueConfigurationCollection.cs	(revision 5361)
@@ -15,6 +15,6 @@
     [Storable]
     private int minItemCount = 1;
-    public int MinItemCount { 
-      get { return minItemCount; } 
+    public int MinItemCount {
+      get { return minItemCount; }
     }
 
@@ -33,8 +33,10 @@
     }
     [StorableConstructor]
-    protected CheckedValueConfigurationList(bool deserializing) : base(deserializing) {
+    protected CheckedValueConfigurationList(bool deserializing)
+      : base(deserializing) {
       RegisterEvents();
     }
-    protected CheckedValueConfigurationList(CheckedValueConfigurationList original, Cloner cloner) : base(original, cloner) {
+    protected CheckedValueConfigurationList(CheckedValueConfigurationList original, Cloner cloner)
+      : base(original, cloner) {
       this.minItemCount = original.MinItemCount;
       this.validValues = original.validValues;
@@ -61,6 +63,7 @@
     void CheckedValueConfigurationList_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedItem<IValueConfiguration>> e) {
       foreach (var item in e.Items) {
-        if(this.Where(x => x.ItemName == item.Value.ItemName).Count() > 0) {
-          int maxNumber = this.Where(x => x.ItemName == item.Value.ItemName).Select(x => x.Number).Max();
+        var matchingItems = this.Where(x => x != item.Value && x.ActualValue.ValueDataType == item.Value.ActualValue.ValueDataType);
+        if (matchingItems.Count() > 0) {
+          int maxNumber = matchingItems.Select(x => x.Number).Max();
           item.Value.Number = maxNumber + 1;
         }
Index: branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ValueConfigurations/ValueConfiguration.cs
===================================================================
--- branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ValueConfigurations/ValueConfiguration.cs	(revision 5359)
+++ branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ValueConfigurations/ValueConfiguration.cs	(revision 5361)
@@ -93,5 +93,5 @@
 
     [Storable]
-    protected int number = -1;
+    protected int number = 0;
     public int Number {
       get { return number; }
@@ -237,5 +237,5 @@
       get {
         if (this.number == 0) {
-          return ActualValue.Value.ItemName;
+          return (ActualValue != null && ActualValue.Value != null) ? ActualValue.Value.ItemName : base.ToString();
         } else {
           return string.Format("{0} {1}", ActualValue.Value.ItemName, number);
@@ -260,5 +260,5 @@
     public virtual void Parameterize(IParameterizedItem item) {
       foreach (IParameterConfiguration pc in this.ParameterConfigurations) {
-        if(pc.Optimize) pc.Parameterize((IValueParameter)item.Parameters[pc.ParameterName]);
+        pc.Parameterize((IValueParameter)item.Parameters[pc.ParameterName]);
       }
     }
