Index: /trunk/sources/HeuristicLab.CEDMA.Server/3.3/ProblemView.cs
===================================================================
--- /trunk/sources/HeuristicLab.CEDMA.Server/3.3/ProblemView.cs	(revision 2284)
+++ /trunk/sources/HeuristicLab.CEDMA.Server/3.3/ProblemView.cs	(revision 2285)
@@ -87,7 +87,4 @@
           dataset.Rows = parser.Rows;
           dataset.Columns = parser.Columns;
-          for (int i = 0; i < parser.VariableNames.Length; i++) {
-            dataset.SetVariableName(i, parser.VariableNames[i]);
-          }
           dataset.Name = parser.ProblemName;
           dataset.Samples = new double[dataset.Rows * dataset.Columns];
@@ -102,4 +99,8 @@
           problem.TestSamplesStart = parser.TestSamplesStart;
           problem.TestSamplesEnd = parser.TestSamplesEnd;
+          for (int i = 0; i < parser.VariableNames.Length; i++) {
+            dataset.SetVariableName(i, parser.VariableNames[i]);
+          }
+
           problem.FireChanged();
           Refresh();
Index: /trunk/sources/HeuristicLab.DataAnalysis/3.2/Dataset.cs
===================================================================
--- /trunk/sources/HeuristicLab.DataAnalysis/3.2/Dataset.cs	(revision 2284)
+++ /trunk/sources/HeuristicLab.DataAnalysis/3.2/Dataset.cs	(revision 2285)
@@ -27,4 +27,5 @@
 using System.Globalization;
 using System.Text;
+using System.Linq;
 
 namespace HeuristicLab.DataAnalysis {
@@ -78,7 +79,8 @@
       get { return scalingOffset; }
       set {
-        if (value.Length != scalingOffset.Length) 
+        if (value.Length != scalingOffset.Length)
           throw new ArgumentException("Length of scaling offset array doesn't match number of variables");
-        scalingOffset = value; }
+        scalingOffset = value;
+      }
     }
 
@@ -98,4 +100,5 @@
       get { return samples; }
       set {
+        variableNames = Enumerable.Range(1, columns).Select(x => "Var" + x.ToString("###")).ToArray();
         scalingFactor = new double[columns];
         scalingOffset = new double[columns];
@@ -115,17 +118,23 @@
     }
 
