Index: branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ParameterConfigurationTree.cs
===================================================================
--- branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ParameterConfigurationTree.cs	(revision 6017)
+++ branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ParameterConfigurationTree.cs	(revision 6018)
@@ -16,10 +16,10 @@
 
     [Storable]
-    private DoubleValue averageQualityNormalized;
-    public DoubleValue AverageQualityNormalized {
-      get { return averageQualityNormalized; }
-      set {
-        if (averageQualityNormalized != value) {
-          averageQualityNormalized = value;
+    private DoubleValue quality;
+    public DoubleValue Quality {
+      get { return quality; }
+      set {
+        if (quality != value) {
+          quality = value;
           OnQualityChanged();
         }
@@ -28,14 +28,36 @@
 
     [Storable]
-    private DoubleArray qualitiesNormalized;
-    public DoubleArray QualitiesNormalized {
-      get { return qualitiesNormalized; }
-      set {
-        if (qualitiesNormalized != value) {
-          qualitiesNormalized = value;
-        }
-      }
-    }
-
+    private DoubleArray normalizedQualityAverages;
+    public DoubleArray NormalizedQualityAverages {
+      get { return normalizedQualityAverages; }
+      set {
+        if (normalizedQualityAverages != value) {
+          normalizedQualityAverages = value;
+        }
+      }
+    }
+
+    [Storable]
+    private DoubleArray normalizedQualityDeviations;
+    public DoubleArray NormalizedQualityDeviations {
+      get { return normalizedQualityDeviations; }
+      set {
+        if (normalizedQualityDeviations != value) {
+          normalizedQualityDeviations = value;
+        }
+      }
+    }
+
+    [Storable]
+    private DoubleArray normalizedEvaluatedSolutions;
+    public DoubleArray NormalizedEvaluatedSolutions {
+      get { return normalizedEvaluatedSolutions; }
+      set {
+        if (normalizedEvaluatedSolutions != value) {
+          normalizedEvaluatedSolutions = value;
+        }
+      }
+    }
+    
     [Storable]
     private DoubleArray bestQualities;
@@ -85,4 +107,11 @@
 
     [Storable]
+    private DoubleArray averageEvaluatedSolutions;
+    public DoubleArray AverageEvaluatedSolutions {
+      get { return averageEvaluatedSolutions; }
+      set { averageEvaluatedSolutions = value; }
+    }
+
+    [Storable]
     private IntValue repetitions;
     public IntValue Repetitions {
@@ -116,11 +145,4 @@
       }
     }
-
-    //[Storable]
-    //protected string name;
-    //public string Name {
-    //  get { return name; }
-    //  set { name = value; }
-    //}
 
     #region constructors and cloning
@@ -136,5 +158,5 @@
       algproblemitem.ProblemParameter.Value = problem;
       this.discoverValidValues = false;
-      
+
       this.parameterConfigurations.Add(new SingleValuedParameterConfiguration("Algorithm", algproblemitem.AlgorithmParameter));
       this.parameterConfigurations.Add(new SingleValuedParameterConfiguration("Problem", algproblemitem.ProblemParameter));
@@ -145,6 +167,8 @@
     protected ParameterConfigurationTree(ParameterConfigurationTree original, Cloner cloner)
       : base(original, cloner) {
-      this.averageQualityNormalized = cloner.Clone(original.averageQualityNormalized);
-      this.qualitiesNormalized = cloner.Clone(original.qualitiesNormalized);
+      this.quality = cloner.Clone(original.quality);
+      this.normalizedQualityAverages = cloner.Clone(original.normalizedQualityAverages);
+      this.normalizedQualityDeviations = cloner.Clone(original.normalizedQualityDeviations);
+      this.normalizedEvaluatedSolutions = cloner.Clone(original.normalizedEvaluatedSolutions);
       this.bestQualities = cloner.Clone(original.BestQualities);
       this.averageQualities = cloner.Clone(original.averageQualities);
@@ -153,4 +177,5 @@
       this.qualityVariances = cloner.Clone(original.qualityVariances);
       this.averageExecutionTimes = cloner.Clone(original.averageExecutionTimes);
+      this.averageEvaluatedSolutions = cloner.Clone(original.averageEvaluatedSolutions);
       this.repetitions = cloner.Clone(original.repetitions);
       this.runs = cloner.Clone(original.runs);
@@ -171,4 +196,5 @@
     public virtual void CollectResultValues(IDictionary<string, IItem> values) {
       values.Add("RunsAverageExecutionTimes", AverageExecutionTimes);
+      values.Add("RunsAverageEvaluatedSolutions", AverageEvaluatedSolutions);
       values.Add("Repetitions", Repetitions);
       values.Add("RunsBestQualities", BestQualities);
@@ -177,6 +203,6 @@
       values.Add("RunsQualityVariances", QualityVariances);
       values.Add("RunsQualityStandardDeviations", QualityStandardDeviations);
-      values.Add("QualitiesNormalized", QualitiesNormalized);
-      values.Add("AverageQualityNormalized", AverageQualityNormalized);
+      values.Add("QualitiesNormalized", NormalizedQualityAverages);
+      values.Add("AverageQualityNormalized", Quality);
       values.Add("Runs", Runs);
     }
@@ -209,15 +235,5 @@
 
       algorithm.CollectParameterValues(this.Parameters);
-      //((IProblem)ProblemConfiguration.ActualValue.Value).CollectParameterValues(this.Parameters);
-      //CollectAlgorithmParameterValues((IAlgorithm)AlgorithmConfiguration.ActualValue.Value, parameters);
-    }
-
-    //protected virtual void CollectAlgorithmParameterValues(IAlgorithm algorithm, IDictionary<string, IItem> values) {
-    //  var algorithmValues = new Dictionary<string, IItem>();
-    //  algorithm.CollectParameterValues(algorithmValues);
-    //  foreach (var value in algorithmValues) {
-    //    values.Add("Algorithm." + value.Key, value.Value);
-    //  }
-    //}
+    }
 
     public Experiment GenerateExperiment(IAlgorithm algorithm, bool createBatchRuns, int repetitions) {
@@ -294,12 +310,14 @@
         var sb = new StringBuilder();
         if (!string.IsNullOrEmpty(algorithmInfo)) {
-          sb.Append("Algorithm: ");
+          sb.Append("Algorithm (");
           sb.Append(algorithmInfo);
+          sb.Append(")");
         }
         if (!string.IsNullOrEmpty(problemInfo)) {
           if (sb.Length > 0)
             sb.Append(", ");
-          sb.Append("Problem: ");
+          sb.Append("Problem( ");
           sb.Append(problemInfo);
+          sb.Append(")");
         }
         return sb.ToString();
@@ -311,6 +329,4 @@
       ProblemConfiguration.CollectOptimizedParameterNames(parameterNames, string.Empty);
     }
-
-   
   }
 }
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 6017)
+++ branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ParameterConfigurations/ParameterConfiguration.cs	(revision 6018)
@@ -92,4 +92,5 @@
           if (this.valueConfigurations != null) DeregisterValueConfigurationEvents();
           this.valueConfigurations = value;
