Index: /trunk/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationSolutionBase.cs
===================================================================
--- /trunk/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationSolutionBase.cs	(revision 17961)
+++ /trunk/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationSolutionBase.cs	(revision 17962)
@@ -34,6 +34,6 @@
     private const string TrainingAccuracyResultName = "Accuracy (training)";
     private const string TestAccuracyResultName = "Accuracy (test)";
-    private const string TrainingNormalizedGiniCoefficientResultName = "Normalized Gini Coefficient (training)";
-    private const string TestNormalizedGiniCoefficientResultName = "Normalized Gini Coefficient (test)";
+    private const string TrainingNormalizedGiniCoefficientResultName = "Norm. Gini coeff. (training)";
+    private const string TestNormalizedGiniCoefficientResultName = "Norm. Gini coeff. (test)";
     private const string ClassificationPerformanceMeasuresResultName = "Classification Performance Measures";
 
@@ -97,15 +97,20 @@
       if (string.IsNullOrEmpty(Model.TargetVariable))
         Model.TargetVariable = this.ProblemData.TargetVariable;
-
-      if (!this.ContainsKey(TrainingNormalizedGiniCoefficientResultName))
+      var newResult = false;
+      if (!this.ContainsKey(TrainingNormalizedGiniCoefficientResultName)) {
         Add(new Result(TrainingNormalizedGiniCoefficientResultName, "Normalized Gini coefficient of the model on the training partition.", new DoubleValue()));
-      if (!this.ContainsKey(TestNormalizedGiniCoefficientResultName))
+        newResult = true;
+      }
+      if (!this.ContainsKey(TestNormalizedGiniCoefficientResultName)) {
         Add(new Result(TestNormalizedGiniCoefficientResultName, "Normalized Gini coefficient of the model on the test partition.", new DoubleValue()));
+        newResult = true;
+      }
       if (!this.ContainsKey(ClassificationPerformanceMeasuresResultName)) {
         Add(new Result(ClassificationPerformanceMeasuresResultName, @"Classification performance measures.\n
                               In a multiclass classification all misclassifications of the negative class will be treated as true negatives except on positive class estimations.",
                               new ClassificationPerformanceMeasuresResultCollection()));
-        CalculateClassificationResults();
+        newResult = true;
       }
+      if (newResult) CalculateClassificationResults();
     }
 
Index: /trunk/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/DiscriminantFunctionClassificationSolutionBase.cs
===================================================================
--- /trunk/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/DiscriminantFunctionClassificationSolutionBase.cs	(revision 17961)
+++ /trunk/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/DiscriminantFunctionClassificationSolutionBase.cs	(revision 17962)
@@ -40,4 +40,7 @@
     private const string TrainingRSquaredResultName = "Pearson's R² (training)";
     private const string TestRSquaredResultName = "Pearson's R² (test)";
+    private const string TrainingNormalizedGiniCoefficientResultName = "Norm. Gini coeff. (training, discriminant values)";
+    private const string TestNormalizedGiniCoefficientResultName = "Norm. Gini coeff. (test, discriminant values)";
+
 
     public new IDiscriminantFunctionClassificationModel Model {
@@ -71,4 +74,12 @@
       private set { ((DoubleValue)this[TestRSquaredResultName].Value).Value = value; }
     }
+    public double TrainingNormalizedGiniCoefficientForDiscriminantValues {
+      get { return ((DoubleValue)this[TrainingNormalizedGiniCoefficientResultName].Value).Value; }
+      protected set { ((DoubleValue)this[TrainingNormalizedGiniCoefficientResultName].Value).Value = value; }
+    }
+    public double TestNormalizedGiniCoefficientForDiscriminantValues {
+      get { return ((DoubleValue)this[TestNormalizedGiniCoefficientResultName].Value).Value; }
+      protected set { ((DoubleValue)this[TestNormalizedGiniCoefficientResultName].Value).Value = value; }
+    }
     #endregion
 
