Index: branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification.Classification/HeuristicLab.GP.StructureIdentification.Classification.csproj
===================================================================
--- branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification.Classification/HeuristicLab.GP.StructureIdentification.Classification.csproj	(revision 1246)
+++ branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification.Classification/HeuristicLab.GP.StructureIdentification.Classification.csproj	(revision 1251)
@@ -76,4 +76,5 @@
     <Compile Include="ROCAnalyzer.cs" />
     <Compile Include="StandardGP.cs" />
+    <Compile Include="StructIdProblemInjector.cs" />
   </ItemGroup>
   <ItemGroup>
Index: branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification.Classification/OffspringSelectionGP.cs
===================================================================
--- branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification.Classification/OffspringSelectionGP.cs	(revision 1246)
+++ branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification.Classification/OffspringSelectionGP.cs	(revision 1251)
@@ -33,4 +33,8 @@
 namespace HeuristicLab.GP.StructureIdentification.Classification {
   public class OffspringSelectionGP : HeuristicLab.GP.StructureIdentification.OffspringSelectionGP {
+    protected override IOperator CreateProblemInjector() {
+      return new StructIdProblemInjector();
+    }
+
     protected override IOperator CreateBestSolutionProcessor() {
       IOperator seq = base.CreateBestSolutionProcessor();
@@ -68,4 +72,7 @@
       seq.AddSubOperator(validationAccuracy);
       seq.AddSubOperator(testAccuracy);
+      seq.AddSubOperator(trainingConfusionMatrix);
+      seq.AddSubOperator(validationConfusionMatrix);
+      seq.AddSubOperator(testConfusionMatrix);
       return seq;
     }
Index: branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification.Classification/StandardGP.cs
===================================================================
--- branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification.Classification/StandardGP.cs	(revision 1246)
+++ branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification.Classification/StandardGP.cs	(revision 1251)
@@ -32,5 +32,10 @@
 
 namespace HeuristicLab.GP.StructureIdentification.Classification {
-  public class StandardGP :  HeuristicLab.GP.StructureIdentification.StandardGP {
+  public class StandardGP : HeuristicLab.GP.StructureIdentification.StandardGP {
+
+    protected override IOperator CreateProblemInjector() {
+      return new StructIdProblemInjector();
+    }
+
     protected override IOperator CreateBestSolutionProcessor() {
       IOperator seq = base.CreateBestSolutionProcessor();
Index: branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification.Classification/StructIdProblemInjector.cs
===================================================================
--- branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification.Classification/StructIdProblemInjector.cs	(revision 1251)
+++ branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification.Classification/StructIdProblemInjector.cs	(revision 1251)
@@ -0,0 +1,45 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Collections.Generic;
+using System.Text;
+using System.Xml;
+using Core = HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.GP.StructureIdentification.Classification {
+  public class StructIdProblemInjector : HeuristicLab.GP.StructureIdentification.StructIdProblemInjector {
+
+    public override string Description {
+      get {
+        return "Problem injector for classification structure identification.";
+      }
+    }
+
+    public StructIdProblemInjector()
+      : base() {
+      AddVariableInfo(new Core.VariableInfo("TargetClassValues", "TargetClassValues", typeof(ItemList<DoubleData>), Core.VariableKind.New));
+      GetVariableInfo("TargetClassValues").Local = true;
+      AddVariable(new Core.Variable("TargetClassValues", new ItemList<DoubleData>()));
+    }
+  }
+}
Index: branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification.TimeSeries/HeuristicLab.GP.StructureIdentification.TimeSeries.csproj
===================================================================
--- branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification.TimeSeries/HeuristicLab.GP.StructureIdentification.TimeSeries.csproj	(revision 1246)
+++ branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification.TimeSeries/HeuristicLab.GP.StructureIdentification.TimeSeries.csproj	(revision 1251)
@@ -73,4 +73,5 @@
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="StandardGP.cs" />
+    <Compile Include="StructIdProblemInjector.cs" />
     <Compile Include="TheilInequalityCoefficientEvaluator.cs" />
   </ItemGroup>
@@ -99,4 +100,8 @@
       <Project>{1F1CF3ED-374C-4288-995B-93F6B872F571}</Project>
       <Name>HeuristicLab.GP</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Logging\HeuristicLab.Logging.csproj">
+      <Project>{4095C92C-5A4C-44BC-9963-5F384CF5CC3F}</Project>
+      <Name>HeuristicLab.Logging</Name>
     </ProjectReference>
     <ProjectReference Include="..\HeuristicLab.Operators\HeuristicLab.Operators.csproj">
Index: branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification.TimeSeries/OffspringSelectionGP.cs
===================================================================
--- branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification.TimeSeries/OffspringSelectionGP.cs	(revision 1246)
+++ branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification.TimeSeries/OffspringSelectionGP.cs	(revision 1251)
@@ -30,4 +30,5 @@
 using HeuristicLab.Data;
 using HeuristicLab.Operators;
+using HeuristicLab.Logging;
 
 namespace HeuristicLab.GP.StructureIdentification.TimeSeries {
@@ -35,4 +36,14 @@
     protected override IOperator CreateFunctionLibraryInjector() {
       return new FunctionLibraryInjector();
+    }
+
+    protected override IOperator CreateProblemInjector() {
+      return new StructIdProblemInjector();
+    }
+
+    protected override IOperator CreateGlobalInjector() {
+      VariableInjector injector = (VariableInjector)base.CreateGlobalInjector();
+      injector.AddVariable(new HeuristicLab.Core.Variable("Autoregressive", new BoolData(false)));
+      return injector;
     }
 
@@ -63,7 +74,43 @@
       testTheil.GetVariableInfo("TheilInequalityCoefficientCovariance").ActualName = "TestTheilInequalityCoefficientCovariance";
 
+      SimpleEvaluator trainingEvaluator = new SimpleEvaluator();
+      trainingEvaluator.GetVariableInfo("SamplesStart").ActualName = "TrainingSamplesStart";
+      trainingEvaluator.GetVariableInfo("SamplesEnd").ActualName = "TrainingSamplesEnd";
+      trainingEvaluator.GetVariableInfo("Values").ActualName = "PredictedValuesTraining";
+
+      SimpleEvaluator validationEvaluator = new SimpleEvaluator();
+      validationEvaluator.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
+      validationEvaluator.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
+      validationEvaluator.GetVariableInfo("Values").ActualName = "PredictedValuesValidation";
+      
+      SimpleEvaluator testEvaluator = new SimpleEvaluator();
+      testEvaluator.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
+      testEvaluator.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
+      testEvaluator.GetVariableInfo("Values").ActualName = "PredictedValuesTest";
+
+      LinechartInjector trainingChartInjector = new LinechartInjector();
+      trainingChartInjector.GetVariableValue<IntData>("NumberOfLines", null, false).Data = 2;
+      trainingChartInjector.GetVariableInfo("Values").ActualName = "PredictedValuesTraining";
+      trainingChartInjector.GetVariableInfo("Linechart").ActualName = "LinechartTrainingPredictedValues";
+
+      LinechartInjector validationChartInjector = new LinechartInjector();
+      validationChartInjector.GetVariableValue<IntData>("NumberOfLines", null, false).Data = 2;
+      validationChartInjector.GetVariableInfo("Values").ActualName = "PredictedValuesValidation";
+      validationChartInjector.GetVariableInfo("Linechart").ActualName = "LinechartValidationPredictedValues";
+
+      LinechartInjector testChartInjector = new LinechartInjector();
+      testChartInjector.GetVariableValue<IntData>("NumberOfLines", null, false).Data = 2;
+      testChartInjector.GetVariableInfo("Values").ActualName = "PredictedValuesTest";
+      testChartInjector.GetVariableInfo("Linechart").ActualName = "LinechartTestPredictedValues";
+
       seq.AddSubOperator(trainingTheil);
       seq.AddSubOperator(validationTheil);
       seq.AddSubOperator(testTheil);
+      seq.AddSubOperator(trainingEvaluator);
+      seq.AddSubOperator(trainingChartInjector);
+      seq.AddSubOperator(validationEvaluator);
+      seq.AddSubOperator(validationChartInjector);
+      seq.AddSubOperator(testEvaluator);
+      seq.AddSubOperator(testChartInjector);
 
       return seq;
Index: branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification.TimeSeries/StandardGP.cs
===================================================================
--- branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification.TimeSeries/StandardGP.cs	(revision 1246)
+++ branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification.TimeSeries/StandardGP.cs	(revision 1251)
@@ -29,4 +29,6 @@
 using HeuristicLab.DataAnalysis;
 using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.Logging;
 
 namespace HeuristicLab.GP.StructureIdentification.TimeSeries {
@@ -34,4 +36,14 @@
     protected override IOperator CreateFunctionLibraryInjector() {
       return new FunctionLibraryInjector();
+    }
+
+    protected override IOperator CreateProblemInjector() {
+      return new StructIdProblemInjector();
+    }
+
+    protected override IOperator CreateGlobalInjector() {
+      VariableInjector injector = (VariableInjector)base.CreateGlobalInjector();
+      injector.AddVariable(new HeuristicLab.Core.Variable("Autoregressive", new BoolData(false)));
+      return injector;
     }
 
@@ -62,7 +74,43 @@
       testTheil.GetVariableInfo("TheilInequalityCoefficientCovariance").ActualName = "TestTheilInequalityCoefficientCovariance";
 
+      SimpleEvaluator trainingEvaluator = new SimpleEvaluator();
+      trainingEvaluator.GetVariableInfo("SamplesStart").ActualName = "TrainingSamplesStart";
+      trainingEvaluator.GetVariableInfo("SamplesEnd").ActualName = "TrainingSamplesEnd";
+      trainingEvaluator.GetVariableInfo("Values").ActualName = "PredictedValuesTraining";
+
+      SimpleEvaluator validationEvaluator = new SimpleEvaluator();
+      validationEvaluator.GetVariableInfo("SamplesStart").ActualName = "ValidationSamplesStart";
+      validationEvaluator.GetVariableInfo("SamplesEnd").ActualName = "ValidationSamplesEnd";
+      validationEvaluator.GetVariableInfo("Values").ActualName = "PredictedValuesValidation";
+
+      SimpleEvaluator testEvaluator = new SimpleEvaluator();
+      testEvaluator.GetVariableInfo("SamplesStart").ActualName = "TestSamplesStart";
+      testEvaluator.GetVariableInfo("SamplesEnd").ActualName = "TestSamplesEnd";
+      testEvaluator.GetVariableInfo("Values").ActualName = "PredictedValuesTest";
+
+      LinechartInjector trainingChartInjector = new LinechartInjector();
+      trainingChartInjector.GetVariableValue<IntData>("NumberOfLines", null, false).Data = 2;
+      trainingChartInjector.GetVariableInfo("Values").ActualName = "PredictedValuesTraining";
+      trainingChartInjector.GetVariableInfo("LineChart").ActualName = "LineChartTrainingPredictedValues";
+
+      LinechartInjector validationChartInjector = new LinechartInjector();
+      validationChartInjector.GetVariableValue<IntData>("NumberOfLines", null, false).Data = 2;
+      validationChartInjector.GetVariableInfo("Values").ActualName = "PredictedValuesValidation";
+      validationChartInjector.GetVariableInfo("LineChart").ActualName = "LineChartValidationPredictedValues";
+
+      LinechartInjector testChartInjector = new LinechartInjector();
+      testChartInjector.GetVariableValue<IntData>("NumberOfLines", null, false).Data = 2;
+      testChartInjector.GetVariableInfo("Values").ActualName = "PredictedValuesTest";
+      testChartInjector.GetVariableInfo("LineChart").ActualName = "LineChartTestPredictedValues";
+
       seq.AddSubOperator(trainingTheil);
       seq.AddSubOperator(validationTheil);
       seq.AddSubOperator(testTheil);
+      seq.AddSubOperator(trainingEvaluator);
+      seq.AddSubOperator(trainingChartInjector);
+      seq.AddSubOperator(validationEvaluator);
+      seq.AddSubOperator(validationChartInjector);
+      seq.AddSubOperator(testEvaluator);
+      seq.AddSubOperator(testChartInjector);
 
       return seq;
Index: branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification.TimeSeries/StructIdProblemInjector.cs
===================================================================
--- branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification.TimeSeries/StructIdProblemInjector.cs	(revision 1251)
+++ branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification.TimeSeries/StructIdProblemInjector.cs	(revision 1251)
@@ -0,0 +1,51 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 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.Collections.Generic;
+using System.Text;
+using System.Xml;
+using Core = HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.GP.StructureIdentification.TimeSeries {
+  public class StructIdProblemInjector : HeuristicLab.GP.StructureIdentification.StructIdProblemInjector {
+
+    public override string Description {
+      get {
+        return "Problem injector for time series structure identification.";
+      }
+    }
+
+    public StructIdProblemInjector()
+      : base() {
+      AddVariableInfo(new Core.VariableInfo("MaxTimeOffset", "MaxTimeOffset", typeof(IntData), Core.VariableKind.New));
+      GetVariableInfo("MaxTimeOffset").Local = true;
+      AddVariable(new Core.Variable("MaxTimeOffset", new IntData(0)));
+
+      AddVariableInfo(new Core.VariableInfo("MinTimeOffset", "MinTimeOffset", typeof(IntData), Core.VariableKind.New));
+      GetVariableInfo("MinTimeOffset").Local = true;
+      AddVariable(new Core.Variable("MinTimeOffset", new IntData(-1)));
+    }
+  }
+}
Index: branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification/AlgorithmBase.cs
===================================================================
--- branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification/AlgorithmBase.cs	(revision 1246)
+++ branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification/AlgorithmBase.cs	(revision 1251)
@@ -116,5 +116,5 @@
       algo.Name = "GP";
       SequentialProcessor seq = new SequentialProcessor();
-      EmptyOperator problemInjectorPlaceholder = new EmptyOperator();
+      IOperator problemInjector = CreateProblemInjector();
 
       RandomInjector randomInjector = new RandomInjector();
@@ -143,5 +143,5 @@
       LeftReducer cleanUp = new LeftReducer();
 
-      seq.AddSubOperator(problemInjectorPlaceholder);
+      seq.AddSubOperator(problemInjector);
       seq.AddSubOperator(randomInjector);
       seq.AddSubOperator(globalInjector);
@@ -162,4 +162,8 @@
       this.algorithm = seq;
       return algo;
+    }
+
+    protected internal virtual IOperator CreateProblemInjector() {
+      return new EmptyOperator();
     }
 
Index: branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification/StandardGP.cs
===================================================================
--- branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification/StandardGP.cs	(revision 1246)
+++ branches/CEDMA-Refactoring-Ticket419/HeuristicLab.GP.StructureIdentification/StandardGP.cs	(revision 1251)
@@ -87,4 +87,8 @@
       Engine.OperatorGraph.AddOperator(algo);
       Engine.OperatorGraph.InitialOperator = algo;
+    }
+
+    protected internal override IOperator CreateProblemInjector() {
+      return new StructIdProblemInjector();
     }
 
