Index: /branches/symbreg-factors-2650/HeuristicLab.Algorithms.ALPS/3.3/AlpsGeneticAlgorithm.cs
===================================================================
--- /branches/symbreg-factors-2650/HeuristicLab.Algorithms.ALPS/3.3/AlpsGeneticAlgorithm.cs	(revision 14824)
+++ /branches/symbreg-factors-2650/HeuristicLab.Algorithms.ALPS/3.3/AlpsGeneticAlgorithm.cs	(revision 14825)
@@ -475,4 +475,7 @@
     protected override void Problem_EvaluatorChanged(object sender, EventArgs e) {
       base.Problem_EvaluatorChanged(sender, e);
+
+      ParameterizeStochasticOperatorForLayer(Problem.Evaluator);
+
       foreach (var @operator in Problem.Operators.OfType<IOperator>())
         ParameterizeStochasticOperator(@operator);
Index: /branches/symbreg-factors-2650/HeuristicLab.Algorithms.DataAnalysis/3.4/CrossValidation.cs
===================================================================
--- /branches/symbreg-factors-2650/HeuristicLab.Algorithms.DataAnalysis/3.4/CrossValidation.cs	(revision 14824)
+++ /branches/symbreg-factors-2650/HeuristicLab.Algorithms.DataAnalysis/3.4/CrossValidation.cs	(revision 14825)
@@ -451,7 +451,8 @@
       var aggregatedResults = new List<IResult>();
       foreach (KeyValuePair<string, List<IClassificationSolution>> solutions in resultSolutions) {
-        // clone manually to correctly clone references between cloned root objects 
-        Cloner cloner = new Cloner();
-        var problemDataClone = (IClassificationProblemData)cloner.Clone(Problem.ProblemData);
+        // at least one algorithm (GBT with logistic regression loss) produces a classification solution even though the original problem is a regression problem.
+        var targetVariable = solutions.Value.First().ProblemData.TargetVariable;
+        var problemDataClone = new ClassificationProblemData(Problem.ProblemData.Dataset,
+          Problem.ProblemData.AllowedInputVariables, targetVariable);
         // set partitions of problem data clone correctly
         problemDataClone.TrainingPartition.Start = SamplesStart.Value; problemDataClone.TrainingPartition.End = SamplesEnd.Value;
Index: /branches/symbreg-factors-2650/HeuristicLab.Algorithms.DataAnalysis/3.4/GradientBoostedTrees/GradientBoostedTreesAlgorithm.cs
===================================================================
--- /branches/symbreg-factors-2650/HeuristicLab.Algorithms.DataAnalysis/3.4/GradientBoostedTrees/GradientBoostedTreesAlgorithm.cs	(revision 14824)
+++ /branches/symbreg-factors-2650/HeuristicLab.Algorithms.DataAnalysis/3.4/GradientBoostedTrees/GradientBoostedTreesAlgorithm.cs	(revision 14825)
@@ -255,5 +255,11 @@
           var classificationProblemData = new ClassificationProblemData(problemData.Dataset,
             problemData.AllowedInputVariables, problemData.TargetVariable, problemData.Transformations);
-          classificationModel.RecalculateModelParameters(classificationProblemData, classificationProblemData.TrainingIndices);
+          classificationProblemData.TrainingPartition.Start = Problem.ProblemData.TrainingPartition.Start;
+          classificationProblemData.TrainingPartition.End = Problem.ProblemData.TrainingPartition.End;
+          classificationProblemData.TestPartition.Start = Problem.ProblemData.TestPartition.Start;
+          classificationProblemData.TestPartition.End = Problem.ProblemData.TestPartition.End;
+
+          classificationModel.SetThresholdsAndClassValues(new double[] { double.NegativeInfinity, 0.0 }, new []{ 0.0, 1.0 });
+
 
           var classificationSolution = new DiscriminantFunctionClassificationSolution(classificationModel, classificationProblemData);
Index: /branches/symbreg-factors-2650/HeuristicLab.Analysis/3.3/QualityAnalysis/ExpectedRuntimeHelper.cs
===================================================================
--- /branches/symbreg-factors-2650/HeuristicLab.Analysis/3.3/QualityAnalysis/ExpectedRuntimeHelper.cs	(revision 14824)
+++ /branches/symbreg-factors-2650/HeuristicLab.Analysis/3.3/QualityAnalysis/ExpectedRuntimeHelper.cs	(revision 14825)
@@ -30,5 +30,5 @@
       if (successful.Count > 0) {
         var succAvg = successful.Average();
-        var succDev = successful.StandardDeviation();
+        var succDev = successful.StandardDeviation() + 1e-7;
         successful.RemoveAll(x => x < succAvg - 2 * succDev);
         unsuccessful.RemoveAll(x => x < succAvg - 2 * succDev);
Index: /branches/symbreg-factors-2650/HeuristicLab.Collections/3.3/IndexedItem.cs
===================================================================
--- /branches/symbreg-factors-2650/HeuristicLab.Collections/3.3/IndexedItem.cs	(revision 14824)
+++ /branches/symbreg-factors-2650/HeuristicLab.Collections/3.3/IndexedItem.cs	(revision 14825)
@@ -20,14 +20,11 @@
 #endregion
 
-using System;
-
 namespace HeuristicLab.Collections {
-  [Serializable]
   public struct IndexedItem<T> {
-    private int index;
+    private readonly int index;
     public int Index {
       get { return index; }
     }
-    private T value;
+    private readonly T value;
     public T Value {
       get { return value; }
@@ -40,5 +37,5 @@
 
     public override string ToString() {
-      return "[" + index.ToString() + ": " + value == null ? "null" : value.ToString() + "]";
+      return "[" + index + ": " + (value == null ? "null" : value.ToString()) + "]";
     }
   }
Index: /branches/symbreg-factors-2650/HeuristicLab.Common/3.3/EnumerableExtensions.cs
===================================================================
--- /branches/symbreg-factors-2650/HeuristicLab.Common/3.3/EnumerableExtensions.cs	(revision 14824)
+++ /branches/symbreg-factors-2650/HeuristicLab.Common/3.3/EnumerableExtensions.cs	(revision 14825)
@@ -120,5 +120,5 @@
 
       for (int i = 0; i < length; ++i) {
-        yield return range.Select(x => elements[x]);
+        yield return range.Select(x => elements[x]).ToArray();
 
         if (i == length - 1) break;
Index: /branches/symbreg-factors-2650/HeuristicLab.DataPreprocessing.Views/3.4/CheckedFilterCollectionView.cs
===================================================================
--- /branches/symbreg-factors-2650/HeuristicLab.DataPreprocessing.Views/3.4/CheckedFilterCollectionView.cs	(revision 14824)
+++ /branches/symbreg-factors-2650/HeuristicLab.DataPreprocessing.Views/3.4/CheckedFilterCollectionView.cs	(revision 14825)
@@ -21,5 +21,4 @@
 
 using System;
-using System.Windows.Forms;
 using HeuristicLab.Core;
 using HeuristicLab.Core.Views;
@@ -35,11 +34,4 @@
       InitializeComponent();
     }
-
-    protected override void addButton_Click(object sender, EventArgs e) {
-      IFilter filter = new ComparisonFilter();
-      Content.Add(filter);
-      Content.SetItemCheckedState(filter, false);
-    }
-
   }
 }
Index: /branches/symbreg-factors-2650/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionBoxPlotView.cs
===================================================================
--- /branches/symbreg-factors-2650/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionBoxPlotView.cs	(revision 14824)
+++ /branches/symbreg-factors-2650/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionBoxPlotView.cs	(revision 14825)
@@ -463,4 +463,9 @@
     }
 
+	public bool StatisticsVisible {
+		get { return splitContainer.Panel2Collapsed; }
+		set { splitContainer.Panel2Collapsed = value; }
+	}
+	
     public void SetXAxis(string axisName) {
       xAxisComboBox.SelectedItem = axisName;
Index: /branches/symbreg-factors-2650/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionRLDView.cs
===================================================================
--- /branches/symbreg-factors-2650/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionRLDView.cs	(revision 14824)
+++ /branches/symbreg-factors-2650/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionRLDView.cs	(revision 14825)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2016 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2017 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -42,5 +42,5 @@
     private List<Series> invisibleTargetSeries;
 
-    private const string AllRuns = "All Runs";
+    private const string AllInstances = "All Instances";
 
     private static readonly Color[] colors = new[] {
@@ -223,5 +223,5 @@
       var groupings = Content.ParameterNames.OrderBy(x => x).ToArray();
       groupComboBox.Items.Clear();
-      groupComboBox.Items.Add(AllRuns);
+      groupComboBox.Items.Add(AllInstances);
       groupComboBox.Items.AddRange(groupings);
       if (selectedGroupItem != null && groupComboBox.Items.Contains(selectedGroupItem)) {
@@ -241,6 +241,10 @@
 
       var selectedProblemItem = (ProblemInstance)problemComboBox.SelectedItem;
+      problemComboBox.DataSource = null;
+      problemComboBox.Items.Clear();
       problems.Clear();
       problems.Add(ProblemInstance.MatchAll);
+      problemComboBox.DataSource = new BindingSource() { DataSource = problems };
+      problemComboBox.DataBindings.DefaultDataSourceUpdateMode = DataSourceUpdateMode.OnPropertyChanged;
       if (problems[0].Equals(selectedProblemItem)) problemComboBox.SelectedItem = problems[0];
       foreach (var p in problemDict.ToList()) {
@@ -282,34 +286,24 @@
     }
 
-    private Dictionary<string, Dictionary<ProblemInstance, List<IRun>>> GroupRuns() {
-      var groupedRuns = new Dictionary<string, Dictionary<ProblemInstance, List<IRun>>>();
-
+    private IEnumerable<AlgorithmInstance> GroupRuns() {
       var table = (string)dataTableComboBox.SelectedItem;
-      if (string.IsNullOrEmpty(table)) return groupedRuns;
+      if (string.IsNullOrEmpty(table)) yield break;
 
       var selectedGroup = (string)groupComboBox.SelectedItem;
-      if (string.IsNullOrEmpty(selectedGroup)) return groupedRuns;
+      if (string.IsNullOrEmpty(selectedGroup)) yield break;
 
       var selectedProblem = (ProblemInstance)problemComboBox.SelectedItem;
-      if (selectedProblem == null) return groupedRuns;
+      if (selectedProblem == null) yield break;
       
       foreach (var x in (from r in Content
-                         where (selectedGroup == AllRuns || r.Parameters.ContainsKey(selectedGroup))
+                         where (selectedGroup == AllInstances || r.Parameters.ContainsKey(selectedGroup))
                            && selectedProblem.Match(r)
                            && r.Results.ContainsKey(table)
                            && r.Visible
-                         let key = selectedGroup == AllRuns ? AllRuns : r.Parameters[selectedGroup].ToString()
+                         let key = selectedGroup == AllInstances ? AllInstances : r.Parameters[selectedGroup].ToString()
                          group r by key into g
-                         select Tuple.Create(g.Key, g.ToList()))) {
-        var pDict = problems.ToDictionary(r => r, _ => new List<IRun>());
-        foreach (var y in x.Item2) {
-          var pd = new ProblemInstance(y);
-          List<IRun> l;
-          if (pDict.TryGetValue(pd, out l)) l.Add(y);
-        }
-        groupedRuns[x.Item1] = pDict.Where(a => a.Value.Count > 0).ToDictionary(a => a.Key, a => a.Value);
-      }
-
-      return groupedRuns;
+                         select new AlgorithmInstance(g.Key, g, problems))) {
+        yield return x;
+      }
     }
 
@@ -326,6 +320,6 @@
       if (targets == null) GenerateDefaultTargets();
 
-      var groupedRuns = GroupRuns();
-      if (groupedRuns.Count == 0) return;
+      var algInstances = GroupRuns().ToList();
+      if (algInstances.Count == 0) return;
 
       var xAxisTitles = new HashSet<string>();
@@ -337,18 +331,19 @@
       // how many targets have been left open at the point when the run ended
       var misses = new Dictionary<string, SortedList<double, int>>();
+      var totalRuns = new Dictionary<string, int>();
 
       var aggregate = aggregateTargetsCheckBox.Checked;
       double minEff = double.MaxValue, maxEff = double.MinValue;
-      var noRuns = 0;
-      foreach (var group in groupedRuns) {
+      foreach (var alg in algInstances) {
+        var noRuns = 0;
         SortedList<double, int> epdfHits = null, epdfMisses = null;
         if (aggregate) {
-          hits[group.Key] = epdfHits = new SortedList<double, int>();
-          misses[group.Key] = epdfMisses = new SortedList<double, int>();
-        }
-        foreach (var problem in group.Value) {
-          var max = problem.Key.IsMaximization();
-          var absTargets = GetAbsoluteTargets(problem.Key).ToArray();
-          foreach (var run in problem.Value) {
+          hits[alg.Name] = epdfHits = new SortedList<double, int>();
+          misses[alg.Name] = epdfMisses = new SortedList<double, int>();
+        }
+        foreach (var problem in alg.GetProblemInstances()) {
+          var max = problem.IsMaximization();
+          var absTargets = GetAbsoluteTargets(problem).ToArray();
+          foreach (var run in alg.GetRuns(problem)) {
             noRuns++;
             var resultsTable = (IndexedDataTable<double>)run.Results[table];
@@ -361,12 +356,13 @@
               var e = efforts[idx];
               if (!aggregate) {
-                var key = group.Key + "@" + (targetsAreRelative
-                  ? (targets[idx] * 100).ToString(CultureInfo.CurrentCulture.NumberFormat) + "%"
-                  : targets[idx].ToString(CultureInfo.CurrentCulture.NumberFormat));
+                var key = alg.Name + "@" + (targetsAreRelative
+                            ? (targets[idx] * 100).ToString(CultureInfo.CurrentCulture.NumberFormat) + "%"
+                            : targets[idx].ToString(CultureInfo.CurrentCulture.NumberFormat));
                 if (!hits.TryGetValue(key, out epdfHits))
                   hits[key] = epdfHits = new SortedList<double, int>();
                 if (!misses.TryGetValue(key, out epdfMisses))
                   misses[key] = epdfMisses = new SortedList<double, int>();
-              }
+                totalRuns[key] = noRuns;
+              };
               var list = e.Item1 ? epdfHits : epdfMisses;
               int v;
@@ -377,9 +373,10 @@
           }
         }
+        if (aggregate) totalRuns[alg.Name] = noRuns;
       }
 
       UpdateTargetChartAxisXBounds(minEff, maxEff);
 
-      DrawTargetsEcdf(hits, misses, noRuns);
+      DrawTargetsEcdf(hits, misses, totalRuns);
 
       if (targets.Length == 1) {
@@ -392,8 +389,8 @@
       targetChart.ChartAreas[0].CursorY.Interval = 0.05;
 
-      UpdateErtTables(groupedRuns);
-    }
-
-    private void DrawTargetsEcdf(Dictionary<string, SortedList<double, int>> hits, Dictionary<string, SortedList<double, int>> misses, int noRuns) {
+      UpdateErtTables(algInstances);
+    }
+
+    private void DrawTargetsEcdf(Dictionary<string, SortedList<double, int>> hits, Dictionary<string, SortedList<double, int>> misses, Dictionary<string, int> noRuns) {
       var colorCount = 0;
       var lineStyleCount = 0;
@@ -418,5 +415,5 @@
         var iter = misses[list.Key].GetEnumerator();
         var moreMisses = iter.MoveNext();
-        var totalTargets = noRuns;
+        var totalTargets = noRuns[list.Key];
         if (aggregateTargetsCheckBox.Checked) totalTargets *= targets.Length;
         var movingTargets = totalTargets;
@@ -594,8 +591,8 @@
     }
 
-    private void UpdateErtTables(Dictionary<string, Dictionary<ProblemInstance, List<IRun>>> groupedRuns) {
+    private void UpdateErtTables(List<AlgorithmInstance> algorithmInstances) {
       ertTableView.Content = null;
       var columns = 1 + targets.Length + 1;
-      var matrix = new string[groupedRuns.Count * groupedRuns.Max(x => x.Value.Count) + groupedRuns.Max(x => x.Value.Count), columns];
+      var matrix = new string[algorithmInstances.Count * algorithmInstances.Max(x => x.GetNumberOfProblemInstances()) + algorithmInstances.Max(x => x.GetNumberOfProblemInstances()), columns];
       var rowCount = 0;
 
@@ -603,5 +600,5 @@
       if (string.IsNullOrEmpty(tableName)) return;
       
-      var problems = groupedRuns.SelectMany(x => x.Value.Keys).Distinct().ToList();
+      var problems = algorithmInstances.SelectMany(x => x.GetProblemInstances()).Distinct().ToList();
 
       foreach (var problem in problems) {
@@ -615,12 +612,12 @@
         rowCount++;
 
-        foreach (var group in groupedRuns) {
-          matrix[rowCount, 0] = group.Key;
-          if (!group.Value.ContainsKey(problem)) {
+        foreach (var alg in algorithmInstances) {
+          matrix[rowCount, 0] = alg.Name;
+          var runs = alg.GetRuns(problem).ToList();
+          if (runs.Count == 0) {
             matrix[rowCount, columns - 1] = "N/A";
             rowCount++;
             continue;
           }
-          var runs = group.Value[problem];
           var result = default(ErtCalculationResult);
           for (var i = 0; i < absTargets.Length; i++) {
@@ -648,21 +645,21 @@
       if (budgets == null) GenerateDefaultBudgets(table);
 
-      var groupedRuns = GroupRuns();
-      if (groupedRuns.Count == 0) return;
+      var algInstances = GroupRuns().ToList();
+      if (algInstances.Count == 0) return;
 
       var colorCount = 0;
       var lineStyleCount = 0;
       
-      foreach (var group in groupedRuns) {
+      foreach (var alg in algInstances) {
         var hits = new Dictionary<string, SortedList<double, double>>();
 
-        foreach (var problem in group.Value) {
-          foreach (var run in problem.Value) {
+        foreach (var problem in alg.GetProblemInstances()) {
+          foreach (var run in alg.GetRuns(problem)) {
             var resultsTable = (IndexedDataTable<double>)run.Results[table];
 
             if (aggregateBudgetsCheckBox.Checked) {
-              CalculateHitsForAllBudgets(hits, resultsTable.Rows.First(), group.Value.Count, problem.Key, group.Key, problem.Value.Count);
+              CalculateHitsForAllBudgets(hits, resultsTable.Rows.First(), alg.GetNumberOfProblemInstances(), problem, alg.Name, alg.GetNumberOfRuns(problem));
             } else {
-              CalculateHitsForEachBudget(hits, resultsTable.Rows.First(), group.Value.Count, problem.Key, group.Key, problem.Value.Count);
+              CalculateHitsForEachBudget(hits, resultsTable.Rows.First(), alg.GetNumberOfProblemInstances(), problem, alg.Name, alg.GetNumberOfRuns(problem));
             }
           }
@@ -697,5 +694,5 @@
 
     private void GenerateDefaultBudgets(string table) {
-      var runs = GroupRuns().SelectMany(x => x.Value.Values).SelectMany(x => x).ToList();
+      var runs = Content;
       var min = runs.Select(x => ((IndexedDataTable<double>)x.Results[table]).Rows.First().Values.Select(y => y.Item1).Min()).Min();
       var max = runs.Select(x => ((IndexedDataTable<double>)x.Results[table]).Rows.First().Values.Select(y => y.Item1).Max()).Max();
@@ -1172,4 +1169,72 @@
     }
 
+    private class AlgorithmInstance : INotifyPropertyChanged {
+      private string name;
+      public string Name {
+        get { return name; }
+        set {
+          if (name == value) return;
+          name = value;
+          OnPropertyChanged("Name");
+        }
+      }
+
+      private Dictionary<ProblemInstance, List<IRun>> performanceData;
+
+      public int GetNumberOfProblemInstances() {
+        return performanceData.Count;
+      }
+
+      public IEnumerable<ProblemInstance> GetProblemInstances() {
+        return performanceData.Keys;
+      }
+
+      public int GetNumberOfRuns(ProblemInstance p) {
+        if (p == ProblemInstance.MatchAll) return performanceData.Select(x => x.Value.Count).Sum();
+        List<IRun> runs;
+        if (performanceData.TryGetValue(p, out runs))
+          return runs.Count;
+
+        return 0;
+      }
+
+      public IEnumerable<IRun> GetRuns(ProblemInstance p) {
+        if (p == ProblemInstance.MatchAll) return performanceData.SelectMany(x => x.Value);
+        List<IRun> runs;
+        if (performanceData.TryGetValue(p, out runs))
+          return runs;
+
+        return Enumerable.Empty<IRun>();
+      }
+
+      public AlgorithmInstance(string name, IEnumerable<IRun> runs, IEnumerable<ProblemInstance> problems) {
+        this.name = name;
+
+        var pDict = problems.ToDictionary(r => r, _ => new List<IRun>());
+        foreach (var y in runs) {
+          var pd = new ProblemInstance(y);
+          List<IRun> l;
+          if (pDict.TryGetValue(pd, out l)) l.Add(y);
+        }
+        performanceData = pDict.Where(x => x.Value.Count > 0).ToDictionary(x => x.Key, x => x.Value);
+      }
+
+      public override bool Equals(object obj) {
+        var other = obj as AlgorithmInstance;
+        if (other == null) return false;
+        return name == other.name;
+      }
+
+      public override int GetHashCode() {
+        return name.GetHashCode();
+      }
+
+      public event PropertyChangedEventHandler PropertyChanged;
+      protected virtual void OnPropertyChanged(string propertyName = null) {
+        var handler = PropertyChanged;
+        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
+      }
+    }
+
     private class ProblemInstance : INotifyPropertyChanged {
       private readonly bool matchAll;
Index: /branches/symbreg-factors-2650/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionView.cs
===================================================================
--- /branches/symbreg-factors-2650/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionView.cs	(revision 14824)
+++ /branches/symbreg-factors-2650/HeuristicLab.Optimization.Views/3.3/RunCollectionViews/RunCollectionView.cs	(revision 14825)
@@ -52,11 +52,14 @@
     }
 
-    public ListView ItemsListView {
-      get { return itemsListView; }
-    }
+    private int EmptyImageIndex { get { return 0; } }
+    private int RunImageIndex { get { return 1; } }
 
     public RunCollectionView() {
       InitializeComponent();
-      itemsGroupBox.Text = "Runs";
+      UpdateGroupBoxText();
+
+      itemsListView.SmallImageList.Images.Add(HeuristicLab.Common.Resources.VSImageLibrary.Nothing);
+      itemsListView.SmallImageList.Images.Add(HeuristicLab.Common.Resources.VSImageLibrary.Class);
+
       itemListViewItemMapping = new Dictionary<IRun, List<ListViewItem>>();
       runCollectionModifiersListView.Evaluator = EvaluateModifications;
@@ -83,10 +86,8 @@
     }
     private void DeregisterItemEvents(IRun item) {
-      item.ItemImageChanged -= new EventHandler(Item_ItemImageChanged);
       item.ToStringChanged -= new EventHandler(Item_ToStringChanged);
       item.PropertyChanged -= Item_PropertyChanged;
     }
     private void RegisterItemEvents(IRun item) {
-      item.ItemImageChanged += new EventHandler(Item_ItemImageChanged);
       item.ToStringChanged += new EventHandler(Item_ToStringChanged);
       item.PropertyChanged += Item_PropertyChanged;
@@ -116,6 +117,7 @@
       itemsListView.Items.Clear();
       itemListViewItemMapping.Clear();
-      RebuildImageList();
       viewHost.Content = null;
+
+      UpdateGroupBoxText();
 
       if (Content != null) {
@@ -129,10 +131,16 @@
           runCollectionModifiersListView.Content = RunCollection.Modifiers;
         }
+
+        ListViewItem[] items = new ListViewItem[Content.Count];
+        int count = 0;
         foreach (IRun item in Content) {
           ListViewItem listViewItem = CreateListViewItem(item);
-          AddListViewItem(listViewItem);
+
           if ((selectedName != null) && item.Name.Equals(selectedName))
             listViewItem.Selected = true;
-        }
+          items[count] = listViewItem;
+          count++;
+        }
+        itemsListView.Items.AddRange(items);
         AdjustListViewColumnSizes();
       } else {
@@ -166,39 +174,36 @@
     }
 
-    private ListViewItem CreateListViewItem(IRun item) {
+    private static readonly string tooltipText = ItemAttribute.GetName(typeof(Run)) + ": " +
+                                    ItemAttribute.GetDescription(typeof(Run));
+    private ListViewItem CreateListViewItem(IRun run) {
       ListViewItem listViewItem = new ListViewItem();
-      if (item == null) {
+      if (run == null) {
         listViewItem.Text = "null";
-        itemsListView.SmallImageList.Images.Add(HeuristicLab.Common.Resources.VSImageLibrary.Nothing);
-        listViewItem.ImageIndex = itemsListView.SmallImageList.Images.Count - 1;
+        listViewItem.ImageIndex = EmptyImageIndex;
+        return listViewItem;
+      }
+
+      listViewItem.Text = run.Name;
+      listViewItem.ToolTipText = tooltipText;
+      listViewItem.ImageIndex = RunImageIndex;
+      listViewItem.Tag = run;
+
+      if (run.Visible) {
+        listViewItem.Font = new Font(listViewItem.Font, FontStyle.Regular);
+        listViewItem.ForeColor = run.Color;
       } else {
-        listViewItem.Text = item.ToString();
-        listViewItem.ToolTipText = item.ItemName + ": " + item.ItemDescription;
-        itemsListView.SmallImageList.Images.Add(item.ItemImage);
-        listViewItem.ImageIndex = itemsListView.SmallImageList.Images.Count - 1;
-        listViewItem.Tag = item;
-
-        if (item.Visible) {
-          listViewItem.Font = new Font(listViewItem.Font, FontStyle.Regular);
-          listViewItem.ForeColor = item.Color;
-        } else {
-          listViewItem.Font = new Font(listViewItem.Font, FontStyle.Italic);
-          listViewItem.ForeColor = Color.LightGray;
-        }
-      }
+        listViewItem.Font = new Font(listViewItem.Font, FontStyle.Italic);
+        listViewItem.ForeColor = Color.LightGray;
+      }
+
+      if (!itemListViewItemMapping.ContainsKey(run)) {
+        itemListViewItemMapping.Add(run, new List<ListViewItem>());
+        RegisterItemEvents(run);
+      }
+      itemListViewItemMapping[run].Add(listViewItem);
+
       return listViewItem;
     }
-    private void AddListViewItem(ListViewItem listViewItem) {
-      if (listViewItem == null) throw new ArgumentNullException();
-      itemsListView.Items.Add(listViewItem);
-      IRun run = listViewItem.Tag as IRun;
-      if (run != null) {
-        if (!itemListViewItemMapping.ContainsKey(run)) {
-          itemListViewItemMapping.Add(run, new List<ListViewItem>());
-          RegisterItemEvents(run);
-        }
-        itemListViewItemMapping[run].Add(listViewItem);
-      }
-    }
+
     private void RemoveListViewItem(ListViewItem listViewItem) {
       if (listViewItem == null) throw new ArgumentNullException();
@@ -213,12 +218,5 @@
       listViewItem.Remove();
     }
-    private void UpdateListViewItemImage(ListViewItem listViewItem) {
-      if (listViewItem == null) throw new ArgumentNullException();
-      IRun item = listViewItem.Tag as IRun;
-      int i = listViewItem.ImageIndex;
-      itemsListView.SmallImageList.Images[i] = item == null ? HeuristicLab.Common.Resources.VSImageLibrary.Nothing : item.ItemImage;
-      listViewItem.ImageIndex = -1;
-      listViewItem.ImageIndex = i;
-    }
+
     private void UpdateListViewItemText(ListViewItem listViewItem) {
       if (listViewItem == null) throw new ArgumentNullException();
@@ -239,4 +237,9 @@
         return listViewItems == null ? Enumerable.Empty<ListViewItem>() : listViewItems;
       }
+    }
+
+    private void UpdateGroupBoxText() {
+      if (Content == null || Content.Count == 0) itemsGroupBox.Text = "Runs";
+      else itemsGroupBox.Text = @"Runs (" + Content.Count + @")";
     }
 
@@ -393,5 +396,6 @@
         RunCollection.UpdateOfRunsInProgress = true;
         RunCollection.Modify();
-      } finally {
+      }
+      finally {
         ReadOnly = false;
         RunCollection.UpdateOfRunsInProgress = false;
@@ -406,11 +410,11 @@
         Invoke(new CollectionItemsChangedEventHandler<IRun>(Content_ItemsAdded), sender, e);
       else {
-        foreach (IRun item in e.Items)
-          AddListViewItem(CreateListViewItem(item));
-
+        var items = e.Items.Select(CreateListViewItem).ToArray();
+        itemsListView.Items.AddRange(items);
         AdjustListViewColumnSizes();
         analyzeRunsToolStripDropDownButton.Enabled = itemsListView.Items.Count > 0;
         clearButton.Enabled = itemsListView.Items.Count > 0 && !Content.IsReadOnly && !ReadOnly;
         runCollectionConstraintCollectionView.ReadOnly = itemsListView.Items.Count == 0;
+        UpdateGroupBoxText();
       }
     }
@@ -425,8 +429,8 @@
           if (listViewItem != null) RemoveListViewItem(listViewItem);
         }
-        RebuildImageList();
         analyzeRunsToolStripDropDownButton.Enabled = itemsListView.Items.Count > 0;
         clearButton.Enabled = itemsListView.Items.Count > 0 && !Content.IsReadOnly && !ReadOnly;
         runCollectionConstraintCollectionView.ReadOnly = itemsListView.Items.Count == 0;
+        UpdateGroupBoxText();
       }
     }
@@ -441,7 +445,6 @@
           if (listViewItem != null) RemoveListViewItem(listViewItem);
         }
-        RebuildImageList();
-        foreach (IRun item in e.Items)
-          AddListViewItem(CreateListViewItem(item));
+        var items = e.Items.Select(CreateListViewItem).ToArray();
+        itemsListView.Items.AddRange(items);
 
         AdjustListViewColumnSizes();
@@ -449,4 +452,5 @@
         clearButton.Enabled = itemsListView.Items.Count > 0 && !Content.IsReadOnly && !ReadOnly;
         runCollectionConstraintCollectionView.ReadOnly = itemsListView.Items.Count == 0;
+        UpdateGroupBoxText();
       }
     }
@@ -456,12 +460,11 @@
         suppressUpdates = RunCollection.UpdateOfRunsInProgress;
         if (!suppressUpdates) {
-          foreach (IRun item in Content) {
-            //remove only the first matching ListViewItem, because the IRun could be contained multiple times in the ItemCollection
-            ListViewItem listViewItem = GetListViewItemsForItem(item).FirstOrDefault();
-            if (listViewItem != null) RemoveListViewItem(listViewItem);
+          foreach (IRun run in Content) {
+            DeregisterItemEvents(run);
           }
-          RebuildImageList();
-          foreach (IRun item in Content)
-            AddListViewItem(CreateListViewItem(item));
+          itemsListView.Items.Clear();
+          itemListViewItemMapping.Clear();
+          var items = Content.Select(CreateListViewItem).ToArray();
+          itemsListView.Items.AddRange(items);
 
           AdjustListViewColumnSizes();
@@ -469,4 +472,5 @@
           clearButton.Enabled = itemsListView.Items.Count > 0 && !Content.IsReadOnly && !ReadOnly;
           runCollectionConstraintCollectionView.ReadOnly = itemsListView.Items.Count == 0;
+          UpdateGroupBoxText();
         }
       }
@@ -475,14 +479,4 @@
 
     #region Item Events
-    private void Item_ItemImageChanged(object sender, EventArgs e) {
-      if (suppressUpdates) return;
-      if (InvokeRequired)
-        Invoke(new EventHandler(Item_ItemImageChanged), sender, e);
-      else {
-        IRun item = (IRun)sender;
-        foreach (ListViewItem listViewItem in GetListViewItemsForItem(item))
-          UpdateListViewItemImage(listViewItem);
-      }
-    }
     private void Item_ToStringChanged(object sender, EventArgs e) {
       if (suppressUpdates) return;
@@ -528,12 +522,4 @@
       }
     }
-    private void RebuildImageList() {
-      itemsListView.SmallImageList.Images.Clear();
-      foreach (ListViewItem listViewItem in itemsListView.Items) {
-        IRun item = listViewItem.Tag as IRun;
-        itemsListView.SmallImageList.Images.Add(item == null ? HeuristicLab.Common.Resources.VSImageLibrary.Nothing : item.ItemImage);
-        listViewItem.ImageIndex = itemsListView.SmallImageList.Images.Count - 1;
-      }
-    }
     #endregion
   }
Index: /branches/symbreg-factors-2650/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeILEmittingInterpreter.cs
===================================================================
--- /branches/symbreg-factors-2650/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeILEmittingInterpreter.cs	(revision 14824)
+++ /branches/symbreg-factors-2650/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeILEmittingInterpreter.cs	(revision 14825)
@@ -260,5 +260,5 @@
               il.Emit(System.Reflection.Emit.OpCodes.Add);
             }
-            il.Emit(System.Reflection.Emit.OpCodes.Ldc_I4, nArgs);
+            il.Emit(System.Reflection.Emit.OpCodes.Ldc_R8, (double)nArgs);
             il.Emit(System.Reflection.Emit.OpCodes.Div);
             return;
@@ -458,4 +458,5 @@
             il.Emit(System.Reflection.Emit.OpCodes.Ldc_I4_0); // > 0
             il.Emit(System.Reflection.Emit.OpCodes.Cgt);
+            il.Emit(System.Reflection.Emit.OpCodes.Conv_R8); // convert to float64
             il.Emit(System.Reflection.Emit.OpCodes.Ldc_R8, 2.0); // * 2
             il.Emit(System.Reflection.Emit.OpCodes.Mul);
@@ -476,4 +477,6 @@
               il.Emit(System.Reflection.Emit.OpCodes.Xor);
             }
+            il.Emit(System.Reflection.Emit.OpCodes.Conv_R8); // convert to float64
+
             il.Emit(System.Reflection.Emit.OpCodes.Ldc_R8, 2.0); // * 2
             il.Emit(System.Reflection.Emit.OpCodes.Mul);
@@ -487,4 +490,5 @@
 
             il.Emit(System.Reflection.Emit.OpCodes.Cgt); // 1 (>) / 0 (otherwise)
+            il.Emit(System.Reflection.Emit.OpCodes.Conv_R8); // convert to float64
             il.Emit(System.Reflection.Emit.OpCodes.Ldc_R8, 2.0); // * 2
             il.Emit(System.Reflection.Emit.OpCodes.Mul);
@@ -497,4 +501,5 @@
             CompileInstructions(il, state, ds);
             il.Emit(System.Reflection.Emit.OpCodes.Clt);
+            il.Emit(System.Reflection.Emit.OpCodes.Conv_R8); // convert to float64
             il.Emit(System.Reflection.Emit.OpCodes.Ldc_R8, 2.0); // * 2
             il.Emit(System.Reflection.Emit.OpCodes.Mul);
Index: /branches/symbreg-factors-2650/HeuristicLab.Problems.DataAnalysis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Views-3.4.csproj
===================================================================
--- /branches/symbreg-factors-2650/HeuristicLab.Problems.DataAnalysis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Views-3.4.csproj	(revision 14824)
+++ /branches/symbreg-factors-2650/HeuristicLab.Problems.DataAnalysis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Views-3.4.csproj	(revision 14825)
@@ -215,4 +215,5 @@
     <Compile Include="Interfaces\IGradientChart.cs" />
     <Compile Include="Interfaces\IDataPreprocessorStarter.cs" />
+    <Compile Include="MenuItems\ChangeDataOfOptimizersMenuItem.cs" />
     <Compile Include="MenuItems\ShrinkDataAnalysisRunsMenuItem.cs" />
     <Compile Include="ModifiableDatasetView.cs">
Index: /branches/symbreg-factors-2650/HeuristicLab.Problems.DataAnalysis.Views/3.4/MenuItems/ChangeDataOfOptimizersMenuItem.cs
===================================================================
--- /branches/symbreg-factors-2650/HeuristicLab.Problems.DataAnalysis.Views/3.4/MenuItems/ChangeDataOfOptimizersMenuItem.cs	(revision 14825)
+++ /branches/symbreg-factors-2650/HeuristicLab.Problems.DataAnalysis.Views/3.4/MenuItems/ChangeDataOfOptimizersMenuItem.cs	(revision 14825)
@@ -0,0 +1,115 @@
+﻿#region License Information
+
+/* HeuristicLab
+ * Copyright (C) 2002-2014 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.Linq;
+using System.Windows.Forms;
+using HeuristicLab.Common;
+using HeuristicLab.MainForm;
+using HeuristicLab.Optimization;
+using HeuristicLab.Optimizer;
+using MenuItem = HeuristicLab.MainForm.WindowsForms.MenuItem;
+
+namespace HeuristicLab.Problems.DataAnalysis.Views {
+  internal sealed class ChangeDataOfOptimizersMenuItem : MenuItem, IOptimizerUserInterfaceItemProvider {
+    public override string Name {
+      get { return "Change problem data"; }
+    }
+    public override IEnumerable<string> Structure {
+      get { return new string[] { "&Edit", "&Data Analysis" }; }
+    }
+    public override int Position {
+      get { return 5400; }
+    }
+    public override string ToolTipText {
+      get { return "This command changes the problem data of all optimizers in the active view."; }
+    }
+
+    protected override void OnToolStripItemSet(EventArgs e) {
+      ToolStripItem.Enabled = false;
+    }
+
+    protected override void OnActiveViewChanged(object sender, EventArgs e) {
+      IContentView activeView = MainFormManager.MainForm.ActiveView as IContentView;
+      if (activeView == null) {
+        ToolStripItem.Enabled = false;
+        return;
+      }
+
+      var optimizer = activeView.Content as IOptimizer;
+      if (optimizer == null) {
+        ToolStripItem.Enabled = false;
+        return;
+      }
+
+      ToolStripItem.Enabled = true;
+    }
+
+    public override void Execute() {
+      using (OpenFileDialog openFileDialog = new OpenFileDialog()) {
+        openFileDialog.Title = "Open Problem file";
+        openFileDialog.FileName = "Item";
+        openFileDialog.Multiselect = false;
+        openFileDialog.DefaultExt = "hl";
+        openFileDialog.Filter = "HeuristicLab Files|*.hl|All Files|*.*";
+
+        if (openFileDialog.ShowDialog() != DialogResult.OK) return;
+
+        var content = ContentManager.Load(openFileDialog.FileName);
+        var problem = content as IDataAnalysisProblem;
+        IDataAnalysisProblemData problemData = null;
+        if (problem != null) {
+          problemData = problem.ProblemData;
+        } else {
+          problemData = content as IDataAnalysisProblemData;
+        }
+        if (problemData == null) throw new ArgumentException("The specified file does not contain a HeuristicLab problem.");
+
+        var activeView = (IContentView)MainFormManager.MainForm.ActiveView;
+        var optimizer = (IOptimizer)activeView.Content;
+        var newOptimizer = (IOptimizer)optimizer.Clone();
+
+        var algorithm = newOptimizer as IAlgorithm;
+        if (algorithm != null) {
+          ChangeProblemData(algorithm, problemData);
+        }
+        foreach (var alg in newOptimizer.NestedOptimizers.OfType<IAlgorithm>()) {
+          ChangeProblemData(alg, (IDataAnalysisProblemData)problemData.Clone());
+          if (problem != null) alg.Name += " " + problem.Name;
+        }
+
+        MainFormManager.MainForm.ShowContent(newOptimizer);
+      }
+
+    }
+
+    private void ChangeProblemData(IAlgorithm algorithm, IDataAnalysisProblemData problemData) {
+      if (algorithm == null) throw new ArgumentNullException("algorithm");
+      if (problemData == null) throw new ArgumentNullException("problemData");
+
+      var problem = algorithm.Problem as IDataAnalysisProblem;
+      if (problem != null) problem.ProblemDataParameter.ActualValue = problemData;
+    }
+  }
+}
Index: /branches/symbreg-factors-2650/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/ConfidenceRegressionSolutionEstimatedValuesView.cs
===================================================================
--- /branches/symbreg-factors-2650/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/ConfidenceRegressionSolutionEstimatedValuesView.cs	(revision 14824)
+++ /branches/symbreg-factors-2650/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/ConfidenceRegressionSolutionEstimatedValuesView.cs	(revision 14825)
@@ -61,15 +61,15 @@
       foreach (var row in Enumerable.Range(0, Content.ProblemData.Dataset.Rows)) {
         estimated_var.MoveNext();
-        matrix[row, 7] = estimated_var.Current.ToString();
+        matrix[row, 8] = estimated_var.Current.ToString();
       }
 
       foreach (var row in Content.ProblemData.TrainingIndices) {
         estimated_var_training.MoveNext();
-        matrix[row, 8] = estimated_var_training.Current.ToString();
+        matrix[row, 9] = estimated_var_training.Current.ToString();
       }
 
       foreach (var row in Content.ProblemData.TestIndices) {
         estimated_var_test.MoveNext();
-        matrix[row, 9] = estimated_var_test.Current.ToString();
+        matrix[row, 10] = estimated_var_test.Current.ToString();
       }
 
Index: /branches/symbreg-factors-2650/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionEstimatedValuesView.cs
===================================================================
--- /branches/symbreg-factors-2650/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionEstimatedValuesView.cs	(revision 14824)
+++ /branches/symbreg-factors-2650/HeuristicLab.Problems.DataAnalysis.Views/3.4/Regression/RegressionSolutionEstimatedValuesView.cs	(revision 14825)
@@ -81,5 +81,5 @@
 
     protected virtual StringMatrix CreateValueMatrix() {
-      string[,] values = new string[Content.ProblemData.Dataset.Rows, 7];
+      string[,] values = new string[Content.ProblemData.Dataset.Rows, 8];
 
       double[] target = Content.ProblemData.Dataset.GetDoubleValues(Content.ProblemData.TargetVariable).ToArray();
@@ -101,14 +101,15 @@
         estimated.MoveNext();
         double est = estimated.Current;
-        double res = Math.Abs(est - target[row]);
+        double res = target[row] - est;
         values[row, 0] = row.ToString();
         values[row, 1] = target[row].ToString();
         values[row, 2] = est.ToString();
-        values[row, 5] = Math.Abs(res).ToString();
-        values[row, 6] = Math.Abs(res / target[row]).ToString();
+        values[row, 5] = res.ToString();
+        values[row, 6] = Math.Abs(res).ToString();
+        values[row, 7] = Math.Abs(res / target[row]).ToString();
       }
 
       var matrix = new StringMatrix(values);
-      matrix.ColumnNames = new string[] { "Id", TARGETVARIABLE_SERIES_NAME, ESTIMATEDVALUES_SERIES_NAME, ESTIMATEDVALUES_TRAINING_SERIES_NAME, ESTIMATEDVALUES_TEST_SERIES_NAME, "Absolute Error (all)", "Relative Error (all)" };
+      matrix.ColumnNames = new string[] { "Id", TARGETVARIABLE_SERIES_NAME, ESTIMATEDVALUES_SERIES_NAME, ESTIMATEDVALUES_TRAINING_SERIES_NAME, ESTIMATEDVALUES_TEST_SERIES_NAME, "Residuals (all)", "Absolute Error (all)", "Relative Error (all)" };
       matrix.SortableView = true;
       return matrix;
Index: /branches/symbreg-factors-2650/HeuristicLab.Problems.DataAnalysis.Views/3.4/Solution Views/DataAnalysisSolutionView.cs
===================================================================
--- /branches/symbreg-factors-2650/HeuristicLab.Problems.DataAnalysis.Views/3.4/Solution Views/DataAnalysisSolutionView.cs	(revision 14824)
+++ /branches/symbreg-factors-2650/HeuristicLab.Problems.DataAnalysis.Views/3.4/Solution Views/DataAnalysisSolutionView.cs	(revision 14825)
@@ -29,5 +29,4 @@
 using HeuristicLab.MainForm;
 using HeuristicLab.Optimization;
-using HeuristicLab.Optimization.Views;
 using HeuristicLab.Persistence.Default.Xml;
 using HeuristicLab.PluginInfrastructure;
@@ -97,5 +96,5 @@
     }
 
-    protected override void itemsListView_DoubleClick(object sender, EventArgs e) {
+    protected sealed override void itemsListView_DoubleClick(object sender, EventArgs e) {
       if (itemsListView.SelectedItems.Count != 1) return;
 
@@ -103,6 +102,7 @@
       Type viewType = itemsListView.SelectedItems[0].Tag as Type;
       if (result != null) {
-        IContentView view = MainFormManager.MainForm.ShowContent(result, typeof(ResultView));
+        IContentView view = MainFormManager.MainForm.ShowContent(result.Value);
         if (view != null) {
+          view.Caption = result.Name;
           view.ReadOnly = ReadOnly;
           view.Locked = Locked;
Index: /branches/symbreg-factors-2650/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj
===================================================================
--- /branches/symbreg-factors-2650/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj	(revision 14824)
+++ /branches/symbreg-factors-2650/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj	(revision 14825)
@@ -157,4 +157,14 @@
     <Compile Include="Regression\FeatureSelection\FeatureSelection.cs" />
     <Compile Include="Regression\FeatureSelection\FeatureSelectionInstanceProvider.cs" />
+    <Compile Include="Regression\MibaFriction\CF3.cs" />
+    <Compile Include="Regression\MibaFriction\Wear1.cs" />
+    <Compile Include="Regression\MibaFriction\Wear2.cs" />
+    <Compile Include="Regression\MibaFriction\Temp2.cs" />
+    <Compile Include="Regression\MibaFriction\Temp1.cs" />
+    <Compile Include="Regression\MibaFriction\NvhRating.cs" />
+    <Compile Include="Regression\MibaFriction\CF4.cs" />
+    <Compile Include="Regression\MibaFriction\CF2.cs" />
+    <Compile Include="Regression\MibaFriction\CF1.cs" />
+    <Compile Include="Regression\MibaFriction\MibaFrictionRegressionInstanceProvider.cs" />
     <Compile Include="Regression\VariableNetworks\LinearVariableNetwork.cs" />
     <Compile Include="Regression\VariableNetworks\GaussianProcessVariableNetwork.cs" />
@@ -246,4 +256,5 @@
     <None Include="Properties\AssemblyInfo.cs.frame" />
     <EmbeddedResource Include="Regression\Data\RegressionRealWorld.zip" />
+    <EmbeddedResource Include="Regression\Data\MibaFriction.zip" />
   </ItemGroup>
   <ItemGroup>
Index: /branches/symbreg-factors-2650/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/MibaFriction/CF1.cs
===================================================================
--- /branches/symbreg-factors-2650/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/MibaFriction/CF1.cs	(revision 14825)
+++ /branches/symbreg-factors-2650/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/MibaFriction/CF1.cs	(revision 14825)
@@ -0,0 +1,51 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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
+
+namespace HeuristicLab.Problems.Instances.DataAnalysis {
+  public class CF1 : ResourceRegressionDataDescriptor {
+    public override string Name { get { return "CF1"; } }
+    public override string Description {
+      get {
+        return "Coefficient of friction, Publication: E. Lughofer, G. K. Kronberger, M. Kommenda, S. Saminger-Platz, " +
+               "A. Promberger, F. Nickel, S. M. Winkler, M. Affenzeller - Robust Fuzzy Modeling and Symbolic Regression " +
+               "for Establishing Accurate and Interpretable Prediction Models in Supervising Tribological Systems - " +
+               "Proceedings of the 8th International Joint Conference on Computational Intelligence, Porto, Portugal, 2016, pp. 51-63";
+      }
+    }
+    protected override string TargetVariable { get { return "Cf1"; } }
+    protected override string[] VariableNames {
+      get { return new string[] { "Partition", "Source1", "Source2", "x1", "Material_Cat", "x2", "x3", "x4", "x5", "x6", "x7", "x8", "x9", "x10", "x11", "x12", "x13", "x14", "x15", "x16", "Material", "Grooving", "Oil", "x17", "x18", "x19", "x20", "x21", "x22", "Cf1"
+ }; }
+    }
+
+    // TODO: include string variables after factor branch integration
+    protected override string[] AllowedInputVariables {
+      get { return new string[] { /* "Material_Cat", */
+        "x2", "x3", "x4", "x5", "x6", "x7", "x8", "x9", "x10", "x11", "x12", "x13", "x14", "x15", "x16",
+        /* "Material", "Grooving", "Oil", */                                           
+        "x17", "x20", "x22" }; }
+    }
+    protected override int TrainingPartitionStart { get { return 0; } }
+    protected override int TrainingPartitionEnd { get { return 611; } }
+    protected override int TestPartitionStart { get { return 611; } }
+    protected override int TestPartitionEnd { get { return 815; } }
+  }
+}
Index: /branches/symbreg-factors-2650/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/MibaFriction/CF2.cs
===================================================================
--- /branches/symbreg-factors-2650/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/MibaFriction/CF2.cs	(revision 14825)
+++ /branches/symbreg-factors-2650/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/MibaFriction/CF2.cs	(revision 14825)
@@ -0,0 +1,52 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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
+
+namespace HeuristicLab.Problems.Instances.DataAnalysis {
+  public class CF2 : ResourceRegressionDataDescriptor {
+    public override string Name { get { return "CF2"; } }
+    public override string Description {
+      get {
+        return "Coefficient of friction, Publication: E. Lughofer, G. K. Kronberger, M. Kommenda, S. Saminger-Platz, " +
+               "A. Promberger, F. Nickel, S. M. Winkler, M. Affenzeller - Robust Fuzzy Modeling and Symbolic Regression " +
+               "for Establishing Accurate and Interpretable Prediction Models in Supervising Tribological Systems - " +
+               "Proceedings of the 8th International Joint Conference on Computational Intelligence, Porto, Portugal, 2016, pp. 51-63";
+      }
+    }
+    protected override string TargetVariable { get { return "Cf2"; } }
+    protected override string[] VariableNames {
+      get { return new string[] { "Partition", "Source1", "Source2", "x1", "Material_Cat", "x2", "x3", "x4", "x5", "x6", "x7", "x8", "x9", "x10", "x11", "x12", "x13", "x14", "x15", "x16", "Material", "Grooving", "Oil", "x17", "x18", "x19", "x20", "x21", "x22", "Cf2"
+ };
+      }
+    }
+
+    // TODO: include string variables after factor branch integration
+    protected override string[] AllowedInputVariables {
+      get { return new string[] { /* "Material_Cat", */
+        "Source1", "Source2", "x1", "x2", "x3", "x4", "x5", "x6", "x7", "x8", "x9", "x10", "x11", "x12", "x13", "x14", "x15", "x16",
+        /* "Material", "Grooving", "Oil", */                                           
+        "x17", "x18", "x19", "x20", "x21", "x22" }; }
+    }
+    protected override int TrainingPartitionStart { get { return 0; } }
+    protected override int TrainingPartitionEnd { get { return 2196; } }
+    protected override int TestPartitionStart { get { return 2196; } }
+    protected override int TestPartitionEnd { get { return 2921; } }
+  }
+}
Index: /branches/symbreg-factors-2650/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/MibaFriction/CF3.cs
===================================================================
--- /branches/symbreg-factors-2650/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/MibaFriction/CF3.cs	(revision 14825)
+++ /branches/symbreg-factors-2650/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/MibaFriction/CF3.cs	(revision 14825)
@@ -0,0 +1,52 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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
+
+namespace HeuristicLab.Problems.Instances.DataAnalysis {
+  public class CF3 : ResourceRegressionDataDescriptor {
+    public override string Name { get { return "CF3"; } }
+    public override string Description {
+      get {
+        return "Coefficient of friction, Publication: E. Lughofer, G. K. Kronberger, M. Kommenda, S. Saminger-Platz, " +
+               "A. Promberger, F. Nickel, S. M. Winkler, M. Affenzeller - Robust Fuzzy Modeling and Symbolic Regression " +
+               "for Establishing Accurate and Interpretable Prediction Models in Supervising Tribological Systems - " +
+               "Proceedings of the 8th International Joint Conference on Computational Intelligence, Porto, Portugal, 2016, pp. 51-63";
+      }
+    }
+    protected override string TargetVariable { get { return "Cf3"; } }
+    protected override string[] VariableNames {
+      get { return new string[] { "Partition", "Source1", "Source2", "x1", "Material_Cat", "x2", "x3", "x4", "x5", "x6", "x7", "x8", "x9", "x10", "x11", "x12", "x13", "x14", "x15", "x16", "Material", "Grooving", "Oil", "x17", "x18", "x19", "x20", "x21", "x22", "Cf3"
+ };
+      }
+    }
+
+    // TODO: include string variables after factor branch integration
+    protected override string[] AllowedInputVariables {
+      get { return new string[] { /* "Material_Cat", */
+        /*"Source1", "Source2",*/ "x1", "x2", "x3", "x4", "x5", "x6", "x8", "x9", "x10", "x11", "x12", "x13", "x14", "x15", "x16",
+        /* "Material", "Grooving", "Oil", */                                           
+        "x17", "x22" }; }
+    }
+    protected override int TrainingPartitionStart { get { return 0; } }
+    protected override int TrainingPartitionEnd { get { return 441; } }
+    protected override int TestPartitionStart { get { return 441; } }
+    protected override int TestPartitionEnd { get { return 657; } }
+  }
+}
Index: /branches/symbreg-factors-2650/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/MibaFriction/CF4.cs
===================================================================
--- /branches/symbreg-factors-2650/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/MibaFriction/CF4.cs	(revision 14825)
+++ /branches/symbreg-factors-2650/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/MibaFriction/CF4.cs	(revision 14825)
@@ -0,0 +1,52 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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
+
+namespace HeuristicLab.Problems.Instances.DataAnalysis {
+  public class CF4 : ResourceRegressionDataDescriptor {
+    public override string Name { get { return "CF4"; } }
+    public override string Description {
+      get {
+        return "Coefficient of friction, Publication: E. Lughofer, G. K. Kronberger, M. Kommenda, S. Saminger-Platz, " +
+               "A. Promberger, F. Nickel, S. M. Winkler, M. Affenzeller - Robust Fuzzy Modeling and Symbolic Regression " +
+               "for Establishing Accurate and Interpretable Prediction Models in Supervising Tribological Systems - " +
+               "Proceedings of the 8th International Joint Conference on Computational Intelligence, Porto, Portugal, 2016, pp. 51-63";
+      }
+    }
+    protected override string TargetVariable { get { return "Cf4"; } }
+    protected override string[] VariableNames {
+      get { return new string[] { "Partition", "Source1", "Source2", "x1", "Material_Cat", "x2", "x3", "x4", "x5", "x6", "x7", "x8", "x9", "x10", "x11", "x12", "x13", "x14", "x15", "x16", "Material", "Grooving", "Oil", "x17", "x18", "x19", "x20", "x21", "x22", "Cf4"
+ };
+      }
+    }
+
+    // TODO: include string variables after factor branch integration
+    protected override string[] AllowedInputVariables {
+      get { return new string[] { /* "Material_Cat", */
+        "x1", "x2", "x3", "x4", "x5", "x6", "x8", "x9", "x10", "x11", "x12", "x13", "x14", "x15", "x16",
+        /* "Material", "Grooving", "Oil", */                                           
+        "x17", "x22" }; }
+    }
+    protected override int TrainingPartitionStart { get { return 0; } }
+    protected override int TrainingPartitionEnd { get { return 437; } }
+    protected override int TestPartitionStart { get { return 437; } }
+    protected override int TestPartitionEnd { get { return 649; } }
+  }
+}
Index: /branches/symbreg-factors-2650/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/MibaFriction/MibaFrictionRegressionInstanceProvider.cs
===================================================================
--- /branches/symbreg-factors-2650/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/MibaFriction/MibaFrictionRegressionInstanceProvider.cs	(revision 14825)
+++ /branches/symbreg-factors-2650/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/MibaFriction/MibaFrictionRegressionInstanceProvider.cs	(revision 14825)
@@ -0,0 +1,78 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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.IO;
+using System.IO.Compression;
+using System.Linq;
+
+namespace HeuristicLab.Problems.Instances.DataAnalysis {
+  public class MibaFrictionRegressionInstanceProvider : ResourceRegressionInstanceProvider {
+    public override string Name {
+      get { return "Miba Friction Datasets"; }
+    }
+    public override string Description {
+      get {
+        return "A set of datasets for regression modelling of friction characteristics of friction plate systems. The data stem from tests of friction plates with commercial test benches for wet friction plate systems. Friction characteristics such as the coefficient of friction, wear, and temperatures are measured at different loads. The goal is to predict these values given load parameters. Data have been kindly provided by Miba frictec company";
+      }
+    }
+    public override Uri WebLink {
+      get { return null; }
+    }
+    public override string ReferencePublication {
+      get { return "E. Lughofer, G. K. Kronberger, M. Kommenda, S. Saminger-Platz, A. Promberger, F. Nickel, S. M. Winkler, M. Affenzeller - Robust Fuzzy Modeling and Symbolic Regression for Establishing Accurate and Interpretable Prediction Models in Supervising Tribological Systems - Proceedings of the 8th International Joint Conference on Computational Intelligence, Porto, Portugal, 2016, pp. 51-63"; }
+    }
+
+    protected override string FileName { get { return "MibaFriction"; } }
+
+    public override IEnumerable<IDataDescriptor> GetDataDescriptors() {
+      List<ResourceRegressionDataDescriptor> descriptorList = new List<ResourceRegressionDataDescriptor>();
+      descriptorList.Add(new CF1());
+      descriptorList.Add(new CF2());
+      descriptorList.Add(new CF3());
+      descriptorList.Add(new CF4());
+      descriptorList.Add(new NvhRating());
+      descriptorList.Add(new Temp1());
+      descriptorList.Add(new Temp2());
+      descriptorList.Add(new Wear1());
+      descriptorList.Add(new Wear2());
+      var solutionsArchiveName = GetResourceName(FileName + @"\.zip");
+      if (!String.IsNullOrEmpty(solutionsArchiveName)) {
+        using (var solutionsZipFile = new ZipArchive(GetType().Assembly.GetManifestResourceStream(solutionsArchiveName), ZipArchiveMode.Read)) {
+          IList<string> entries = new List<string>();
+          foreach (var curEntry in solutionsZipFile.Entries) {
+            entries.Add(curEntry.Name);
+          }
+          foreach (var entry in entries.OrderBy(x => x)) {
+            string prettyName = Path.GetFileNameWithoutExtension(entry);
+            ResourceRegressionDataDescriptor desc = descriptorList.Where(x => x.Name.Equals(prettyName)).FirstOrDefault();
+            if (desc != null) {
+              desc.ResourceName = entry;
+              yield return desc;
+            } else
+              throw new ArgumentNullException("No descriptor could be found for this entry.");
+          }
+        }
+      }
+    }
+  }
+}
Index: /branches/symbreg-factors-2650/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/MibaFriction/NvhRating.cs
===================================================================
--- /branches/symbreg-factors-2650/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/MibaFriction/NvhRating.cs	(revision 14825)
+++ /branches/symbreg-factors-2650/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/MibaFriction/NvhRating.cs	(revision 14825)
@@ -0,0 +1,52 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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
+
+namespace HeuristicLab.Problems.Instances.DataAnalysis {
+  public class NvhRating : ResourceRegressionDataDescriptor {
+    public override string Name { get { return "NvhRating"; } }
+    public override string Description {
+      get {
+        return "Noise-vibration-harshness rating (1..8), Publication: E. Lughofer, G. K. Kronberger, M. Kommenda, S. Saminger-Platz, " +
+               "A. Promberger, F. Nickel, S. M. Winkler, M. Affenzeller - Robust Fuzzy Modeling and Symbolic Regression " +
+               "for Establishing Accurate and Interpretable Prediction Models in Supervising Tribological Systems - " +
+               "Proceedings of the 8th International Joint Conference on Computational Intelligence, Porto, Portugal, 2016, pp. 51-63";
+      }
+    }
+    protected override string TargetVariable { get { return "NVH_Rating"; } }
+    protected override string[] VariableNames {
+      get { return new string[] { "Partition", "Source1", "Source2", "x1", "Material_Cat", "x2", "x3", "x4", "x5", "x6", "x7", "x8", "x9", "x10", "x11", "x12", "x13", "x14", "x15", "x16", "Material", "Grooving", "Oil", "x17", "x18", "x19", "x20", "x21", "x22", "NVH_Rating"
+ };
+      }
+    }
+
+    // TODO: include string variables after factor branch integration
+    protected override string[] AllowedInputVariables {
+      get { return new string[] { /* "Material_Cat", */
+        "x1", "x2", "x3", "x4", "x5", "x6", "x8", "x9", "x10", "x11", "x12", "x13", "x14", "x15", "x16",
+        /* "Material", "Grooving", "Oil", */                                           
+        "x17", "x18", "x19", "x21", "x22" }; }
+    }
+    protected override int TrainingPartitionStart { get { return 0; } }
+    protected override int TrainingPartitionEnd { get { return 2636; } }
+    protected override int TestPartitionStart { get { return 2636; } }
+    protected override int TestPartitionEnd { get { return 3943; } }
+  }
+}
Index: /branches/symbreg-factors-2650/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/MibaFriction/Temp1.cs
===================================================================
--- /branches/symbreg-factors-2650/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/MibaFriction/Temp1.cs	(revision 14825)
+++ /branches/symbreg-factors-2650/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/MibaFriction/Temp1.cs	(revision 14825)
@@ -0,0 +1,52 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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
+
+namespace HeuristicLab.Problems.Instances.DataAnalysis {
+  public class Temp1 : ResourceRegressionDataDescriptor {
+    public override string Name { get { return "Temp1"; } }
+    public override string Description {
+      get {
+        return "Temperature, Publication: E. Lughofer, G. K. Kronberger, M. Kommenda, S. Saminger-Platz, " +
+               "A. Promberger, F. Nickel, S. M. Winkler, M. Affenzeller - Robust Fuzzy Modeling and Symbolic Regression " +
+               "for Establishing Accurate and Interpretable Prediction Models in Supervising Tribological Systems - " +
+               "Proceedings of the 8th International Joint Conference on Computational Intelligence, Porto, Portugal, 2016, pp. 51-63";
+      }
+    }
+    protected override string TargetVariable { get { return "Temp1"; } }
+    protected override string[] VariableNames {
+      get { return new string[] { "Partition", "Source1", "Source2", "x1", "Material_Cat", "x2", "x3", "x4", "x5", "x6", "x7", "x8", "x9", "x10", "x11", "x12", "x13", "x14", "x15", "x16", "Material", "Grooving", "Oil", "x17", "x18", "x19", "x20", "x21", "x22", "Temp1"
+ };
+      }
+    }
+
+    // TODO: include string variables after factor branch integration
+    protected override string[] AllowedInputVariables {
+      get { return new string[] { /* "Material_Cat", */
+        "x1", "x2", "x3", "x4", "x5", "x6", "x8", "x9", "x10", "x11", "x12", "x13", "x14", "x15", "x16",
+        /* "Material", "Grooving", "Oil", */                                           
+        "x17", "x22" }; }
+    }
+    protected override int TrainingPartitionStart { get { return 0; } }
+    protected override int TrainingPartitionEnd { get { return 440; } }
+    protected override int TestPartitionStart { get { return 440; } }
+    protected override int TestPartitionEnd { get { return 656; } }
+  }
+}
Index: /branches/symbreg-factors-2650/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/MibaFriction/Temp2.cs
===================================================================
--- /branches/symbreg-factors-2650/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/MibaFriction/Temp2.cs	(revision 14825)
+++ /branches/symbreg-factors-2650/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/MibaFriction/Temp2.cs	(revision 14825)
@@ -0,0 +1,52 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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
+
+namespace HeuristicLab.Problems.Instances.DataAnalysis {
+  public class Temp2 : ResourceRegressionDataDescriptor {
+    public override string Name { get { return "Temp2"; } }
+    public override string Description {
+      get {
+        return "Temperature, Publication: E. Lughofer, G. K. Kronberger, M. Kommenda, S. Saminger-Platz, " +
+               "A. Promberger, F. Nickel, S. M. Winkler, M. Affenzeller - Robust Fuzzy Modeling and Symbolic Regression " +
+               "for Establishing Accurate and Interpretable Prediction Models in Supervising Tribological Systems - " +
+               "Proceedings of the 8th International Joint Conference on Computational Intelligence, Porto, Portugal, 2016, pp. 51-63";
+      }
+    }
+    protected override string TargetVariable { get { return "Temp2"; } }
+    protected override string[] VariableNames {
+      get { return new string[] { "Partition", "Source1", "Source2", "x1", "Material_Cat", "x2", "x3", "x4", "x5", "x6", "x7", "x8", "x9", "x10", "x11", "x12", "x13", "x14", "x15", "x16", "Material", "Grooving", "Oil", "x17", "x18", "x19", "x20", "x21", "x22", "Temp2"
+ };
+      }
+    }
+
+    // TODO: include string variables after factor branch integration
+    protected override string[] AllowedInputVariables {
+      get { return new string[] { /* "Material_Cat", */
+        "x1", "x2", "x3", "x4", "x5", "x6", "x8", "x9", "x10", "x11", "x12", "x13", "x14", "x15", "x16",
+        /* "Material", "Grooving", "Oil", */                                           
+        "x17", "x22" }; }
+    }
+    protected override int TrainingPartitionStart { get { return 0; } }
+    protected override int TrainingPartitionEnd { get { return 437; } }
+    protected override int TestPartitionStart { get { return 437; } }
+    protected override int TestPartitionEnd { get { return 648; } }
+  }
+}
Index: /branches/symbreg-factors-2650/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/MibaFriction/Wear1.cs
===================================================================
--- /branches/symbreg-factors-2650/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/MibaFriction/Wear1.cs	(revision 14825)
+++ /branches/symbreg-factors-2650/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/MibaFriction/Wear1.cs	(revision 14825)
@@ -0,0 +1,52 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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
+
+namespace HeuristicLab.Problems.Instances.DataAnalysis {
+  public class Wear1 : ResourceRegressionDataDescriptor {
+    public override string Name { get { return "Wear1"; } }
+    public override string Description {
+      get {
+        return "Wear, Publication: E. Lughofer, G. K. Kronberger, M. Kommenda, S. Saminger-Platz, " +
+               "A. Promberger, F. Nickel, S. M. Winkler, M. Affenzeller - Robust Fuzzy Modeling and Symbolic Regression " +
+               "for Establishing Accurate and Interpretable Prediction Models in Supervising Tribological Systems - " +
+               "Proceedings of the 8th International Joint Conference on Computational Intelligence, Porto, Portugal, 2016, pp. 51-63";
+      }
+    }
+    protected override string TargetVariable { get { return "Wear1"; } }
+    protected override string[] VariableNames {
+      get { return new string[] { "Partition", "Source1", "Source2", "x1", "Material_Cat", "x2", "x3", "x4", "x5", "x6", "x7", "x8", "x9", "x10", "x11", "x12", "x13", "x14", "x15", "x16", "Material", "Grooving", "Oil", "x17", "x18", "x19", "x20", "x21", "x22", "Wear1"
+ };
+      }
+    }
+
+    // TODO: include string variables after factor branch integration
+    protected override string[] AllowedInputVariables {
+      get { return new string[] { /* "Material_Cat", */
+        "Source1", "x1", "x2", "x3", "x4", "x5", "x6", "x7", "x8", "x9", "x10", "x11", "x12", "x13", "x14", "x15", "x16",
+        /* "Material", "Grooving", "Oil", */                                           
+        "x17", "x18", "x19", "x20", "x21", "x22" }; }
+    }
+    protected override int TrainingPartitionStart { get { return 0; } }
+    protected override int TrainingPartitionEnd { get { return 641; } }
+    protected override int TestPartitionStart { get { return 641; } }
+    protected override int TestPartitionEnd { get { return 904; } }
+  }
+}
Index: /branches/symbreg-factors-2650/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/MibaFriction/Wear2.cs
===================================================================
--- /branches/symbreg-factors-2650/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/MibaFriction/Wear2.cs	(revision 14825)
+++ /branches/symbreg-factors-2650/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/MibaFriction/Wear2.cs	(revision 14825)
@@ -0,0 +1,52 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2016 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
+
+namespace HeuristicLab.Problems.Instances.DataAnalysis {
+  public class Wear2 : ResourceRegressionDataDescriptor {
+    public override string Name { get { return "Wear2"; } }
+    public override string Description {
+      get {
+        return "Wear, Publication: E. Lughofer, G. K. Kronberger, M. Kommenda, S. Saminger-Platz, " +
+               "A. Promberger, F. Nickel, S. M. Winkler, M. Affenzeller - Robust Fuzzy Modeling and Symbolic Regression " +
+               "for Establishing Accurate and Interpretable Prediction Models in Supervising Tribological Systems - " +
+               "Proceedings of the 8th International Joint Conference on Computational Intelligence, Porto, Portugal, 2016, pp. 51-63";
+      }
+    }
+    protected override string TargetVariable { get { return "Wear2"; } }
+    protected override string[] VariableNames {
+      get { return new string[] { "Partition", "Source1", "Source2", "x1", "Material_Cat", "x2", "x3", "x4", "x5", "x6", "x7", "x8", "x9", "x10", "x11", "x12", "x13", "x14", "x15", "x16", "Material", "Grooving", "Oil", "x17", "x18", "x19", "x20", "x21", "x22", "Wear2"
+ };
+      }
+    }
+
+    // TODO: include string variables after factor branch integration
+    protected override string[] AllowedInputVariables {
+      get { return new string[] { /* "Material_Cat", */
+        "Source1", "x1", "x2", "x3", "x4", "x5", "x6", "x7", "x8", "x9", "x10", "x11", "x12", "x13", "x14", "x15", "x16",
+        /* "Material", "Grooving", "Oil", */                                           
+        "x17", "x18", "x19", "x20", "x21", "x22" }; }
+    }
+    protected override int TrainingPartitionStart { get { return 0; } }
+    protected override int TrainingPartitionEnd { get { return 640; } }
+    protected override int TestPartitionStart { get { return 640; } }
+    protected override int TestPartitionEnd { get { return 902; } }
+  }
+}
Index: /branches/symbreg-factors-2650/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/clients/clients.cshtml
===================================================================
--- /branches/symbreg-factors-2650/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/clients/clients.cshtml	(revision 14824)
+++ /branches/symbreg-factors-2650/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/clients/clients.cshtml	(revision 14825)
@@ -33,18 +33,18 @@
                 </div>
                 <div class="panel-body">
