Index: /trunk/sources/HeuristicLab.Algorithms.SGA/3.3/SGA.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.SGA/3.3/SGA.cs	(revision 2889)
+++ /trunk/sources/HeuristicLab.Algorithms.SGA/3.3/SGA.cs	(revision 2890)
@@ -43,6 +43,6 @@
     private SGAOperator sgaOperator;
 
-    private ValueParameter<IntData> PopulationSizeParameter {
-      get { return (ValueParameter<IntData>)Parameters["PopulationSize"]; }
+    private OptionalValueParameter<IntData> PopulationSizeParameter {
+      get { return (OptionalValueParameter<IntData>)Parameters["PopulationSize"]; }
     }
     private ConstrainedValueParameter<ISelector> SelectorParameter {
@@ -55,6 +55,6 @@
       get { return (ConstrainedValueParameter<IManipulator>)Parameters["Mutator"]; }
     }
-    private ValueParameter<IntData> ElitesParameter {
-      get { return (ValueParameter<IntData>)Parameters["Elites"]; }
+    private OptionalValueParameter<IntData> ElitesParameter {
+      get { return (OptionalValueParameter<IntData>)Parameters["Elites"]; }
     }
 
@@ -69,13 +69,13 @@
     public SGA()
       : base() {
-      Parameters.Add(new ValueParameter<IntData>("Seed", "The random seed used to initialize the new pseudo random number generator.", new IntData(0)));
-      Parameters.Add(new ValueParameter<BoolData>("SetSeedRandomly", "True if the random seed should be set to a random value, otherwise false.", new BoolData(true)));
-      Parameters.Add(new ValueParameter<IntData>("PopulationSize", "The size of the population of solutions.", new IntData(100)));
+      Parameters.Add(new OptionalValueParameter<IntData>("Seed", "The random seed used to initialize the new pseudo random number generator.", new IntData(0)));
+      Parameters.Add(new OptionalValueParameter<BoolData>("SetSeedRandomly", "True if the random seed should be set to a random value, otherwise false.", new BoolData(true)));
+      Parameters.Add(new OptionalValueParameter<IntData>("PopulationSize", "The size of the population of solutions.", new IntData(100)));
       Parameters.Add(new ConstrainedValueParameter<ISelector>("Selector", "The operator used to select solutions for reproduction."));
       Parameters.Add(new ConstrainedValueParameter<ICrossover>("Crossover", "The operator used to cross solutions."));
-      Parameters.Add(new ValueParameter<DoubleData>("MutationProbability", "The probability that the mutation operator is applied on a solution.", new DoubleData(0.05)));
+      Parameters.Add(new OptionalValueParameter<DoubleData>("MutationProbability", "The probability that the mutation operator is applied on a solution.", new DoubleData(0.05)));
       Parameters.Add(new ConstrainedValueParameter<IManipulator>("Mutator", "The operator used to mutate solutions."));
-      Parameters.Add(new ValueParameter<IntData>("Elites", "The numer of elite solutions which are kept in each generation.", new IntData(1)));
-      Parameters.Add(new ValueParameter<IntData>("MaximumGenerations", "The maximum number of generations which should be processed.", new IntData(1000)));
+      Parameters.Add(new OptionalValueParameter<IntData>("Elites", "The numer of elite solutions which are kept in each generation.", new IntData(1)));
+      Parameters.Add(new OptionalValueParameter<IntData>("MaximumGenerations", "The maximum number of generations which should be processed.", new IntData(1000)));
 
       PopulationSizeParameter.ValueChanged += new EventHandler(PopulationSizeParameter_ValueChanged);
@@ -109,9 +109,10 @@
 
       var selectors = ApplicationManager.Manager.GetInstances<ISelector>().Where(x => !(x is IMultiObjectiveSelector));
-      selectors.Select(x => x.CopySelected = new BoolData(true));
-      selectors.Select(x => x.NumberOfSelectedSubScopesParameter.Value = new IntData(2 * (PopulationSizeParameter.Value.Value - ElitesParameter.Value.Value)));
-      selectors.OfType<IStochasticOperator>().Select(x => x.RandomParameter.ActualName = "Random");
-      foreach (ISelector selector in selectors)
+      foreach (ISelector selector in selectors) {
+        selector.CopySelected = new BoolData(true);
+        selector.NumberOfSelectedSubScopesParameter.Value = new IntData(2 * (PopulationSizeParameter.Value.Value - ElitesParameter.Value.Value));
+        if (selector is IStochasticOperator) ((IStochasticOperator)selector).RandomParameter.ActualName = "Random";
         SelectorParameter.ValidValues.Add(selector);
+      }
     }
 
@@ -124,8 +125,10 @@
 
     private void ElitesParameter_ValueChanged(object sender, EventArgs e) {
-      SelectorParameter.ValidValues.Select(x => x.NumberOfSelectedSubScopesParameter.Value = new IntData(2 * (PopulationSizeParameter.Value.Value - ElitesParameter.Value.Value)));
+      foreach (ISelector selector in SelectorParameter.ValidValues)
+        selector.NumberOfSelectedSubScopesParameter.Value = new IntData(2 * (PopulationSizeParameter.Value.Value - ElitesParameter.Value.Value));
     }
     private void PopulationSizeParameter_ValueChanged(object sender, EventArgs e) {
-      SelectorParameter.ValidValues.Select(x => x.NumberOfSelectedSubScopesParameter.Value = new IntData(2 * (PopulationSizeParameter.Value.Value - ElitesParameter.Value.Value)));
+      foreach (ISelector selector in SelectorParameter.ValidValues)
+        selector.NumberOfSelectedSubScopesParameter.Value = new IntData(2 * (PopulationSizeParameter.Value.Value - ElitesParameter.Value.Value));
     }
 
@@ -142,5 +145,6 @@
       if (Problem.SolutionCreator is IStochasticOperator) ((IStochasticOperator)Problem.SolutionCreator).RandomParameter.ActualName = "Random";
       if (Problem.Evaluator is IStochasticOperator) ((IStochasticOperator)Problem.Evaluator).RandomParameter.ActualName = "Random";
-      Problem.Operators.OfType<IStochasticOperator>().Select(x => x.RandomParameter.ActualName = "Random");
+      foreach (IStochasticOperator op in Problem.Operators.OfType<IStochasticOperator>())
+        op.RandomParameter.ActualName = "Random";
 
       populationCreator.SolutionCreatorParameter.Value = Problem.SolutionCreator;
@@ -150,6 +154,8 @@
       sgaOperator.EvaluatorParameter.Value = Problem.Evaluator;
 
-      SelectorParameter.ValidValues.OfType<ISingleObjectiveSelector>().Select(x => x.MaximizationParameter.Value = Problem.Maximization);
-      SelectorParameter.ValidValues.OfType<ISingleObjectiveSelector>().Select(x => x.QualityParameter.ActualName = Problem.Evaluator.QualityParameter.ActualName);
+      foreach (ISingleObjectiveSelector op in SelectorParameter.ValidValues.OfType<ISingleObjectiveSelector>()) {
+        op.MaximizationParameter.Value = Problem.Maximization;
+        op.QualityParameter.ActualName = Problem.Evaluator.QualityParameter.ActualName;
+      }
 
       CrossoverParameter.ValidValues.Clear();
@@ -170,5 +176,9 @@
     protected override void Problem_EvaluatorChanged(object sender, EventArgs e) {
       if (Problem.Evaluator is IStochasticOperator) ((IStochasticOperator)Problem.Evaluator).RandomParameter.ActualName = "Random";
-      SelectorParameter.ValidValues.OfType<ISingleObjectiveSelector>().Select(x => x.QualityParameter.ActualName = Problem.Evaluator.QualityParameter.ActualName);
+
+      foreach (ISingleObjectiveSelector op in SelectorParameter.ValidValues.OfType<ISingleObjectiveSelector>()) {
+        op.QualityParameter.ActualName = Problem.Evaluator.QualityParameter.ActualName;
+      }
+
       populationCreator.EvaluatorParameter.Value = Problem.Evaluator;
       sgaOperator.QualityParameter.ActualName = Problem.Evaluator.QualityParameter.ActualName;
@@ -178,5 +188,7 @@
     private void Problem_MaximizationChanged(object sender, EventArgs e) {
       sgaOperator.MaximizationParameter.Value = Problem.Maximization;
-      SelectorParameter.ValidValues.OfType<ISingleObjectiveSelector>().Select(x => x.MaximizationParameter.Value = Problem.Maximization);
+      foreach (ISingleObjectiveSelector op in SelectorParameter.ValidValues.OfType<ISingleObjectiveSelector>()) {
+        op.MaximizationParameter.Value = Problem.Maximization;
+      }
     }
   }
Index: /trunk/sources/HeuristicLab.Algorithms.SGA/3.3/SGAOperator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Algorithms.SGA/3.3/SGAOperator.cs	(revision 2889)
+++ /trunk/sources/HeuristicLab.Algorithms.SGA/3.3/SGAOperator.cs	(revision 2890)
@@ -25,5 +25,4 @@
 using HeuristicLab.Operators;
 using HeuristicLab.Parameters;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using HeuristicLab.Selection;
 
Index: /trunk/sources/HeuristicLab.Operators/3.3/Comparator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Operators/3.3/Comparator.cs	(revision 2889)
+++ /trunk/sources/HeuristicLab.Operators/3.3/Comparator.cs	(revision 2890)
@@ -40,6 +40,6 @@
       get { return (ValueLookupParameter<IItem>)Parameters["RightSide"]; }
     }
-    private ValueParameter<ComparisonData> ComparisonParameter {
-      get { return (ValueParameter<ComparisonData>)Parameters["Comparison"]; }
+    private OptionalValueParameter<ComparisonData> ComparisonParameter {
+      get { return (OptionalValueParameter<ComparisonData>)Parameters["Comparison"]; }
     }
     public LookupParameter<BoolData> ResultParameter {
@@ -55,5 +55,5 @@
       Parameters.Add(new LookupParameter<IItem>("LeftSide", "The left side of the comparison."));
       Parameters.Add(new ValueLookupParameter<IItem>("RightSide", "The right side of the comparison."));
-      Parameters.Add(new ValueParameter<ComparisonData>("Comparison", "The type of comparison.", new ComparisonData()));
+      Parameters.Add(new OptionalValueParameter<ComparisonData>("Comparison", "The type of comparison.", new ComparisonData()));
       Parameters.Add(new LookupParameter<BoolData>("Result", "The result of the comparison."));
     }
Index: /trunk/sources/HeuristicLab.Operators/3.3/SubScopesRemover.cs
===================================================================
--- /trunk/sources/HeuristicLab.Operators/3.3/SubScopesRemover.cs	(revision 2889)
+++ /trunk/sources/HeuristicLab.Operators/3.3/SubScopesRemover.cs	(revision 2890)
@@ -33,6 +33,6 @@
   [Creatable("Test")]
   public sealed class SubScopesRemover : SingleSuccessorOperator {
-    private ValueParameter<BoolData> RemoveAllSubScopesParameter {
-      get { return (ValueParameter<BoolData>)Parameters["RemoveAllSubScopes"]; }
+    private OptionalValueParameter<BoolData> RemoveAllSubScopesParameter {
+      get { return (OptionalValueParameter<BoolData>)Parameters["RemoveAllSubScopes"]; }
     }
     public ValueLookupParameter<IntData> SubScopeIndexParameter {
@@ -53,5 +53,5 @@
     public SubScopesRemover()
       : base() {
-      Parameters.Add(new ValueParameter<BoolData>("RemoveAllSubScopes", "True if all sub-scopes of the current scope should be removed, otherwise false.", new BoolData(true)));
+      Parameters.Add(new OptionalValueParameter<BoolData>("RemoveAllSubScopes", "True if all sub-scopes of the current scope should be removed, otherwise false.", new BoolData(true)));
       Parameters.Add(new ValueLookupParameter<IntData>("SubScopeIndex", "The index of the sub-scope which should be removed. This parameter is ignored, if RemoveAllSubScopes is true."));
       Parameters.Add(new ScopeParameter("CurrentScope", "The current scope from which one or all sub-scopes should be removed."));
Index: /trunk/sources/HeuristicLab.Parameters.Views/3.3/ValueParameterView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Parameters.Views/3.3/ValueParameterView.cs	(revision 2889)
+++ /trunk/sources/HeuristicLab.Parameters.Views/3.3/ValueParameterView.cs	(revision 2890)
@@ -30,5 +30,5 @@
   /// The visual representation of a <see cref="Parameter"/>.
   /// </summary>
-  [Content(typeof(ValueParameter<>), true)]
+  [Content(typeof(OptionalValueParameter<>), true)]
   [Content(typeof(IValueParameter<>), false)]
   public partial class ValueParameterView<T> : ParameterView where T : class, IItem {
Index: /trunk/sources/HeuristicLab.Parameters/3.3/HeuristicLab.Parameters-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Parameters/3.3/HeuristicLab.Parameters-3.3.csproj	(revision 2889)
+++ /trunk/sources/HeuristicLab.Parameters/3.3/HeuristicLab.Parameters-3.3.csproj	(revision 2890)
@@ -69,7 +69,7 @@
     <Compile Include="ConstrainedValueParameter.cs" />
     <Compile Include="LookupParameter.cs" />
+    <Compile Include="OptionalValueParameter.cs" />
     <Compile Include="SubScopesLookupParameter.cs" />
     <Compile Include="ValueLookupParameter.cs" />
-    <Compile Include="ValueParameter.cs" />
     <Compile Include="ScopeParameter.cs" />
     <Compile Include="HeuristicLabParametersPlugin.cs" />
Index: /trunk/sources/HeuristicLab.Parameters/3.3/OperatorParameter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Parameters/3.3/OperatorParameter.cs	(revision 2889)
+++ /trunk/sources/HeuristicLab.Parameters/3.3/OperatorParameter.cs	(revision 2890)
@@ -30,5 +30,5 @@
   [EmptyStorableClass]
   [Creatable("Test")]
-  public class OperatorParameter : ValueParameter<IOperator> {
+  public class OperatorParameter : OptionalValueParameter<IOperator> {
     public OperatorParameter()
       : base("Anonymous") {
Index: /trunk/sources/HeuristicLab.Parameters/3.3/OptionalValueParameter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Parameters/3.3/OptionalValueParameter.cs	(revision 2890)
+++ /trunk/sources/HeuristicLab.Parameters/3.3/OptionalValueParameter.cs	(revision 2890)
@@ -0,0 +1,104 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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 HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Parameters {
+  /// <summary>
+  /// A parameter whose value is defined it the parameter itself. The value of the parameter can be null, if the parameter is not set.
+  /// </summary>
+  [Item("OptionalValueParameter<T>", "A parameter whose value is defined it the parameter itself. The value of the parameter can be null, if the parameter is not set.")]
+  public class OptionalValueParameter<T> : Parameter, IValueParameter<T> where T : class, IItem {
+    private T value;
+    [Storable]
+    public T Value {
+      get { return this.value; }
+      set {
+        if (value != this.value) {
+          if (this.value != null) this.value.Changed -= new ChangedEventHandler(Value_Changed);
+          this.value = value;
+          if (this.value != null) this.value.Changed += new ChangedEventHandler(Value_Changed);
+          OnValueChanged();
+        }
+      }
+    }
+    IItem IValueParameter.Value {
+      get { return Value; }
+      set {
+        T val = value as T;
+        if ((value != null) && (val == null))
+          throw new InvalidOperationException(
+            string.Format("Type mismatch. Value is not a \"{0}\".",
+                          typeof(T).GetPrettyName())
+          );
+        Value = val;
+      }
+    }
+
+    public OptionalValueParameter()
+      : base("Anonymous", typeof(T)) {
+    }
+    public OptionalValueParameter(string name)
+      : base(name, typeof(T)) {
+    }
+    public OptionalValueParameter(string name, T value)
+      : base(name, typeof(T)) {
+      Value = value;
+    }
+    public OptionalValueParameter(string name, string description)
+      : base(name, description, typeof(T)) {
+    }
+    public OptionalValueParameter(string name, string description, T value)
+      : base(name, description, typeof(T)) {
+      Value = value;
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      OptionalValueParameter<T> clone = (OptionalValueParameter<T>)base.Clone(cloner);
+      clone.Value = (T)cloner.Clone(value);
+      return clone;
+    }
+
+    public override string ToString() {
+      return string.Format("{0}: {1} ({2})", Name, Value != null ? Value.ToString() : "null", DataType.GetPrettyName());
+    }
+
+    protected override IItem GetActualValue() {
+      return Value;
+    }
+    protected override void SetActualValue(IItem value) {
+      ((IValueParameter)this).Value = value;
+    }
+
+    public event EventHandler ValueChanged;
+    private void OnValueChanged() {
+      if (ValueChanged != null)
+        ValueChanged(this, EventArgs.Empty);
+      OnChanged();
+    }
+    private void Value_Changed(object sender, ChangedEventArgs e) {
+      OnChanged(e);
+    }
+  }
+}
Index: unk/sources/HeuristicLab.Parameters/3.3/ValueParameter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Parameters/3.3/ValueParameter.cs	(revision 2889)
+++ 	(revision )
@@ -1,104 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2010 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 HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-
-namespace HeuristicLab.Parameters {
-  /// <summary>
-  /// A parameter whose value is defined it the parameter itself.
-  /// </summary>
-  [Item("ValueParameter<T>", "A parameter whose value is defined it the parameter itself.")]
-  public class ValueParameter<T> : Parameter, IValueParameter<T> where T : class, IItem {
-    private T value;
-    [Storable]
-    public T Value {
-      get { return this.value; }
-      set {
-        if (value != this.value) {
-          if (this.value != null) this.value.Changed -= new ChangedEventHandler(Value_Changed);
-          this.value = value;
-          if (this.value != null) this.value.Changed += new ChangedEventHandler(Value_Changed);
-          OnValueChanged();
-        }
-      }
-    }
-    IItem IValueParameter.Value {
-      get { return Value; }
-      set {
-        T val = value as T;
-        if ((value != null) && (val == null))
-          throw new InvalidOperationException(
-            string.Format("Type mismatch. Value is not a \"{0}\".",
-                          typeof(T).GetPrettyName())
-          );
-        Value = val;
-      }
-    }
-
-    public ValueParameter()
-      : base("Anonymous", typeof(T)) {
-    }
-    public ValueParameter(string name)
-      : base(name, typeof(T)) {
-    }
-    public ValueParameter(string name, T value)
-      : base(name, typeof(T)) {
-      Value = value;
-    }
-    public ValueParameter(string name, string description)
-      : base(name, description, typeof(T)) {
-    }
-    public ValueParameter(string name, string description, T value)
-      : base(name, description, typeof(T)) {
-      Value = value;
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      ValueParameter<T> clone = (ValueParameter<T>)base.Clone(cloner);
-      clone.Value = (T)cloner.Clone(value);
-      return clone;
-    }
-
-    public override string ToString() {
-      return string.Format("{0}: {1} ({2})", Name, Value != null ? Value.ToString() : "null", DataType.GetPrettyName());
-    }
-
-    protected override IItem GetActualValue() {
-      return Value;
-    }
-    protected override void SetActualValue(IItem value) {
-      ((IValueParameter)this).Value = value;
-    }
-
-    public event EventHandler ValueChanged;
-    private void OnValueChanged() {
-      if (ValueChanged != null)
-        ValueChanged(this, EventArgs.Empty);
-      OnChanged();
-    }
-    private void Value_Changed(object sender, ChangedEventArgs e) {
-      OnChanged(e);
-    }
-  }
-}
Index: /trunk/sources/HeuristicLab.Problems.TSP/3.3/TSP.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.TSP/3.3/TSP.cs	(revision 2889)
+++ /trunk/sources/HeuristicLab.Problems.TSP/3.3/TSP.cs	(revision 2890)
@@ -75,19 +75,13 @@
     public TSP()
       : base() {
-      ValueParameter<BoolData> maximizationParameter = new ValueParameter<BoolData>("Maximization", "Set to false as the Traveling Salesman Problem is a minimization problem.", new BoolData(false));
-      maximizationParameter.ValueChanged += new EventHandler(MaximizationParameter_ValueChanged);
-      Parameters.Add(maximizationParameter);
+      Parameters.Add(new OptionalValueParameter<BoolData>("Maximization", "Set to false as the Traveling Salesman Problem is a minimization problem.", new BoolData(false)));
+      Parameters.Add(new OptionalValueParameter<DoubleMatrixData>("Coordinates", "The x- and y-Coordinates of the cities.", new DoubleMatrixData(0, 0)));
+      Parameters.Add(new OptionalValueParameter<IPermutationCreator>("SolutionCreator", "The operator which should be used to create new TSP solutions."));
+      Parameters.Add(new OptionalValueParameter<ITSPEvaluator>("Evaluator", "The operator which should be used to evaluate TSP solutions."));
+      Parameters.Add(new OptionalValueParameter<DoubleData>("BestKnownQuality", "The quality of the best known solution of this TSP instance."));
 
-      Parameters.Add(new ValueParameter<DoubleMatrixData>("Coordinates", "The x- and y-Coordinates of the cities.", new DoubleMatrixData(0, 0)));
-
-      ValueParameter<IPermutationCreator> solutionCreatorParameter = new ValueParameter<IPermutationCreator>("SolutionCreator", "The operator which should be used to create new TSP solutions.");
-      solutionCreatorParameter.ValueChanged += new EventHandler(SolutionCreatorParameter_ValueChanged);
-      Parameters.Add(solutionCreatorParameter);
-
-      ValueParameter<ITSPEvaluator> evaluatorParameter = new ValueParameter<ITSPEvaluator>("Evaluator", "The operator which should be used to evaluate TSP solutions.");
-      evaluatorParameter.ValueChanged += new EventHandler(EvaluatorParameter_ValueChanged);
-      Parameters.Add(evaluatorParameter);
-
-      Parameters.Add(new ValueParameter<DoubleData>("BestKnownQuality", "The quality of the best known solution of this TSP instance."));
+      MaximizationParameter.ValueChanged += new EventHandler(MaximizationParameter_ValueChanged);
+      SolutionCreatorParameter.ValueChanged += new EventHandler(SolutionCreatorParameter_ValueChanged);
+      EvaluatorParameter.ValueChanged += new EventHandler(EvaluatorParameter_ValueChanged);
 
       RandomPermutationCreator creator = new RandomPermutationCreator();
@@ -101,17 +95,12 @@
       EvaluatorParameter.Value = evaluator;
 
-      var ops = ApplicationManager.Manager.GetInstances<IPermutationOperator>().ToList();
-      ops.ForEach(x => {
-        IPermutationCrossover y = x as IPermutationCrossover;
-        if (y != null) {
-          y.ParentsParameter.ActualName = creator.PermutationParameter.ActualName;
-          y.ChildParameter.ActualName = creator.PermutationParameter.ActualName;
-        }
-      });
-      ops.ForEach(x => {
-        IPermutationManipulator y = x as IPermutationManipulator;
-        if (y != null)
-          y.PermutationParameter.ActualName = creator.PermutationParameter.ActualName;
-      });
+      var ops = ApplicationManager.Manager.GetInstances<IPermutationOperator>();
+      foreach (IPermutationCrossover op in ops.OfType<IPermutationCrossover>()) {
+        op.ParentsParameter.ActualName = creator.PermutationParameter.ActualName;
+        op.ChildParameter.ActualName = creator.PermutationParameter.ActualName;
+      }
+      foreach (IPermutationManipulator op in ops.OfType<IPermutationManipulator>()) {
+        op.PermutationParameter.ActualName = creator.PermutationParameter.ActualName;
+      }
       operators = new OperatorSet(ops.Cast<IOperator>());
     }
Index: /trunk/sources/HeuristicLab.Selection/3.3/ProportionalSelector.cs
===================================================================
--- /trunk/sources/HeuristicLab.Selection/3.3/ProportionalSelector.cs	(revision 2889)
+++ /trunk/sources/HeuristicLab.Selection/3.3/ProportionalSelector.cs	(revision 2890)
@@ -36,6 +36,6 @@
   [Creatable("Test")]
   public sealed class ProportionalSelector : StochasticSingleObjectiveSelector {
-    private ValueParameter<BoolData> WindowingParameter {
-      get { return (ValueParameter<BoolData>)Parameters["Windowing"]; }
+    private OptionalValueParameter<BoolData> WindowingParameter {
+      get { return (OptionalValueParameter<BoolData>)Parameters["Windowing"]; }
     }
 
@@ -47,5 +47,5 @@
     public ProportionalSelector()
       : base() {
-      Parameters.Add(new ValueParameter<BoolData>("Windowing", "Apply windowing strategy (selection probability is proportional to the quality differences and not to the total quality).", new BoolData(true)));
+      Parameters.Add(new OptionalValueParameter<BoolData>("Windowing", "Apply windowing strategy (selection probability is proportional to the quality differences and not to the total quality).", new BoolData(true)));
       CopySelected.Value = true;
     }
Index: /trunk/sources/HeuristicLab.Selection/3.3/Selector.cs
===================================================================
--- /trunk/sources/HeuristicLab.Selection/3.3/Selector.cs	(revision 2889)
+++ /trunk/sources/HeuristicLab.Selection/3.3/Selector.cs	(revision 2890)
@@ -35,6 +35,6 @@
   [EmptyStorableClass]
   public abstract class Selector : SingleSuccessorOperator, ISelector {
-    protected ValueParameter<BoolData> CopySelectedParameter {
-      get { return (ValueParameter<BoolData>)Parameters["CopySelected"]; }
+    protected OptionalValueParameter<BoolData> CopySelectedParameter {
+      get { return (OptionalValueParameter<BoolData>)Parameters["CopySelected"]; }
     }
     public IValueLookupParameter<IntData> NumberOfSelectedSubScopesParameter {
@@ -55,5 +55,5 @@
     protected Selector()
       : base() {
-      Parameters.Add(new ValueParameter<BoolData>("CopySelected", "True if the selected sub-scopes should be copied, otherwise false.", new BoolData(false)));
+      Parameters.Add(new OptionalValueParameter<BoolData>("CopySelected", "True if the selected sub-scopes should be copied, otherwise false.", new BoolData(false)));
       Parameters.Add(new ValueLookupParameter<IntData>("NumberOfSelectedSubScopes", "The number of sub-scopes which should be selected."));
       Parameters.Add(new ScopeParameter("CurrentScope", "The current scope from which sub-scopes should be selected."));
