Index: /branches/ProblemRefactoring/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/Plugin.cs.frame
===================================================================
--- /branches/ProblemRefactoring/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/Plugin.cs.frame	(revision 13384)
+++ /branches/ProblemRefactoring/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/Plugin.cs.frame	(revision 13385)
@@ -40,5 +40,4 @@
   [PluginDependency("HeuristicLab.Parameters", "3.3")]
   [PluginDependency("HeuristicLab.Persistence", "3.3")]
-  [PluginDependency("HeuristicLab.Problems.Binary", "3.3")]
   [PluginDependency("HeuristicLab.Random", "3.3")]
   public class Plugin : PluginBase {
Index: /branches/ProblemRefactoring/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj
===================================================================
--- /branches/ProblemRefactoring/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj	(revision 13384)
+++ /branches/ProblemRefactoring/HeuristicLab.Optimizer/3.3/HeuristicLab.Optimizer-3.3.csproj	(revision 13385)
@@ -149,4 +149,5 @@
     <EmbeddedResource Include="Documents\ALPSGP_SymReg.hl" />
     <EmbeddedResource Include="Documents\ALPSGA_TSP.hl" />
+    <None Include="Documents\SGP_Robocode.hl" />
     <None Include="Plugin.cs.frame" />
     <Compile Include="OptimizerSingleDocumentMainForm.cs">
Index: /branches/ProblemRefactoring/HeuristicLab.Problems.Programmable/3.3/MultiObjectiveProgrammableProblem.cs
===================================================================
--- /branches/ProblemRefactoring/HeuristicLab.Problems.Programmable/3.3/MultiObjectiveProgrammableProblem.cs	(revision 13384)
+++ /branches/ProblemRefactoring/HeuristicLab.Problems.Programmable/3.3/MultiObjectiveProgrammableProblem.cs	(revision 13385)
@@ -90,5 +90,4 @@
       var multiEnc = ProblemScript.Encoding as CombinedEncoding;
       if (multiEnc != null) multiEnc.Clear();
-      ProblemScript.Initialize();
       Encoding = (TEncoding)ProblemScript.Encoding.Clone();
 
Index: /branches/ProblemRefactoring/HeuristicLab.Problems.Programmable/3.3/Plugin.cs.frame
===================================================================
--- /branches/ProblemRefactoring/HeuristicLab.Problems.Programmable/3.3/Plugin.cs.frame	(revision 13384)
+++ /branches/ProblemRefactoring/HeuristicLab.Problems.Programmable/3.3/Plugin.cs.frame	(revision 13385)
@@ -31,4 +31,10 @@
   [PluginDependency("HeuristicLab.Core", "3.3")]
   [PluginDependency("HeuristicLab.Data", "3.3")]
+  [PluginDependency("HeuristicLab.Encodings.BinaryVectorEncoding", "3.3")]
+  [PluginDependency("HeuristicLab.Encodings.IntegerVectorEncoding", "3.3")]
+  [PluginDependency("HeuristicLab.Encodings.RealVectorEncoding", "3.3")]
+  [PluginDependency("HeuristicLab.Encodings.PermutationEncoding", "3.3")]
+  [PluginDependency("HeuristicLab.Encodings.SymbolicExpressionTreeEncoding", "3.3")]
+  [PluginDependency("HeuristicLab.Encodings.LinearLinkageEncoding", "3.3")]
   [PluginDependency("HeuristicLab.Optimization", "3.3")]
   [PluginDependency("HeuristicLab.Parameters", "3.3")]
Index: /branches/ProblemRefactoring/HeuristicLab.Problems.Programmable/3.3/ProblemDefinitionScript.cs
===================================================================
--- /branches/ProblemRefactoring/HeuristicLab.Problems.Programmable/3.3/ProblemDefinitionScript.cs	(revision 13384)
+++ /branches/ProblemRefactoring/HeuristicLab.Problems.Programmable/3.3/ProblemDefinitionScript.cs	(revision 13385)
@@ -124,6 +124,5 @@
       try {
         inst = (CompiledProblemDefinition<TEncoding, TSolution>)Activator.CreateInstance(types.Single(x => typeof(CompiledProblemDefinition<TEncoding, TSolution>).IsAssignableFrom(x)));
-      }
-      catch (Exception e) {
+      } catch (Exception e) {
         compiledProblemDefinition = null;
         throw new ProblemDefinitionScriptException("Instantiating the problem definition failed." + Environment.NewLine + "Check your default constructor.", e);
@@ -133,6 +132,6 @@
         inst.vars = new Variables(VariableStore);
         inst.Encoding = encoding;
-      }
-      catch (Exception e) {
+        inst.Initialize();
+      } catch (Exception e) {
         compiledProblemDefinition = null;
         throw new ProblemDefinitionScriptException("Initializing the problem definition failed." + Environment.NewLine + "Check your Initialize() method.", e);
@@ -142,6 +141,5 @@
         compiledProblemDefinition = inst;
         if (fireChanged) OnProblemDefinitionChanged();
-      }
-      catch (Exception e) {
+      } catch (Exception e) {
         compiledProblemDefinition = null;
         throw new ProblemDefinitionScriptException("Using the problem definition in the problem failed." + Environment.NewLine + "Examine this error message carefully (often there is an issue with the defined encoding).", e);
Index: /branches/ProblemRefactoring/HeuristicLab.Problems.Programmable/3.3/SingleObjectiveProgrammableProblem.cs
===================================================================
--- /branches/ProblemRefactoring/HeuristicLab.Problems.Programmable/3.3/SingleObjectiveProgrammableProblem.cs	(revision 13384)
+++ /branches/ProblemRefactoring/HeuristicLab.Problems.Programmable/3.3/SingleObjectiveProgrammableProblem.cs	(revision 13385)
@@ -93,5 +93,4 @@
       var multiEnc = ProblemScript.Encoding as CombinedEncoding;
       if (multiEnc != null) multiEnc.Clear();
-      ProblemScript.Initialize();
       Encoding = (TEncoding)ProblemScript.Encoding.Clone();
 
Index: /branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab-3.3/Samples/GAGroupingProblemSampleTest.cs
===================================================================
--- /branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab-3.3/Samples/GAGroupingProblemSampleTest.cs	(revision 13384)
+++ /branches/ProblemRefactoring/HeuristicLab.Tests/HeuristicLab-3.3/Samples/GAGroupingProblemSampleTest.cs	(revision 13385)
@@ -45,24 +45,22 @@
 
 namespace HeuristicLab.Problems.Programmable {
-  public class CompiledSingleObjectiveProblemDefinition : CompiledProblemDefinition, ISingleObjectiveProblemDefinition {
+  public class CompiledSingleObjectiveProblemDefinition : CompiledSingleObjectiveProblemDefinition<LinearLinkageEncoding, LinearLinkage> {
     private const int ProblemSize = 100;
-    public bool Maximization { get { return false; } }
+    public override bool Maximization { get { return false; } }
 
     private bool[,] allowedTogether;
-      
+    
     public override void Initialize() {
-      var encoding = new LinearLinkageEncoding(""lle"", length: ProblemSize);
-      allowedTogether = new bool[encoding.Length, encoding.Length];
+      Encoding.Length = ProblemSize;
+      allowedTogether = new bool[ProblemSize, ProblemSize];
       var random = new System.Random(13);
-      for (var i = 0; i < encoding.Length - 1; i++)
-        for (var j = i + 1; j < encoding.Length; j++)
+      for (var i = 0; i < ProblemSize - 1; i++)
+        for (var j = i + 1; j < ProblemSize; j++)
           allowedTogether[i, j] = allowedTogether[j, i] = random.Next(2) == 0;
-      
-      Encoding = encoding;
     }
 
-    public double Evaluate(Individual individual, IRandom random) {
+    public override double Evaluate(LinearLinkage solution, IRandom random) {
       var penalty = 0;
-      var groups = individual.LinearLinkage(""lle"").GetGroups().ToList();
+      var groups = solution.GetGroups().ToList();
       for (var i = 0; i < groups.Count; i++) {
         for (var j = 0; j < groups[i].Count; j++)
@@ -74,11 +72,10 @@
     }
 
-    public void Analyze(Individual[] individuals, double[] qualities, ResultCollection results, IRandom random) { }
+    public override void Analyze(LinearLinkage[] solutions, double[] qualities, ResultCollection results, IRandom random) { }
 
-    public IEnumerable<Individual> GetNeighbors(Individual individual, IRandom random) {
-      foreach (var move in ExhaustiveSwap2MoveGenerator.Generate(individual.LinearLinkage(""lle""))) {
-        var neighbor = individual.Copy();
-        var lle = neighbor.LinearLinkage(""lle"");
-        Swap2MoveMaker.Apply(lle, move);
+    public override IEnumerable<LinearLinkage> GetNeighbors(LinearLinkage solution, IRandom random) {
+      foreach (var move in ExhaustiveSwap2MoveGenerator.Generate(solution)) {
+        var neighbor = (LinearLinkage)solution.Clone();
+        Swap2MoveMaker.Apply(neighbor, move);
         yield return neighbor;
       }
@@ -115,5 +112,5 @@
 
       #region Problem Configuration
-      var problem = new SingleObjectiveProgrammableProblem() {
+      var problem = new SingleObjectiveLinearLinkageProgrammableProblem() {
         ProblemScript = { Code = ProblemCode }
       };