-                    <table class="table table-hover table-condensed">
+                    <table class="table table-hover table-condensed" ts-wrapper>
                         <thead>
                         <tr>
                             <th>#</th>
-                            <th>Client Name</th>
-                            <th>Group Name</th>
-                            <th>Cores</th>
-                            <th>Cpu Utilization</th>
-                            <th>Memory</th>
-                            <th>State</th>
+                            <th ts-criteria="Name">Client Name</th>
+                            <th ts-criteria="GroupName">Group Name</th>
+                            <th ts-criteria="UsedCores">Cores</th>
+                            <th ts-criteria="CpuUtilization">Cpu Utilization</th>
+                            <th ts-criteria="UsedMemory">Memory</th>
+                            <th ts-criteria="State">State</th>
                             <th></th>
                         </tr>
                         </thead>
-                        <tr ng-repeat="client in clientPage.Clients">
+                        <tr ng-repeat="client in clientPage.Clients" ts-repeat>
                             <td>{{($index + 1)+((curClientsPage-1)*(clientsPageSize))}}</td>
                             <td>{{client.Name}}</td>
@@ -81,18 +81,18 @@
                 </div>
                 <div class="panel-body">
-                    <table class="table table-hover table-condensed">
+                    <table class="table table-hover table-condensed" ts-wrapper>
                         <thead>
                             <tr>
                                 <th>#</th>
