Index: branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/ParameterConfigurations/ParameterConfiguration.cs
===================================================================
--- branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/ParameterConfigurations/ParameterConfiguration.cs	(revision 4981)
+++ branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/ParameterConfigurations/ParameterConfiguration.cs	(revision 4982)
@@ -117,6 +117,12 @@
 
     private void PopulateValueConfigurations() {
-      foreach (IItem item in this.validValues) {
-        this.ValueConfigurations.Add(new ValueConfiguration(item, item.GetType()), false);
+      foreach (IItem validValue in this.validValues) {
+        IItem val;
+        if (actualValueConfiguration.ConstrainedValue.Value != null && actualValueConfiguration.ConstrainedValue.ValueDataType == validValue.GetType()) {
+          val = actualValueConfiguration.ConstrainedValue.Value; // use existing value for that type (if available)
+        } else {
+          val = validValue;
+        }
+        this.ValueConfigurations.Add(new ValueConfiguration(val, val.GetType()), true);
       }
     }
Index: branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/ValueConfigurations/CheckedValueConfigurationCollection.cs
===================================================================
--- branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/ValueConfigurations/CheckedValueConfigurationCollection.cs	(revision 4981)
+++ branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/ValueConfigurations/CheckedValueConfigurationCollection.cs	(revision 4982)
@@ -4,10 +4,19 @@
 using System.Text;
 using HeuristicLab.Core;
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
 namespace HeuristicLab.Problems.MetaOptimization {
   // todo: check that at least 1 elements needs to be selected
   // todo: control creatable item types
+  [StorableClass]
   public class CheckedValueConfigurationCollection : CheckedItemCollection<IValueConfiguration>, ICheckedValueConfigurationCollection {
+    [Storable]
+    private int minItemCount = 1;
+    public int MinItemCount { 
+      get { return minItemCount; } 
+    }
 
+    [Storable]
     protected Type valueDataType;
     public Type ValueDataType {
@@ -17,4 +26,39 @@
     public CheckedValueConfigurationCollection(Type valueDataType) {
       this.valueDataType = valueDataType;
+      RegisterEvents();
+    }
+    public CheckedValueConfigurationCollection() {
+      RegisterEvents();
+    }
+    [StorableConstructor]
+    protected CheckedValueConfigurationCollection(bool deserializing) : base(deserializing) {
+      RegisterEvents();
+    }
+    protected CheckedValueConfigurationCollection(CheckedValueConfigurationCollection original, Cloner cloner) : base(original, cloner) {
+      this.minItemCount = original.MinItemCount;
+      this.valueDataType = original.valueDataType;
+      RegisterEvents();
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new CheckedValueConfigurationCollection(this, cloner);
+    }
+
+    private void RegisterEvents() {
+      this.ItemsRemoved += new Collections.CollectionItemsChangedEventHandler<IValueConfiguration>(CheckedValueConfigurationCollection_ItemsRemoved);
+    }
+    private void DeregisterEvents() {
+      this.ItemsRemoved -= new Collections.CollectionItemsChangedEventHandler<IValueConfiguration>(CheckedValueConfigurationCollection_ItemsRemoved);
+    }
+
+    private void CheckedValueConfigurationCollection_ItemsRemoved(object sender, Collections.CollectionItemsChangedEventArgs<IValueConfiguration> e) {
+      // auch collectionreset gehört berücksichtigt
+      // funktioniert so nicht ganz, weil die view das hinzufügen nicht mitkriegt
+      //if (this.Count < minItemCount) {
+      //  foreach (var item in e.Items) {
+      //    if (this.Count >= minItemCount)
+      //      break;
+      //    this.Add(item);
+      //  }
+      //}
     }
   }
Index: branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/ValueConfigurations/RootValueConfiguration.cs
===================================================================
--- branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/ValueConfigurations/RootValueConfiguration.cs	(revision 4982)
+++ branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/ValueConfigurations/RootValueConfiguration.cs	(revision 4982)
@@ -0,0 +1,22 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Problems.MetaOptimization {
+  // todo: storable, name, descr, ...
+  public class RootValueConfiguration : ValueConfiguration {
+
+    public RootValueConfiguration(IItem value, Type valueDataType) : base(value, valueDataType) {
+      this.Optimize = true; // root must always be optimized
+    }
+    public RootValueConfiguration() { }
+    protected RootValueConfiguration(RootValueConfiguration original, Cloner cloner) : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new RootValueConfiguration(this, cloner);
+    }
+  }
+}
Index: branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/ValueConfigurations/ValueConfiguration.cs
===================================================================
--- branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/ValueConfigurations/ValueConfiguration.cs	(revision 4981)
+++ branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/ValueConfigurations/ValueConfiguration.cs	(revision 4982)
@@ -30,5 +30,5 @@
     protected IItemCollection<IParameterConfiguration> parameterConfigurations = new ItemCollection<IParameterConfiguration>();
     public IItemCollection<IParameterConfiguration> ParameterConfigurations {
-      get { return this.parameterConfigurations; }
+      get { return new ReadOnlyItemCollection<IParameterConfiguration>(this.parameterConfigurations); }
       protected set { this.parameterConfigurations = value; }
     }
@@ -55,5 +55,5 @@
     #region Constructors and Cloning
     public ValueConfiguration(IItem value, Type valueDataType) {
-      this.parameterConfigurations = new ItemList<IParameterConfiguration>();
+      this.ParameterConfigurations = new ItemList<IParameterConfiguration>();
       this.ConstrainedValue = new ConstrainedValue(value, valueDataType);
       if (constrainedValue.ValueDataType == typeof(IntValue)) {
@@ -86,10 +86,10 @@
         foreach (var childParameter in parameterizedItem.Parameters) {
           var pc = ParameterConfiguration.Create(parameterizedItem, childParameter);
-          if (pc != null) this.ParameterConfigurations.Add(pc);
+          if (pc != null) this.parameterConfigurations.Add(pc);
         }
       }
     }
     protected virtual void ClearParameterConfigurations() {
-      ParameterConfigurations.Clear();
+      parameterConfigurations.Clear();
     }
 
