Index: branches/2521_ProblemRefactoring/HeuristicLab.Core/3.3/Interfaces/IValueParameter.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Core/3.3/Interfaces/IValueParameter.cs	(revision 17566)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Core/3.3/Interfaces/IValueParameter.cs	(revision 17567)
@@ -37,10 +37,4 @@
   public interface IValueParameter<T> : IValueParameter where T : class, IItem {
     new T Value { get; set; }
-
-    /// <summary>
-    /// Sets property <see cref="Value"/> regardless of ReadOnly state
-    /// </summary>
-    /// <param name="value">The value to set.</param>
-    void ForceValue(T value);
   }
 }
Index: branches/2521_ProblemRefactoring/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/BinaryVectorEncoding.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/BinaryVectorEncoding.cs	(revision 17566)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/BinaryVectorEncoding.cs	(revision 17567)
@@ -44,5 +44,5 @@
       set {
         if (Length == value) return;
-        LengthParameter.ForceValue(new IntValue(value, @readonly: LengthParameter.Value.ReadOnly));
+        LengthParameter.Value = new IntValue(value, @readonly: LengthParameter.Value.ReadOnly);
       }
     }
@@ -107,4 +107,5 @@
 
     public override void ConfigureOperators(IEnumerable<IItem> operators) {
+      base.ConfigureOperators(operators);
       ConfigureCreators(operators.OfType<IBinaryVectorCreator>());
       ConfigureCrossovers(operators.OfType<IBinaryVectorCrossover>());
Index: branches/2521_ProblemRefactoring/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/BinaryVectorMultiObjectiveProblem.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/BinaryVectorMultiObjectiveProblem.cs	(revision 17566)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/BinaryVectorMultiObjectiveProblem.cs	(revision 17567)
@@ -37,6 +37,5 @@
 
     public int Dimension {
-      get { return Encoding.Length; }
-      set { Encoding.Length = value; }
+      get { return DimensionRefParameter.Value.Value; }
     }
 
@@ -90,8 +89,5 @@
 
     private void RegisterEventHandlers() {
-      Encoding.PropertyChanged += (sender, args) => {
-        if (args.PropertyName == nameof(Encoding.Length))
-          DimensionOnChanged();
-      };
+      IntValueParameterChangeHandler.Create(DimensionRefParameter, DimensionOnChanged);
     }
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/BinaryVectorProblem.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/BinaryVectorProblem.cs	(revision 17566)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/BinaryVectorProblem.cs	(revision 17567)
@@ -1,4 +1,3 @@
-﻿
-#region License Information
+﻿#region License Information
 /* HeuristicLab
  * Copyright (C) Heuristic and Evolutionary Algorithms Laboratory (HEAL)
@@ -39,6 +38,5 @@
 
     public int Dimension {
-      get { return Encoding.Length; }
-      set { Encoding.Length = value; }
+      get { return DimensionRefParameter.Value.Value; }
     }
 
@@ -86,8 +84,5 @@
 
     private void RegisterEventHandlers() {
-      Encoding.PropertyChanged += (sender, args) => {
-        if (args.PropertyName == nameof(Encoding.Length))
-          DimensionOnChanged();
-      };
+      IntValueParameterChangeHandler.Create(DimensionRefParameter, DimensionOnChanged);
     }
 
Index: branches/2521_ProblemRefactoring/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/IntegerVectorEncoding.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/IntegerVectorEncoding.cs	(revision 17566)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Encodings.IntegerVectorEncoding/3.3/IntegerVectorEncoding.cs	(revision 17567)
@@ -23,4 +23,5 @@
 using System.Collections.Generic;
 using System.Linq;
+using HEAL.Attic;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -28,5 +29,4 @@
 using HeuristicLab.Optimization;
 using HeuristicLab.Parameters;
-using HEAL.Attic;
 using HeuristicLab.PluginInfrastructure;
 
@@ -188,4 +188,5 @@
 
     public override void ConfigureOperators(IEnumerable<IItem> operators) {
+      base.ConfigureOperators(operators);
       ConfigureBoundedOperators(operators.OfType<IBoundedIntegerVectorOperator>());
       ConfigureCreators(operators.OfType<IIntegerVectorCreator>());
Index: branches/2521_ProblemRefactoring/HeuristicLab.Encodings.LinearLinkageEncoding/3.4/LinearLinkageEncoding.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Encodings.LinearLinkageEncoding/3.4/LinearLinkageEncoding.cs	(revision 17566)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Encodings.LinearLinkageEncoding/3.4/LinearLinkageEncoding.cs	(revision 17567)
@@ -23,4 +23,5 @@
 using System.Collections.Generic;
 using System.Linq;
+using HEAL.Attic;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -28,5 +29,4 @@
 using HeuristicLab.Optimization;
 using HeuristicLab.Parameters;
-using HEAL.Attic;
 using HeuristicLab.PluginInfrastructure;
 
@@ -124,4 +124,5 @@
 
     public override void ConfigureOperators(IEnumerable<IItem> operators) {
+      base.ConfigureOperators(operators);
       ConfigureCreators(operators.OfType<ILinearLinkageCreator>());
       ConfigureCrossovers(operators.OfType<ILinearLinkageCrossover>());
Index: branches/2521_ProblemRefactoring/HeuristicLab.Encodings.PermutationEncoding/3.3/PermutationEncoding.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Encodings.PermutationEncoding/3.3/PermutationEncoding.cs	(revision 17566)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Encodings.PermutationEncoding/3.3/PermutationEncoding.cs	(revision 17567)
@@ -23,4 +23,5 @@
 using System.Collections.Generic;
 using System.Linq;
+using HEAL.Attic;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -28,5 +29,4 @@
 using HeuristicLab.Optimization;
 using HeuristicLab.Parameters;
-using HEAL.Attic;
 using HeuristicLab.PluginInfrastructure;
 
@@ -164,4 +164,5 @@
 
     public override void ConfigureOperators(IEnumerable<IItem> operators) {
+      base.ConfigureOperators(operators);
       ConfigureCreators(operators.OfType<IPermutationCreator>());
       ConfigureCrossovers(operators.OfType<IPermutationCrossover>());
Index: branches/2521_ProblemRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/RealVectorEncoding.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/RealVectorEncoding.cs	(revision 17566)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Encodings.RealVectorEncoding/3.3/RealVectorEncoding.cs	(revision 17567)
@@ -23,4 +23,5 @@
 using System.Collections.Generic;
 using System.Linq;
+using HEAL.Attic;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -28,5 +29,4 @@
 using HeuristicLab.Optimization;
 using HeuristicLab.Parameters;
-using HEAL.Attic;
 using HeuristicLab.PluginInfrastructure;
 
@@ -201,4 +201,5 @@
 
     public override void ConfigureOperators(IEnumerable<IItem> operators) {
+      base.ConfigureOperators(operators);
       ConfigureCreators(operators.OfType<IRealVectorCreator>());
       ConfigureCrossovers(operators.OfType<IRealVectorCrossover>());
Index: branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding.cs	(revision 17566)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding.cs	(revision 17567)
@@ -163,4 +163,5 @@
 
     public override void ConfigureOperators(IEnumerable<IItem> operators) {
+      base.ConfigureOperators(operators);
       ConfigureCreators(operators.OfType<IScheduleCreator<TSchedule>>());
       ConfigureCrossovers(operators.OfType<IScheduleCrossover>());
Index: branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Encoding.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Encoding.cs	(revision 17566)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Encoding.cs	(revision 17567)
@@ -116,5 +116,13 @@
 
     public void ConfigureOperator(IItem @operator) { ConfigureOperators(new[] { @operator }); }
-    public abstract void ConfigureOperators(IEnumerable<IItem> operators);
+    public virtual void ConfigureOperators(IEnumerable<IItem> operators) {
+      ConfigureSingleObjectiveImprovementOperators(operators.OfType<ISingleObjectiveImprovementOperator>());
+    }
+
+    protected virtual void ConfigureSingleObjectiveImprovementOperators(IEnumerable<ISingleObjectiveImprovementOperator> operators) {
+      foreach (var op in operators) {
+        op.SolutionParameter.ActualName = Name;
+      }
+    }
 
     public event EventHandler SolutionCreatorChanged;
Index: branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/MultiObjectiveProblem.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/MultiObjectiveProblem.cs	(revision 17566)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/MultiObjectiveProblem.cs	(revision 17567)
@@ -95,5 +95,5 @@
       protected set {
         if (MaximizationParameter.Value.SequenceEqual(value)) return;
-        MaximizationParameter.ForceValue(new BoolArray(value, @readonly: true));
+        MaximizationParameter.Value = new BoolArray(value, @readonly: true);
         OnMaximizationChanged();
       }
Index: branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/SingleObjectiveProblem.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/SingleObjectiveProblem.cs	(revision 17566)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/SingleObjectiveProblem.cs	(revision 17567)
@@ -61,5 +61,5 @@
       protected set {
         if (Maximization == value) return;
-        MaximizationParameter.ForceValue(new BoolValue(value, @readonly: true));
+        MaximizationParameter.Value = new BoolValue(value, @readonly: true);
       }
     }
Index: branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/FixedValueParameter.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/FixedValueParameter.cs	(revision 17566)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/FixedValueParameter.cs	(revision 17567)
@@ -39,8 +39,4 @@
     }
 
-    public override void ForceValue(T value) {
-      throw new NotSupportedException("FixedValueParameters do not support setting their value.");
-    }
-
     [StorableConstructor]
     protected FixedValueParameter(StorableConstructorFlag _) : base(_) { }
Index: branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/OptionalValueParameter.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/OptionalValueParameter.cs	(revision 17566)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/OptionalValueParameter.cs	(revision 17567)
@@ -49,7 +49,4 @@
       }
     }
-    public virtual void ForceValue(T value) {
-      DoSetValue(value);
-    }
     private void DoSetValue(T value) {
       if (value != this.value) {
Index: branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/ReferenceParameter.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/ReferenceParameter.cs	(revision 17566)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/ReferenceParameter.cs	(revision 17567)
@@ -166,6 +166,4 @@
       return new ReferenceParameter<T>(this, cloner);
     }
-
-    public void ForceValue(T value) { ReferencedParameter.ForceValue(value); }
   }
 
@@ -195,6 +193,4 @@
       return new ReferenceParameter<T, U>(this, cloner);
     }
-
-    public void ForceValue(T value) { ReferencedParameter.ForceValue(value); }
   }
 }
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.Binary/3.3/DeceptiveTrapProblem.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.Binary/3.3/DeceptiveTrapProblem.cs	(revision 17566)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.Binary/3.3/DeceptiveTrapProblem.cs	(revision 17567)
@@ -40,4 +40,9 @@
     [Storable] public IFixedValueParameter<IntValue> NumberOfTrapsParameter { get; private set; }
 
+    public new int Dimension {
+      get { return base.Dimension; }
+      set { DimensionRefParameter.Value.Value = value; }
+    }
+
     public int TrapSize {
       get { return TrapSizeParameter.Value.Value; }
@@ -58,5 +63,5 @@
       Parameters.Add(TrapSizeParameter = new FixedValueParameter<IntValue>("Trap Size", "", new IntValue(7)));
       Parameters.Add(NumberOfTrapsParameter = new FixedValueParameter<IntValue>("Number of Traps", "", new IntValue(7)));
-      DimensionRefParameter.ForceValue(new IntValue(TrapSize * NumberOfTraps, @readonly: true));
+      DimensionRefParameter.Value = new IntValue(TrapSize * NumberOfTraps);
 
       RegisterEventHandlers();
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.Binary/3.3/HIFFProblem.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.Binary/3.3/HIFFProblem.cs	(revision 17566)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.Binary/3.3/HIFFProblem.cs	(revision 17567)
@@ -35,4 +35,9 @@
   [Creatable(CreatableAttribute.Categories.CombinatorialProblems, Priority = 220)]
   public class HIFFProblem : BinaryVectorProblem {
+
+    public new int Dimension {
+      get { return base.Dimension; }
+      set { DimensionRefParameter.Value.Value = value; }
+    }
 
     public HIFFProblem() : base() {
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.Binary/3.3/OneMaxProblem.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.Binary/3.3/OneMaxProblem.cs	(revision 17566)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.Binary/3.3/OneMaxProblem.cs	(revision 17567)
@@ -34,4 +34,9 @@
   public class OneMaxProblem : BinaryVectorProblem {
 
+    public new int Dimension {
+      get { return base.Dimension; }
+      set { DimensionRefParameter.Value.Value = value; }
+    }
+
     public OneMaxProblem() : base() {
       Maximization = true;
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.ExternalEvaluation/3.4/ExternalEvaluationProblemInstances.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.ExternalEvaluation/3.4/ExternalEvaluationProblemInstances.cs	(revision 17566)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.ExternalEvaluation/3.4/ExternalEvaluationProblemInstances.cs	(revision 17567)
@@ -59,5 +59,5 @@
       : base(new BinaryVectorEncoding()) {
       Parameters.Add(DimensionRefParameter = new ReferenceParameter<IntValue>("Dimension", "The dimension of the vector.", Encoding.LengthParameter));
-      DimensionRefParameter.ForceValue(new IntValue(Dimension, @readonly: false));
+      DimensionRefParameter.Value = new IntValue(Dimension, @readonly: false);
       // TODO: Add and parameterize additional operators, 
     }
@@ -277,5 +277,5 @@
       : base(new BinaryVectorEncoding()) {
       Parameters.Add(DimensionRefParameter = new ReferenceParameter<IntValue>("Dimension", "The dimension of the vector.", Encoding.LengthParameter));
-      DimensionRefParameter.ForceValue(new IntValue(Dimension, @readonly: false));
+      DimensionRefParameter.Value = new IntValue(Dimension, @readonly: false);
       // TODO: Add and parameterize additional operators, 
     }
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.ExternalEvaluation/3.4/SingleObjectiveExternalEvaluationProblem.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.ExternalEvaluation/3.4/SingleObjectiveExternalEvaluationProblem.cs	(revision 17566)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.ExternalEvaluation/3.4/SingleObjectiveExternalEvaluationProblem.cs	(revision 17567)
@@ -93,5 +93,5 @@
     public ExternalEvaluationProblem(TEncoding encoding)
       : base(encoding) {
-      MaximizationParameter.ForceValue(new BoolValue()); // is a read-only bool value in base class
+      MaximizationParameter.Value = new BoolValue(); // is a read-only bool value in base class TODO: change to set ReadOnly false
       Parameters.Add(new OptionalValueParameter<EvaluationCache>("Cache", "Cache of previously evaluated solutions."));
       Parameters.Add(new ValueParameter<CheckedItemCollection<IEvaluationServiceClient>>("Clients", "The clients that are used to communicate with the external application.", new CheckedItemCollection<IEvaluationServiceClient>() { new EvaluationServiceClient() }));
Index: branches/2521_ProblemRefactoring/HeuristicLab.Problems.Knapsack/3.3/KnapsackProblem.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Problems.Knapsack/3.3/KnapsackProblem.cs	(revision 17566)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Problems.Knapsack/3.3/KnapsackProblem.cs	(revision 17567)
@@ -56,4 +56,8 @@
 
     #region Properties
+    public new int Dimension {
+      get { return base.Dimension; }
+      set { DimensionRefParameter.Value.Value = value; }
+    }
     public int KnapsackCapacity {
       get { return KnapsackCapacityParameter.Value.Value; }
@@ -91,5 +95,5 @@
       Parameters.Add(new OptionalValueParameter<BinaryVector>("BestKnownSolution", "The best known solution of this Knapsack instance."));
 
-      DimensionRefParameter.ForceValue(new IntValue(Weights.Length, @readonly: true));
+      DimensionRefParameter.Value = new IntValue(Weights.Length, @readonly: true);
       InitializeRandomKnapsackInstance();
 
