Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Analyzers/SymbolicDataAnalysisAlleleFrequencyAnalyzer.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Analyzers/SymbolicDataAnalysisAlleleFrequencyAnalyzer.cs	(revision 6709)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Analyzers/SymbolicDataAnalysisAlleleFrequencyAnalyzer.cs	(revision 6728)
@@ -70,10 +70,8 @@
 
     protected override Allele[] CalculateAlleles(ISymbolicExpressionTree solution) {
-      List<Allele> alleles = new List<Allele>();
-
-      foreach (var subtree in GetAllSubtreesOfDepth(solution, AlleleTreeDepth)) {
-        alleles.Add(GetAlleleFromSubtreeOfDepth(subtree, AlleleTreeDepth));
-      }
-      return alleles.ToArray();
+      return GetAllSubtreesOfDepth(solution, AlleleTreeDepth)
+        .AsParallel()
+        .Select(t => GetAlleleFromSubtreeOfDepth(t, AlleleTreeDepth))
+        .ToArray();
     }
 
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Analyzers/SymbolicDataAnalysisMultiObjectiveValidationBestSolutionAnalyzer.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Analyzers/SymbolicDataAnalysisMultiObjectiveValidationBestSolutionAnalyzer.cs	(revision 6709)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Analyzers/SymbolicDataAnalysisMultiObjectiveValidationBestSolutionAnalyzer.cs	(revision 6728)
@@ -93,11 +93,15 @@
       IList<int> nonDominatedIndexes = new List<int>();
       ISymbolicExpressionTree[] tree = SymbolicExpressionTree.ToArray();
-      List<double[]> qualities = new List<double[]>();
       bool[] maximization = Maximization.ToArray();
       List<double[]> newNonDominatedQualities = new List<double[]>();
       var evaluator = EvaluatorParameter.ActualValue;
+      var problemData = ProblemDataParameter.ActualValue;
       IExecutionContext childContext = (IExecutionContext)ExecutionContext.CreateChildOperation(evaluator);
+
+      var qualities = tree
+        .AsParallel()
+        .Select(t => evaluator.Evaluate(childContext, t, problemData, rows))
+        .ToArray();
       for (int i = 0; i < tree.Length; i++) {
-        qualities.Add(evaluator.Evaluate(childContext, tree[i], ProblemDataParameter.ActualValue, rows)); // qualities[i] = ...
         if (IsNonDominated(qualities[i], trainingBestQualities, maximization) &&
           IsNonDominated(qualities[i], qualities, maximization)) {
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Analyzers/SymbolicDataAnalysisSingleObjectiveValidationBestSolutionAnalyzer.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Analyzers/SymbolicDataAnalysisSingleObjectiveValidationBestSolutionAnalyzer.cs	(revision 6709)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Analyzers/SymbolicDataAnalysisSingleObjectiveValidationBestSolutionAnalyzer.cs	(revision 6728)
@@ -76,12 +76,16 @@
       ISymbolicExpressionTree bestTree = null;
       ISymbolicExpressionTree[] tree = SymbolicExpressionTree.ToArray();
-      double[] quality = new double[tree.Length];
       var evaluator = EvaluatorParameter.ActualValue;
+      var problemData = ProblemDataParameter.ActualValue;
       IEnumerable<int> rows = GenerateRowsToEvaluate();
       if (!rows.Any()) return base.Apply();
 
       IExecutionContext childContext = (IExecutionContext)ExecutionContext.CreateChildOperation(evaluator);
+      var quality = tree
+        .AsParallel()
+        .Select(t => evaluator.Evaluate(childContext, t, problemData, rows))
+        .ToArray();
+
       for (int i = 0; i < tree.Length; i++) {
-        quality[i] = evaluator.Evaluate(childContext, tree[i], ProblemDataParameter.ActualValue, rows);
         if (IsBetter(quality[i], bestQuality, Maximization.Value)) {
           bestQuality = quality[i];
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Analyzers/SymbolicDataAnalysisVariableFrequencyAnalyzer.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Analyzers/SymbolicDataAnalysisVariableFrequencyAnalyzer.cs	(revision 6709)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Analyzers/SymbolicDataAnalysisVariableFrequencyAnalyzer.cs	(revision 6728)
@@ -131,18 +131,12 @@
 
     public static IEnumerable<KeyValuePair<string, double>> CalculateVariableFrequencies(IEnumerable<ISymbolicExpressionTree> trees, bool aggregateLaggedVariables = true) {
-      Dictionary<string, double> variableFrequencies = new Dictionary<string, double>();
-      int totalNumberOfSymbols = 0;
-
-      foreach (var tree in trees) {
-        var variableReferences = GetVariableReferences(tree, aggregateLaggedVariables);
-        foreach (var pair in variableReferences) {
-          totalNumberOfSymbols += pair.Value;
-          if (variableFrequencies.ContainsKey(pair.Key)) {
-            variableFrequencies[pair.Key] += pair.Value;
-          } else {
-            variableFrequencies.Add(pair.Key, pair.Value);
-          }
-        }
-      }
+
+      var variableFrequencies = trees
+        .AsParallel()
+        .SelectMany(t => GetVariableReferences(t, aggregateLaggedVariables))
+        .GroupBy(pair => pair.Key, pair => pair.Value)
+        .ToDictionary(g => g.Key, g => (double)g.Sum());
+
+      double totalNumberOfSymbols = variableFrequencies.Values.Sum();
 
       foreach (var pair in variableFrequencies)
