diff --git a/parser/parser-vasp/vaspparser/parser_vasprun.py b/parser/parser-vasp/vaspparser/parser_vasprun.py
index 4199dfcdfea53337b1c8342c82ce9943044f11ad..78455673a7db0abc542c48b203def318ac52ff62 100644
--- a/parser/parser-vasp/vaspparser/parser_vasprun.py
+++ b/parser/parser-vasp/vaspparser/parser_vasprun.py
@@ -258,6 +258,7 @@ class VasprunContext(object):
         self.eFermi = None
         self.cell = None
         self.angstrom_cell = None
+        self.waveCut = None
 
     sectionMap = {
         "modeling": ["section_run", "section_method"],
@@ -304,7 +305,7 @@ class VasprunContext(object):
             if (el.tag != "i"):
                 backend.pwarn("unexpected tag %s %s %r in incar" % (el.tag, el.attrib, el.text))
             else:
-                name = el.attrib.get("name", None)
+                name = el.attrib.get("name", None).lower()
                 meta = metaEnv['x_vasp_incar_' + name]
                 valType = el.attrib.get("type")
                 if not meta:
@@ -330,7 +331,7 @@ class VasprunContext(object):
                             backend.addValue(meta["name"], [converter(x) for x in vals])
                         else:
                             backend.addValue(meta["name"], converter(el.text))
-                    if name == 'GGA':
+                    if name == 'gga':
                         fMap = {
                             '91': ['GGA_X_PW91', 'GGA_C_PW91'],
                             'PE': ['GGA_X_PBE', 'GGA_C_PBE'],
@@ -342,17 +343,17 @@ class VasprunContext(object):
                             backend.pwarn("Unknown XC functional %s" % el.text.strip())
                         else:
                             for f in functs:
-                                backend.openNonOverlappingSection("section_XC_functionals")
-                                backend.addValue("XC_functional_name", f)
-                                backend.closeNonOverlappingSection("section_XC_functionals")
-                    elif name == "ISPIN":
+                                backend.openNonOverlappingSection("section_xc_functionals")
+                                backend.addValue("xc_functional_name", f)
+                                backend.closeNonOverlappingSection("section_xc_functionals")
+                    elif name == "ispin":
                         self.ispin = int(el.text.strip())
-                    elif name == "LDAU":
+                    elif name == "ldau":
                         if re.match(".?[Tt](?:[rR][uU][eE])?.?|[yY](?:[eE][sS])?|1", el.text.strip()):
                             dft_plus_u = True
-                    elif name == "IBRION":
+                    elif name == "ibrion":
                         ibrion = int(el.text.strip())
-                    elif name == "NSW":
+                    elif name == "nsw":
                         nsw = int(el.text.strip())
         if ibrion is None:
             ibrion = -1 if nsw == 0 or nsw == 1 else 0
@@ -437,8 +438,8 @@ class VasprunContext(object):
         if pathStr != "modeling/calculation/eigenvalues":
             return True
         backend = parser.backend
-        eigenvalues = None
-        occupation = None
+        eigenvalues = []
+        occupation = []
         for el in element:
             if el.tag == "array":
                 for arrEl in el:
@@ -456,27 +457,26 @@ class VasprunContext(object):
                                     if kEl.tag == "set":
                                         ik += 1
                                         bands = np.asarray(getVector(kEl, field = "r"))
-                                        if eigenvalues is None:
-                                            eigenvalues = np.zeros((self.ispin, self.kpoints.shape[0],  bands.shape[0]), dtype = float)
-                                            occupation = np.zeros((self.ispin, self.kpoints.shape[0],  bands.shape[0]), dtype = float)
-                                        eigenvalues[isp, ik] = bands[:,0]
-                                        occupation[isp, ik] = bands[:,1]
+                                        if len(eigenvalues) <=  isp:
+                                            eigenvalues.append(np.zeros((self.kpoints.shape[0],  bands.shape[0]), dtype = float))
+                                            occupation.append(np.zeros((self.kpoints.shape[0],  bands.shape[0]), dtype = float))
+                                        eigenvalues[isp][ik] = bands[:,0]
+                                        occupation[isp][ik] = bands[:,1]
                                     else:
                                         backend.pwarn("unexpected tag %s in k array of the eigenvalues" % kEl.tag)
                             else:
                                 backend.pwarn("unexpected tag %s in spin array of the eigenvalues" % spinEl.tag)
                     else:
                         backend.pwarn("unexpected tag %s in array of the eigenvalues" % arrEl.tag)
-                if eigenvalues is not None:
-
-                    ev = eV2JV(eigenvalues)
+                if eigenvalues:
+                    ev = eV2JV(np.array(eigenvalues))
                     vbTopE = []
                     ebMinE = []
-                    for ispin in range(occupation.shape[0]):
+                    for ispin in range(len(occupation)):
                         vbTopE.append(float('-inf'))
                         ebMinE.append(float('inf'))
-                        for ik in range(occupation.shape[1]):
-                            ebIndex = bisect.bisect_right(-occupation[ispin, ik, :], -0.5) - 1
+                        for ik in range(occupation[ispin].shape[0]):
+                            ebIndex = bisect.bisect_right(-occupation[ispin][ik, :], -0.5) - 1
                             vbTopIndex = ebIndex -1
                             if vbTopIndex >= 0:
                                 vbTopK = ev[ispin, ik, vbTopIndex]
@@ -495,8 +495,9 @@ class VasprunContext(object):
                         backend.openNonOverlappingSection("section_k_band")
                         nsegments = self.kpoints.shape[0] // divisions
                         kpt = np.reshape(self.kpoints, (nsegments, divisions, 3))
-                        energies = np.reshape(ev, (self.ispin, nsegments, divisions ,  bands.shape[0]))
-                        occ = np.reshape(occupation, (self.ispin, nsegments, divisions, bands.shape[0]))
+                        ispin = len(eigenvalues)
+                        energies = np.reshape(ev, (ispin, nsegments, divisions ,  bands.shape[0]))
+                        occ = np.reshape(np.array(occupation), (ispin, nsegments, divisions, bands.shape[0]))
                         for isegment in range(nsegments):
                             backend.openNonOverlappingSection("section_k_band_segment")
                             backend.addArrayValues("band_energies", energies[:, isegment, :, :])
@@ -527,7 +528,7 @@ class VasprunContext(object):
                     else:
                         backend.openNonOverlappingSection("section_eigenvalues")
                         backend.addArrayValues("eigenvalues_values", ev)
-                        backend.addArrayValues("eigenvalues_occupation", occupation)
+                        backend.addArrayValues("eigenvalues_occupation", np.array(occupation))
                         backend.closeNonOverlappingSection("section_eigenvalues")
             else:
                 backend.pwarn("unexpected tag %s in the eigenvalues" % el.tag)
@@ -538,7 +539,7 @@ class VasprunContext(object):
     def onStart_calculation(self, parser, event, element, pathStr):
         gIndexes = parser.tagSections[pathStr]
         self.singleConfCalcs.append(gIndexes["section_single_configuration_calculation"])
-        if self.waveCut:
+        if self.waveCut is not None:
             backend.openNonOverlappingSection("section_basis_set")
             backend.addValue("mapping_section_basis_set_cell_dependent", self.waveCut)
             backend.closeNonOverlappingSection("section_basis_set")
@@ -555,8 +556,8 @@ class VasprunContext(object):
         backend.addValue("sampling_method", sampling_method)
         backend.closeSection("section_sampling_method", samplingGIndex)
         frameSequenceGIndex = backend.openSection("section_frame_sequence")
-        backend.addValue("frame_sequence_to_sampling_ref", samplingGIndex)
-        backend.addArrayValues("frame_sequence_local_frames_ref", np.asarray(self.singleConfCalcs))
+        backend.addValue("frame_sequence_to_sampling_method_ref", samplingGIndex)
+        backend.addArrayValues("frame_sequence_to_frames_ref", np.asarray(self.singleConfCalcs))
         backend.closeSection("section_frame_sequence", frameSequenceGIndex)
 
     def onEnd_calculation(self, parser, event, element, pathStr):
@@ -566,7 +567,7 @@ class VasprunContext(object):
         backend = parser.backend
         backend.addValue("single_configuration_calculation_to_system_ref", self.lastSystemDescription)
         gIndexes = parser.tagSections["/modeling"]
-        backend.addValue("single_configuration_to_calculation_method_ref", gIndexes["section_method"])
+        backend.addValue("single_configuration_calculation_to_method_ref", gIndexes["section_method"])
         for el in element:
             if el.tag == "energy":
                 for enEl in el:
@@ -580,14 +581,16 @@ class VasprunContext(object):
                             backend.addValue("energy_total", value)
                         elif name == "e_0_energy":
                             value = eConv(float(enEl.text.strip()))
-                            backend.addValue("energy_total_T0", value)
+                            backend.addValue("energy_total_t0", value)
                         else:
                             backend.pwarn("Unexpected i tag with name %s in energy section" % name)
                     elif enEl.tag == "varray":
                         name = enEl.attrib.get("name", None)
                         if name == "forces":
                             f = getVector(enEl, lambda x: fConv(float(x)))
+                            fId = backend.openSection('section_atom_forces')
                             backend.addValue("atom_forces", f)
+                            backend.closeSection('section_atom_forces', fId)
                         elif name == 'stress':
                             f = getVector(enEl, lambda x: pConv(float(x)))
                             backend.addValue("stress_tensor", f)
@@ -743,9 +746,9 @@ class VasprunContext(object):
                         backend.pwarn("Unknown XC functional %s" % el.text.strip())
                     else:
                         for f in functs:
-                            backend.openNonOverlappingSection("section_XC_functionals")
-                            backend.addValue("XC_functional_name", f)
-                            backend.closeNonOverlappingSection("section_XC_functionals")
+                            backend.openNonOverlappingSection("section_xc_functionals")
+                            backend.addValue("xc_functional_name", f)
+                            backend.closeNonOverlappingSection("section_xc_functionals")
                 elif name == "ISPIN":
                     self.ispin = int(el.text.strip())
 
diff --git a/src/main/scala/eu/nomad_lab/parsers/VaspParser.scala b/src/main/scala/eu/nomad_lab/parsers/VaspParser.scala
index 17564fdca8ecb3545d20f64d6fad09bd474e9bcf..fdf96e83f060e67e989341297710f7634c94c21d 100644
--- a/src/main/scala/eu/nomad_lab/parsers/VaspParser.scala
+++ b/src/main/scala/eu/nomad_lab/parsers/VaspParser.scala
@@ -46,7 +46,7 @@ object VaspParser extends SimpleExternalParserGenerator(
     "parser-vasp/vaspparser/setup_paths.py",
     "nomad_meta_info/public.nomadmetainfo.json",
     "nomad_meta_info/common.nomadmetainfo.json",
-    "nomad_meta_info/meta_types.nomadmetainfo.json",
+    "nomad_meta_info/meta.nomadmetainfo.json",
     "nomad_meta_info/vasp.nomadmetainfo.json"
   ) ++ DefaultPythonInterpreter.commonFiles(),
   dirMap = Map(
@@ -89,7 +89,7 @@ object VaspRunParser extends SimpleExternalParserGenerator(
     "parser-vasp/vaspparser/vaspmainparser.py",
     "nomad_meta_info/public.nomadmetainfo.json",
     "nomad_meta_info/common.nomadmetainfo.json",
-    "nomad_meta_info/meta_types.nomadmetainfo.json",
+    "nomad_meta_info/meta.nomadmetainfo.json",
     "nomad_meta_info/vasp.nomadmetainfo.json"
   ) ++ DefaultPythonInterpreter.commonFiles(),
   dirMap = Map(