Index: branches/2521_ProblemRefactoring/HeuristicLab.Core/3.3/Interfaces/ILookupParameter.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Core/3.3/Interfaces/ILookupParameter.cs	(revision 17256)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Core/3.3/Interfaces/ILookupParameter.cs	(revision 17257)
@@ -24,9 +24,13 @@
 
 namespace HeuristicLab.Core {
+  [StorableType("285d7903-5c4b-4136-bd69-491dc1766825")]
+  public interface IContextParameter : IParameter {
+    IExecutionContext ExecutionContext { get; set; }
+  }
+
   [StorableType("78e29fa3-e603-4a2e-a3e0-2dee459891f1")]
-  public interface ILookupParameter : IParameter {
+  public interface ILookupParameter : IContextParameter {
     string ActualName { get; set; }
     string TranslatedName { get; }
-    IExecutionContext ExecutionContext { get; set; }
     event EventHandler ActualNameChanged;
   }
@@ -37,11 +41,6 @@
   }
 
-  [StorableType("285d7903-5c4b-4136-bd69-491dc1766825")]
-  public interface IContextLookupParameter : IParameter {
-    IExecutionContext ExecutionContext { get; set; }
-  }
-
   [StorableType("26db2a08-7537-4e0e-b93c-4d4478698cd1")]
-  public interface IContextLookupParameter<T> : IContextLookupParameter where T : class, IParameterizedItem {
+  public interface IContextLookupParameter<T> : IContextParameter where T : class, IParameterizedItem {
     new T ActualValue { get; }
   }
Index: branches/2521_ProblemRefactoring/HeuristicLab.Operators/3.3/Operator.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Operators/3.3/Operator.cs	(revision 17256)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Operators/3.3/Operator.cs	(revision 17257)
@@ -119,7 +119,5 @@
         ExecutionContext = context;
         this.cancellationToken = cancellationToken;
-        foreach (var param in Parameters.OfType<ILookupParameter>())
-          param.ExecutionContext = context;
-        foreach (var param in Parameters.OfType<IContextLookupParameter>())
+        foreach (var param in Parameters.OfType<IContextParameter>())
           param.ExecutionContext = context;
         IOperation next = Apply();
@@ -128,7 +126,5 @@
       }
       finally {
-        foreach (var param in Parameters.OfType<ILookupParameter>())
-          param.ExecutionContext = null;
-        foreach (var param in Parameters.OfType<IContextLookupParameter>())
+        foreach (var param in Parameters.OfType<IContextParameter>())
           param.ExecutionContext = null;
         ExecutionContext = null;
Index: branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/IEncodedSolution.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/IEncodedSolution.cs	(revision 17256)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/IEncodedSolution.cs	(revision 17257)
@@ -22,7 +22,9 @@
 #endregion
 
+using HEAL.Attic;
 using HeuristicLab.Core;
 
 namespace HeuristicLab.Optimization {
+  [StorableType("c81bebf8-812c-4f8b-a1bc-d310fb844367")]
   public interface IEncodedSolution : IItem { }
 }
Index: branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/IMultiObjectiveProblem.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/IMultiObjectiveProblem.cs	(revision 17256)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/IMultiObjectiveProblem.cs	(revision 17257)
@@ -20,12 +20,11 @@
 #endregion
 
-using HeuristicLab.Core;
-using HeuristicLab.Data;
+using HEAL.Attic;
 
 namespace HeuristicLab.Optimization {
-  public interface IMultiObjectiveProblem : IProblem, IMultiObjectiveHeuristicOptimizationProblem {
+  [StorableType("251d79f1-a065-47f9-85a3-2e8dbdbf685e")]
+  public interface IMultiObjectiveProblem : IProblem, IMultiObjectiveHeuristicOptimizationProblem { }
 
-  }
-
+  [StorableType("806fb361-1469-4903-9f54-f8678b0717b9")]
   public interface IMultiObjectiveProblem<TEncoding, TEncodedSolution> : IMultiObjectiveProblem, IProblem<TEncoding, TEncodedSolution>
     where TEncoding : class, IEncoding<TEncodedSolution>
Index: branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/IMultiObjectiveProblemDefinition.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/IMultiObjectiveProblemDefinition.cs	(revision 17256)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/IMultiObjectiveProblemDefinition.cs	(revision 17257)
@@ -20,11 +20,10 @@
 #endregion
 
-using System.Collections;
 using System.Collections.Generic;
 using HEAL.Attic;
 using HeuristicLab.Core;
-using HeuristicLab.Data;
 
 namespace HeuristicLab.Optimization {
+  [StorableType("609e74a2-d5e7-4495-b47c-2d365a8d717c")]
   public interface IMultiObjectiveProblemDefinition {
     int Objectives { get; }
Index: branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/ISingleObjectiveProblem.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/ISingleObjectiveProblem.cs	(revision 17256)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/ISingleObjectiveProblem.cs	(revision 17257)
@@ -21,9 +21,11 @@
 
 
+using HEAL.Attic;
+
 namespace HeuristicLab.Optimization {
-  public interface ISingleObjectiveProblem : ISingleObjectiveHeuristicOptimizationProblem {
+  [StorableType("24830fd5-7d97-41a5-9d7e-d84f1b7ab259")]
+  public interface ISingleObjectiveProblem : ISingleObjectiveHeuristicOptimizationProblem { }
 
-  }
-
+  [StorableType("9cc9422f-0bb5-41e8-9d9e-6e0b66a66449")]
   public interface ISingleObjectiveProblem<TEncoding, TEncodedSolution> : ISingleObjectiveProblem, IProblem<TEncoding, TEncodedSolution>
     where TEncoding : class, IEncoding<TEncodedSolution>
Index: branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/ISingleObjectiveProblemDefinition.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/ISingleObjectiveProblemDefinition.cs	(revision 17256)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/Interfaces/ISingleObjectiveProblemDefinition.cs	(revision 17257)
@@ -25,4 +25,5 @@
 
 namespace HeuristicLab.Optimization {
+  [StorableType("80849d87-5cc6-4dc0-8c10-966ecb68d582")]
   public interface ISingleObjectiveProblemDefinition {
     bool Maximization { get; }
Index: branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/Interfaces/IProblem.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/Interfaces/IProblem.cs	(revision 17256)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/Interfaces/IProblem.cs	(revision 17257)
@@ -38,4 +38,5 @@
   }
 
+  [StorableType("1b4af8b9-bdf5-4ffd-86e6-35b481bfbf45")]
   public interface IProblem<TEncoding, TEncodedSolution> : IHeuristicOptimizationProblem
     where TEncoding : class, IEncoding<TEncodedSolution>
Index: branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/Results/ResultParameter.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/Results/ResultParameter.cs	(revision 17256)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/Results/ResultParameter.cs	(revision 17257)
@@ -22,9 +22,9 @@
 using System;
 using System.Drawing;
+using HEAL.Attic;
 using HeuristicLab.Common;
 using HeuristicLab.Common.Resources;
 using HeuristicLab.Core;
 using HeuristicLab.Parameters;
-using HEAL.Attic;
 
 namespace HeuristicLab.Optimization {
Index: branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/ContextLookupParameter.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/ContextLookupParameter.cs	(revision 17256)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/ContextLookupParameter.cs	(revision 17257)
@@ -1,4 +1,3 @@
 ﻿using System;
-using System.Threading;
 using HEAL.Attic;
 using HeuristicLab.Common;
@@ -8,5 +7,5 @@
   [Item("ContextLookupParameter", "A parameter that looks up contexts by type.")]
   [StorableType("4ac189c8-6cf3-48fd-bf79-392d35a872db")]
-  public class ContextLookupParameter<T> : Parameter, IContextLookupParameter<T>, IStatefulItem
+  public class ContextLookupParameter<T> : ContextParameter, IContextLookupParameter<T>
       where T : class, IParameterizedItem {
 
@@ -15,36 +14,9 @@
     }
 
-    private Lazy<ThreadLocal<IItem>> cachedActualValues;
-    protected IItem CachedActualValue {
-      get { return cachedActualValues.Value.Value; }
-      set { cachedActualValues.Value.Value = value; }
-    }
-
-    private Lazy<ThreadLocal<IExecutionContext>> executionContexts;
-    public IExecutionContext ExecutionContext {
-      get { return executionContexts.Value.Value; }
-      set {
-        if (value != executionContexts.Value.Value) {
-          executionContexts.Value.Value = value;
-          cachedActualValues.Value.Value = null;
-        }
-      }
-    }
-
     [StorableConstructor]
-    protected ContextLookupParameter(StorableConstructorFlag _) : base(_) {
-      cachedActualValues = new Lazy<ThreadLocal<IItem>>(() => { return new ThreadLocal<IItem>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
-      executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
-    }
-    protected ContextLookupParameter(ContextLookupParameter<T> original, Cloner cloner)
-      : base(original, cloner) {
-      cachedActualValues = new Lazy<ThreadLocal<IItem>>(() => { return new ThreadLocal<IItem>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
-      executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
-    }
-    public ContextLookupParameter() : this("Anonymous") { }
-    public ContextLookupParameter(string name, string description = null)
-      : base(name, description, typeof(T)) {
-      cachedActualValues = new Lazy<ThreadLocal<IItem>>(() => { return new ThreadLocal<IItem>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
-      executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
+    protected ContextLookupParameter(StorableConstructorFlag _) : base(_) { }
+    protected ContextLookupParameter(ContextLookupParameter<T> original, Cloner cloner) : base(original, cloner) { }
+    public ContextLookupParameter() : base("ContextLookup." + typeof(T).Name, string.Empty, typeof(T)) {
+      Hidden = true;
     }
 
@@ -53,7 +25,5 @@
     }
 
-    protected override IItem GetActualValue() {
-      if (CachedActualValue != null) return CachedActualValue;
-
+    protected override IItem GetActualValueFromContext() {
       IItem item = null;
       var context = ExecutionContext;
@@ -65,5 +35,4 @@
         context = context.Parent;
       }
-      CachedActualValue = item;
       return item;
     }
@@ -72,17 +41,4 @@
       throw new NotSupportedException("The context lookup parameter may not be used to set an item.");
     }
-
-    public virtual void InitializeState() {
-    }
-    public virtual void ClearState() {
-      if (cachedActualValues.IsValueCreated) {
-        cachedActualValues.Value.Dispose();
-        cachedActualValues = new Lazy<ThreadLocal<IItem>>(() => { return new ThreadLocal<IItem>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
-      }
-      if (executionContexts.IsValueCreated) {
-        executionContexts.Value.Dispose();
-        executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
-      }
-    }
   }
 }
Index: branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/ContextParameter.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/ContextParameter.cs	(revision 17257)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/ContextParameter.cs	(revision 17257)
@@ -0,0 +1,89 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 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 System.Threading;
+using HEAL.Attic;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Parameters {
+  [Item("ContextParameter", "")]
+  [StorableType("b4f6a624-19b8-46aa-b89b-6bba2f2e2491")]
+  public abstract class ContextParameter : Parameter, IContextParameter, IStatefulItem {
+
+    protected Lazy<ThreadLocal<IItem>> cachedActualValues;
+    protected virtual IItem CachedActualValue {
+      get { return cachedActualValues.Value.Value; }
+      set { cachedActualValues.Value.Value = value; }
+    }
+
+    protected Lazy<ThreadLocal<IExecutionContext>> executionContexts;
+    public virtual IExecutionContext ExecutionContext {
+      get { return executionContexts.Value.Value; }
+      set {
+        if (value != executionContexts.Value.Value) {
+          executionContexts.Value.Value = value;
+          cachedActualValues.Value.Value = null;
+        }
+      }
+    }
+
+    [StorableConstructor]
+    protected ContextParameter(StorableConstructorFlag _) : base(_) {
+      cachedActualValues = new Lazy<ThreadLocal<IItem>>(() => { return new ThreadLocal<IItem>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
+      executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
+    }
+    protected ContextParameter(ContextParameter original, Cloner cloner)
+      : base(original, cloner) {
+      cachedActualValues = new Lazy<ThreadLocal<IItem>>(() => { return new ThreadLocal<IItem>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
+      executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
+    }
+    protected ContextParameter() : this("Anonymous", string.Empty, typeof(IItem)) { }
+    protected ContextParameter(string name, Type dataType) : this(name, string.Empty, dataType) { }
+    protected ContextParameter(string name, string description, Type dataType)
+      : base(name, description, dataType) {
+      cachedActualValues = new Lazy<ThreadLocal<IItem>>(() => { return new ThreadLocal<IItem>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
+      executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
+    }
+
+    protected override IItem GetActualValue() {
+      if (CachedActualValue != null) return CachedActualValue;
+      CachedActualValue = GetActualValueFromContext();
+      return CachedActualValue;
+    }
+
+    protected abstract IItem GetActualValueFromContext();
+
+    public virtual void InitializeState() {
+    }
+    public virtual void ClearState() {
+      if (cachedActualValues.IsValueCreated) {
+        cachedActualValues.Value.Dispose();
+        cachedActualValues = new Lazy<ThreadLocal<IItem>>(() => { return new ThreadLocal<IItem>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
+      }
+      if (executionContexts.IsValueCreated) {
+        executionContexts.Value.Dispose();
+        executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
+      }
+    }
+  }
+}
Index: branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/HeuristicLab.Parameters-3.3.csproj
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/HeuristicLab.Parameters-3.3.csproj	(revision 17256)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/HeuristicLab.Parameters-3.3.csproj	(revision 17257)
@@ -123,4 +123,5 @@
     <Compile Include="ConstrainedValueParameter.cs" />
     <Compile Include="ContextLookupParameter.cs" />
+    <Compile Include="ContextParameter.cs" />
     <Compile Include="FixedValueParameter.cs" />
     <Compile Include="OptionalConstrainedValueParameter.cs" />
Index: branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/LookupParameter.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/LookupParameter.cs	(revision 17256)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/LookupParameter.cs	(revision 17257)
@@ -21,5 +21,4 @@
 
 using System;
-using System.Threading;
 using HEAL.Attic;
 using HeuristicLab.Common;
@@ -32,5 +31,5 @@
   [Item("LookupParameter", "A parameter whose value is retrieved from or written to a scope.")]
   [StorableType("84FE5F33-94B8-4E30-B1CB-CD15314FB83B")]
-  public class LookupParameter<T> : Parameter, IStatefulItem, ILookupParameter<T> where T : class, IItem {
+  public class LookupParameter<T> : ContextParameter, ILookupParameter<T> where T : class, IItem {
     [Storable]
     private string actualName;
@@ -60,60 +59,25 @@
     }
 
-    private Lazy<ThreadLocal<IItem>> cachedActualValues;
-    protected IItem CachedActualValue {
-      get { return cachedActualValues.Value.Value; }
-      set { cachedActualValues.Value.Value = value; }
-    }
-
-    private Lazy<ThreadLocal<IExecutionContext>> executionContexts;
-    public IExecutionContext ExecutionContext {
-      get { return executionContexts.Value.Value; }
-      set {
-        if (value != executionContexts.Value.Value) {
-          executionContexts.Value.Value = value;
-          cachedActualValues.Value.Value = null;
-        }
-      }
-    }
-
     [StorableConstructor]
-    protected LookupParameter(StorableConstructorFlag _) : base(_) {
-      cachedActualValues = new Lazy<ThreadLocal<IItem>>(() => { return new ThreadLocal<IItem>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
-      executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
-    }
+    protected LookupParameter(StorableConstructorFlag _) : base(_) { }
     protected LookupParameter(LookupParameter<T> original, Cloner cloner)
       : base(original, cloner) {
       actualName = original.actualName;
-      this.Hidden = original.Hidden;
-      cachedActualValues = new Lazy<ThreadLocal<IItem>>(() => { return new ThreadLocal<IItem>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
-      executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
     }
     public LookupParameter()
       : base("Anonymous", typeof(T)) {
       this.actualName = Name;
-      this.Hidden = false;
-      cachedActualValues = new Lazy<ThreadLocal<IItem>>(() => { return new ThreadLocal<IItem>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
-      executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
     }
     public LookupParameter(string name)
       : base(name, typeof(T)) {
       this.actualName = Name;
-      this.Hidden = false;
-      cachedActualValues = new Lazy<ThreadLocal<IItem>>(() => { return new ThreadLocal<IItem>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
-      executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
     }
     public LookupParameter(string name, string description)
       : base(name, description, typeof(T)) {
       this.actualName = Name;
-      this.Hidden = false;
-      cachedActualValues = new Lazy<ThreadLocal<IItem>>(() => { return new ThreadLocal<IItem>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
-      executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
     }
     public LookupParameter(string name, string description, string actualName)
       : base(name, description, typeof(T)) {
       this.actualName = string.IsNullOrWhiteSpace(actualName) ? Name : actualName;
-      this.Hidden = false;
-      cachedActualValues = new Lazy<ThreadLocal<IItem>>(() => { return new ThreadLocal<IItem>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
-      executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
     }
 
@@ -137,5 +101,5 @@
         IParameter param = null;
         while (currentExecutionContext != null && (!currentExecutionContext.Parameters.TryGetValue(translatedName, out param)
-          || param is IContextLookupParameter))
+          || param is IContextParameter))
           currentExecutionContext = currentExecutionContext.Parent;
         if (currentExecutionContext == null) break;
@@ -167,7 +131,5 @@
     }
 
-    protected override IItem GetActualValue() {
-      if (CachedActualValue != null) return CachedActualValue;
-
+    protected override IItem GetActualValueFromContext() {
       string translatedName = Name;
       var value = GetValue(ExecutionContext, ref translatedName);
@@ -178,5 +140,4 @@
                         typeof(T).GetPrettyName())
         );
-      CachedActualValue = value;
       return value;
     }
@@ -223,17 +184,4 @@
     }
 
-    public virtual void InitializeState() {
-    }
-    public virtual void ClearState() {
-      if (cachedActualValues.IsValueCreated) {
-        cachedActualValues.Value.Dispose();
-        cachedActualValues = new Lazy<ThreadLocal<IItem>>(() => { return new ThreadLocal<IItem>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
-      }
-      if (executionContexts.IsValueCreated) {
-        executionContexts.Value.Dispose();
-        executionContexts = new Lazy<ThreadLocal<IExecutionContext>>(() => { return new ThreadLocal<IExecutionContext>(); }, LazyThreadSafetyMode.ExecutionAndPublication);
-      }
-    }
-
     public event EventHandler ActualNameChanged;
     protected virtual void OnActualNameChanged() {
Index: branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/ScopeParameter.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/ScopeParameter.cs	(revision 17256)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/ScopeParameter.cs	(revision 17257)
@@ -21,7 +21,7 @@
 
 using System;
+using HEAL.Attic;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HEAL.Attic;
 
 namespace HeuristicLab.Parameters {
@@ -61,5 +61,5 @@
     }
 
-    protected override IItem GetActualValue() {
+    protected override IItem GetActualValueFromContext() {
       return ExecutionContext.Scope;
     }
Index: branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/ScopeTreeLookupParameter.cs
===================================================================
--- branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/ScopeTreeLookupParameter.cs	(revision 17256)
+++ branches/2521_ProblemRefactoring/HeuristicLab.Parameters/3.3/ScopeTreeLookupParameter.cs	(revision 17257)
@@ -23,7 +23,7 @@
 using System.Collections.Generic;
 using System.Linq;
+using HEAL.Attic;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HEAL.Attic;
 
 namespace HeuristicLab.Parameters {
@@ -86,5 +86,5 @@
     }
 
-    protected override IItem GetActualValue() {
+    protected override IItem GetActualValueFromContext() {
       IEnumerable<IScope> scopes = new IScope[] { ExecutionContext.Scope };
       for (int i = 0; i < depth; i++)
