Index: /trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/SymbolicTimeSeriesPrognosisExpressionTreeInterpreter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/SymbolicTimeSeriesPrognosisExpressionTreeInterpreter.cs	(revision 9003)
+++ /trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/SymbolicTimeSeriesPrognosisExpressionTreeInterpreter.cs	(revision 9004)
@@ -82,6 +82,8 @@
 
       string targetVariable = TargetVariable;
-      EvaluatedSolutions.Value++; // increment the evaluated solutions counter
-      var state = PrepareInterpreterState(tree, dataset, targetVariableCache);
+      lock (EvaluatedSolutions) {
+        EvaluatedSolutions.Value++; // increment the evaluated solutions counter
+      }
+      var state = PrepareInterpreterState(tree, dataset, targetVariableCache, TargetVariable);
       var rowsEnumerator = rows.GetEnumerator();
       var horizonsEnumerator = horizons.GetEnumerator();
@@ -114,5 +116,5 @@
     }
 
-    private InterpreterState PrepareInterpreterState(ISymbolicExpressionTree tree, Dataset dataset, double[] targetVariableCache) {
+    private static InterpreterState PrepareInterpreterState(ISymbolicExpressionTree tree, Dataset dataset, double[] targetVariableCache, string targetVariable) {
       Instruction[] code = SymbolicExpressionTreeCompiler.Compile(tree, OpCodes.MapSymbolToOpCode);
       int necessaryArgStackSize = 0;
@@ -120,5 +122,5 @@
         if (instr.opCode == OpCodes.Variable) {
           var variableTreeNode = (VariableTreeNode)instr.dynamicNode;
-          if (variableTreeNode.VariableName == TargetVariable)
+          if (variableTreeNode.VariableName == targetVariable)
             instr.iArg0 = targetVariableCache;
           else
@@ -126,5 +128,5 @@
         } else if (instr.opCode == OpCodes.LagVariable) {
           var variableTreeNode = (LaggedVariableTreeNode)instr.dynamicNode;
-          if (variableTreeNode.VariableName == TargetVariable)
+          if (variableTreeNode.VariableName == targetVariable)
             instr.iArg0 = targetVariableCache;
           else
@@ -132,5 +134,5 @@
         } else if (instr.opCode == OpCodes.VariableCondition) {
           var variableTreeNode = (VariableConditionTreeNode)instr.dynamicNode;
-          if (variableTreeNode.VariableName == TargetVariable)
+          if (variableTreeNode.VariableName == targetVariable)
             instr.iArg0 = targetVariableCache;
           else
Index: /trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeInterpreter.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeInterpreter.cs	(revision 9003)
+++ /trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeInterpreter.cs	(revision 9004)
@@ -99,5 +99,7 @@
         throw new NotSupportedException("Interval arithmetic is not yet supported in the symbolic data analysis interpreter.");
 
-      EvaluatedSolutions.Value++; // increment the evaluated solutions counter
+      lock (EvaluatedSolutions) {
+        EvaluatedSolutions.Value++; // increment the evaluated solutions counter
+      }
       var state = PrepareInterpreterState(tree, dataset);
 
@@ -109,5 +111,5 @@
     }
 
-    private InterpreterState PrepareInterpreterState(ISymbolicExpressionTree tree, Dataset dataset) {
+    private static InterpreterState PrepareInterpreterState(ISymbolicExpressionTree tree, Dataset dataset) {
       Instruction[] code = SymbolicExpressionTreeCompiler.Compile(tree, OpCodes.MapSymbolToOpCode);
       int necessaryArgStackSize = 0;
Index: /trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/TimeSeriesPrognosis/TimeSeriesPrognosisResults.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/TimeSeriesPrognosis/TimeSeriesPrognosisResults.cs	(revision 9003)
+++ /trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/TimeSeriesPrognosis/TimeSeriesPrognosisResults.cs	(revision 9004)
@@ -331,5 +331,10 @@
     [StorableConstructor]
     public TimeSeriesPrognosisResults(bool deserializing) : base(deserializing) { }
-    protected TimeSeriesPrognosisResults(TimeSeriesPrognosisResults original, Cloner cloner) : base(original, cloner) { }
+    protected TimeSeriesPrognosisResults(TimeSeriesPrognosisResults original, Cloner cloner)
+      : base(original, cloner) {
+      this.trainingHorizon = original.trainingHorizon;
+      this.testHorizon = original.testHorizon;
+      this.solution = cloner.Clone(original.solution);
+    }
     public override IDeepCloneable Clone(Cloner cloner) {
       return new TimeSeriesPrognosisResults(this, cloner);