-                                <th>Client Name</th>
-                                <th>Group Name</th>
-                                <th>Cores</th>
-                                <th>Cpu Utilization</th>
-                                <th>Memory</th>
-                                <th>State</th>
+                                <th ts-criteria="Name">Client Name</th>
+                                <th ts-criteria="GroupName">Group Name</th>
+                                <th ts-criteria="UsedCores">Cores</th>
+                                <th ts-criteria="CpuUtilization">Cpu Utilization</th>
+                                <th ts-criteria="UsedMemory">Memory</th>
+                                <th ts-criteria="State">State</th>
                                 <th></th>
                             </tr>
                         </thead>
-                        <tr ng-repeat="client in expiredClientPage.Clients">
+                        <tr ng-repeat="client in expiredClientPage.Clients" ts-repeat>
                             <td>{{($index + 1)+((curExpiredClientsPage-1)*(expiredClientsPageSize))}}</td>
                             <td>{{client.Name}}</td>
Index: /branches/symbreg-factors-2650/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/exceptions/exceptions.cshtml
===================================================================
--- /branches/symbreg-factors-2650/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/exceptions/exceptions.cshtml	(revision 14824)
+++ /branches/symbreg-factors-2650/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/exceptions/exceptions.cshtml	(revision 14825)
@@ -30,17 +30,17 @@
                 </div>
                 <div class="panel-body">
