diff --git a/readTrace.py b/readTrace.py
index eefe393b5534cb75139632eb5ec9c729cb11ca95..37510742d26cda3d3a56847421829c8fca64e925 100755
--- a/readTrace.py
+++ b/readTrace.py
@@ -58,6 +58,49 @@ class Step() :
 #-------------------------------------------------------------------------------
 ################################################################################
 
+################################################################################
+class Block() :
+#-------------------------------------------------------------------------------
+  def __init__(self, state) :
+    self.versions = [[]] # List of list of steps
+    self.state = state
+#-------------------------------------------------------------------------------
+
+#-------------------------------------------------------------------------------
+  def addStep(self, step) :
+    self.versions[-1].append(step)
+#-------------------------------------------------------------------------------
+
+#-------------------------------------------------------------------------------
+  def newVersion(self) :
+    self.versions.append([])
+#-------------------------------------------------------------------------------
+
+#-------------------------------------------------------------------------------
+  def nbVersions(self) :
+    return len(self.versions)
+#-------------------------------------------------------------------------------
+
+#-------------------------------------------------------------------------------
+  def getAsLines(self, maxNbVersions) :
+    output = []
+    versions = []
+    for version in self.versions :
+      versions.append([])
+      lineStr = englobStr("State %d"%self.state, "-", lenLine())
+      versions[-1].append(lineStr + (lenLine()-len(lineStr))*" ")
+      for step in version :
+        versions[-1].append(str(step) + (lenLine()-len(str(step)))*" ")
+    maxIndex = max([len(version) for version in versions])
+    for i in range(maxIndex) :
+      output.append("")
+      for j in range(maxNbVersions) :
+        output[-1] += ("\t" if j > 0 else "") + (versions[j][i] if j in range(len(versions)) and i in range(len(versions[j])) else lenLine()*" ")
+
+    return output
+#-------------------------------------------------------------------------------
+################################################################################
+
 ################################################################################
 class History() :
 #-------------------------------------------------------------------------------
@@ -67,7 +110,7 @@ class History() :
 
 #-------------------------------------------------------------------------------
   def segmentInBlocks(self) :
-    #structure : sentence = [annotations,list of blocks] = list of versions = list of steps
+    #structure : sentence = [annotations,list of blocks]
     sentences = []
     for sentenceAnnot in self.sentences :
       annot = sentenceAnnot[0]
@@ -78,21 +121,21 @@ class History() :
       for step in sentence :
         if lastState is not None and lastState != step.state :
           blockIndex += 1
-        while blockIndex >= len(sentences[-1][1]) :
-          sentences[-1][1].append([[]])
-        block = sentences[-1][1][blockIndex][-1]
-        block.append(step)
+        if blockIndex >= len(sentences[-1][1]) :
+          sentences[-1][1].append(Block(step.state))
+        block = sentences[-1][1][blockIndex]
+        block.addStep(step)
         lastState = step.state
         if "BACK" in step.action and "NOBACK" not in step.action :
           backSize = int(step.action.split()[-1])
           backState = step.state
           while backSize > 0 :
             blockIndex -= 1
-            state = sentences[-1][1][blockIndex][-1][0].state
+            state = sentences[-1][1][blockIndex].state
             if state == backState :
               backSize -= 1
           for block in sentences[-1][1][blockIndex:] :
-            block.append([]) 
+            block.newVersion()
 
     self.sentences = sentences
 #-------------------------------------------------------------------------------
@@ -110,22 +153,11 @@ class History() :
     for sentIndex in range(len(self.sentences)) :
       sentence = self.sentences[sentIndex][1]
       annotations = alignAsTab([self.sentences[sentIndex][0][wid] for wid in sorted(list(self.sentences[sentIndex][0].keys()))])
-      maxNbVersions = max([len(block) for block in sentence])
+      maxNbVersions = max([block.nbVersions() for block in sentence])
       print(englobStr("Sentence %d"%sentIndex, "-", (1+maxNbVersions)*(1+lenLine())), file=out)
       totalOutput = []
       for block in sentence :
-        versions = []
-        for version in block :
-          versions.append([])
-          lineStr = englobStr("State %d"%block[0][0].state, "-", lenLine())
-          versions[-1].append(lineStr + (lenLine()-len(lineStr))*" ")
-          for step in version :
-            versions[-1].append(str(step) + (lenLine()-len(str(step)))*" ")
-        maxIndex = max([len(version) for version in versions])
-        for i in range(maxIndex) :
-          totalOutput.append("")
-          for j in range(maxNbVersions) :
-            totalOutput[-1] += ("\t" if j > 0 else "") + (versions[j][i] if j in range(len(versions)) and i in range(len(versions[j])) else lenLine()*" ")
+        totalOutput += block.getAsLines(maxNbVersions)
       for i in range(len(totalOutput)) :
         print(totalOutput[i] + ("\t"+annotations[i] if i in range(len(annotations)) else ""), file=out)
       print("", file=out)