diff --git a/ess/TraceWin.py b/ess/TraceWin.py
index 29d326524955bfa9886aa53868beb6217766f581..f35ded288853a9fcd2f022e0a707eee5a34376b2 100644
--- a/ess/TraceWin.py
+++ b/ess/TraceWin.py
@@ -261,6 +261,7 @@ class plt:
         # Thanks Emma!
 
         import numpy
+        from builtins import range
 
         fin=open(self.filename,'r')
 
@@ -295,6 +296,9 @@ class plt:
         i=0
         while i<self.Ne:
             SubHeader=numpy.fromfile(fin, dtype=SubHeader_type, count=1)
+            # unfinished files need this fix (simulation still running)
+            if not SubHeader['Nelp']:
+                break
             i=SubHeader['Nelp'][0]
 
             self.Nelp.append(i)
@@ -304,7 +308,7 @@ class plt:
             data={}
             for key in ['Zgen','phase0','wgen']:
                 data[key]=SubHeader[key][0]
-            for j in xrange(7):
+            for j in range(7):
                     c=self._columns[j]
                     data[c]=Table[:,j]
                     # convert x,y from cm to m
@@ -370,12 +374,13 @@ class plt:
         (NOT necessarily reference)
         '''
         import numpy
+        from builtins import range
 
         if not hasattr(self,'avg'):
             self.calc_avg()
         self.gamma=[]
         self.beta=[]
-        for i,j in zip(self.Nelp,xrange(len(self.Nelp))):
+        for i,j in zip(self.Nelp,range(len(self.Nelp))):
             Eavg=self.avg['E'][j]
             self.gamma.append((self.mc2+Eavg)/self.mc2)
             self.beta.append(numpy.sqrt(1.-1./self.gamma[-1]**2))
@@ -421,6 +426,7 @@ class plt:
         '''
 
         import numpy
+        from builtins import range
 
         if not hasattr(self,'avg'):
                self.calc_avg()
@@ -428,7 +434,7 @@ class plt:
         vals=self._columns[:-1]
 
         self.sigma=[]
-        for j in xrange(len(self.Nelp)):
+        for j in range(len(self.Nelp)):
             i=self.Nelp[j]
             data=self[i]
 
@@ -443,6 +449,7 @@ class plt:
         '''
 
         import numpy
+        from builtins import range
 
         if not hasattr(self,'sigma'):
                self.calc_sigma()
@@ -451,7 +458,7 @@ class plt:
 
         self.std={}
 
-        for j in xrange(len(vals)):
+        for j in range(len(vals)):
             v=vals[j]
             self.std[v]=numpy.sqrt(self.sigma[:,j,j])
 
@@ -462,6 +469,7 @@ class plt:
         '''
 
         import numpy
+        from builtins import range
 
         if not hasattr(self,'sigma'):
                self.calc_sigma()
@@ -469,23 +477,23 @@ class plt:
                self.calc_rel()
 
         self.twiss_eps=[]
-        for j in xrange(len(self.Nelp)):
+        for j in range(len(self.Nelp)):
             self.twiss_eps.append([numpy.sqrt(numpy.linalg.det(self.sigma[j][i:i+2][:,i:i+2])) for i in (0,2,4)])
         self.twiss_eps=numpy.array(self.twiss_eps)
 
         # Calculate normalized emittance:
         # TODO: this is NOT correct normalization for longitudinal
         self.twiss_eps_normed=self.twiss_eps.copy()
-        for i in xrange(3):
+        for i in range(3):
             self.twiss_eps_normed[:,i]*=self.gamma*self.beta
 
         # Calculate beta:
         # This is a factor 10 different from what TraceWin plots
-        self.twiss_beta = [[self.sigma[j][i][i]/self.twiss_eps[j,i/2] for i in (0,2,4)] for j in xrange(len(self.Nelp))]
+        self.twiss_beta = [[self.sigma[j][i][i]/self.twiss_eps[j,i/2] for i in (0,2,4)] for j in range(len(self.Nelp))]
         self.twiss_beta = numpy.array(self.twiss_beta)
 
         # Calculate alpha:
-        self.twiss_alpha = [[-self.sigma[j][i][i+1]/self.twiss_eps[j,i/2] for i in (0,2,4)] for j in xrange(len(self.Nelp))]
+        self.twiss_alpha = [[-self.sigma[j][i][i+1]/self.twiss_eps[j,i/2] for i in (0,2,4)] for j in range(len(self.Nelp))]
         self.twiss_alpha = numpy.array(self.twiss_alpha)
 
 
@@ -643,6 +651,7 @@ class density_file:
     def _getFullContent(self):
 
         import numpy
+        from builtins import range
 
         #self._getHeader()
         # no need to read the header again:
@@ -685,7 +694,7 @@ class density_file:
         self.Np[self.i]=numpy.fromfile(self.fin, dtype=numpy.int64, count=1)[0]
 
         if self.Np[self.i]:
-            for i in xrange(self.Nrun):
+            for i in range(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]
             self.lost2[self.i]=numpy.fromfile(self.fin, dtype=numpy.int64, count=1)[0]
@@ -953,6 +962,7 @@ class remote_data_merger:
         '''
 
         import numpy as np
+        from builtins import range
 
         h1=[]
         h2=[]
@@ -978,17 +988,17 @@ class remote_data_merger:
                 d3.append(thisdata[11])
 
             # fix d1:
-            for i in xrange(len(d1)):
-                for j in xrange(len(d1[0])):
+            for i in range(len(d1)):
+                for j in range(len(d1[0])):
                     d1[i][j]=float(d1[i][j])
             d1=np.array(d1)
             means=d1.mean(axis=0)
             stds=d1.std(axis=0)
             d1=[]
-            for i in xrange(len(stds)):
+            for i in range(len(stds)):
                 if stds[i]/means[i]<1e-10:
                     stds[i]=0.0
-            for i in xrange(len(stds)):
+            for i in range(len(stds)):
                 # some small std are removed..
                 if stds[i]/means[i]>1e-8:
                     d1.append('%f(%f)' % (means[i],stds[i]))