Index: branches/ProgrammableProblem/HeuristicLab.Optimization/3.3/Algorithms/EngineAlgorithm.cs
===================================================================
--- branches/ProgrammableProblem/HeuristicLab.Optimization/3.3/Algorithms/EngineAlgorithm.cs	(revision 11594)
+++ branches/ProgrammableProblem/HeuristicLab.Optimization/3.3/Algorithms/EngineAlgorithm.cs	(revision 11595)
@@ -159,5 +159,8 @@
       if ((engine != null) && (operatorGraph.InitialOperator != null)) {
         ExecutionContext context = null;
-        if (Problem != null) context = new ExecutionContext(context, Problem, globalScope);
+        if (Problem != null) {
+          foreach (var item in Problem.ExecutionContextItems)
+            context = new ExecutionContext(context, item, globalScope);
+        }
         context = new ExecutionContext(context, this, globalScope);
         context = new ExecutionContext(context, operatorGraph.InitialOperator, globalScope);
Index: branches/ProgrammableProblem/HeuristicLab.Optimization/3.3/Interfaces/IProblem.cs
===================================================================
--- branches/ProgrammableProblem/HeuristicLab.Optimization/3.3/Interfaces/IProblem.cs	(revision 11594)
+++ branches/ProgrammableProblem/HeuristicLab.Optimization/3.3/Interfaces/IProblem.cs	(revision 11595)
@@ -31,4 +31,6 @@
     IEnumerable<IItem> Operators { get; }
 
+
+    IEnumerable<IParameterizedItem> ExecutionContextItems { get; }
     event EventHandler OperatorsChanged;
     event EventHandler Reset;
Index: branches/ProgrammableProblem/HeuristicLab.Optimization/3.3/Problems/Problem.cs
===================================================================
--- branches/ProgrammableProblem/HeuristicLab.Optimization/3.3/Problems/Problem.cs	(revision 11594)
+++ branches/ProgrammableProblem/HeuristicLab.Optimization/3.3/Problems/Problem.cs	(revision 11595)
@@ -116,7 +116,10 @@
     IEnumerable<IItem> IProblem.Operators { get { return GetOperators(); } }
 
-    protected virtual IEnumerable<IItem> GetOperators()
-    {
+    protected virtual IEnumerable<IItem> GetOperators() {
       return Operators;
+    }
+
+    public virtual IEnumerable<IParameterizedItem> ExecutionContextItems {
+      get { yield return this; }
     }
     #endregion
Index: branches/ProgrammableProblem/HeuristicLab.Optimization/3.3/Problems/UserDefinedProblem.cs
===================================================================
--- branches/ProgrammableProblem/HeuristicLab.Optimization/3.3/Problems/UserDefinedProblem.cs	(revision 11594)
+++ branches/ProgrammableProblem/HeuristicLab.Optimization/3.3/Problems/UserDefinedProblem.cs	(revision 11595)
@@ -115,4 +115,8 @@
       get { return OperatorsParameter.Value; }
     }
+
+    public IEnumerable<IParameterizedItem> ExecutionContextItems {
+      get { yield return this; }
+    }
     #endregion
 
Index: branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/SingleObjectiveProgrammableProblem.cs
===================================================================
--- branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/SingleObjectiveProgrammableProblem.cs	(revision 11594)
+++ branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/SingleObjectiveProgrammableProblem.cs	(revision 11595)
@@ -58,5 +58,4 @@
     }
 
-
     public ISingleObjectiveProblemDefinition ProblemDefinition {
       get { return ProblemDefinitionParameter.Value; }
@@ -64,7 +63,8 @@
     }
 
-    [Storable]
-    protected List<IParameter> DynamicEncodingParameters;
-
+
+    public override IEnumerable<IParameterizedItem> ExecutionContextItems {
+      get { return base.ExecutionContextItems.Concat(new[] { ProblemDefinition.Encoding }); }
+    }
     protected override IEnumerable<IItem> GetOperators() {
       return base.GetOperators().Concat(ProblemDefinition.Encoding.Operators);
@@ -76,5 +76,4 @@
     protected SingleObjectiveProgrammableProblem(SingleObjectiveProgrammableProblem original, Cloner cloner)
       : base(original, cloner) {
-      DynamicEncodingParameters = original.DynamicEncodingParameters.Select(cloner.Clone).ToList();
       RegisterEventHandlers();
     }
@@ -84,5 +83,4 @@
       Parameters.Add(new ValueParameter<IEncoding>("Encoding", "Describes the configuration of the encoding, what the variables are called, what type they are and their bounds if any."));
 
-      DynamicEncodingParameters = new List<IParameter>();
 
       Operators.Add(new BestScopeSolutionAnalyzer());
@@ -158,14 +156,4 @@
         analyzeOp.ProblemDefinitionParameter.ActualName = ProblemDefinitionParameter.Name;
         analyzeOp.QualityParameter.ActualName = Evaluator.QualityParameter.ActualName;
-      }
-
-      foreach (var param in DynamicEncodingParameters)
-        if (Parameters.Contains(param)) Parameters.Remove(param);
-      DynamicEncodingParameters.Clear();
-
-      DynamicEncodingParameters.AddRange(encoding.Parameters);
-      foreach (var param in DynamicEncodingParameters) {
-        param.Hidden = true;
-        Parameters.Add(param);
       }
 
@@ -215,6 +203,4 @@
       }
     }
-
-
   }
 }
