Index: trunk/sources/HeuristicLab.Algorithms.LocalSearch/3.3/LocalSearch.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.LocalSearch/3.3/LocalSearch.cs	(revision 5753)
+++ trunk/sources/HeuristicLab.Algorithms.LocalSearch/3.3/LocalSearch.cs	(revision 5809)
@@ -38,13 +38,13 @@
   [Creatable("Algorithms")]
   [StorableClass]
-  public sealed class LocalSearch : EngineAlgorithm, IStorableContent {
+  public sealed class LocalSearch : HeuristicOptimizationEngineAlgorithm, IStorableContent {
     public string Filename { get; set; }
 
     #region Problem Properties
     public override Type ProblemType {
-      get { return typeof(ISingleObjectiveProblem); }
-    }
-    public new ISingleObjectiveProblem Problem {
-      get { return (ISingleObjectiveProblem)base.Problem; }
+      get { return typeof(ISingleObjectiveHeuristicOptimizationProblem); }
+    }
+    public new ISingleObjectiveHeuristicOptimizationProblem Problem {
+      get { return (ISingleObjectiveHeuristicOptimizationProblem)base.Problem; }
       set { base.Problem = value; }
     }
Index: trunk/sources/HeuristicLab.Algorithms.LocalSearch/3.3/LocalSearchImprovementOperator.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.LocalSearch/3.3/LocalSearchImprovementOperator.cs	(revision 5753)
+++ trunk/sources/HeuristicLab.Algorithms.LocalSearch/3.3/LocalSearchImprovementOperator.cs	(revision 5809)
@@ -23,15 +23,13 @@
 using System.Collections.Generic;
 using System.Linq;
-using System.Text;
+using HeuristicLab.Analysis;
+using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Data;
 using HeuristicLab.Operators;
-using HeuristicLab.Common;
-using HeuristicLab.Parameters;
-using HeuristicLab.Algorithms.LocalSearch;
-using HeuristicLab.Data;
 using HeuristicLab.Optimization;
 using HeuristicLab.Optimization.Operators;
-using HeuristicLab.Analysis;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
 namespace HeuristicLab.Algorithms.LocalSearch {
@@ -41,5 +39,5 @@
   [Item("LocalSearchImprovementOperator", "A local search improvement operator.")]
   [StorableClass]
-  public class LocalSearchImprovementOperator: SingleSuccessorOperator, ILocalImprovementOperator {
+  public class LocalSearchImprovementOperator : SingleSuccessorOperator, ILocalImprovementOperator {
     [Storable]
     private LocalSearchMainLoop loop;
@@ -47,5 +45,5 @@
     [Storable]
     private BestAverageWorstQualityAnalyzer qualityAnalyzer;
-    
+
     private ConstrainedValueParameter<IMoveGenerator> MoveGeneratorParameter {
       get { return (ConstrainedValueParameter<IMoveGenerator>)Parameters["MoveGenerator"]; }
@@ -88,5 +86,5 @@
 
     [StorableConstructor]
-    protected LocalSearchImprovementOperator(bool deserializing) : base(deserializing) {}
+    protected LocalSearchImprovementOperator(bool deserializing) : base(deserializing) { }
     [StorableHook(HookType.AfterDeserialization)]
     private void AfterDeserialization() {
@@ -95,7 +93,7 @@
     protected LocalSearchImprovementOperator(LocalSearchImprovementOperator original, Cloner cloner)
       : base(original, cloner) {
-        this.loop = cloner.Clone(original.loop);
-        this.qualityAnalyzer = cloner.Clone(original.qualityAnalyzer);
-        Initialize();
+      this.loop = cloner.Clone(original.loop);
+      this.qualityAnalyzer = cloner.Clone(original.qualityAnalyzer);
+      Initialize();
     }
     public override IDeepCloneable Clone(Cloner cloner) {
@@ -104,20 +102,20 @@
     public LocalSearchImprovementOperator()
       : base() {
-        loop = new LocalSearchMainLoop();
-        
-        ResultsCollector rc = (loop.OperatorGraph.InitialOperator as SingleSuccessorOperator).Successor as ResultsCollector;
-        rc.CollectedValues.Remove("BestLocalQuality");
-
-        qualityAnalyzer = new BestAverageWorstQualityAnalyzer();
-
-        Parameters.Add(new ConstrainedValueParameter<IMoveGenerator>("MoveGenerator", "The operator used to generate moves to the neighborhood of the current solution."));
-        Parameters.Add(new ConstrainedValueParameter<IMoveMaker>("MoveMaker", "The operator used to perform a move."));
-        Parameters.Add(new ConstrainedValueParameter<ISingleObjectiveMoveEvaluator>("MoveEvaluator", "The operator used to evaluate a move."));
-        Parameters.Add(new ValueParameter<IntValue>("MaximumIterations", "The maximum number of generations which should be processed.", new IntValue(150)));
-        Parameters.Add(new ValueParameter<IntValue>("SampleSize", "Number of moves that MultiMoveGenerators should create. This is ignored for Exhaustive- and SingleMoveGenerators.", new IntValue(1500)));
-        Parameters.Add(new LookupParameter<IntValue>("EvaluatedSolutions", "The number of evaluated moves."));
-        Parameters.Add(new ValueParameter<MultiAnalyzer>("Analyzer", "The operator used to analyze the solution.", new MultiAnalyzer()));
-
-        Initialize();
+      loop = new LocalSearchMainLoop();
+
+      ResultsCollector rc = (loop.OperatorGraph.InitialOperator as SingleSuccessorOperator).Successor as ResultsCollector;
+      rc.CollectedValues.Remove("BestLocalQuality");
+
+      qualityAnalyzer = new BestAverageWorstQualityAnalyzer();
+
+      Parameters.Add(new ConstrainedValueParameter<IMoveGenerator>("MoveGenerator", "The operator used to generate moves to the neighborhood of the current solution."));
+      Parameters.Add(new ConstrainedValueParameter<IMoveMaker>("MoveMaker", "The operator used to perform a move."));
+      Parameters.Add(new ConstrainedValueParameter<ISingleObjectiveMoveEvaluator>("MoveEvaluator", "The operator used to evaluate a move."));
+      Parameters.Add(new ValueParameter<IntValue>("MaximumIterations", "The maximum number of generations which should be processed.", new IntValue(150)));
+      Parameters.Add(new ValueParameter<IntValue>("SampleSize", "Number of moves that MultiMoveGenerators should create. This is ignored for Exhaustive- and SingleMoveGenerators.", new IntValue(1500)));
+      Parameters.Add(new LookupParameter<IntValue>("EvaluatedSolutions", "The number of evaluated moves."));
+      Parameters.Add(new ValueParameter<MultiAnalyzer>("Analyzer", "The operator used to analyze the solution.", new MultiAnalyzer()));
+
+      Initialize();
     }
 
@@ -130,13 +128,13 @@
       ChooseMoveOperators();
 
-      ParameterizeMoveGenerators(problem as ISingleObjectiveProblem);
-      ParameterizeMoveEvaluators(problem as ISingleObjectiveProblem);
-      ParameterizeMoveMakers(problem as ISingleObjectiveProblem);
-
-      ParameterizeAnalyzers(problem as ISingleObjectiveProblem);
-      UpdateAnalyzers(problem as ISingleObjectiveProblem);
-    }
-
-    void ParameterizeAnalyzers(ISingleObjectiveProblem problem) {
+      ParameterizeMoveGenerators(problem as ISingleObjectiveHeuristicOptimizationProblem);
+      ParameterizeMoveEvaluators(problem as ISingleObjectiveHeuristicOptimizationProblem);
+      ParameterizeMoveMakers(problem as ISingleObjectiveHeuristicOptimizationProblem);
+
+      ParameterizeAnalyzers(problem as ISingleObjectiveHeuristicOptimizationProblem);
+      UpdateAnalyzers(problem as ISingleObjectiveHeuristicOptimizationProblem);
+    }
+
+    void ParameterizeAnalyzers(ISingleObjectiveHeuristicOptimizationProblem problem) {
       qualityAnalyzer.ResultsParameter.ActualName = "Results";
       if (problem != null) {
@@ -148,5 +146,5 @@
     }
 
-    void UpdateAnalyzers(ISingleObjectiveProblem problem) {
+    void UpdateAnalyzers(ISingleObjectiveHeuristicOptimizationProblem problem) {
       Analyzer.Operators.Clear();
       if (problem != null) {
@@ -228,5 +226,5 @@
           if (mm != null) MoveMaker = mm;
           else MoveMaker = validMoveMakers.FirstOrDefault();
-        } 
+        }
 
         if (oldMoveEvaluator != null) {
@@ -234,5 +232,5 @@
           if (me != null) MoveEvaluator = me;
           else MoveEvaluator = validMoveEvaluators.FirstOrDefault();
-        } 
+        }
       }
     }
@@ -244,5 +242,5 @@
     }
 
-    private void ParameterizeMoveGenerators(ISingleObjectiveProblem problem) {
+    private void ParameterizeMoveGenerators(ISingleObjectiveHeuristicOptimizationProblem problem) {
       if (problem != null) {
         foreach (IMultiMoveGenerator generator in problem.Operators.OfType<IMultiMoveGenerator>())
@@ -250,10 +248,10 @@
       }
     }
-    private void ParameterizeMoveEvaluators(ISingleObjectiveProblem problem) {
+    private void ParameterizeMoveEvaluators(ISingleObjectiveHeuristicOptimizationProblem problem) {
       foreach (ISingleObjectiveMoveEvaluator op in problem.Operators.OfType<ISingleObjectiveMoveEvaluator>()) {
         op.QualityParameter.ActualName = problem.Evaluator.QualityParameter.ActualName;
       }
     }
-    private void ParameterizeMoveMakers(ISingleObjectiveProblem problem) {
+    private void ParameterizeMoveMakers(ISingleObjectiveHeuristicOptimizationProblem problem) {
       foreach (IMoveMaker op in problem.Operators.OfType<IMoveMaker>()) {
         op.QualityParameter.ActualName = problem.Evaluator.QualityParameter.ActualName;
