diff --git a/ess/TraceWin.py b/ess/TraceWin.py
index 8fb1c3f376dd3963bac0ef493fb737d8d4545938..a125c793a5818d6ece95ec2166c8b0138841cb12 100644
--- a/ess/TraceWin.py
+++ b/ess/TraceWin.py
@@ -67,6 +67,9 @@ class density_file:
         self.filename=filename
         self.fin=file(self.filename, 'r')
 
+        # currently unknown:
+        self.version=0
+
         # first we simply count how many elements we have:
         counter=0
         while True:
@@ -91,12 +94,28 @@ class density_file:
         self.Xouv=numpy.zeros(counter)
         self.Youv=numpy.zeros(counter)
 
+
+        self.moy=numpy.zeros((counter,7))
+        self.moy2=numpy.zeros((counter,7))
+
         self._max=numpy.zeros((counter,7))
         self._min=numpy.zeros((counter,7))
 
+        if self.version>=7:
+            self.rms_emit=numpy.zeros((counter,3))
+            self.rms_emit2=numpy.zeros((counter,3))
+
         self.lost=numpy.zeros((counter,self.Nrun))
         self.powlost=numpy.zeros((counter,self.Nrun))
 
+        self.lost2=numpy.zeros(counter)
+        self.Minlost=numpy.zeros(counter)
+        self.Maxlost=numpy.zeros(counter)
+
+        self.powlost2=numpy.zeros(counter)
+        self.Minpowlost=numpy.zeros(counter)
+        self.Maxpowlost=numpy.zeros(counter)
+
 
         while self.i<counter:
             self._getFullContent()
@@ -117,12 +136,13 @@ class density_file:
             shift+=1
             version=year
             year=numpy.fromfile(self.fin, dtype=numpy.int16, count=1)[0]
-        if shift:
-            raise ValueError("ERROR, shifted "+str(shift*2)+" bytes")
 
         self.vlong=numpy.fromfile(self.fin, dtype=numpy.int16, count=1)[0]
         self.Nrun=numpy.fromfile(self.fin, dtype=numpy.int32, count=1)[0]
 
+        if shift:
+            raise ValueError("ERROR, shifted "+str(shift*2)+" bytes")
+
         self.version=version
         self.year=year
 
@@ -131,9 +151,22 @@ class density_file:
         import numpy
 
         self._getHeader()
-
-        numpy.fromfile(self.fin, dtype=numpy.int16, count=15132/2)
-
+        
+        if self.version==8:
+            numpy.fromfile(self.fin, dtype=numpy.int16, count=8344/2)
+        if self.Nrun>1:
+            #WARN not 100% sure if this is correct..
+            numpy.fromfile(self.fin, dtype=numpy.int16, count=((5588+self.Nrun*12)/2))
+
+    def _get_7dim_array(array):
+        return dict(x=array[0],
+                    y=array[1],
+                    phase=array[2],
+                    energy=array[3],
+                    r=array[4],
+                    z=array[5],
+                    dpp=array[6],
+                    )
 
     def _getFullContent(self):
 
@@ -154,8 +187,8 @@ class density_file:
 
         n=7 # x [m], y[m], Phase [deg], Energy [MeV], R[m], Z[m], dp/p
 
-        moy=numpy.fromfile(self.fin, dtype=numpy.float32, count=n)
-        moy2=numpy.fromfile(self.fin, dtype=numpy.float32, count=n)
+        self.moy[self.i]=numpy.fromfile(self.fin, dtype=numpy.float32, count=n)[:]
+        self.moy2[self.i]=numpy.fromfile(self.fin, dtype=numpy.float32, count=n)[:]
         
         self._max[self.i]=numpy.fromfile(self.fin, dtype=numpy.float32, count=n)[:]
         self._min[self.i]=numpy.fromfile(self.fin, dtype=numpy.float32, count=n)[:]
@@ -167,8 +200,8 @@ class density_file:
             min_pos_moy=numpy.fromfile(self.fin, dtype=numpy.float32, count=n)
             max_pos_moy=numpy.fromfile(self.fin, dtype=numpy.float32, count=n)
         if self.version>=7:
-            rms_emit=numpy.fromfile(self.fin, dtype=numpy.float32, count=3)
-            rms_emit2=numpy.fromfile(self.fin, dtype=numpy.float32, count=3)
+            self.rms_emit[self.i]=numpy.fromfile(self.fin, dtype=numpy.float32, count=3)[:]
+            self.rms_emit2[self.i]=numpy.fromfile(self.fin, dtype=numpy.float32, count=3)[:]
         if self.version>=8:
             e_ouv=numpy.fromfile(self.fin, dtype=numpy.float32, count=1)
             phase_ouv_pos=numpy.fromfile(self.fin, dtype=numpy.float32, count=1)
@@ -181,12 +214,12 @@ class density_file:
             for i in xrange(self.Nrun):
                 self.lost[self.i,i]=numpy.fromfile(self.fin, dtype=numpy.int64, count=1)[0]
                 self.powlost[self.i,i]=numpy.fromfile(self.fin, dtype=numpy.float32, count=1)[0]
-            lost2=numpy.fromfile(self.fin, dtype=numpy.int64, count=1)[0]
-            Minlost=numpy.fromfile(self.fin, dtype=numpy.int64, count=1)[0]
-            Maxlost=numpy.fromfile(self.fin, dtype=numpy.int64, count=1)[0]
-            powlost2=numpy.fromfile(self.fin, dtype=numpy.float64, count=1)[0]
-            Minpowlost=numpy.fromfile(self.fin, dtype=numpy.float32, count=1)[0]
-            Maxpowlost=numpy.fromfile(self.fin, dtype=numpy.float32, count=1)[0]
+            self.lost2[self.i]=numpy.fromfile(self.fin, dtype=numpy.int64, count=1)[0]
+            self.Minlost[self.i]=numpy.fromfile(self.fin, dtype=numpy.int64, count=1)[0]
+            self.Maxlost[self.i]=numpy.fromfile(self.fin, dtype=numpy.int64, count=1)[0]
+            self.powlost2[self.i]=numpy.fromfile(self.fin, dtype=numpy.float64, count=1)[0]
+            self.Minpowlost[self.i]=numpy.fromfile(self.fin, dtype=numpy.float32, count=1)[0]
+            self.Maxpowlost[self.i]=numpy.fromfile(self.fin, dtype=numpy.float32, count=1)[0]
 
             if self.vlong==1:
                 tab=numpy.fromfile(self.fin, dtype=numpy.uint64, count=n*step)