diff --git a/parser/parser-gpaw/tar.py b/parser/parser-gpaw/tar.py
new file mode 100644
index 0000000000000000000000000000000000000000..b45b30270ee4bc0cd85e2a65bb4fb33a2044d414
--- /dev/null
+++ b/parser/parser-gpaw/tar.py
@@ -0,0 +1,61 @@
+import tarfile
+import xml.etree.ElementTree as ElementTree
+
+import numpy as np
+
+
+class Reader:
+    def __init__(self, name):
+        self.dims = {}
+        self.shapes = {}
+        self.dtypes = {}
+        self.parameters = {}
+        self.tar = tarfile.open(name, 'r')
+        f = self.tar.extractfile('info.xml').read()
+        root = ElementTree.fromstring(f)
+        self.byteswap = ((root.attrib['endianness'] == 'little') !=
+                         np.little_endian)
+        for child in root:
+            a = child.attrib
+            if child.tag == 'parameter':
+                try:
+                    value = eval(a['value'], {})
+                except (SyntaxError, NameError):
+                    value = str(a['value'])
+                self.parameters[a['name']] = value
+            elif child.tag == 'array':
+                name = a['name']
+                self.dtypes[name] = a['type']
+                self.shapes[name] = []
+                for dim in child:
+                    n = int(dim.attrib['length'])
+                    self.shapes[name].append(n)
+                    self.dims[dim.attrib['name']] = n
+
+    def __getattr__(self, name):
+        if name in self.parameters:
+            return self.parameters[name]
+        else:
+            return self.get_array(name)
+
+    def get_array(self, name):
+        fileobj = self.tar.extractfile(name)
+        shape = self.shapes[name]
+        dtype = self.dtypes[name]
+        dtype = np.dtype({'int': 'int32'}.get(dtype, dtype))
+        size = np.prod(shape) * dtype.itemsize
+        array = np.fromstring(fileobj.read(size), dtype)
+        if self.byteswap:
+            array = array.byteswap()
+        if dtype == np.int32:
+            array = np.asarray(array, int)
+        array.shape = shape
+        return array
+    
+    def close(self):
+        self.tar.close()
+
+        
+if __name__ == '__main__':
+    r = Reader('H2.gpw')
+    print(r.Eigenvalues, r.FermiLevel, r.UnitCell)