-    public Dataset() {
+    public Dataset()
+      : this(new double[,] { { 0.0 } }) {
+    }
+
+    public Dataset(double[,] samples) {
       Name = "-";
-      variableNames = new string[] { "Var0" };
-      Columns = 1;
-      Rows = 1;
-      Samples = new double[1];
-      scalingOffset = new double[] { 0.0 };
-      scalingFactor = new double[] { 1.0 };
-      cachedValuesInvalidated = true;
+      Rows = samples.GetLength(0);
+      Columns = samples.GetLength(1);
+      double[] values = new double[Rows * Columns];
+      int i = 0;
+      for (int row = 0; row < Rows; row++) {
+        for (int column = 0; column < columns; column++) {
+          values[i++] = samples[row, column];
+        }
+      }
+      Samples = values;
       fireChangeEvents = true;
     }
 
-    
 
     public string GetVariableName(int variableIndex) {
Index: /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/MulticlassOneVsOneAnalyzer.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/MulticlassOneVsOneAnalyzer.cs	(revision 2284)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification.Classification/3.3/MulticlassOneVsOneAnalyzer.cs	(revision 2285)
@@ -84,5 +84,5 @@
 
         ITreeEvaluator evaluator = GetVariableValue<ITreeEvaluator>(TREEEVALUATOR, bestScope, true);
-        evaluator.PrepareForEvaluation(dataset, targetVariable, trainingSamplesStart, trainingSamplesEnd, 1.0, gpModel.FunctionTree);
+        evaluator.PrepareForEvaluation(dataset, targetVariable, trainingSamplesStart, trainingSamplesEnd, gpModel.FunctionTree);
         for(int i = 0; i < (samplesEnd - samplesStart); i++) {
           double est = evaluator.Evaluate(i + samplesStart);
Index: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/BaseClasses/AlgorithmBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/BaseClasses/AlgorithmBase.cs	(revision 2284)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/BaseClasses/AlgorithmBase.cs	(revision 2285)
@@ -70,6 +70,6 @@
     }
 
-    private IModel model;
-    public virtual IModel Model {
+    private IAnalyzerModel model;
+    public virtual IAnalyzerModel Model {
       get {
         if (!engine.Terminated) throw new InvalidOperationException("The algorithm is still running. Wait until the algorithm is terminated to retrieve the result.");
@@ -100,9 +100,4 @@
       get { return GetVariableInjector().GetVariable("Parents").GetValue<IntData>().Data; }
       set { GetVariableInjector().GetVariable("Parents").GetValue<IntData>().Data = value; }
-    }
-
-    public virtual double PunishmentFactor {
-      get { return GetVariableInjector().GetVariable("PunishmentFactor").GetValue<DoubleData>().Data; }
-      set { GetVariableInjector().GetVariable("PunishmentFactor").GetValue<DoubleData>().Data = value; }
     }
 
@@ -132,5 +127,4 @@
       MaxTreeHeight = 10;
       Parents = 2000;
-      PunishmentFactor = 10;
       UseEstimatedTargetValue = false;
     }
@@ -212,5 +206,4 @@
       injector.AddVariable(new HeuristicLab.Core.Variable("TotalEvaluatedNodes", new DoubleData(0)));
       injector.AddVariable(new HeuristicLab.Core.Variable("Parents", new IntData()));
-      injector.AddVariable(new HeuristicLab.Core.Variable("PunishmentFactor", new DoubleData()));
       injector.AddVariable(new HeuristicLab.Core.Variable("UseEstimatedTargetValue", new BoolData()));
       injector.AddVariable(new HeuristicLab.Core.Variable("TreeEvaluator", new HL2TreeEvaluator()));
@@ -416,9 +409,11 @@
     }
 
-    protected internal virtual Model CreateGPModel(IScope bestModelScope) {
+    protected internal virtual IAnalyzerModel CreateGPModel(IScope bestModelScope) {
       Engine.GlobalScope.AddSubScope(bestModelScope);
-      Model model = new Model();
+      IGeneticProgrammingModel tree = bestModelScope.GetVariableValue<IGeneticProgrammingModel>("FunctionTree", false);
+      ITreeEvaluator evaluator = bestModelScope.GetVariableValue<ITreeEvaluator>("TreeEvaluator", false);
+      IAnalyzerModel model = new AnalyzerModel();
+      model.Predictor = new Predictor(evaluator, tree);
       Dataset ds = bestModelScope.GetVariableValue<Dataset>("Dataset", true);
-      model.Data = bestModelScope.GetVariableValue<IGeneticProgrammingModel>("FunctionTree", false);
       model.Dataset = ds;
       model.TargetVariable = ds.GetVariableName(bestModelScope.GetVariableValue<IntData>("TargetVariable", true).Data);
@@ -450,5 +445,5 @@
         double impact = ((DoubleData)row[1]).Data;
         model.SetVariableEvaluationImpact(variableName, impact);
-        model.AddInputVariables(variableName);
+        model.AddInputVariable(variableName);
       }
       foreach (ItemList row in qualityImpacts) {
@@ -456,5 +451,5 @@
         double impact = ((DoubleData)row[1]).Data;
         model.SetVariableQualityImpact(variableName, impact);
-        model.AddInputVariables(variableName);
+        model.AddInputVariable(variableName);
       }
       Engine.GlobalScope.RemoveSubScope(bestModelScope);
Index: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/BaseClasses/TreeEvaluatorBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/BaseClasses/TreeEvaluatorBase.cs	(revision 2284)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/BaseClasses/TreeEvaluatorBase.cs	(revision 2285)
@@ -25,4 +25,5 @@
 using HeuristicLab.DataAnalysis;
 using HeuristicLab.GP.Interfaces;
+using System.Xml;
 
 namespace HeuristicLab.GP.StructureIdentification {
@@ -32,6 +33,7 @@
   public abstract class TreeEvaluatorBase : ItemBase, ITreeEvaluator {
     protected const double EPSILON = 1.0e-7;
-    protected double maxValue;
-    protected double minValue;
+    protected double maxValue = double.MaxValue;
+    protected double minValue = double.MinValue;
+    private double punishmentFactor = 10.0; // we should provide a view for treeevaluators that allows to change this value
 
     protected class Instr {
@@ -48,6 +50,14 @@
     protected int sampleIndex;
 
-    public void PrepareForEvaluation(Dataset dataset, int targetVariable, int start, int end, double punishmentFactor, IFunctionTree functionTree) {
+    public void PrepareForEvaluation(Dataset dataset, IFunctionTree functionTree) {
       this.dataset = dataset;
+      codeArr = new Instr[functionTree.GetSize()];
+      int i = 0;
+      foreach (IFunctionTree tree in IteratePrefix(functionTree)) {
+        codeArr[i++] = TranslateToInstr(tree);
+      }
+    }
+
+    public void PrepareForEvaluation(Dataset dataset, int targetVariable, int start, int end, IFunctionTree functionTree) {
       // calculate upper and lower bounds for the estimated value (mean +/- punishmentFactor * range)
       double mean = dataset.GetMean(targetVariable, start, end);
@@ -55,10 +65,5 @@
       maxValue = mean + punishmentFactor * range;
       minValue = mean - punishmentFactor * range;
-
-      codeArr = new Instr[functionTree.GetSize()];
-      int i = 0;
-      foreach (IFunctionTree tree in IteratePrefix(functionTree)) {
-        codeArr[i++] = TranslateToInstr(tree);
-      }
+      PrepareForEvaluation(dataset, functionTree);
     }
 
@@ -118,4 +123,34 @@
 
     protected abstract double EvaluateBakedCode();
+
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      TreeEvaluatorBase clone = (TreeEvaluatorBase)base.Clone(clonedObjects);
+      clone.maxValue = maxValue;
+      clone.minValue = minValue;
+      clone.punishmentFactor = punishmentFactor;
+      return clone;
+    }
+
+    public override System.Xml.XmlNode GetXmlNode(string name, System.Xml.XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      XmlAttribute maxValueAttribute = document.CreateAttribute("MaxPredictionValue");
+      XmlAttribute minValueAttribute = document.CreateAttribute("MinPredictionValue");
+      XmlAttribute punishmentFactorAttribute = document.CreateAttribute("PunishmentFactor");
+      maxValueAttribute.Value = XmlConvert.ToString(maxValue);
+      minValueAttribute.Value = XmlConvert.ToString(minValue);
+      punishmentFactorAttribute.Value = XmlConvert.ToString(punishmentFactor);
+
+      node.Attributes.Append(punishmentFactorAttribute);
+      node.Attributes.Append(minValueAttribute);
+      node.Attributes.Append(maxValueAttribute);
+      return node;
+    }
+
+    public override void Populate(System.Xml.XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      minValue = XmlConvert.ToDouble(node.Attributes["MinPredictionValue"].Value);
+      maxValue = XmlConvert.ToDouble(node.Attributes["MaxPredictionValue"].Value);
+      punishmentFactor = XmlConvert.ToDouble(node.Attributes["PunishmentFactor"].Value);
+    }
   }
 }
Index: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Evaluators/GPEvaluatorBase.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Evaluators/GPEvaluatorBase.cs	(revision 2284)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Evaluators/GPEvaluatorBase.cs	(revision 2285)
@@ -33,5 +33,4 @@
       AddVariableInfo(new VariableInfo("Dataset", "Dataset with all samples on which to apply the function", typeof(Dataset), VariableKind.In));
       AddVariableInfo(new VariableInfo("TargetVariable", "Index of the column of the dataset that holds the target variable", typeof(IntData), VariableKind.In));
-      AddVariableInfo(new VariableInfo("PunishmentFactor", "Punishment factor for invalid estimations", typeof(DoubleData), VariableKind.In));
       AddVariableInfo(new VariableInfo("TotalEvaluatedNodes", "Number of evaluated nodes", typeof(DoubleData), VariableKind.In | VariableKind.Out));
       AddVariableInfo(new VariableInfo("TrainingSamplesStart", "Start index of training samples in dataset", typeof(IntData), VariableKind.In));
@@ -47,5 +46,4 @@
       Dataset dataset = GetVariableValue<Dataset>("Dataset", scope, true);
       IGeneticProgrammingModel gpModel = GetVariableValue<IGeneticProgrammingModel>("FunctionTree", scope, true);
-      double punishmentFactor = GetVariableValue<DoubleData>("PunishmentFactor", scope, true).Data;
       double totalEvaluatedNodes = scope.GetVariableValue<DoubleData>("TotalEvaluatedNodes", true).Data;
       int trainingStart = GetVariableValue<IntData>("TrainingSamplesStart", scope, true).Data;
@@ -55,5 +53,5 @@
       bool useEstimatedValues = GetVariableValue<BoolData>("UseEstimatedTargetValue", scope, true).Data;
       ITreeEvaluator evaluator = GetVariableValue<ITreeEvaluator>("TreeEvaluator", scope, true);
-      evaluator.PrepareForEvaluation(dataset, targetVariable, trainingStart, trainingEnd, punishmentFactor, gpModel.FunctionTree);
+      evaluator.PrepareForEvaluation(dataset, targetVariable, trainingStart, trainingEnd, gpModel.FunctionTree);
 
       double[] backupValues = null;
Index: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Evaluators/VariableEvaluationImpactCalculator.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Evaluators/VariableEvaluationImpactCalculator.cs	(revision 2284)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Evaluators/VariableEvaluationImpactCalculator.cs	(revision 2285)
@@ -33,5 +33,4 @@
       AddVariableInfo(new VariableInfo("FunctionTree", "The function tree that should be evaluated", typeof(IGeneticProgrammingModel), VariableKind.In));
       AddVariableInfo(new VariableInfo("TreeSize", "Size (number of nodes) of the tree to evaluate", typeof(IntData), VariableKind.In));
-      AddVariableInfo(new VariableInfo("PunishmentFactor", "Punishment factor for invalid estimations", typeof(DoubleData), VariableKind.In));
     }
 
@@ -41,5 +40,5 @@
       IGeneticProgrammingModel gpModel = GetVariableValue<IGeneticProgrammingModel>("FunctionTree", scope, true);
       double punishmentFactor = GetVariableValue<DoubleData>("PunishmentFactor", scope, true).Data;
-      evaluator.PrepareForEvaluation(dataset, targetVariable, start, end, punishmentFactor, gpModel.FunctionTree);
+      evaluator.PrepareForEvaluation(dataset, targetVariable, start, end, gpModel.FunctionTree);
 
       double[] result = new double[end - start];
Index: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Evaluators/VariableQualityImpactCalculator.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Evaluators/VariableQualityImpactCalculator.cs	(revision 2284)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Evaluators/VariableQualityImpactCalculator.cs	(revision 2285)
@@ -33,5 +33,4 @@
       AddVariableInfo(new VariableInfo("TreeEvaluator", "The evaluator that should be used to evaluate the expression tree", typeof(ITreeEvaluator), VariableKind.In));
       AddVariableInfo(new VariableInfo("FunctionTree", "The function tree that should be evaluated", typeof(IGeneticProgrammingModel), VariableKind.In));
-      AddVariableInfo(new VariableInfo("PunishmentFactor", "Punishment factor for invalid estimations", typeof(DoubleData), VariableKind.In));
     }
 
@@ -40,5 +39,5 @@
       IGeneticProgrammingModel gpModel = GetVariableValue<IGeneticProgrammingModel>("FunctionTree", scope, true);
       double punishmentFactor = GetVariableValue<DoubleData>("PunishmentFactor", scope, true).Data;
-      evaluator.PrepareForEvaluation(dataset, targetVariable, start, end, punishmentFactor, gpModel.FunctionTree);
+      evaluator.PrepareForEvaluation(dataset, targetVariable, start, end, gpModel.FunctionTree);
 
       double[,] result = new double[end - start, 2];
Index: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/HeuristicLab.GP.StructureIdentification-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/HeuristicLab.GP.StructureIdentification-3.3.csproj	(revision 2284)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/HeuristicLab.GP.StructureIdentification-3.3.csproj	(revision 2285)
@@ -85,4 +85,5 @@
     <Compile Include="BaseClasses\FunctionTreeBase.cs" />
     <Compile Include="BaseClasses\TreeEvaluatorBase.cs" />
+    <Compile Include="Predictor.cs" />
     <Compile Include="Evaluators\SimpleGPEvaluatorBase.cs" />
     <Compile Include="HL3TreeEvaluator.cs" />
Index: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/ITreeEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/ITreeEvaluator.cs	(revision 2284)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/ITreeEvaluator.cs	(revision 2285)
@@ -26,5 +26,6 @@
 namespace HeuristicLab.GP.StructureIdentification {
   public interface ITreeEvaluator : IItem {
-    void PrepareForEvaluation(Dataset dataset, int targetVariable, int start, int end, double punishmentFactor, IFunctionTree functionTree);
+    void PrepareForEvaluation(Dataset dataset, int targetVariable, int start, int end, IFunctionTree functionTree);
+    void PrepareForEvaluation(Dataset dataset, IFunctionTree functionTree);
     double Evaluate(int sampleIndex);
   }
Index: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Predictor.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Predictor.cs	(revision 2285)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Predictor.cs	(revision 2285)
@@ -0,0 +1,79 @@
+#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.Collections.Generic;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.GP.Interfaces;
+using HeuristicLab.GP;
+using HeuristicLab.Modeling;
+using System;
+using System.Xml;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public class Predictor : ItemBase, IPredictor {
+    private ITreeEvaluator treeEvaluator;
+    private IGeneticProgrammingModel functionTree;
+
+    public Predictor() : base() { } // for persistence
+    public Predictor(ITreeEvaluator evaluator, IGeneticProgrammingModel tree)
+      : base() {
+      this.treeEvaluator = evaluator;
+      this.functionTree = tree;
+    }
+
+    public double[] Predict(Dataset input, int start, int end) {
+      if (start < 0 || end <= start) throw new ArgumentException("start must be larger than zero and strictly smaller than end");
+      if (end > input.Rows) throw new ArgumentOutOfRangeException("number of rows in input is smaller then end");
+      treeEvaluator.PrepareForEvaluation(input, functionTree.FunctionTree);
+      double[] result = new double[end - start];
+      for (int i = 0; i < result.Length; i++) {
+        result[i] = treeEvaluator.Evaluate(i + start);
+      }
+      return result;
+    }
+
+    public override IView CreateView() {
+      return functionTree.CreateView();
+    }
+
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      Predictor clone = (Predictor)base.Clone(clonedObjects);
+      clone.treeEvaluator = (ITreeEvaluator)Auxiliary.Clone(treeEvaluator, clonedObjects);
+      clone.functionTree = (IGeneticProgrammingModel)Auxiliary.Clone(functionTree, clonedObjects);
+      return clone;
+    }
+
+    public override System.Xml.XmlNode GetXmlNode(string name, System.Xml.XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      node.AppendChild(PersistenceManager.Persist("Evaluator", treeEvaluator, document, persistedObjects));
+      node.AppendChild(PersistenceManager.Persist("FunctionTree", functionTree, document, persistedObjects));
+      return node;
+    }
+
+    public override void Populate(System.Xml.XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      treeEvaluator = (ITreeEvaluator)PersistenceManager.Restore(node.SelectSingleNode("Evaluator"), restoredObjects);
+      functionTree = (IGeneticProgrammingModel)PersistenceManager.Restore(node.SelectSingleNode("FunctionTree"), restoredObjects);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/StandardGP.cs
===================================================================
--- /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/StandardGP.cs	(revision 2284)
+++ /trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/StandardGP.cs	(revision 2285)
@@ -110,5 +110,4 @@
       FullTreeShakingFactor = 0.1;
       OnePointShakingFactor = 1.0;
-      PunishmentFactor = 10.0;
       UseEstimatedTargetValue = false;
       SetSeedRandomly = true;
@@ -337,6 +336,6 @@
     }
 
-    protected internal override Model CreateGPModel(IScope bestModelScope) {
-      Model model = base.CreateGPModel(bestModelScope);
+    protected internal override IAnalyzerModel CreateGPModel(IScope bestModelScope) {
+      IAnalyzerModel model = base.CreateGPModel(bestModelScope);
       model.TestMeanSquaredError = bestModelScope.GetVariableValue<DoubleData>("TestQuality", false).Data;
       model.TrainingCoefficientOfDetermination = bestModelScope.GetVariableValue<DoubleData>("TrainingR2", false).Data;
Index: /trunk/sources/HeuristicLab.LinearRegression/3.2/LinearRegression.cs
===================================================================
--- /trunk/sources/HeuristicLab.LinearRegression/3.2/LinearRegression.cs	(revision 2284)
+++ /trunk/sources/HeuristicLab.LinearRegression/3.2/LinearRegression.cs	(revision 2285)
@@ -69,5 +69,5 @@
     }
 
-    public IModel Model {
+    public IAnalyzerModel Model {
       get {
         if (!engine.Terminated) throw new InvalidOperationException("The algorithm is still running. Wait until the algorithm is terminated to retrieve the result.");
@@ -268,6 +268,9 @@
 
 
-    protected internal virtual Model CreateLRModel(IScope bestModelScope) {
-      Model model = new Model();
+    protected internal virtual IAnalyzerModel CreateLRModel(IScope bestModelScope) {
+      IGeneticProgrammingModel tree = bestModelScope.GetVariableValue<IGeneticProgrammingModel>("LinearRegressionModel", false);
+      ITreeEvaluator evaluator = bestModelScope.GetVariableValue<ITreeEvaluator>("TreeEvaluator", false);
+      IAnalyzerModel model = new AnalyzerModel();
+      model.Predictor = new Predictor(evaluator, tree);
       model.TrainingMeanSquaredError = bestModelScope.GetVariableValue<DoubleData>("TrainingQuality", false).Data;
       model.ValidationMeanSquaredError = bestModelScope.GetVariableValue<DoubleData>("ValidationQuality", false).Data;
@@ -286,5 +289,4 @@
       model.TestVarianceAccountedFor = bestModelScope.GetVariableValue<DoubleData>("TestVAF", false).Data;
 
-      model.Data = bestModelScope.GetVariableValue<IGeneticProgrammingModel>("LinearRegressionModel", false);
       HeuristicLab.DataAnalysis.Dataset ds = bestModelScope.GetVariableValue<Dataset>("Dataset", true);
       model.Dataset = ds;
@@ -303,5 +305,5 @@
         double impact = ((DoubleData)row[1]).Data;
         model.SetVariableEvaluationImpact(variableName, impact);
-        model.AddInputVariables(variableName);
+        model.AddInputVariable(variableName);
       }
       foreach (ItemList row in qualityImpacts) {
@@ -309,5 +311,5 @@
         double impact = ((DoubleData)row[1]).Data;
         model.SetVariableQualityImpact(variableName, impact);
-        model.AddInputVariables(variableName);
+        model.AddInputVariable(variableName);
       }
 
Index: /trunk/sources/HeuristicLab.Modeling.Database.SQLServerCompact/3.2/DatabaseService.cs
===================================================================
--- /trunk/sources/HeuristicLab.Modeling.Database.SQLServerCompact/3.2/DatabaseService.cs	(revision 2284)
+++ /trunk/sources/HeuristicLab.Modeling.Database.SQLServerCompact/3.2/DatabaseService.cs	(revision 2285)
@@ -72,5 +72,5 @@
     }
 
-    public void Persist(HeuristicLab.Modeling.IModel model, string algorithmName, string algorithmDescription) {
+    public void Persist(HeuristicLab.Modeling.IAnalyzerModel model, string algorithmName, string algorithmDescription) {
       Dictionary<string, Variable> variables = GetAllVariables();
       Algorithm algo = GetOrCreateAlgorithm(algorithmName, algorithmDescription);
@@ -93,5 +93,5 @@
 
       using (ModelingDataContext ctx = new ModelingDataContext(connection)) {
-        ctx.ModelData.InsertOnSubmit(new ModelData(m, PersistenceManager.SaveToGZip(model.Data)));
+        ctx.ModelData.InsertOnSubmit(new ModelData(m, PersistenceManager.SaveToGZip(model.Predictor)));
         ctx.SubmitChanges();
       }
Index: /trunk/sources/HeuristicLab.Modeling.Database/3.2/HeuristicLab.Modeling.Database-3.2.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Modeling.Database/3.2/HeuristicLab.Modeling.Database-3.2.csproj	(revision 2284)
+++ /trunk/sources/HeuristicLab.Modeling.Database/3.2/HeuristicLab.Modeling.Database-3.2.csproj	(revision 2285)
@@ -97,4 +97,8 @@
   </ItemGroup>
   <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Core\3.2\HeuristicLab.Core-3.2.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core-3.2</Name>
+    </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Modeling\3.2\HeuristicLab.Modeling-3.2.csproj">
       <Project>{80F7FADA-549D-4151-8856-79B620A50DBA}</Project>
Index: /trunk/sources/HeuristicLab.Modeling.Database/3.2/HeuristicLabModelingDatabasePlugin.cs
===================================================================
--- /trunk/sources/HeuristicLab.Modeling.Database/3.2/HeuristicLabModelingDatabasePlugin.cs	(revision 2284)
+++ /trunk/sources/HeuristicLab.Modeling.Database/3.2/HeuristicLabModelingDatabasePlugin.cs	(revision 2285)
@@ -28,4 +28,5 @@
   [ClassInfo(Name = "HeuristicLab.Modeling.Database-3.2")]
   [PluginFile(Filename = "HeuristicLab.Modeling.Database-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
   [Dependency(Dependency = "HeuristicLab.Modeling-3.2")]
   public class HeuristicLabModelingDatabasePlugin : PluginBase {
Index: /trunk/sources/HeuristicLab.Modeling.Database/3.2/IModelingDatabase.cs
===================================================================
--- /trunk/sources/HeuristicLab.Modeling.Database/3.2/IModelingDatabase.cs	(revision 2284)
+++ /trunk/sources/HeuristicLab.Modeling.Database/3.2/IModelingDatabase.cs	(revision 2285)
@@ -27,5 +27,5 @@
 namespace HeuristicLab.Modeling.Database {
   public interface IModelingDatabase {
-    void Persist(HeuristicLab.Modeling.IModel model, string algorithmName, string algorithmDescription);
+    void Persist(HeuristicLab.Modeling.IAnalyzerModel model, string algorithmName, string algorithmDescription);
     void Persist(HeuristicLab.Modeling.IAlgorithm algorithm);
     IEnumerable<IModel> GetAllModels();
Index: /trunk/sources/HeuristicLab.Modeling/3.2/AnalyzerModel.cs
===================================================================
--- /trunk/sources/HeuristicLab.Modeling/3.2/AnalyzerModel.cs	(revision 2285)
+++ /trunk/sources/HeuristicLab.Modeling/3.2/AnalyzerModel.cs	(revision 2285)
@@ -0,0 +1,173 @@
+#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 HeuristicLab.Core;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.Modeling {
+  public class AnalyzerModel : IAnalyzerModel {
+    public AnalyzerModel() { } // for persistence
+
+    #region IModel Members
+
+    private Dataset dataset;
+    public Dataset Dataset {
+      get { return dataset; }
+      set { dataset = value; }
+    }
+
+    private string targetVariable;
+    public string TargetVariable {
+      get { return targetVariable; }
+      set { targetVariable = value; }
+    }
+
+    private List<string> inputVariables = new List<string>();
+    public IEnumerable<string> InputVariables {
+      get { return inputVariables; }
+    }
+
+    public int TrainingSamplesStart { get; set; }
+    public int TrainingSamplesEnd { get; set; }
+    public int ValidationSamplesStart { get; set; }
+    public int ValidationSamplesEnd { get; set; }
+    public int TestSamplesStart { get; set; }
+    public int TestSamplesEnd { get; set; }
+
+    public void AddInputVariable(string variableName) {
+      if (!inputVariables.Contains(variableName))
+        inputVariables.Add(variableName);
+    }
+
+    private double trainingMSE;
+    public double TrainingMeanSquaredError {
+      get { return trainingMSE; }
+      set { trainingMSE = value; }
+    }
+
+    private double validationMSE;
+    public double ValidationMeanSquaredError {
+      get { return validationMSE; }
+      set { validationMSE = value; }
+    }
+
+    private double testMSE;
+    public double TestMeanSquaredError {
+      get { return testMSE; }
+      set { testMSE = value; }
+    }
+
+    public double TrainingMeanAbsolutePercentageError {
+      get;
+      set;
+    }
+
+    public double ValidationMeanAbsolutePercentageError {
+      get;
+      set;
+    }
+
+    public double TestMeanAbsolutePercentageError {
+      get;
+      set;
+    }
+
+    public double TrainingMeanAbsolutePercentageOfRangeError {
+      get;
+      set;
+    }
+
+    public double ValidationMeanAbsolutePercentageOfRangeError {
+      get;
+      set;
+    }
+
+    public double TestMeanAbsolutePercentageOfRangeError {
+      get;
+      set;
+    }
+
+    public double TrainingCoefficientOfDetermination {
+      get;
+      set;
+    }
+
+    public double ValidationCoefficientOfDetermination {
+      get;
+      set;
+    }
+
+    public double TestCoefficientOfDetermination {
+      get;
+      set;
+    }
+
+    public double TrainingVarianceAccountedFor {
+      get;
+      set;
+    }
+
+    public double ValidationVarianceAccountedFor {
+      get;
+      set;
+    }
+
+    public double TestVarianceAccountedFor {
+      get;
+      set;
+    }
+
+    public double GetVariableQualityImpact(string variableName) {
+      if (variableQualityImpacts.ContainsKey(variableName)) return variableQualityImpacts[variableName];
+      else throw new ArgumentException("Impact of variable " + variableName + " is not available.");
+    }
+
+    public double GetVariableEvaluationImpact(string variableName) {
+      if (variableEvaluationImpacts.ContainsKey(variableName)) return variableEvaluationImpacts[variableName];
+      else throw new ArgumentException("Impact of variable " + variableName + " is not available.");
+    }
+
+    public IPredictor Predictor { get; set; }
+
+    #endregion
+
+    private Dictionary<string, double> variableQualityImpacts = new Dictionary<string, double>();
+    public void SetVariableQualityImpact(string variableName, double impact) {
+      variableQualityImpacts[variableName] = impact;
+    }
+
+    public void SetVariableQualityImpact(int variableIndex, double impact) {
+      variableQualityImpacts[dataset.GetVariableName(variableIndex)] = impact;
+    }
+
+    private Dictionary<string, double> variableEvaluationImpacts = new Dictionary<string, double>();
+    public void SetVariableEvaluationImpact(string variableName, double impact) {
+      variableEvaluationImpacts[variableName] = impact;
+    }
+
+    public void SetVariableEvaluationImpact(int variableIndex, double impact) {
+      variableEvaluationImpacts[dataset.GetVariableName(variableIndex)] = impact;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Modeling/3.2/HeuristicLab.Modeling-3.2.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Modeling/3.2/HeuristicLab.Modeling-3.2.csproj	(revision 2284)
+++ /trunk/sources/HeuristicLab.Modeling/3.2/HeuristicLab.Modeling-3.2.csproj	(revision 2285)
@@ -82,10 +82,11 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="AnalyzerModel.cs" />
     <Compile Include="ClassificationProblemInjector.cs" />
     <Compile Include="DoubleExtensions.cs" />
+    <Compile Include="IAnalyzerModel.cs" />
     <Compile Include="VariableImpactCalculatorBase.cs" />
     <Compile Include="VariableEvaluationImpactCalculator.cs" />
-    <Compile Include="Model.cs" />
-    <Compile Include="IModel.cs" />
+    <Compile Include="IPredictor.cs" />
     <Compile Include="SimpleEvaluatorBase.cs" />
     <Compile Include="ITimeSeriesAlgorithm.cs" />
Index: /trunk/sources/HeuristicLab.Modeling/3.2/IAlgorithm.cs
===================================================================
--- /trunk/sources/HeuristicLab.Modeling/3.2/IAlgorithm.cs	(revision 2284)
+++ /trunk/sources/HeuristicLab.Modeling/3.2/IAlgorithm.cs	(revision 2285)
@@ -34,5 +34,5 @@
     int TargetVariable { get; set; }
     IEngine Engine { get; }
-    IModel Model { get; }
+    IAnalyzerModel Model { get; }
   }
 }
Index: /trunk/sources/HeuristicLab.Modeling/3.2/IAnalyzerModel.cs
===================================================================
--- /trunk/sources/HeuristicLab.Modeling/3.2/IAnalyzerModel.cs	(revision 2285)
+++ /trunk/sources/HeuristicLab.Modeling/3.2/IAnalyzerModel.cs	(revision 2285)
@@ -0,0 +1,61 @@
+#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 HeuristicLab.Core;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.Modeling {
+   public interface IAnalyzerModel {
+    Dataset Dataset { get; set; }
+    string TargetVariable { get; set; }
+    IEnumerable<string> InputVariables { get; }
+    int TrainingSamplesStart { get; set; }
+    int TrainingSamplesEnd { get; set; }
+    int ValidationSamplesStart { get; set; }
+    int ValidationSamplesEnd { get; set; }
+    int TestSamplesStart { get; set; }
+    int TestSamplesEnd { get; set; }
+    double TrainingMeanSquaredError { get; set; }
+    double ValidationMeanSquaredError { get; set; }
+    double TestMeanSquaredError { get; set; }
+    double TrainingMeanAbsolutePercentageError { get; set; }
+    double ValidationMeanAbsolutePercentageError { get; set; }
+    double TestMeanAbsolutePercentageError { get; set; }
+    double TrainingMeanAbsolutePercentageOfRangeError { get; set; }
+    double ValidationMeanAbsolutePercentageOfRangeError { get; set; }
+    double TestMeanAbsolutePercentageOfRangeError { get; set; }
+    double TrainingCoefficientOfDetermination { get; set; }
+    double ValidationCoefficientOfDetermination { get; set; }
+    double TestCoefficientOfDetermination { get; set; }
+    double TrainingVarianceAccountedFor { get; set; }
+    double ValidationVarianceAccountedFor { get; set; }
+    double TestVarianceAccountedFor { get; set; }
+    double GetVariableEvaluationImpact(string variableName);
+    double GetVariableQualityImpact(string variableName);
+    void AddInputVariable(string variableName);
+    void SetVariableEvaluationImpact(string variableName, double impact);
+    void SetVariableQualityImpact(string variableName, double impact);
+    IPredictor Predictor { get; set; }
+  }
+}
Index: unk/sources/HeuristicLab.Modeling/3.2/IModel.cs
===================================================================
--- /trunk/sources/HeuristicLab.Modeling/3.2/IModel.cs	(revision 2284)
+++ 	(revision )
@@ -1,59 +1,0 @@
-#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 HeuristicLab.Core;
-using HeuristicLab.DataAnalysis;
-
-namespace HeuristicLab.Modeling {
-  public interface IModel {
-    Dataset Dataset { get; }
-    string TargetVariable { get; }
-    IEnumerable<string> InputVariables { get; }
-    int TrainingSamplesStart { get; set; }
-    int TrainingSamplesEnd { get; set; }
-    int ValidationSamplesStart { get; set; }
-    int ValidationSamplesEnd { get; set; }
-    int TestSamplesStart { get; set; }
-    int TestSamplesEnd { get; set; }
-    double TrainingMeanSquaredError { get; }
-    double ValidationMeanSquaredError { get; }
-    double TestMeanSquaredError { get; }
-    double TrainingMeanAbsolutePercentageError { get; }
-    double ValidationMeanAbsolutePercentageError { get; }
-    double TestMeanAbsolutePercentageError { get; }
-    double TrainingMeanAbsolutePercentageOfRangeError { get; }
-    double ValidationMeanAbsolutePercentageOfRangeError { get; }
-    double TestMeanAbsolutePercentageOfRangeError { get; }
-    double TrainingCoefficientOfDetermination { get; }
-    double ValidationCoefficientOfDetermination { get; }
-    double TestCoefficientOfDetermination { get; }
-    double TrainingVarianceAccountedFor { get; }
-    double ValidationVarianceAccountedFor { get; }
-    double TestVarianceAccountedFor { get; }
-    double GetVariableEvaluationImpact(string variableName);
-    double GetVariableQualityImpact(string variableName);
-
-    IItem Data { get; }
-  }
-}
Index: /trunk/sources/HeuristicLab.Modeling/3.2/IPredictor.cs
===================================================================
--- /trunk/sources/HeuristicLab.Modeling/3.2/IPredictor.cs	(revision 2285)
+++ /trunk/sources/HeuristicLab.Modeling/3.2/IPredictor.cs	(revision 2285)
@@ -0,0 +1,32 @@
+#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 HeuristicLab.Core;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.Modeling {
+  public interface IPredictor : IItem {
+    double[] Predict(Dataset dataset, int start, int end);
+  } 
+}
Index: unk/sources/HeuristicLab.Modeling/3.2/Model.cs
===================================================================
--- /trunk/sources/HeuristicLab.Modeling/3.2/Model.cs	(revision 2284)
+++ 	(revision )
@@ -1,175 +1,0 @@
-#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 HeuristicLab.Core;
-using HeuristicLab.DataAnalysis;
-
-namespace HeuristicLab.Modeling {
-  public class Model : IModel {
-    #region IModel Members
-
-    private Dataset dataset;
-    public Dataset Dataset {
-      get { return dataset; }
-      set { dataset = value; }
-    }
-
-    private string targetVariable;
-    public string TargetVariable {
-      get { return targetVariable; }
-      set { targetVariable = value; }
-    }
-
-    private List<string> inputVariables = new List<string>();
-    public IEnumerable<string> InputVariables {
-      get { return inputVariables; }
-    }
-
-    public int TrainingSamplesStart { get; set; }
-    public int TrainingSamplesEnd { get; set; }
-    public int ValidationSamplesStart { get; set; }
-    public int ValidationSamplesEnd { get; set; }
-    public int TestSamplesStart { get; set; }
-    public int TestSamplesEnd { get; set; }
-
-    public void AddInputVariables(string variableName) {
-      if (!inputVariables.Contains(variableName))
-        inputVariables.Add(variableName);
-    }
-
-    private double trainingMSE;
-    public double TrainingMeanSquaredError {
-      get { return trainingMSE; }
-      set { trainingMSE = value; }
-    }
-
-    private double validationMSE;
-    public double ValidationMeanSquaredError {
-      get { return validationMSE; }
-      set { validationMSE = value; }
-    }
-
-    private double testMSE;
-    public double TestMeanSquaredError {
-      get { return testMSE; }
-      set { testMSE = value; }
-    }
-
-    public double TrainingMeanAbsolutePercentageError {
-      get;
-      set;
-    }
-
-    public double ValidationMeanAbsolutePercentageError {
-      get;
-      set;
-    }
-
-    public double TestMeanAbsolutePercentageError {
-      get;
-      set;
-    }
-
-    public double TrainingMeanAbsolutePercentageOfRangeError {
-      get;
-      set;
-    }
-
-    public double ValidationMeanAbsolutePercentageOfRangeError {
-      get;
-      set;
-    }
-
-    public double TestMeanAbsolutePercentageOfRangeError {
-      get;
-      set;
-    }
-
-    public double TrainingCoefficientOfDetermination {
-      get;
-      set;
-    }
-
-    public double ValidationCoefficientOfDetermination {
-      get;
-      set;
-    }
-
-    public double TestCoefficientOfDetermination {
-      get;
-      set;
-    }
-
-    public double TrainingVarianceAccountedFor {
-      get;
-      set;
-    }
-
-    public double ValidationVarianceAccountedFor {
-      get;
-      set;
-    }
-
-    public double TestVarianceAccountedFor {
-      get;
-      set;
-    }
-
-    public double GetVariableQualityImpact(string variableName) {
-      if (variableQualityImpacts.ContainsKey(variableName)) return variableQualityImpacts[variableName];
-      else throw new ArgumentException("Impact of variable " + variableName + " is not available.");
-    }
-
-    public double GetVariableEvaluationImpact(string variableName) {
-      if (variableEvaluationImpacts.ContainsKey(variableName)) return variableEvaluationImpacts[variableName];
-      else throw new ArgumentException("Impact of variable " + variableName + " is not available.");
-    }
-
-    private IItem data;
-    public IItem Data {
-      get { return data; }
-      set { data = value; }
-    }
-
-    #endregion
-
-    private Dictionary<string, double> variableQualityImpacts = new Dictionary<string, double>();
-    public void SetVariableQualityImpact(string variableName, double impact) {
-      variableQualityImpacts[variableName] = impact;
-    }
-
-    public void SetVariableQualityImpact(int variableIndex, double impact) {
-      variableQualityImpacts[dataset.GetVariableName(variableIndex)] = impact;
-    }
-
-    private Dictionary<string, double> variableEvaluationImpacts = new Dictionary<string, double>();
-    public void SetVariableEvaluationImpact(string variableName, double impact) {
-      variableEvaluationImpacts[variableName] = impact;
-    }
-
-    public void SetVariableEvaluationImpact(int variableIndex, double impact) {
-      variableEvaluationImpacts[dataset.GetVariableName(variableIndex)] = impact;
-    }
-  }
-}
Index: /trunk/sources/HeuristicLab.Modeling/3.2/ProblemInjectorView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Modeling/3.2/ProblemInjectorView.cs	(revision 2284)
+++ /trunk/sources/HeuristicLab.Modeling/3.2/ProblemInjectorView.cs	(revision 2285)
@@ -96,7 +96,4 @@
           dataset.Rows = parser.Rows;
           dataset.Columns = parser.Columns;
-          for (int i = 0; i < parser.VariableNames.Length; i++) {
-            dataset.SetVariableName(i, parser.VariableNames[i]);
-          }
           dataset.Name = parser.ProblemName;
           dataset.Samples = new double[dataset.Rows * dataset.Columns];
@@ -110,4 +107,8 @@
           TrySetVariable("TestSamplesEnd", parser.TestSamplesEnd);
           TrySetVariable("TargetVariable", parser.TargetVariable);
+
+          for (int i = 0; i < parser.VariableNames.Length; i++) {
+            dataset.SetVariableName(i, parser.VariableNames[i]);
+          }
 
           IVariable var = ProblemInjector.GetVariable("AllowedFeatures");
Index: /trunk/sources/HeuristicLab.SupportVectorMachines/3.2/HeuristicLab.SupportVectorMachines-3.2.csproj
===================================================================
--- /trunk/sources/HeuristicLab.SupportVectorMachines/3.2/HeuristicLab.SupportVectorMachines-3.2.csproj	(revision 2284)
+++ /trunk/sources/HeuristicLab.SupportVectorMachines/3.2/HeuristicLab.SupportVectorMachines-3.2.csproj	(revision 2285)
@@ -83,4 +83,5 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="Predictor.cs" />
     <Compile Include="SupportVectorRegression.cs" />
     <Compile Include="SVMModel.cs" />
Index: /trunk/sources/HeuristicLab.SupportVectorMachines/3.2/Predictor.cs
===================================================================
--- /trunk/sources/HeuristicLab.SupportVectorMachines/3.2/Predictor.cs	(revision 2285)
+++ /trunk/sources/HeuristicLab.SupportVectorMachines/3.2/Predictor.cs	(revision 2285)
@@ -0,0 +1,90 @@
+#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 HeuristicLab.Core;
+using System.Globalization;
+using System.IO;
+using HeuristicLab.Modeling;
+using SVM;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.SupportVectorMachines {
+  public class Predictor : ItemBase, IPredictor {
+    private SVMModel svmModel;
+    private string targetVariable;
+
+    public Predictor() : base() { } // for persistence
+
+    public Predictor(SVMModel model, string targetVariable)
+      : base() {
+      this.svmModel = model;
+      this.targetVariable = targetVariable;
+    }
+
+    public double[] Predict(Dataset input, int start, int end) {
+      if (start < 0 || end <= start) throw new ArgumentException("start must be larger than zero and strictly smaller than end");
+      if (end > input.Rows) throw new ArgumentOutOfRangeException("number of rows in input is smaller then end");
+      RangeTransform transform = svmModel.RangeTransform;
+      Model model = svmModel.Model;
+
+      Problem p = SVMHelper.CreateSVMProblem(input, input.GetVariableIndex(targetVariable), start, end);
+      Problem scaledProblem = SVM.Scaling.Scale(p, transform);
+
+      int rows = end - start;
+      int columns = input.Columns;
+      double[] result = new double[rows];
+      for (int row = 0; row < rows; row++) {
+        result[row] = SVM.Prediction.Predict(model, scaledProblem.X[row]);
+      }
+      return result;
+    }
+
+    public override IView CreateView() {
+      return svmModel.CreateView();
+    }
+
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      Predictor clone = (Predictor)base.Clone(clonedObjects);
+      clone.svmModel = (SVMModel)Auxiliary.Clone(svmModel, clonedObjects);
+      clone.targetVariable = targetVariable;
+      return clone;
+    }
+
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      XmlAttribute targetVarAttr = document.CreateAttribute("TargetVariable");
+      targetVarAttr.Value = targetVariable;
+      node.Attributes.Append(targetVarAttr);
+      node.AppendChild(PersistenceManager.Persist(svmModel, document, persistedObjects));
+      return node;
+    }
+
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      targetVariable = node.Attributes["TargetVariable"].Value;
+      svmModel = (SVMModel)PersistenceManager.Restore(node.ChildNodes[0], restoredObjects);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.SupportVectorMachines/3.2/SVMHelper.cs
===================================================================
--- /trunk/sources/HeuristicLab.SupportVectorMachines/3.2/SVMHelper.cs	(revision 2284)
+++ /trunk/sources/HeuristicLab.SupportVectorMachines/3.2/SVMHelper.cs	(revision 2285)
@@ -37,5 +37,5 @@
             double value = dataset.GetValue(start + row, col);
             if (!double.IsNaN(value))
-              tempRow.Add(new SVM.Node(col, value));
+              tempRow.Add(new SVM.Node(col + 1, value));
           }
         }
Index: /trunk/sources/HeuristicLab.SupportVectorMachines/3.2/SupportVectorRegression.cs
===================================================================
--- /trunk/sources/HeuristicLab.SupportVectorMachines/3.2/SupportVectorRegression.cs	(revision 2284)
+++ /trunk/sources/HeuristicLab.SupportVectorMachines/3.2/SupportVectorRegression.cs	(revision 2285)
@@ -69,5 +69,5 @@
     }
 
-    public IModel Model {
+    public IAnalyzerModel Model {
       get {
         if (!engine.Terminated) throw new InvalidOperationException("The algorithm is still running. Wait until the algorithm is terminated to retrieve the result.");
@@ -421,6 +421,6 @@
 
 
-    protected internal virtual Model CreateSVMModel(IScope bestModelScope) {
-      Model model = new Model();
+    protected internal virtual IAnalyzerModel CreateSVMModel(IScope bestModelScope) {
+      AnalyzerModel model = new AnalyzerModel();
       model.TrainingMeanSquaredError = bestModelScope.GetVariableValue<DoubleData>("Quality", false).Data;
       model.ValidationMeanSquaredError = bestModelScope.GetVariableValue<DoubleData>("ValidationQuality", false).Data;
@@ -439,5 +439,4 @@
       model.TestVarianceAccountedFor = bestModelScope.GetVariableValue<DoubleData>("TestVAF", false).Data;
 
-      model.Data = bestModelScope.GetVariableValue<SVMModel>("Model", false);
       HeuristicLab.DataAnalysis.Dataset ds = bestModelScope.GetVariableValue<Dataset>("Dataset", true);
       model.Dataset = ds;
@@ -449,4 +448,6 @@
       model.TestSamplesStart = bestModelScope.GetVariableValue<IntData>("TestSamplesStart", true).Data;
       model.TestSamplesEnd = bestModelScope.GetVariableValue<IntData>("TestSamplesEnd", true).Data;
+      model.Predictor = new Predictor(bestModelScope.GetVariableValue<SVMModel>("Model", false), model.TargetVariable);
+
 
       ItemList evaluationImpacts = bestModelScope.GetVariableValue<ItemList>("VariableEvaluationImpacts", false);
@@ -456,5 +457,5 @@
         double impact = ((DoubleData)row[1]).Data;
         model.SetVariableEvaluationImpact(variableName, impact);
-        model.AddInputVariables(variableName);
+        model.AddInputVariable(variableName);
       }
       foreach (ItemList row in qualityImpacts) {
@@ -462,5 +463,5 @@
         double impact = ((DoubleData)row[1]).Data;
         model.SetVariableQualityImpact(variableName, impact);
-        model.AddInputVariables(variableName);
+        model.AddInputVariable(variableName);
       }
 
Index: /trunk/sources/HeuristicLab.sln
===================================================================
--- /trunk/sources/HeuristicLab.sln	(revision 2284)
+++ /trunk/sources/HeuristicLab.sln	(revision 2285)
@@ -3729,5 +3729,6 @@
 		{E84E5717-79F8-498F-A5E0-A055C4EC086B}.Modeling Debug|Any CPU.Build.0 = Debug|Any CPU
 		{E84E5717-79F8-498F-A5E0-A055C4EC086B}.Modeling Debug|x64.ActiveCfg = Debug|Any CPU
-		{E84E5717-79F8-498F-A5E0-A055C4EC086B}.Modeling Debug|x86.ActiveCfg = Debug|Any CPU
+		{E84E5717-79F8-498F-A5E0-A055C4EC086B}.Modeling Debug|x86.ActiveCfg = Debug|x86
+		{E84E5717-79F8-498F-A5E0-A055C4EC086B}.Modeling Debug|x86.Build.0 = Debug|x86
 		{E84E5717-79F8-498F-A5E0-A055C4EC086B}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{E84E5717-79F8-498F-A5E0-A055C4EC086B}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -3797,5 +3798,4 @@
 		{31DD6385-7276-49ED-9533-823D4CDF3D2A}.Modeling Debug|x64.Build.0 = Debug|x64
 		{31DD6385-7276-49ED-9533-823D4CDF3D2A}.Modeling Debug|x86.ActiveCfg = Debug|x86
-		{31DD6385-7276-49ED-9533-823D4CDF3D2A}.Modeling Debug|x86.Build.0 = Debug|x86
 		{31DD6385-7276-49ED-9533-823D4CDF3D2A}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{31DD6385-7276-49ED-9533-823D4CDF3D2A}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -3897,5 +3897,5 @@
 		{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}.Modeling Debug|Any CPU.Build.0 = Debug|Any CPU
 		{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}.Modeling Debug|x64.ActiveCfg = Debug|Any CPU
-		{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}.Modeling Debug|x86.ActiveCfg = Debug|Any CPU
+		{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}.Modeling Debug|x86.ActiveCfg = Debug|x86
 		{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{3BD61258-31DA-4B09-89C0-4F71FEF5F05A}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -3925,5 +3925,5 @@
 		{569E430B-B4CE-4B94-A44E-6246B6E4E3BC}.Modeling Debug|Any CPU.Build.0 = Debug|Any CPU
 		{569E430B-B4CE-4B94-A44E-6246B6E4E3BC}.Modeling Debug|x64.ActiveCfg = Debug|Any CPU
-		{569E430B-B4CE-4B94-A44E-6246B6E4E3BC}.Modeling Debug|x86.ActiveCfg = Debug|Any CPU
+		{569E430B-B4CE-4B94-A44E-6246B6E4E3BC}.Modeling Debug|x86.ActiveCfg = Debug|x86
 		{569E430B-B4CE-4B94-A44E-6246B6E4E3BC}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{569E430B-B4CE-4B94-A44E-6246B6E4E3BC}.Release|Any CPU.Build.0 = Release|Any CPU
@@ -3953,5 +3953,5 @@
 		{0E27A536-1C4A-4624-A65E-DC4F4F23E3E1}.Modeling Debug|Any CPU.Build.0 = Debug|Any CPU
 		{0E27A536-1C4A-4624-A65E-DC4F4F23E3E1}.Modeling Debug|x64.ActiveCfg = Debug|Any CPU
-		{0E27A536-1C4A-4624-A65E-DC4F4F23E3E1}.Modeling Debug|x86.ActiveCfg = Debug|Any CPU
+		{0E27A536-1C4A-4624-A65E-DC4F4F23E3E1}.Modeling Debug|x86.ActiveCfg = Debug|x86
 		{0E27A536-1C4A-4624-A65E-DC4F4F23E3E1}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{0E27A536-1C4A-4624-A65E-DC4F4F23E3E1}.Release|Any CPU.Build.0 = Release|Any CPU
Index: /trunk/tools/CedmaDatabaseMerger/CedmaDatabaseMerger.csproj
===================================================================
--- /trunk/tools/CedmaDatabaseMerger/CedmaDatabaseMerger.csproj	(revision 2284)
+++ /trunk/tools/CedmaDatabaseMerger/CedmaDatabaseMerger.csproj	(revision 2285)
@@ -30,4 +30,20 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
   </PropertyGroup>
   <ItemGroup>
Index: /trunk/tools/CedmaDatabaseMerger/MergerForm.cs
===================================================================
--- /trunk/tools/CedmaDatabaseMerger/MergerForm.cs	(revision 2284)
+++ /trunk/tools/CedmaDatabaseMerger/MergerForm.cs	(revision 2285)
@@ -49,4 +49,5 @@
         importButton.Enabled = false;
         BackgroundWorker worker = new BackgroundWorker();
+        worker.WorkerReportsProgress = true;
         worker.DoWork += CreateDoWorkDelegate(worker, importFileName);
         worker.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged);
@@ -70,11 +71,14 @@
         DatabaseService sourceDatabase = new DatabaseService("Data Source=" + importFileName);
 
+        sourceDatabase.Connect();
         var models = sourceDatabase.GetAllModels();
+        var sourceDataset = sourceDatabase.GetDataset();
         int importCount = 0;
         foreach (HeuristicLab.Modeling.Database.IModel m in models) {
-          HeuristicLab.Modeling.Model model = new HeuristicLab.Modeling.Model();
+
+          HeuristicLab.Modeling.IAnalyzerModel model = new AnalyzerModel();
+          model.Predictor = (HeuristicLab.Modeling.IPredictor)PersistenceManager.RestoreFromGZip(sourceDatabase.GetModelData(m));
           model.TargetVariable = m.TargetVariable.Name;
-          model.Data = (IItem)PersistenceManager.RestoreFromGZip(sourceDatabase.GetModelData(m));
-          model.Dataset = sourceDatabase.GetDataset();
+          model.Dataset = sourceDataset;
           model.TrainingSamplesStart = m.TrainingSamplesStart;
           model.TrainingSamplesEnd = m.TrainingSamplesEnd;
@@ -83,4 +87,5 @@
           model.TestSamplesStart = m.TestSamplesStart;
           model.TestSamplesEnd = m.TestSamplesEnd;
+          model.Predictor.Predict(sourceDataset, 10, 20);
           //get all double properties to save as modelResult
           IEnumerable<PropertyInfo> modelResultInfos = model.GetType().GetProperties().Where(
@@ -88,10 +93,10 @@
           var modelResults = sourceDatabase.GetModelResults(m);
           foreach (IModelResult result in modelResults) {
-            PropertyInfo matchingPropInfo = modelResultInfos.First(x=>x.Name == result.Result.Name);
-            if(matchingPropInfo!=null) matchingPropInfo.SetValue(model, result.Value, null);
+            PropertyInfo matchingPropInfo = modelResultInfos.First(x => x.Name == result.Result.Name);
+            if (matchingPropInfo != null) matchingPropInfo.SetValue(model, result.Value, null);
           }
           var inputVariableResults = sourceDatabase.GetInputVariableResults(m);
           foreach (IInputVariableResult result in inputVariableResults) {
-            model.AddInputVariables(result.Variable.Name);
+            model.AddInputVariable(result.Variable.Name);
             if (result.Result.Name == "VariableEvaluationImpact") {
               model.SetVariableEvaluationImpact(result.Variable.Name, result.Value);
@@ -100,8 +105,9 @@
             } else throw new FormatException();
           }
-          
+
           destiationDatabase.Persist(model, m.Algorithm.Name, m.Algorithm.Description);
           worker.ReportProgress((++importCount * 100) / models.Count());
         }
+        sourceDatabase.Disconnect();
       };
     }
Index: /trunk/tools/CedmaImporter/Importer.cs
===================================================================
--- /trunk/tools/CedmaImporter/Importer.cs	(revision 2284)
+++ /trunk/tools/CedmaImporter/Importer.cs	(revision 2285)
@@ -9,4 +9,5 @@
 using HeuristicLab.GP.StructureIdentification;
 using System.Diagnostics;
+using HeuristicLab.Modeling;
 
 namespace CedmaImporter {
@@ -62,4 +63,5 @@
         ImportAllModels(dirName, reader, database);
       }
+      database.Disconnect();
     }
 
@@ -90,5 +92,5 @@
         string algoName = modelData[ALGORITHM_COLUMN].Trim();
         try {
-          HeuristicLab.Modeling.Model model = new HeuristicLab.Modeling.Model();
+          HeuristicLab.Modeling.IAnalyzerModel model = new AnalyzerModel();
           model.TargetVariable = targetVariableName;
           model.Dataset = problem.Dataset;
@@ -100,10 +102,8 @@
           model.TestSamplesEnd = problem.TestSamplesEnd;
 
-
-          model.Data = ParseModel(dirName, modelData[FILENAME_COLUMN].Trim(), algoName);
-
           SetModelResults(model, modelData);
           SetInputVariableResults(model, modelData);
 
+          model.Predictor = CreatePredictor(targetVariableName, dirName, modelData[FILENAME_COLUMN].Trim(), algoName);
           database.Persist(model, algoName, null);
         }
@@ -113,8 +113,8 @@
     }
 
-    private void SetInputVariableResults(HeuristicLab.Modeling.Model model, string[] modelData) {
+    private void SetInputVariableResults(HeuristicLab.Modeling.IAnalyzerModel model, string[] modelData) {
       for (int i = VARIABLE_IMPACTS; i < modelData.Length; i++) {
         if (!string.IsNullOrEmpty(modelData[i])) {
-          model.AddInputVariables(inputVariables[i]);
+          model.AddInputVariable(inputVariables[i]);
           if (results[i] == EVALUATION_IMPACT) {
             model.SetVariableEvaluationImpact(inputVariables[i], double.Parse(modelData[i]));
@@ -126,5 +126,5 @@
     }
 
-    private void SetModelResults(HeuristicLab.Modeling.Model model, string[] modelData) {
+    private void SetModelResults(HeuristicLab.Modeling.IAnalyzerModel model, string[] modelData) {
       model.TrainingMeanSquaredError = double.Parse(modelData[TRAINING_MSE]);
       model.ValidationMeanSquaredError = double.Parse(modelData[VALIDATION_MSE]);
@@ -148,13 +148,13 @@
     }
 
-    private HeuristicLab.Core.IItem ParseModel(string dirName, string modelFileName, string algoName) {
+    private HeuristicLab.Modeling.IPredictor CreatePredictor(string targetVariable, string dirName, string modelFileName, string algoName) {
       foreach (char c in Path.GetInvalidFileNameChars()) {
         modelFileName = modelFileName.Replace(c, '_');
       }
       if (algoName == "SupportVectorRegression") {
-        HeuristicLab.Data.SVMModel model = new HeuristicLab.Data.SVMModel();
+        HeuristicLab.SupportVectorMachines.SVMModel model = new HeuristicLab.SupportVectorMachines.SVMModel();
         model.Model = SVM.Model.Read(Path.Combine(dirName, modelFileName) + ".svm.model.txt");
         model.RangeTransform = SVM.RangeTransform.Read(Path.Combine(dirName, modelFileName) + ".svm.transform.txt");
-        return model;
+        return new HeuristicLab.SupportVectorMachines.Predictor(model, targetVariable);
       } else {
         SymbolicExpressionImporter sexpImporter = new SymbolicExpressionImporter();
@@ -163,5 +163,5 @@
           model.FunctionTree = sexpImporter.Import(reader);
         }
-        return model;
+        return new HeuristicLab.GP.StructureIdentification.Predictor(new HL2TreeEvaluator(), model);
       }
     }
Index: /trunk/tools/Tools.sln
===================================================================
--- /trunk/tools/Tools.sln	(revision 2284)
+++ /trunk/tools/Tools.sln	(revision 2285)
@@ -50,8 +50,10 @@
 		{D1D66C9C-5B65-4348-B8B5-528A513695E4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{D1D66C9C-5B65-4348-B8B5-528A513695E4}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{D1D66C9C-5B65-4348-B8B5-528A513695E4}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{D1D66C9C-5B65-4348-B8B5-528A513695E4}.Debug|x86.ActiveCfg = Debug|x86
+		{D1D66C9C-5B65-4348-B8B5-528A513695E4}.Debug|x86.Build.0 = Debug|x86
 		{D1D66C9C-5B65-4348-B8B5-528A513695E4}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{D1D66C9C-5B65-4348-B8B5-528A513695E4}.Release|Any CPU.Build.0 = Release|Any CPU
 		{D1D66C9C-5B65-4348-B8B5-528A513695E4}.Release|x86.ActiveCfg = Release|Any CPU
+		{D1D66C9C-5B65-4348-B8B5-528A513695E4}.Release|x86.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
