Index: trunk/sources/HeuristicLab.Analysis/3.3/QualityAnalysis/ExpectedRuntimeHelper.cs
===================================================================
--- trunk/sources/HeuristicLab.Analysis/3.3/QualityAnalysis/ExpectedRuntimeHelper.cs	(revision 14775)
+++ trunk/sources/HeuristicLab.Analysis/3.3/QualityAnalysis/ExpectedRuntimeHelper.cs	(revision 15048)
@@ -46,7 +46,7 @@
 
   public struct ErtCalculationResult {
-    public int SuccessfulRuns;
-    public int TotalRuns;
-    public double ExpectedRuntime;
+    public readonly int SuccessfulRuns;
+    public readonly int TotalRuns;
+    public readonly double ExpectedRuntime;
 
     public ErtCalculationResult(int successful, int total, double ert) {
@@ -57,6 +57,5 @@
 
     public override string ToString() {
-      return SuccessfulRuns == 0 ? "\u221e" // infinity symbol
-                                 : ExpectedRuntime.ToString("##,0.0", CultureInfo.CurrentCulture.NumberFormat);
+      return ExpectedRuntime.ToString("##,0.0", CultureInfo.CurrentCulture.NumberFormat);
     }
   }
Index: trunk/sources/HeuristicLab.Analysis/3.3/QualityAnalysis/QualityPerClockAnalyzer.cs
===================================================================
--- trunk/sources/HeuristicLab.Analysis/3.3/QualityAnalysis/QualityPerClockAnalyzer.cs	(revision 14775)
+++ trunk/sources/HeuristicLab.Analysis/3.3/QualityAnalysis/QualityPerClockAnalyzer.cs	(revision 15048)
@@ -91,6 +91,6 @@
 
       if (values.Count == 0) {
-        values.Add(newEntry);
-        values.Add(Tuple.Create(runtimeSoFar, bestQuality)); // duplicate entry that will be replaced
+        values.Add(newEntry); // record the first data
+        values.Add(Tuple.Create(runtimeSoFar, bestQuality)); // last entry records max number of evaluations
         return base.Apply();
       }
@@ -98,6 +98,6 @@
       var improvement = values.Last().Item2 != bestQuality;
       if (improvement) {
-        values[values.Count - 1] = newEntry;
-        values.Add(Tuple.Create(runtimeSoFar, bestQuality)); // duplicate entry that will be replaced
+        values[values.Count - 1] = newEntry; // record the improvement
+        values.Add(Tuple.Create(runtimeSoFar, bestQuality)); // last entry records max number of evaluations
       } else {
         values[values.Count - 1] = Tuple.Create(runtimeSoFar, bestQuality);
Index: trunk/sources/HeuristicLab.Analysis/3.3/QualityAnalysis/QualityPerEvaluationsAnalyzer.cs
===================================================================
--- trunk/sources/HeuristicLab.Analysis/3.3/QualityAnalysis/QualityPerEvaluationsAnalyzer.cs	(revision 14775)
+++ trunk/sources/HeuristicLab.Analysis/3.3/QualityAnalysis/QualityPerEvaluationsAnalyzer.cs	(revision 15048)
@@ -88,21 +88,23 @@
       if (evalMoves != null) evaluations += evalMoves.Value * MoveCostPerSolutionParameter.ActualValue.Value;
 
-      var dataTable = QualityPerEvaluationsParameter.ActualValue;
-      var values = dataTable.Rows["First-hit Graph"].Values;
-      if (evaluations == 0 || values.Count > 0 && evaluations < values.Last().Item1) evaluations = 1;
-      var newEntry = Tuple.Create(evaluations, bestQuality);
+      if (evaluations > 0) {
+        var dataTable = QualityPerEvaluationsParameter.ActualValue;
+        var values = dataTable.Rows["First-hit Graph"].Values;
 
-      if (values.Count == 0) {
-        values.Add(newEntry);
-        values.Add(Tuple.Create(evaluations, bestQuality)); // duplicate entry that will be replaced
-        return base.Apply();
-      }
+        var newEntry = Tuple.Create(evaluations, bestQuality);
 
-      var improvement = values.Last().Item2 != bestQuality;
-      if (improvement) {
-        values[values.Count - 1] = newEntry;
-        values.Add(Tuple.Create(evaluations, bestQuality)); // duplicate entry that will be replaced
-      } else {
-        values[values.Count - 1] = Tuple.Create(evaluations, bestQuality);
+        if (values.Count == 0) {
+          values.Add(newEntry); // record the first data
+          values.Add(Tuple.Create(evaluations, bestQuality)); // last entry records max number of evaluations
+          return base.Apply();
+        }
+
+        var improvement = values.Last().Item2 != bestQuality;
+        if (improvement) {
+          values[values.Count - 1] = newEntry; // record the improvement
+          values.Add(Tuple.Create(evaluations, bestQuality)); // last entry records max number of evaluations
+        } else {
+          values[values.Count - 1] = Tuple.Create(evaluations, bestQuality); // the last entry is updated
+        }
       }
       return base.Apply();
