diff --git a/ess/TraceWin.py b/ess/TraceWin.py
index 373e4e6be8475398b1a1271e6c056a8f4e3be8e3..df334838f696ad9b1bce995fa273bb15d9d8972b 100644
--- a/ess/TraceWin.py
+++ b/ess/TraceWin.py
@@ -55,6 +55,106 @@ class dst:
             i=self._columns.index(key)
             return self._data[:,i]
 
+class plt:
+    '''
+    Simple class to read in a 
+    TraceWin plot file
+
+    Class afterwards hold the following
+    dictionary items:
+      - Ne (number of locations)
+      - Np (number of particles)
+      - Ib [A] (beam current)
+      - freq [MHz]
+      - mc2  [MeV] 
+      - Nelp [m] (locations)
+
+    each plt[i], where i is element number, holds:
+      - Zgen [cm] (location)
+      - phase0 [deg] (ref phase)
+      - wgen [MeV] (ref energy)
+      - x [array, cm]
+      - xp [array, rad]
+      - y [array, cm]
+      - yp [array, rad]
+      - phi [array, rad]
+      - E [array, MeV]
+      - l [array] (is lost)
+
+      Example::
+        plt=ess.TraceWin.plt('calc/dtl1.plt')
+        for i in [97,98]:
+          data=plt[i]$
+          if data:
+            print data['x']
+    '''
+    def __init__(self, filename):
+        # easy storage..
+        self.filename=filename
+        # used to create dict behaviour..
+        self._columns=['x','xp','y','yp','phi','E', 'l']
+        # read in the file..
+        self._readBinaryFile()
+
+    def _readBinaryFile(self):
+        # Thanks Emma!
+
+        import numpy
+
+        fin=file(self.filename,'r')
+
+        # dummy, Np, Ib, freq, dummy
+        Header_type = numpy.dtype([
+            ('dummy12', numpy.int16),
+            ('Ne',      numpy.int32),
+            ('Np',      numpy.int32),
+            ('Ib',      numpy.float64),
+            ('freq',    numpy.float64),
+            ('mc2',     numpy.float64),
+            ])
+        SubHeader_type = numpy.dtype([
+             ('dummy12', numpy.int8),
+             ('Nelp',      numpy.int32),
+             ('Zgen',     numpy.float64),
+             ('phase0',     numpy.float64),
+             ('wgen',     numpy.float64),
+             ])
+
+
+        Header=numpy.fromfile(fin, dtype=Header_type, count=1)
+        self.Np=Header['Np'][0]
+        self.Ne=Header['Ne'][0]
+        self.Ib=Header['Ib'][0]
+        self.freq=Header['freq'][0]
+        self.mc2=Header['mc2'][0]
+
+        self._data=[]
+        self.Nelp=[]
+
+        i=0
+        while i<self.Ne:
+            SubHeader=numpy.fromfile(fin, dtype=SubHeader_type, count=1)
+            i=SubHeader['Nelp'][0]
+
+            self.Nelp.append(i)
+
+            Table=numpy.fromfile(fin, dtype=numpy.float32, count=self.Np*7)
+            Table=Table.reshape(self.Np,7)
+            data={}
+            for key in ['Zgen','phase0','wgen']:
+                data[key]=SubHeader[key][0]
+            for j in xrange(7):
+                    c=self._columns[j]
+                    data[c]=Table[:,j]
+            self._data.append(data)
+
+    def __getitem__(self, key):
+        if key in self.Nelp:
+            i=self.Nelp.index(key)
+            return self._data[i]
+        else:
+            print "No data to plot at element",key
+
 class density_file:
     '''
     Simple class to read a TraceWin density file