-                    <table class="table table-hover table-condensed">
+                    <table class="table table-hover table-condensed" ts-wrapper>
                         <thead>
                         <tr>
                             <th>#</th>
-                            <th>Job</th>
-                            <th>Task</th>
-                            <th>Username</th>
-                            <th>Client</th>
-                            <th>Date</th>
+                            <th ts-criteria="JobName">Job</th>
+                            <th ts-criteria="TaskId">Task</th>
+                            <th ts-criteria="UserName">Username</th>
+                            <th ts-criteria="ClientName">Client</th>
+                            <th ts-criteria="Date">Date</th>
                             <th></th>
                         </tr>
                         </thead>
-                        <tr ng-repeat="exception in exceptionPage.Exceptions">
+                        <tr ng-repeat="exception in exceptionPage.Exceptions" ts-repeat>
                             <td>{{($index + 1)+((curExceptionsPage-1)*(exceptionsPageSize))}}</td>
                             <td><a ng-href="#/statistics/jobs/{{exception.JobId}}">{{exception.JobName}}</a></td>
Index: /branches/symbreg-factors-2650/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/groups/groups.cshtml
===================================================================
--- /branches/symbreg-factors-2650/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/groups/groups.cshtml	(revision 14824)
+++ /branches/symbreg-factors-2650/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/groups/groups.cshtml	(revision 14825)
@@ -33,17 +33,17 @@
                 </div>
                 <div class="panel-body">
