Index: branches/ProblemRefactoring/HeuristicLab.Encodings.LinearLinkageEncoding/3.3/Interfaces/ILinearLinkageCreator.cs
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Encodings.LinearLinkageEncoding/3.3/Interfaces/ILinearLinkageCreator.cs	(revision 13366)
+++ branches/ProblemRefactoring/HeuristicLab.Encodings.LinearLinkageEncoding/3.3/Interfaces/ILinearLinkageCreator.cs	(revision 13372)
@@ -25,5 +25,5 @@
 
 namespace HeuristicLab.Encodings.LinearLinkageEncoding {
-  public interface ILinearLinkageCreator : ISolutionCreator, ILinearLinkageOperator {
+  public interface ILinearLinkageCreator : ISolutionCreator<LinearLinkage>, ILinearLinkageOperator {
     IValueLookupParameter<IntValue> LengthParameter { get; }
     ILookupParameter<LinearLinkage> LLEParameter { get; }
Index: branches/ProblemRefactoring/HeuristicLab.Encodings.LinearLinkageEncoding/3.3/LinearLinkage.cs
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Encodings.LinearLinkageEncoding/3.3/LinearLinkage.cs	(revision 13366)
+++ branches/ProblemRefactoring/HeuristicLab.Encodings.LinearLinkageEncoding/3.3/LinearLinkage.cs	(revision 13372)
@@ -26,4 +26,5 @@
 using HeuristicLab.Core;
 using HeuristicLab.Data;
+using HeuristicLab.Optimization;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 
@@ -31,5 +32,5 @@
   [Item("LinearLinkage", "Represents an LLE grouping of items.")]
   [StorableClass]
-  public sealed class LinearLinkage : IntArray {
+  public sealed class LinearLinkage : IntArray, ISolution {
 
     [StorableConstructor]
Index: branches/ProblemRefactoring/HeuristicLab.Encodings.LinearLinkageEncoding/3.3/LinearLinkageEncoding.cs
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Encodings.LinearLinkageEncoding/3.3/LinearLinkageEncoding.cs	(revision 13366)
+++ branches/ProblemRefactoring/HeuristicLab.Encodings.LinearLinkageEncoding/3.3/LinearLinkageEncoding.cs	(revision 13372)
@@ -34,5 +34,5 @@
   [Item("Linear Linkage Encoding", "Describes a linear linkage (LLE) encoding.")]
   [StorableClass]
-  public sealed class LinearLinkageEncoding : Encoding<ILinearLinkageCreator> {
+  public sealed class LinearLinkageEncoding : Encoding<LinearLinkage> {
     #region encoding parameters
     [Storable]
@@ -166,14 +166,5 @@
     }
     #endregion
-  }
 
-  public static class IndividualExtensionMethods {
-    public static LinearLinkage LinearLinkage(this Individual individual) {
-      var encoding = individual.GetEncoding<LinearLinkageEncoding>();
-      return individual.LinearLinkage(encoding.Name);
-    }
-    public static LinearLinkage LinearLinkage(this Individual individual, string name) {
-      return (LinearLinkage)individual[name];
-    }
   }
 }
Index: branches/ProblemRefactoring/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Interfaces/ISymbolicExpressionTree.cs
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Interfaces/ISymbolicExpressionTree.cs	(revision 13366)
+++ branches/ProblemRefactoring/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Interfaces/ISymbolicExpressionTree.cs	(revision 13372)
@@ -23,6 +23,8 @@
 using System.Collections.Generic;
 using HeuristicLab.Core;
+using HeuristicLab.Optimization;
+
 namespace HeuristicLab.Encodings.SymbolicExpressionTreeEncoding {
-  public interface ISymbolicExpressionTree : IItem {
+  public interface ISymbolicExpressionTree : IItem, ISolution {
     ISymbolicExpressionTreeNode Root { get; set; }
     int Length { get; }
Index: branches/ProblemRefactoring/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Interfaces/Operators/ISymbolicExpressionTreeCreator.cs
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Interfaces/Operators/ISymbolicExpressionTreeCreator.cs	(revision 13366)
+++ branches/ProblemRefactoring/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Interfaces/Operators/ISymbolicExpressionTreeCreator.cs	(revision 13372)
@@ -27,5 +27,5 @@
   /// Interface for operators that create symbolic expression trees.
   /// </summary>
-  public interface ISymbolicExpressionTreeCreator : ISolutionCreator, ISymbolicExpressionTreeSizeConstraintOperator, ISymbolicExpressionTreeGrammarBasedOperator {
+  public interface ISymbolicExpressionTreeCreator : ISolutionCreator<ISymbolicExpressionTree>, ISymbolicExpressionTreeSizeConstraintOperator, ISymbolicExpressionTreeGrammarBasedOperator {
     ISymbolicExpressionTree CreateTree(IRandom random, ISymbolicExpressionGrammar grammar, int maxTreeLength, int maxTreeDepth);
   }
Index: branches/ProblemRefactoring/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/SymbolicExpressionTreeEncoding.cs
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/SymbolicExpressionTreeEncoding.cs	(revision 13366)
+++ branches/ProblemRefactoring/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/SymbolicExpressionTreeEncoding.cs	(revision 13372)
@@ -36,5 +36,5 @@
   [Item("SymbolicExpressionTreeEncoding", "Describes a symbolic expression tree encoding.")]
   [StorableClass]
-  public sealed class SymbolicExpressionTreeEncoding : Encoding<ISymbolicExpressionTreeCreator> {
+  public sealed class SymbolicExpressionTreeEncoding : Encoding<ISymbolicExpressionTree> {
     #region Encoding Parameters
     [Storable]
@@ -355,14 +355,3 @@
     #endregion
   }
-
-  public static class IndividualExtensionMethods {
-    public static ISymbolicExpressionTree SymbolicExpressionTree(this Individual individual) {
-      var encoding = individual.GetEncoding<SymbolicExpressionTreeEncoding>();
-      return individual.SymbolicExpressionTree(encoding.Name);
-    }
-
-    public static ISymbolicExpressionTree SymbolicExpressionTree(this Individual individual, string name) {
-      return (ISymbolicExpressionTree)individual[name];
-    }
-  }
 }
Index: branches/ProblemRefactoring/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/SymbolicExpressionTreeProblem.cs
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/SymbolicExpressionTreeProblem.cs	(revision 13366)
+++ branches/ProblemRefactoring/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/SymbolicExpressionTreeProblem.cs	(revision 13372)
@@ -32,5 +32,5 @@
 namespace HeuristicLab.Encodings.SymbolicExpressionTreeEncoding {
   [StorableClass]
-  public abstract class SymbolicExpressionTreeProblem : SingleObjectiveProblem<SymbolicExpressionTreeEncoding> {
+  public abstract class SymbolicExpressionTreeProblem : SingleObjectiveProblem<SymbolicExpressionTreeEncoding, ISymbolicExpressionTree> {
 
     // persistence
@@ -48,14 +48,5 @@
     protected SymbolicExpressionTreeProblem() : base() { }
 
-    public virtual bool IsBetter(double quality, double bestQuality) {
-      return (Maximization && quality > bestQuality || !Maximization && quality < bestQuality);
-    }
-
-    public abstract double Evaluate(ISymbolicExpressionTree tree, IRandom random);
-    public sealed override double Evaluate(Individual individual, IRandom random) {
-      return Evaluate(individual.SymbolicExpressionTree(), random);
-    }
-
-    public virtual void Analyze(ISymbolicExpressionTree[] trees, double[] qualities, ResultCollection results,
+    public override void Analyze(ISymbolicExpressionTree[] trees, double[] qualities, ResultCollection results,
       IRandom random) {
       if (!results.ContainsKey("Best Solution Quality")) {
@@ -76,8 +67,4 @@
       }
     }
-
-    public sealed override void Analyze(Individual[] individuals, double[] qualities, ResultCollection results, IRandom random) {
-      Analyze(individuals.Select(ind => ind.SymbolicExpressionTree()).ToArray(), qualities, results, random);
-    }
   }
 }
Index: branches/ProblemRefactoring/HeuristicLab.Problems.ExternalEvaluation.GP/3.5/HeuristicLab.Problems.ExternalEvaluation.GP-3.5.csproj
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Problems.ExternalEvaluation.GP/3.5/HeuristicLab.Problems.ExternalEvaluation.GP-3.5.csproj	(revision 13366)
+++ branches/ProblemRefactoring/HeuristicLab.Problems.ExternalEvaluation.GP/3.5/HeuristicLab.Problems.ExternalEvaluation.GP-3.5.csproj	(revision 13372)
@@ -169,4 +169,9 @@
       <Private>False</Private>
     </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Optimization\3.3\HeuristicLab.Optimization-3.3.csproj">
+      <Project>{14ab8d24-25bc-400c-a846-4627aa945192}</Project>
+      <Name>HeuristicLab.Optimization-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Persistence\3.3\HeuristicLab.Persistence-3.3.csproj">
       <Project>{102bc7d3-0ef9-439c-8f6d-96ff0fdb8e1b}</Project>
Index: branches/ProblemRefactoring/HeuristicLab.Problems.ExternalEvaluation/3.4/ExternalEvaluationProblem.cs
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Problems.ExternalEvaluation/3.4/ExternalEvaluationProblem.cs	(revision 13366)
+++ branches/ProblemRefactoring/HeuristicLab.Problems.ExternalEvaluation/3.4/ExternalEvaluationProblem.cs	(revision 13372)
@@ -40,5 +40,5 @@
   // BackwardsCompatibility3.3
   // Rename class to SingleObjectiveExternalEvaluationProblem
-  public class ExternalEvaluationProblem : SingleObjectiveProblem<IEncoding>, IExternalEvaluationProblem {
+  public class ExternalEvaluationProblem : SingleObjectiveProblem<IEncoding<ISolution>, ISolution>, IExternalEvaluationProblem {
 
     public static new Image StaticItemImage {
@@ -102,5 +102,5 @@
     }
 
-    public override double Evaluate(Individual individual, IRandom random) {
+    public override double Evaluate(ISolution individual, IRandom random) {
       var qualityMessage = Evaluate(BuildSolutionMessage(individual));
       if (!qualityMessage.HasExtension(SingleObjectiveQualityMessage.QualityMessage_))
@@ -114,9 +114,9 @@
     }
 
-    public override void Analyze(Individual[] individuals, double[] qualities, ResultCollection results, IRandom random) {
+    public override void Analyze(ISolution[] individuals, double[] qualities, ResultCollection results, IRandom random) {
       OptimizationSupport.Analyze(individuals, qualities, results, random);
     }
 
-    public override IEnumerable<Individual> GetNeighbors(Individual individual, IRandom random) {
+    public override IEnumerable<ISolution> GetNeighbors(ISolution individual, IRandom random) {
       return OptimizationSupport.GetNeighbors(individual, random);
     }
@@ -146,5 +146,6 @@
       try {
         return client.Evaluate(message, GetQualityMessageExtensions());
-      } finally {
+      }
+      finally {
         lock (clientLock) {
           activeClients.Remove(client);
@@ -154,14 +155,15 @@
     }
 
-    private SolutionMessage BuildSolutionMessage(Individual individual, int solutionId = 0) {
+    private SolutionMessage BuildSolutionMessage(ISolution solution, int solutionId = 0) {
       lock (clientLock) {
         SolutionMessage.Builder protobufBuilder = SolutionMessage.CreateBuilder();
         protobufBuilder.SolutionId = solutionId;
         var scope = new Scope();
-        individual.CopyToScope(scope);
+        ScopeUtil.CopySolutionToScope(scope, Encoding, solution);
         foreach (var variable in scope.Variables) {
           try {
             MessageBuilder.AddToMessage(variable.Value, variable.Name, protobufBuilder);
-          } catch (ArgumentException ex) {
+          }
+          catch (ArgumentException ex) {
             throw new InvalidOperationException(string.Format("ERROR while building solution message: Parameter {0} cannot be added to the message", Name), ex);
           }
Index: branches/ProblemRefactoring/HeuristicLab.Problems.ExternalEvaluation/3.4/Interfaces/IMultiObjectiveOptimizationSupport.cs
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Problems.ExternalEvaluation/3.4/Interfaces/IMultiObjectiveOptimizationSupport.cs	(revision 13366)
+++ branches/ProblemRefactoring/HeuristicLab.Problems.ExternalEvaluation/3.4/Interfaces/IMultiObjectiveOptimizationSupport.cs	(revision 13372)
@@ -25,5 +25,5 @@
 namespace HeuristicLab.Problems.ExternalEvaluation {
   public interface IMultiObjectiveOptimizationSupport {
-    void Analyze(Individual[] individuals, double[][] qualities, ResultCollection results, IRandom random);
+    void Analyze(ISolution[] individuals, double[][] qualities, ResultCollection results, IRandom random);
   }
 }
Index: branches/ProblemRefactoring/HeuristicLab.Problems.ExternalEvaluation/3.4/Interfaces/ISingleObjectiveOptimizationSupport.cs
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Problems.ExternalEvaluation/3.4/Interfaces/ISingleObjectiveOptimizationSupport.cs	(revision 13366)
+++ branches/ProblemRefactoring/HeuristicLab.Problems.ExternalEvaluation/3.4/Interfaces/ISingleObjectiveOptimizationSupport.cs	(revision 13372)
@@ -26,6 +26,6 @@
 namespace HeuristicLab.Problems.ExternalEvaluation {
   public interface ISingleObjectiveOptimizationSupport {
-    void Analyze(Individual[] individuals, double[] qualities, ResultCollection results, IRandom random);
-    IEnumerable<Individual> GetNeighbors(Individual individual, IRandom random);
+    void Analyze(ISolution[] individuals, double[] qualities, ResultCollection results, IRandom random);
+    IEnumerable<ISolution> GetNeighbors(ISolution individual, IRandom random);
   }
 }
Index: branches/ProblemRefactoring/HeuristicLab.Problems.ExternalEvaluation/3.4/MultiObjectiveExternalEvaluationProblem.cs
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Problems.ExternalEvaluation/3.4/MultiObjectiveExternalEvaluationProblem.cs	(revision 13366)
+++ branches/ProblemRefactoring/HeuristicLab.Problems.ExternalEvaluation/3.4/MultiObjectiveExternalEvaluationProblem.cs	(revision 13372)
@@ -37,5 +37,5 @@
   [Creatable(CreatableAttribute.Categories.ExternalEvaluationProblems, Priority = 200)]
   [StorableClass]
-  public class MultiObjectiveExternalEvaluationProblem : MultiObjectiveProblem<IEncoding>, IExternalEvaluationProblem {
+  public class MultiObjectiveExternalEvaluationProblem : MultiObjectiveProblem<IEncoding<ISolution>, ISolution>, IExternalEvaluationProblem {
 
     public static new Image StaticItemImage {
@@ -99,5 +99,5 @@
     }
 
-    public override double[] Evaluate(Individual individual, IRandom random) {
+    public override double[] Evaluate(ISolution individual, IRandom random) {
       var qualityMessage = Evaluate(BuildSolutionMessage(individual));
       if (!qualityMessage.HasExtension(MultiObjectiveQualityMessage.QualityMessage_))
@@ -111,5 +111,5 @@
     }
 
-    public override void Analyze(Individual[] individuals, double[][] qualities, ResultCollection results, IRandom random) {
+    public override void Analyze(ISolution[] individuals, double[][] qualities, ResultCollection results, IRandom random) {
       OptimizationSupport.Analyze(individuals, qualities, results, random);
     }
@@ -140,5 +140,6 @@
       try {
         return client.Evaluate(message, GetQualityMessageExtensions());
-      } finally {
+      }
+      finally {
         lock (clientLock) {
           activeClients.Remove(client);
@@ -148,14 +149,15 @@
     }
 
-    private SolutionMessage BuildSolutionMessage(Individual individual, int solutionId = 0) {
+    private SolutionMessage BuildSolutionMessage(ISolution solution, int solutionId = 0) {
       lock (clientLock) {
         SolutionMessage.Builder protobufBuilder = SolutionMessage.CreateBuilder();
         protobufBuilder.SolutionId = solutionId;
         var scope = new Scope();
-        individual.CopyToScope(scope);
+        ScopeUtil.CopySolutionToScope(scope, Encoding, solution);
         foreach (var variable in scope.Variables) {
           try {
             MessageBuilder.AddToMessage(variable.Value, variable.Name, protobufBuilder);
-          } catch (ArgumentException ex) {
+          }
+          catch (ArgumentException ex) {
             throw new InvalidOperationException(string.Format("ERROR while building solution message: Parameter {0} cannot be added to the message", Name), ex);
           }
Index: branches/ProblemRefactoring/HeuristicLab.Problems.ExternalEvaluation/3.4/Programmable/CompiledMultiObjectiveOptimizationSupport.cs
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Problems.ExternalEvaluation/3.4/Programmable/CompiledMultiObjectiveOptimizationSupport.cs	(revision 13366)
+++ branches/ProblemRefactoring/HeuristicLab.Problems.ExternalEvaluation/3.4/Programmable/CompiledMultiObjectiveOptimizationSupport.cs	(revision 13372)
@@ -5,5 +5,5 @@
   public class CompiledMultiObjectiveOptimizationSupport : CompiledOptimizationSupport, IMultiObjectiveOptimizationSupport {
 
-    public void Analyze(Individual[] individuals, double[][] qualities, ResultCollection results, IRandom random) {
+    public void Analyze(ISolution[] individuals, double[][] qualities, ResultCollection results, IRandom random) {
       // Use vars.yourVariable to access variables in the variable store i.e. yourVariable
       // Write or update results given the range of vectors and resulting qualities
Index: branches/ProblemRefactoring/HeuristicLab.Problems.ExternalEvaluation/3.4/Programmable/CompiledSingleObjectiveOptimizationSupport.cs
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Problems.ExternalEvaluation/3.4/Programmable/CompiledSingleObjectiveOptimizationSupport.cs	(revision 13366)
+++ branches/ProblemRefactoring/HeuristicLab.Problems.ExternalEvaluation/3.4/Programmable/CompiledSingleObjectiveOptimizationSupport.cs	(revision 13372)
@@ -6,5 +6,5 @@
   public class CompiledSingleObjectiveOptimizationSupport : CompiledOptimizationSupport, ISingleObjectiveOptimizationSupport {
 
-    public void Analyze(Individual[] individuals, double[] qualities, ResultCollection results, IRandom random) {
+    public void Analyze(ISolution[] individuals, double[] qualities, ResultCollection results, IRandom random) {
       // Use vars.yourVariable to access variables in the variable store i.e. yourVariable
       // Write or update results given the range of vectors and resulting qualities
@@ -17,5 +17,5 @@
     }
 
-    public IEnumerable<Individual> GetNeighbors(Individual individual, IRandom random) {
+    public IEnumerable<ISolution> GetNeighbors(ISolution individual, IRandom random) {
       // Use vars.yourVariable to access variables in the variable store i.e. yourVariable
       // Create new vectors, based on the given one that represent small changes
@@ -24,5 +24,5 @@
         // Algorithm will draw only a finite amount of samples
         // Change to a for-loop to return a concrete amount of neighbors
-        var neighbor = individual.Copy();
+        var neighbor = (ISolution)individual.Clone();
         // For instance, perform a single bit-flip in a binary parameter
         //var bIndex = random.Next(neighbor.BinaryVector("b").Length);
Index: branches/ProblemRefactoring/HeuristicLab.Problems.ExternalEvaluation/3.4/Programmable/MultiObjectiveOptimizationSupportScript.cs
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Problems.ExternalEvaluation/3.4/Programmable/MultiObjectiveOptimizationSupportScript.cs	(revision 13366)
+++ branches/ProblemRefactoring/HeuristicLab.Problems.ExternalEvaluation/3.4/Programmable/MultiObjectiveOptimizationSupportScript.cs	(revision 13372)
@@ -39,5 +39,5 @@
     }
 
-    void IMultiObjectiveOptimizationSupport.Analyze(Individual[] individuals, double[][] qualities, ResultCollection results, IRandom random) {
+    void IMultiObjectiveOptimizationSupport.Analyze(ISolution[] individuals, double[][] qualities, ResultCollection results, IRandom random) {
       CompiledInstance.Analyze(individuals, qualities, results, random);
     }
Index: branches/ProblemRefactoring/HeuristicLab.Problems.ExternalEvaluation/3.4/Programmable/SingleObjectiveOptimizationSupportScript.cs
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Problems.ExternalEvaluation/3.4/Programmable/SingleObjectiveOptimizationSupportScript.cs	(revision 13366)
+++ branches/ProblemRefactoring/HeuristicLab.Problems.ExternalEvaluation/3.4/Programmable/SingleObjectiveOptimizationSupportScript.cs	(revision 13372)
@@ -40,9 +40,9 @@
     }
 
-    void ISingleObjectiveOptimizationSupport.Analyze(Individual[] individuals, double[] qualities, ResultCollection results, IRandom random) {
+    void ISingleObjectiveOptimizationSupport.Analyze(ISolution[] individuals, double[] qualities, ResultCollection results, IRandom random) {
       CompiledInstance.Analyze(individuals, qualities, results, random);
     }
 
-    IEnumerable<Individual> ISingleObjectiveOptimizationSupport.GetNeighbors(Individual individual, IRandom random) {
+    IEnumerable<ISolution> ISingleObjectiveOptimizationSupport.GetNeighbors(ISolution individual, IRandom random) {
       return CompiledInstance.GetNeighbors(individual, random);
     }
Index: branches/ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming.Views/3.3/HeuristicLab.Problems.GeneticProgramming.Views-3.3.csproj
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming.Views/3.3/HeuristicLab.Problems.GeneticProgramming.Views-3.3.csproj	(revision 13366)
+++ branches/ProblemRefactoring/HeuristicLab.Problems.GeneticProgramming.Views/3.3/HeuristicLab.Problems.GeneticProgramming.Views-3.3.csproj	(revision 13372)
@@ -220,4 +220,9 @@
       <Private>False</Private>
     </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Optimization\3.3\HeuristicLab.Optimization-3.3.csproj">
+      <Project>{14ab8d24-25bc-400c-a846-4627aa945192}</Project>
+      <Name>HeuristicLab.Optimization-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\3.3\HeuristicLab.PluginInfrastructure-3.3.csproj">
       <Project>{94186a6a-5176-4402-ae83-886557b53cca}</Project>
Index: branches/ProblemRefactoring/HeuristicLab.Problems.GrammaticalEvolution/3.4/ArtificialAnt/GEArtificialAntProblem.cs
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Problems.GrammaticalEvolution/3.4/ArtificialAnt/GEArtificialAntProblem.cs	(revision 13366)
+++ branches/ProblemRefactoring/HeuristicLab.Problems.GrammaticalEvolution/3.4/ArtificialAnt/GEArtificialAntProblem.cs	(revision 13372)
@@ -38,6 +38,5 @@
   [Creatable(CreatableAttribute.Categories.GeneticProgrammingProblems, Priority = 170)]
   [StorableClass]
-  public sealed class GEArtificialAntProblem : SingleObjectiveProblem<IntegerVectorEncoding>, IStorableContent {
-    public string Filename { get; set; }
+  public sealed class GEArtificialAntProblem : SingleObjectiveProblem<IntegerVectorEncoding, IntegerVector> {
 
     #region Parameter Properties
@@ -99,7 +98,5 @@
 
     private readonly object syncRoot = new object();
-    public override double Evaluate(Individual individual, IRandom random) {
-      var vector = individual.IntegerVector();
-
+    public override double Evaluate(IntegerVector solution, IRandom random) {
       var bounds = Encoding.Bounds;
       var len = Encoding.Length;
@@ -113,5 +110,5 @@
         fastRand = new FastRandom(random.Next());
       }
-      var tree = mapper.Map(fastRand, bounds, len, grammar, vector);
+      var tree = mapper.Map(fastRand, bounds, len, grammar, solution);
 
       Interpreter interpreter = new Interpreter(tree, World, MaxTimeSteps);
@@ -121,5 +118,5 @@
     }
 
-    public override void Analyze(Individual[] individuals, double[] qualities, ResultCollection results, IRandom random) {
+    public override void Analyze(IntegerVector[] solutions, double[] qualities, ResultCollection results, IRandom random) {
       var bounds = Encoding.Bounds;
       var len = Encoding.Length;
@@ -127,6 +124,6 @@
       var mapper = GenotypeToPhenotypeMapperParameter.Value;
 
-      var trees = individuals
-        .Select(ind => mapper.Map(random, bounds, len, grammar, ind.IntegerVector()))
+      var trees = solutions
+        .Select(ind => mapper.Map(random, bounds, len, grammar, ind))
         .ToArray();
 
Index: branches/ProblemRefactoring/HeuristicLab.Problems.LinearAssignment.Views/3.3/HeuristicLab.Problems.LinearAssignment.Views-3.3.csproj
===================================================================
--- branches/ProblemRefactoring/HeuristicLab.Problems.LinearAssignment.Views/3.3/HeuristicLab.Problems.LinearAssignment.Views-3.3.csproj	(revision 13366)
+++ branches/ProblemRefactoring/HeuristicLab.Problems.LinearAssignment.Views/3.3/HeuristicLab.Problems.LinearAssignment.Views-3.3.csproj	(revision 13372)
@@ -181,4 +181,9 @@
       <Private>False</Private>
     </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Optimization\3.3\HeuristicLab.Optimization-3.3.csproj">
+      <Project>{14ab8d24-25bc-400c-a846-4627aa945192}</Project>
+      <Name>HeuristicLab.Optimization-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\3.3\HeuristicLab.PluginInfrastructure-3.3.csproj">
       <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