+          KeepActualValueConfigurationIndexConsistent();
           if (this.valueConfigurations != null) RegisterValueConfigurationEvents();
         }
@@ -144,5 +145,5 @@
       set { autoPopulateValueConfigurations = value; }
     }
-    
+
 
     #region Constructors and Cloning
@@ -258,5 +259,5 @@
         } else {
           IItem val;
-          if (ActualValue.Value != null && ActualValue.ValueDataType == t) {
+          if (ActualValue.Value != null && ActualValue.Value.GetType() == t) {
             val = (IItem)ActualValue.Value.Clone(); // use existing value for that type (if available)
           } else {
@@ -363,10 +364,14 @@
     void ValueConfigurations_CheckedItemsChanged(object sender, Collections.CollectionItemsChangedEventArgs<IndexedItem<IValueConfiguration>> e) {
       OnToStringChanged();
-    }
+      KeepActualValueConfigurationIndexConsistent();
+    }
+
     void ValueConfigurations_ItemsRemoved(object sender, Collections.CollectionItemsChangedEventArgs<IndexedItem<IValueConfiguration>> e) {
       OnToStringChanged();
+      KeepActualValueConfigurationIndexConsistent();
     }
     void ValueConfigurations_ItemsAdded(object sender, Collections.CollectionItemsChangedEventArgs<IndexedItem<IValueConfiguration>> e) {
       OnToStringChanged();
+      KeepActualValueConfigurationIndexConsistent();
     }
 
@@ -440,5 +445,5 @@
     }
 
-    public string ParameterInfoString {
+    public virtual string ParameterInfoString {
       get {
         StringBuilder sb = new StringBuilder();
@@ -455,5 +460,5 @@
           }
 
-          if (this.ActualValue.Value is IParameterizedItem) {
+          if (this.ValueConfigurations[actualValueConfigurationIndex] is ParameterizedValueConfiguration) {
             string subParams = this.ValueConfigurations[actualValueConfigurationIndex].ParameterInfoString;
             if (!string.IsNullOrEmpty(subParams)) {
@@ -583,4 +588,23 @@
       }
     }
+
+    /// <summary>
+    /// Ensures that the ActualValueConfigurationIndex has a valid value
+    /// Only indices of items which are checked are allowed
+    /// </summary>
+    private void KeepActualValueConfigurationIndexConsistent() {
+      if (this.valueConfigurations != null && this.valueConfigurations.CheckedItems.Count() > 0) {
+        if(this.valueConfigurations.Count <= this.actualValueConfigurationIndex &&
+           this.valueConfigurations.CheckedItems.Count(x => x.Index == this.actualValueConfigurationIndex) == 1) {
+          // everything is ok; do nothing
+        } else {
+          // current index is invalid, set new one
+          this.ActualValueConfigurationIndex = this.valueConfigurations.CheckedItems.First().Index;
+        }
+      } else {
+        // no checked valueConfiguration is available; cannot be used
+        this.ActualValueConfigurationIndex = -1;
+      }
+    }
   }
 }
Index: branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ParameterConfigurations/SingleValuedParameterConfiguration.cs
===================================================================
--- branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ParameterConfigurations/SingleValuedParameterConfiguration.cs	(revision 6017)
+++ branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ParameterConfigurations/SingleValuedParameterConfiguration.cs	(revision 6018)
@@ -24,5 +24,5 @@
       this.discoverValidValues = false;
       this.validValues = new ItemSet<IItem> { valueConfiguration.ActualValue.Value };
-      this.validTypes = new Type[] {valueConfiguration.ActualValue.ValueDataType};
+      this.validTypes = new Type[] { valueConfiguration.ActualValue.ValueDataType };
       this.IsNullable = false;
       this.itemImage = valueConfiguration.ItemImage;
@@ -69,4 +69,14 @@
       OnToStringChanged();
     }
+
+    public override string ParameterInfoString {
+      get {
+        if (this.Optimize) {
+          return string.Format("{0} ({1})", this.Name, this.ValueConfigurations.Single().ParameterInfoString);
+        } else {
+          return string.Empty;
+        }
+      }
+    }
   }
 }
