diff --git a/ess/TraceWin.py b/ess/TraceWin.py
index da2518b30660f5ea7ee9db869675f27e3bc1b188..5f31d206aa38c1850b3eb12d95ac10ba2d0078a9 100644
--- a/ess/TraceWin.py
+++ b/ess/TraceWin.py
@@ -934,3 +934,43 @@ class partran(dict):
         for i in xrange(len(self.columns)):
             self[self.columns[i]]=self.data[:,i]
 
+class field_map:
+    '''
+    Class to read in the field map structures
+
+    WARNING: Work in progress!!
+    '''
+
+    def __init__(self, filename):
+        self._filename=filename
+        self._load_data(filename)
+
+    def _load_data(self,filename):
+        import os,numpy
+
+        if not os.path.isfile(filename):
+            raise ValueError("Cannot find file {}".format(filename))
+        fin = file(filename,'r')
+        l=fin.readline().split()
+        self.size=[]
+        numindexes=[]
+        while len(l)==2:
+            numindexes.append(int(l[0])+1)
+            self.size.append(float(l[1]))
+            l=fin.readline().split()
+
+        self.norm=float(l[0])
+        self.map=numpy.loadtxt(fin).reshape(numindexes)
+        print self.map.shape
+
+    def savemap(self, filename):
+        fout=file(filename,'w')
+        for n,s in zip(self.map.shape,self.size):
+            fout.write('{} {}\n'.format(n-1,s))
+        fout.write('{}\n'.format(self.norm))
+        l=1
+        for i in self.map.shape:
+            l*=i
+        data=self.map.reshape(l)
+        for j in data:
+            fout.write('{}\n'.format(j))