diff --git a/km3buu/jobcard.py b/km3buu/jobcard.py
index 48285ab9ac4434d899a354e74e6de2dd64b74144..7a594b39a9f7584d0847b326cf592e4b6b13bc39 100644
--- a/km3buu/jobcard.py
+++ b/km3buu/jobcard.py
@@ -12,6 +12,8 @@ __maintainer__ = "Johannes Schumann"
 __email__ = "jschumann@km3net.de"
 __status__ = "Development"
 
+import f90nml
+
 INPUT_PATH = "/opt/buuinput2019/"
 
 PROCESS_LOOKUP = {"cc": 2, "nc": 3, "anticc": -2, "antinc": -3}
@@ -47,7 +49,7 @@ class Jobcard(object):
     """
     def __init__(self, input_path=INPUT_PATH):
         self.input_path = "'%s'" % input_path
-        self._groups = {}
+        self._groups = f90nml.Namelist()
         self.set_property("input", "path_to_input", self.input_path)
 
     def set_property(self, group, name, value):
@@ -83,6 +85,31 @@ class Jobcard(object):
             retval += "/\n\n"
         return retval
 
+    def __getitem__(self, key):
+        if isinstance(key, str):
+            if '/' in key:
+                k = key.split('/')
+                return self._groups[k[0]][k[1]]
+            else:
+                return self._groups[key]
+        elif isinstance(key, tuple) and len(key) == 2:
+            return self._groups[key[0]][key[1]]
+        else:
+            raise IndexError("Invalid access to Jobcard")
+
+
+def read_jobcard(fpath):
+    """ Read a jobcard from file
+
+    Parameters
+    ----------
+    fpath: str
+        Filepath of the jobcard
+    """
+    jc = Jobcard()
+    jc._groups = f90nml.read(fpath)
+    return jc
+
 
 def generate_neutrino_jobcard_template(
     process,