@@ -85,4 +96,6 @@
       Add(new Result(TrainingRSquaredResultName, "Squared Pearson's correlation coefficient of the model output and the actual values on the training partition", new DoubleValue()));
       Add(new Result(TestRSquaredResultName, "Squared Pearson's correlation coefficient of the model output and the actual values on the test partition", new DoubleValue()));
+      Add(new Result(TrainingNormalizedGiniCoefficientResultName, "Normalized Gini coefficient of the discriminant values produced by the model on the training partition.", new DoubleValue()));
+      Add(new Result(TestNormalizedGiniCoefficientResultName, "Normalized Gini coefficient of the discriminant values produced by the model on the test partition.", new DoubleValue()));
       RegisterEventHandler();
     }
@@ -90,4 +103,21 @@
     [StorableHook(HookType.AfterDeserialization)]
     private void AfterDeserialization() {
+      #region backwards compatibility
+      if (!ContainsKey(TrainingNormalizedGiniCoefficientResultName)) {
+        Add(new Result(TrainingNormalizedGiniCoefficientResultName, "Normalized Gini coefficient of the discriminant values produced by the model on the training partition.", new DoubleValue()));
+        Add(new Result(TestNormalizedGiniCoefficientResultName, "Normalized Gini coefficient of the discriminant values produced by the model on the test partition.", new DoubleValue()));
+        double[] estimatedTrainingValues = EstimatedTrainingValues.ToArray(); // cache values
+        double[] originalTrainingValues = ProblemData.Dataset.GetDoubleValues(ProblemData.TargetVariable, ProblemData.TrainingIndices).ToArray();
+        double[] estimatedTestValues = EstimatedTestValues.ToArray(); // cache values
+        double[] originalTestValues = ProblemData.Dataset.GetDoubleValues(ProblemData.TargetVariable, ProblemData.TestIndices).ToArray();
+        double trainingNormalizedGini = NormalizedGiniCalculator.Calculate(originalTrainingValues, estimatedTrainingValues, out var errorState);
+        if (errorState != OnlineCalculatorError.None) trainingNormalizedGini = double.NaN;
+        double testNormalizedGini = NormalizedGiniCalculator.Calculate(originalTestValues, estimatedTestValues, out errorState);
+        if (errorState != OnlineCalculatorError.None) testNormalizedGini = double.NaN;
+
+        TrainingNormalizedGiniCoefficientForDiscriminantValues = trainingNormalizedGini;
+        TestNormalizedGiniCoefficientForDiscriminantValues = testNormalizedGini;
+      }
+      #endregion
       RegisterEventHandler();
     }
@@ -106,7 +136,7 @@
 
       double trainingR = OnlinePearsonsRCalculator.Calculate(originalTrainingValues, estimatedTrainingValues, out errorState);
-      TrainingRSquared = errorState == OnlineCalculatorError.None ? trainingR*trainingR : double.NaN;
+      TrainingRSquared = errorState == OnlineCalculatorError.None ? trainingR * trainingR : double.NaN;
       double testR = OnlinePearsonsRCalculator.Calculate(originalTestValues, estimatedTestValues, out errorState);
-      TestRSquared = errorState == OnlineCalculatorError.None ? testR*testR : double.NaN;
+      TestRSquared = errorState == OnlineCalculatorError.None ? testR * testR : double.NaN;
 
       double trainingNormalizedGini = NormalizedGiniCalculator.Calculate(originalTrainingValues, estimatedTrainingValues, out errorState);
@@ -115,6 +145,6 @@
       if (errorState != OnlineCalculatorError.None) testNormalizedGini = double.NaN;
 
-      TrainingNormalizedGiniCoefficient = trainingNormalizedGini;
-      TestNormalizedGiniCoefficient = testNormalizedGini;
+      TrainingNormalizedGiniCoefficientForDiscriminantValues = trainingNormalizedGini;
+      TestNormalizedGiniCoefficientForDiscriminantValues = testNormalizedGini;
     }
 
