Index: branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/ClassificationEnsembleSolutionAccuracyToCoveredSamples.cs
===================================================================
--- branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/ClassificationEnsembleSolutionAccuracyToCoveredSamples.cs	(revision 8862)
+++ branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/ClassificationEnsembleSolutionAccuracyToCoveredSamples.cs	(revision 8863)
@@ -118,48 +118,52 @@
         }
 
-        int row;
-        for (int i = 0; i < maxPoints; i++) {
-          double confidenceValue = (1.0 / (maxPoints - 1)) * i;
-          int notCovered = 0;
-
-          for (int j = 0; j < indizes.Length; j++) {
-            row = indizes[j];
-            if (confidences[j] >= confidenceValue) {
-              accuracyCalc.Add(target[row], estimatedClassValues[j]);
-            } else {
-              notCovered++;
+        if (!estimatedClassValues.All(x => Double.IsNaN(x))) {
+          int row;
+          for (int i = 0; i < maxPoints; i++) {
+            double confidenceValue = (1.0 / (maxPoints - 1)) * i;
+            int notCovered = 0;
+
+            for (int j = 0; j < indizes.Length; j++) {
+              row = indizes[j];
+              if (confidences[j] >= confidenceValue) {
+                accuracyCalc.Add(target[row], estimatedClassValues[j]);
+              } else {
+                notCovered++;
+              }
             }
+
+            accuracy[i + 1] = accuracyCalc.Accuracy;
+            if (indizes.Length > 0) {
+              covered[i] = 1.0 - (double)notCovered / (double)indizes.Length;
+            }
+            accuracyCalc.Reset();
           }
 
-          accuracy[i + 1] = accuracyCalc.Accuracy;
-          if (indizes.Length > 0) {
-            covered[i] = 1.0 - (double)notCovered / (double)indizes.Length;
-          }
-          accuracyCalc.Reset();
+          accuracy[0] = accuracy[1];
+          covered[maxPoints] = 0.0;
+
+          accuracy = accuracy.Reverse().ToArray();
+          covered = covered.Reverse().ToArray();
+
+          Series area = this.chart.Series.Add(AREA);
+          area.ChartType = SeriesChartType.Area;
+          area.Color = Color.LightBlue;
+          IEnumerable<IEnumerable<double>> areaPoints = CalculateAreaPoints(covered, accuracy);
+          area.Points.DataBindXY(areaPoints.ElementAt(0), areaPoints.ElementAt(1));
+
+          Series series = this.chart.Series.Add(ACCURACYCOVERED);
+          series.Color = Color.Red;
+          series.ChartType = SeriesChartType.FastPoint;
+          series.MarkerStyle = MarkerStyle.Diamond;
+          series.MarkerSize = 5;
+          series.Points.DataBindXY(covered, accuracy);
+
+          double auc = CalculateAreaUnderCurve(series);
+          area.LegendToolTip = "AUC: " + auc;
+
+          AUCLabel.Text = "AUC: " + auc;
+        } else {
+          AUCLabel.Text = "No values in this partition!";
         }
-
-        accuracy[0] = accuracy[1];
-        covered[maxPoints] = 0.0;
-
-        accuracy = accuracy.Reverse().ToArray();
-        covered = covered.Reverse().ToArray();
-
-        Series area = this.chart.Series.Add(AREA);
-        area.ChartType = SeriesChartType.Area;
-        area.Color = Color.LightBlue;
-        IEnumerable<IEnumerable<double>> areaPoints = CalculateAreaPoints(covered, accuracy);
-        area.Points.DataBindXY(areaPoints.ElementAt(0), areaPoints.ElementAt(1));
-
-        Series series = this.chart.Series.Add(ACCURACYCOVERED);
-        series.Color = Color.Red;
-        series.ChartType = SeriesChartType.FastPoint;
-        series.MarkerStyle = MarkerStyle.Diamond;
-        series.MarkerSize = 5;
-        series.Points.DataBindXY(covered, accuracy);
-
-        double auc = CalculateAreaUnderCurve(series);
-        area.LegendToolTip = "AUC: " + auc;
-
-        AUCLabel.Text = "AUC: " + auc;
       }
     }
Index: branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/ClassificationEnsembleSolutionEstimatedClassValuesView.cs
===================================================================
--- branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/ClassificationEnsembleSolutionEstimatedClassValuesView.cs	(revision 8862)
+++ branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/ClassificationEnsembleSolutionEstimatedClassValuesView.cs	(revision 8863)
@@ -133,9 +133,9 @@
         int row = indizes[i];
         values[i, 0] = row.ToString();
-        values[i, 1] = target[i].ToString();
+        values[i, 1] = target[row].ToString();
         //display only indices and target values if no models are present
         if (solutionsCount > 0) {
           values[i, 2] = estimatedClassValues[i].ToString();
-          correctClassified = target[i].IsAlmost(estimatedClassValues[i]);
+          correctClassified = target[row].IsAlmost(estimatedClassValues[i]);
           values[i, 3] = correctClassified.ToString();
           curConfidence = confidences[i];
Index: branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/ClassificationFeatureCorrelationView.cs
===================================================================
--- branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/ClassificationFeatureCorrelationView.cs	(revision 8862)
+++ branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/ClassificationFeatureCorrelationView.cs	(revision 8863)
@@ -37,7 +37,7 @@
     }
 
-    protected override bool[] SetInitialVisibilityOfColumns() {
+    protected override bool[] SetInitialVariableVisibility() {
       int i = Content.Dataset.DoubleVariables.ToList().FindIndex(x => x == Content.TargetVariable);
-      var initialVisibility = base.SetInitialVisibilityOfColumns();
+      var initialVisibility = base.SetInitialVariableVisibility();
       initialVisibility[i] = true;
       return initialVisibility;
Index: branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/ClassificationTimeframeFeatureCorrelationView.cs
===================================================================
--- branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/ClassificationTimeframeFeatureCorrelationView.cs	(revision 8862)
+++ branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/ClassificationTimeframeFeatureCorrelationView.cs	(revision 8863)
@@ -37,7 +37,7 @@
     }
 
-    protected override bool[] SetInitialVisibilityOfColumns() {
+    protected override bool[] SetInitialVariableVisibility() {
       int i = Content.Dataset.DoubleVariables.ToList().FindIndex(x => x == Content.TargetVariable);
-      var initialVisibility = base.SetInitialVisibilityOfColumns();
+      var initialVisibility = base.SetInitialVariableVisibility();
       initialVisibility[i] = true;
       return initialVisibility;
Index: branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/DiscriminantFunctionClassificationRocCurvesView.cs
===================================================================
--- branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/DiscriminantFunctionClassificationRocCurvesView.cs	(revision 8862)
+++ branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/DiscriminantFunctionClassificationRocCurvesView.cs	(revision 8863)
@@ -114,5 +114,5 @@
         maxThreshold += thresholdIncrement;
 
-        List<double> classValues = Content.Model.ClassValues.ToList();
+        List<double> classValues = Content.ProblemData.ClassValues.ToList();
 
         foreach (double classValue in classValues) {
Index: branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/DiscriminantFunctionClassificationSolutionThresholdView.Designer.cs
===================================================================
--- branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/DiscriminantFunctionClassificationSolutionThresholdView.Designer.cs	(revision 8862)
+++ branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/DiscriminantFunctionClassificationSolutionThresholdView.Designer.cs	(revision 8863)
@@ -1,3 +1,4 @@
-﻿namespace HeuristicLab.Problems.DataAnalysis.Views {
+﻿using System.Windows.Forms.DataVisualization.Charting;
+namespace HeuristicLab.Problems.DataAnalysis.Views {
   partial class DiscriminantFunctionClassificationSolutionThresholdView {
     /// <summary> 
@@ -53,4 +54,5 @@
       this.chart.MouseDown += new System.Windows.Forms.MouseEventHandler(this.chart_MouseDown);
       this.chart.MouseMove += new System.Windows.Forms.MouseEventHandler(this.chart_MouseMove);
+      this.chart.PostPaint += new System.EventHandler<System.Windows.Forms.DataVisualization.Charting.ChartPaintEventArgs>(chart_PostPaint);
       // 
       // JitterTrackBar
@@ -92,5 +94,4 @@
 
     }
-
     #endregion
 
Index: branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/DiscriminantFunctionClassificationSolutionThresholdView.cs
===================================================================
--- branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/DiscriminantFunctionClassificationSolutionThresholdView.cs	(revision 8862)
+++ branches/ClassificationEnsembleVoting/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/DiscriminantFunctionClassificationSolutionThresholdView.cs	(revision 8863)
@@ -40,4 +40,7 @@
     private const string TestLabelText = "Test Samples";
 
+    private const double ClassNameLeftOffset = 10.0;
+    private const double ClassNameBottomOffset = 5.0;
+
     public new IDiscriminantFunctionClassificationSolution Content {
       get { return (IDiscriminantFunctionClassificationSolution)base.Content; }
@@ -47,5 +50,5 @@
     private Dictionary<double, Series> classValueSeriesMapping;
     private Random random;
-    private bool updateInProgress;
+    private bool updateInProgress, updateThresholds;
 
     public DiscriminantFunctionClassificationSolutionThresholdView()
@@ -126,5 +129,5 @@
             FillSeriesWithDataPoints(series);
           }
-          AddThresholds();
+          updateThresholds = true;
         }
         chart.ChartAreas[0].RecalculateAxesScale();
@@ -166,7 +169,21 @@
     }
 
+    private void chart_PostPaint(object sender, ChartPaintEventArgs e) {
+      if (updateThresholds) {
+        AddThresholds();
+        updateThresholds = false;
+      }
+    }
+
     private void AddThresholds() {
       chart.Annotations.Clear();
       int classIndex = 1;
+      SizeF textSizeInPixel;
+      IClassificationProblemData problemData = Content.ProblemData;
+      var classValues = Content.Model.ClassValues.ToArray();
+      Graphics g = chart.CreateGraphics();
+      Axis y = chart.ChartAreas[0].AxisY;
+      Axis x = chart.ChartAreas[0].AxisX;
+      string name;
       foreach (double threshold in Content.Model.Thresholds) {
         if (!double.IsInfinity(threshold)) {
@@ -176,17 +193,56 @@
           annotation.LineWidth = 2;
           annotation.LineColor = Color.Red;
-
           annotation.IsInfinitive = true;
           annotation.ClipToChartArea = chart.ChartAreas[0].Name;
           annotation.Tag = classIndex;  //save classIndex as Tag to avoid moving the threshold accross class bounderies
-
           annotation.AxisX = chart.ChartAreas[0].AxisX;
-          annotation.AxisY = chart.ChartAreas[0].AxisY;
+          annotation.AxisY = y;
           annotation.Y = threshold;
 
+          name = problemData.GetClassName(classValues[classIndex - 1]);
+          TextAnnotation beneathLeft = CreateTextAnnotation(name, classIndex, x, y);
+          beneathLeft.Y = threshold;
+          beneathLeft.X = x.Minimum;
+          TextAnnotation beneathRigth = CreateTextAnnotation(name, classIndex, x, y);
+          beneathRigth.Y = threshold;
+          textSizeInPixel = g.MeasureString(beneathRigth.Text, beneathRigth.Font);
+          double textWidthPixelPos = x.ValueToPixelPosition(x.Maximum) - textSizeInPixel.Width - ClassNameLeftOffset;
+          //check if position is within the position boundary
+          beneathRigth.X = textWidthPixelPos < 0 || textWidthPixelPos > chart.Width ? double.NaN : x.PixelPositionToValue(textWidthPixelPos);
+
+          name = problemData.GetClassName(classValues[classIndex]);
+          TextAnnotation aboveLeft = CreateTextAnnotation(name, classIndex, x, y);
+          textSizeInPixel = g.MeasureString(aboveLeft.Text, aboveLeft.Font);
+          double textHeightPixelPos = y.ValueToPixelPosition(threshold) - textSizeInPixel.Height - ClassNameBottomOffset;
+          //check if position is within the position boundary
+          aboveLeft.Y = textHeightPixelPos < 0 || textHeightPixelPos > chart.Height ? double.NaN : y.PixelPositionToValue(textHeightPixelPos);
+          aboveLeft.X = x.Minimum;
+          TextAnnotation aboveRight = CreateTextAnnotation(name, classIndex, x, y);
+          aboveRight.Y = aboveLeft.Y;
+          textWidthPixelPos = x.ValueToPixelPosition(x.Maximum) - textSizeInPixel.Width - ClassNameLeftOffset;
+          //check if position is within the position boundary
+          aboveRight.X = textWidthPixelPos < 0 || textWidthPixelPos > chart.Width ? double.NaN : x.PixelPositionToValue(textWidthPixelPos);
+
           chart.Annotations.Add(annotation);
+          chart.Annotations.Add(beneathLeft);
+          chart.Annotations.Add(aboveLeft);
+          chart.Annotations.Add(beneathRigth);
+          chart.Annotations.Add(aboveRight);
           classIndex++;
         }
       }
+    }
+
+    private TextAnnotation CreateTextAnnotation(string name, int classIndex, Axis x, Axis y) {
+      TextAnnotation annotation = new TextAnnotation();
+      annotation.Text = name;
+      annotation.AllowMoving = true;
+      annotation.AllowResizing = false;
+      annotation.AllowSelecting = false;
+      annotation.ClipToChartArea = chart.ChartAreas[0].Name;
+      annotation.Tag = classIndex;
+      annotation.AxisX = chart.ChartAreas[0].AxisX;
+      annotation.AxisY = y;
+      return annotation;
     }
 
