diff --git a/readTrace.py b/readTrace.py
index b978fda4dffefc49c8c387aa772384108d9f353d..e3ae03ffdecce5de4457c0d64f803715b8bfa888 100755
--- a/readTrace.py
+++ b/readTrace.py
@@ -97,6 +97,8 @@ class Block() :
       "nbErr" : 0,
       "avgDist" : 0.0,
       "avgIndex" : 0.0,
+      "maxIndex" : 0.0,
+      "maxDist" : 0.0,
       })
 #-------------------------------------------------------------------------------
 
@@ -189,6 +191,16 @@ class History() :
       "backPrecision" : 0.0,
       "backRecall" : 0.0,
       "backFScore" : 0.0,
+      "nbRedone" : 0,
+      "nbRedoneDiminishErr" : 0,
+      "nbRedoneAugmentErr" : 0,
+      "redoneAvgErrChange" : 0,
+      "nbRedoneErrErr" : 0,
+      "nbRedoneErrCorrect" : 0,
+      "nbRedoneCorrectErr" : 0,
+      "nbRedoneCorrectCorrect" : 0,
+      "redoneErrErrAvgDistChange" : 0.0,
+      "redoneErrErrAvgIndexChange" : 0.0,
     }
     for sentence in self.sentences :
       globalStats["nbWords"] += len(sentence[0])
@@ -212,11 +224,33 @@ class History() :
               stats["nbErr"] += 1
               stats["avgDist"] += step.distance
               stats["avgIndex"] += step.oracleIndex
+              stats["maxDist"] = max(stats["maxDist"], step.distance)
+              stats["maxIndex"] = max(stats["maxIndex"], step.oracleIndex)
           if i == 0 :
             globalStats["nbActions"] += len(version)
             globalStats["nbErr"] += stats["nbErr"]
             if len(block.versions) > 1 :
               globalStats["nbErrFound"] += stats["nbErr"]
+          if i == 1 :
+            prevStats = block.stats[i-1]
+            globalStats["nbRedone"] += 1
+            distChange = prevStats["maxDist"] - stats["maxDist"]
+            indexChange = prevStats["maxIndex"] - stats["maxIndex"]
+            if prevStats["nbErr"] > 0 and  stats["nbErr"] > 0 :
+              globalStats["nbRedoneErrErr"] += 1
+              globalStats["redoneErrErrAvgDistChange"] += distChange
+              globalStats["redoneErrErrAvgIndexChange"] += indexChange
+            if prevStats["nbErr"] == 0 and  stats["nbErr"] > 0 :
+              globalStats["nbRedoneCorrectErr"] += 1
+            if prevStats["nbErr"] == 0 and  stats["nbErr"] == 0 :
+              globalStats["nbRedoneCorrectCorrect"] += 1
+            if prevStats["nbErr"] > 0 and  stats["nbErr"] == 0 :
+              globalStats["nbRedoneErrCorrect"] += 1
+            if prevStats["nbErr"] > stats["nbErr"] :
+              globalStats["nbRedoneDiminishErr"] += 1
+            if prevStats["nbErr"] < stats["nbErr"] :
+              globalStats["nbRedoneAugmentErr"] += 1
+            globalStats["redoneAvgErrChange"] += stats["nbErr"] - prevStats["nbErr"]
           if stats["nbErr"] > 0 :
             stats["avgDist"] /= stats["nbErr"]
             stats["avgIndex"] /= stats["nbErr"]
@@ -243,21 +277,32 @@ class History() :
         if backOnErr :
           globalStats["backOnErr"] += 1
     if globalStats["nbActions"] > 0 :
-      globalStats["actionAccuracy"] = (globalStats["nbActions"]-globalStats["nbErr"])/globalStats["nbActions"]
+      globalStats["actionAccuracy"] = 100.0*(globalStats["nbActions"]-globalStats["nbErr"])/globalStats["nbActions"]
     if globalStats["nbActionsParser"] > 0 :
-      globalStats["actionAccuracyParser"] = (globalStats["nbActionsParser"]-globalStats["nbErrParser"])/globalStats["nbActionsParser"]
+      globalStats["actionAccuracyParser"] = 100.0*(globalStats["nbActionsParser"]-globalStats["nbErrParser"])/globalStats["nbActionsParser"]
     if globalStats["nbArcs"] > 0 :
-      globalStats["arcsAccuracy"] = (globalStats["nbArcs"]-globalStats["nbMissedArcs"])/globalStats["nbArcs"]
+      globalStats["arcsAccuracy"] = 100.0*(globalStats["nbArcs"]-globalStats["nbMissedArcs"])/globalStats["nbArcs"]
     if globalStats["nbErr"] > 0 :
       globalStats["avgErrCost"] /= globalStats["nbErr"]
     if globalStats["nbErr"] > 0 :
       globalStats["avgErrCostParser"] /= globalStats["nbErrParser"]
     if globalStats["nbErr"] > 0 :
-      globalStats["backRecall"] = globalStats["nbErrFound"] / globalStats["nbErr"]
+      globalStats["backRecall"] = 100.0*globalStats["nbErrFound"] / globalStats["nbErr"]
     if globalStats["nbBack"] > 0 :
-      globalStats["backPrecision"] = globalStats["backOnErr"] / globalStats["nbBack"]
+      globalStats["backPrecision"] = 100.0*globalStats["backOnErr"] / globalStats["nbBack"]
     if globalStats["backPrecision"] + globalStats["backRecall"] > 0.0 :
       globalStats["backFScore"] = 2*(globalStats["backPrecision"] * globalStats["backRecall"])/(globalStats["backPrecision"] + globalStats["backRecall"])
+    if globalStats["nbRedone"] :
+      globalStats["redoneAvgErrChange"] /= globalStats["nbRedone"]
+      globalStats["nbRedoneDiminishErr"] /= globalStats["nbRedone"] * (1/100)
+      globalStats["nbRedoneAugmentErr"] /= globalStats["nbRedone"] * (1/100)
+      globalStats["nbRedoneCorrectCorrect"] /= globalStats["nbRedone"] * (1/100)
+      globalStats["nbRedoneErrErr"] /= globalStats["nbRedone"] * (1/100)
+      globalStats["nbRedoneCorrectErr"] /= globalStats["nbRedone"] * (1/100)
+      globalStats["nbRedoneErrCorrect"] /= globalStats["nbRedone"] * (1/100)
+    if globalStats["nbRedoneErrErr"] :
+      globalStats["redoneErrErrAvgDistChange"] /= globalStats["nbRedoneErrErr"]
+      globalStats["redoneErrErrAvgIndexChange"] /= globalStats["nbRedoneErrErr"]
     return globalStats
 #-------------------------------------------------------------------------------
 
@@ -334,6 +379,11 @@ class History() :
 #-------------------------------------------------------------------------------
 ################################################################################
 
+################################################################################
+def prettyNumber(num) :
+  return ("%.2f"%num).rstrip(".0")
+################################################################################
+
 ################################################################################
 if __name__ == "__main__" :
   parser = argparse.ArgumentParser()
@@ -356,6 +406,9 @@ if __name__ == "__main__" :
     history.printHumanReadable(sys.stdout)
 
   if args.stats :
-    print(stats)
+    asList = [list(stats.keys()), list(stats.values())]
+    maxLen = max(map(len, asList[0]))
+    for i in range(len(asList[0])) :
+      print("%s %s"%(asList[0][i]+"."*(1+maxLen-len(asList[0][i])), prettyNumber(asList[1][i])))
 ################################################################################