-                    <table class="table table-hover table-condensed">
+                    <table class="table table-hover table-condensed" ts-wrapper>
                         <thead>
                         <tr>
                             <th>#</th>
-                            <th>Group Name</th>
-                            <th>Cores</th>
-                            <th>Cpu Utilization</th>
-                            <th>Memory</th>
-                            <th>Clients</th>
+                            <th ts-criteria="Name">Group Name</th>
+                            <th ts-criteria="UsedCores">Cores</th>
+                            <th ts-criteria="CpuUtilization">Cpu Utilization</th>
+                            <th ts-criteria="UsedMemory">Memory</th>
+                            <th ts-criteria="OnlineClients">Clients</th>
                             <th></th>
                         </tr>
                         </thead>
-                        <tr ng-repeat="group in groupPage.Groups">
+                        <tr ng-repeat="group in groupPage.Groups" ts-repeat>
                             <td>{{($index + 1)+((curGroupsPage-1)*(groupsPageSize))}}</td>
                             <td>{{group.Name}}</td>
Index: /branches/symbreg-factors-2650/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/jobs/jobs.cshtml
===================================================================
--- /branches/symbreg-factors-2650/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/jobs/jobs.cshtml	(revision 14824)
+++ /branches/symbreg-factors-2650/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/jobs/jobs.cshtml	(revision 14825)
@@ -33,13 +33,13 @@
                 </div>
                 <div class="panel-body">
