diff --git a/parser/parser-vasp/parser_vasprun.py b/parser/parser-vasp/parser_vasprun.py
index eb77534accba44aa559743108ec51a07ef8f14f2..fd18289d73048d06b3eadb6a823aaa89423115ab 100644
--- a/parser/parser-vasp/parser_vasprun.py
+++ b/parser/parser-vasp/parser_vasprun.py
@@ -409,6 +409,8 @@ class VasprunContext(object):
 
 
     def onEnd_eigenvalues(self, parser, event, element, pathStr):
+        if pathStr != "modeling/calculation/eigenvalues":
+            return True
         backend = parser.backend
         eigenvalues = None
         occupation = None
@@ -443,20 +445,22 @@ class VasprunContext(object):
                 if eigenvalues is not None:
 
                     ev = eV2JV(eigenvalues)
-                    vbTopE = float('-inf') # ev[0,0,0]
-                    ebMinE = float('inf')
+                    vbTopE = []
+                    ebMinE = []
                     for ispin in range(occupation.shape[0]):
+                        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
                             vbTopIndex = ebIndex -1
                             if vbTopIndex >= 0:
                                 vbTopK = ev[ispin, ik, vbTopIndex]
-                                if vbTopK > vbTopE:
-                                    vbTopE = vbTopK
+                                if vbTopK > vbTopE[ispin]:
+                                    vbTopE[ispin] = vbTopK
                             if ebIndex < ev.shape[2]:
                                 ebMinK = ev[ispin, ik, ebIndex]
-                                if ebMinK < ebMinE:
-                                    ebMinE = ebMinK
+                                if ebMinK < ebMinE[ispin]:
+                                    ebMinE[ispin] = ebMinK
                     self.vbTopE = vbTopE
                     self.ebMinE = ebMinE
                     backend.addValue("energy_reference_highest_occupied", vbTopE)
@@ -485,7 +489,7 @@ class VasprunContext(object):
                             logging.exception("failed to get special points")
                         for isegment in range(nsegments):
                             backend.openNonOverlappingSection("section_k_band_segment_normalized")
-                            backend.addArrayValues("band_energies_normalized", energies[:, isegment, :, :]-self.vbTopE)
+                            backend.addArrayValues("band_energies_normalized", energies[:, isegment, :, :] - max(self.vbTopE))
                             backend.addArrayValues("band_occupations_normalized", occ[:, isegment, :, :])
                             backend.addArrayValues("band_k_points_normalized", kpt[isegment])
                             backend.addArrayValues("band_segm_start_end_normalized", np.asarray([kpt[isegment, 0], kpt[isegment, divisions - 1]]))
@@ -705,7 +709,7 @@ class VasprunContext(object):
                 if el.attrib.get("name") == "efermi":
                     self.eFermi = eV2J(float(el.text.strip()))
                     backend.addValue("dos_fermi_energy", self.eFermi)
-                    backend.addValue("energy_reference_fermi", self.eFermi)
+                    backend.addValue("energy_reference_fermi", [self.eFermi]*self.ispin)
                 else:
                     backend.pwarn("unexpected tag %s %s in dos" % (el.tag, el.attrib))
             elif el.tag == "total":
@@ -727,8 +731,8 @@ class VasprunContext(object):
                                 dosE = eV2JV(dosA[:,:,0])
                                 dosI = dosA[:,:,2]
                                 dosV = dosA[:,:,1]
-                                if self.vbTopE is not None:
-                                    eRef = self.vbTopE
+                                if self.vbTopE:
+                                    eRef = max(self.vbTopE)
                                 else:
                                     eRef = self.eFermi
                                 backend.addArrayValues("dos_energies", dosE)