-                    <table class="table table-hover table-condensed">
+                    <table class="table table-hover table-condensed" ts-wrapper>
                         <thead>
                         <tr>
                             <th>#</th>
-                            <th>Job Name</th>
+                            <th ts-criteria="Name">Job Name</th>
                             @if (Request.IsAuthenticated && User.IsInRole(HiveRoles.Administrator)) {
-                                <th>Username</th>
+                                <th ts-criteria="UserName">Username</th>
                             }
-                            <th>Date Created</th>
+                            <th ts-criteria="DateCreated">Date Created</th>
                             <th>Progress</th>
                             <th></th>
@@ -47,5 +47,5 @@
                         </thead>
                         @if (Request.IsAuthenticated && User.IsInRole(HiveRoles.Administrator)) {
-                            <tr ng-repeat="job in allUsersJobs">
+                            <tr ng-repeat="job in allUsersJobs" ts-repeat>
                                 <td>{{$index + 1}}</td>
                                 <td>{{job.Name}}</td>
@@ -93,16 +93,16 @@
                 </div>
                 <div class="panel-body">
-                    <table class="table table-hover table-condensed">
+                    <table class="table table-hover table-condensed" ts-wrapper>
                         <thead>
                         <tr>
                             <th>#</th>
-                            <th>Job Name</th>
-                            <th>Date Created</th>
-                            <th>Date Completed</th>
-                            <th>Tasks</th>
+                            <th ts-criteria="Name">Job Name</th>
+                            <th ts-criteria="DateCreated">Date Created</th>
+                            <th ts-criteria="DateCompleted">Date Completed</th>
+                            <th ts-criteria="TotalTasks|parseInt">Tasks</th>
                             <th></th>
                         </tr>
                         </thead>
-                        <tr ng-repeat="job in completedJobPage.Jobs">
+                        <tr ng-repeat="job in completedJobPage.Jobs" ts-repeat>
                             <td>{{($index + 1)+((completedJobCurPage-1)*(completedJobPageSize))}}</td>
                             <td>{{job.Name}}</td>
Index: /branches/symbreg-factors-2650/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/users/users.cshtml
===================================================================
--- /branches/symbreg-factors-2650/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/users/users.cshtml	(revision 14824)
+++ /branches/symbreg-factors-2650/HeuristicLab.Services.WebApp.Statistics/3.3/WebApp/users/users.cshtml	(revision 14825)
@@ -30,13 +30,13 @@
                 </div>
                 <div class="panel-body">
-                    <table class="table table-hover table-condensed">
+                    <table class="table table-hover table-condensed" ts-wrapper>
                         <thead>
                             <tr>
                                 <th>#</th>
-                                <th>Username</th>
+                                <th ts-criteria="Name">Username</th>
                                 <th></th>
                             </tr>
                         </thead>
-                        <tr ng-repeat="user in users">
+                        <tr ng-repeat="user in users" ts-repeat>
                             <td>{{$index + 1}}</td>
                             <td>{{user.Name}}</td>
Index: /branches/symbreg-factors-2650/HeuristicLab.Services.WebApp.Statistics/3.3/statistics.js
===================================================================
--- /branches/symbreg-factors-2650/HeuristicLab.Services.WebApp.Statistics/3.3/statistics.js	(revision 14824)
+++ /branches/symbreg-factors-2650/HeuristicLab.Services.WebApp.Statistics/3.3/statistics.js	(revision 14825)
@@ -2,5 +2,5 @@
 (function () {
     var plugin = appStatisticsPlugin;
-    plugin.dependencies = ['ngResource', 'ui.knob', 'ui.bootstrap', 'ngFitText'];
+    plugin.dependencies = ['ngResource', 'ui.knob', 'ui.bootstrap', 'ngFitText', 'tableSort'];
     plugin.files = [
         'WebApp/statistics.css',
Index: /branches/symbreg-factors-2650/HeuristicLab.Tests/HeuristicLab-3.3/Samples/GaussianProcessRegressionSampleTest.cs
===================================================================
--- /branches/symbreg-factors-2650/HeuristicLab.Tests/HeuristicLab-3.3/Samples/GaussianProcessRegressionSampleTest.cs	(revision 14824)
+++ /branches/symbreg-factors-2650/HeuristicLab.Tests/HeuristicLab-3.3/Samples/GaussianProcessRegressionSampleTest.cs	(revision 14825)
@@ -50,6 +50,6 @@
       gpr.Seed = 1618551877;
       SamplesUtils.RunAlgorithm(gpr);
-      Assert.AreEqual(-940.39914958616748, SamplesUtils.GetDoubleResult(gpr, "NegativeLogLikelihood"));
-      Assert.AreEqual(0.995614091354263, SamplesUtils.GetDoubleResult(gpr, "Training R²"));
+      Assert.AreEqual(-940.60591737780555, SamplesUtils.GetDoubleResult(gpr, "NegativeLogLikelihood"));
+      Assert.AreEqual(0.99560909041069334, SamplesUtils.GetDoubleResult(gpr, "Training R²"));
     }
 
Index: /branches/symbreg-factors-2650/HeuristicLab.Tests/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4/SymbolicDataAnalysisExpressionTreeInterpreterTest.cs
===================================================================
--- /branches/symbreg-factors-2650/HeuristicLab.Tests/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4/SymbolicDataAnalysisExpressionTreeInterpreterTest.cs	(revision 14824)
+++ /branches/symbreg-factors-2650/HeuristicLab.Tests/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4/SymbolicDataAnalysisExpressionTreeInterpreterTest.cs	(revision 14825)
@@ -182,4 +182,18 @@
     }
 
+    /// <summary>
+    ///A test for Evaluate
+    ///</summary>
+    [TestMethod]
+    [TestCategory("Problems.DataAnalysis.Symbolic")]
+    [TestProperty("Time", "short")]
+    public void ILEmittingInterpreterTestEvaluation() {
+      var interpreter = new SymbolicDataAnalysisExpressionTreeILEmittingInterpreter();
+      EvaluateTerminals(interpreter, ds);
+      EvaluateOperations(interpreter, ds);
+      EvaluateLaggedOperations(interpreter, ds);
+      EvaluateSpecialFunctions(interpreter, ds);
+    }
+
     [TestMethod]
     [TestCategory("Problems.DataAnalysis.Symbolic")]
@@ -187,5 +201,4 @@
     public void CompiledInterpreterTestEvaluation() {
       var interpreter = new SymbolicDataAnalysisExpressionCompiledTreeInterpreter();
-      // ADFs are not supported by the compiled tree interpreter
       EvaluateTerminals(interpreter, ds);
       EvaluateOperations(interpreter, ds);
@@ -410,6 +423,5 @@
         try {
           Evaluate(interpreter, ds, "(psi " + x + ")", 0, alglib.psi(x));
-        }
-        catch (alglib.alglibexception) { // ignore cases where alglib throws an exception
+        } catch (alglib.alglibexception) { // ignore cases where alglib throws an exception
         }
       };
