diff --git a/km3buu/geometry.py b/km3buu/geometry.py
index 42378c3b4d6457f2f0530fa009a08186c1db1131..c1126c414ad6ce4a698db1c8cd32a9c6aa0bb568 100644
--- a/km3buu/geometry.py
+++ b/km3buu/geometry.py
@@ -37,13 +37,13 @@ class DetectorVolume(ABC):
         pass
 
     @abstractmethod
-    def header_entry(self):
+    def header_entries(self):
         """
         Returns the header information for the detector volume geometry
 
         Returns
         -------
-        tuple (header_key, header_information)
+        dict {header_key: header_information}
         """
         pass
 
@@ -102,10 +102,15 @@ class CanVolume(DetectorVolume):
         pos_z = np.random.uniform(self._zmin, self._zmax)
         return (pos_x, pos_y, pos_z)
 
-    def header_entry(self):
-        key = "can"
-        value = "{} {} {}".format(self._zmin, self._zmax, self._radius)
-        return key, value
+    def header_entries(self, nevents=0):
+        retdct = dict()
+        key = "genvol"
+        value = "{} {} {} {} {}".format(self._zmin, self._zmax, self._radius,
+                                        self._volume, nevents)
+        retdct[key] = value
+        key = "fixedcan"
+        value = "0 0 {} {} {}".format(self._zmin, self._zmax, self._radius)
+        return retdct
 
 
 class SphericalVolume(DetectorVolume):
@@ -140,9 +145,14 @@ class SphericalVolume(DetectorVolume):
         pos = (pos_x, pos_y, pos_z)
         return tuple(np.add(self._coord_origin, pos))
 
-    def header_entry(self):
+    def header_entries(self, nevents=0):
+        retdct = dict()
         key = "sphere"
         value = "radius: {} center_x: {} center_y: {} center_z: {}".format(
             self._radius, self._coord_origin[0], self._coord_origin[1],
             self._coord_origin[2])
-        return key, value
+        retdct[key] = value
+        key = "genvol"
+        value = "0 0 {} {} {}".format(self._radius, self._volume, nevents)
+        retdct[key] = value
+        return retdct
diff --git a/km3buu/output.py b/km3buu/output.py
index 21395df73116602f909652e8e6d9d060ac270bbb..d36b089abf5f93f0597455e2a86d99106f85da42 100644
--- a/km3buu/output.py
+++ b/km3buu/output.py
@@ -176,7 +176,8 @@ EMPTY_KM3NET_HEADER_DICT = {
     "norma": "0 0",
     "tgen": "0",
     "simul": "",
-    "primary": "0"
+    "primary": "0",
+    "genvol": "0 0 0 0 0"
 }
 
 PARTICLE_MC_STATUS = {
@@ -707,12 +708,12 @@ def write_detector_file(gibuu_output,
     global_generation_weight = gibuu_output.global_generation_weight(4 * np.pi)
     mean_xsec_func = gibuu_output.mean_xsec
 
-    head = ROOT.Head()
     header_dct = EMPTY_KM3NET_HEADER_DICT.copy()
 
     header_dct["target"] = element.name
-    key, value = geometry.header_entry()
-    header_dct[key] = value
+    for k,v in geometry.header_entries(gibuu_output._generated_events //
+            no_files).items():
+        header_dct[k] = v
     header_dct["coord_origin"] = "{} {} {}".format(*geometry.coord_origin)
     header_dct["flux"] = "{:d} 0 0".format(nu_type)
     header_dct["cut_nu"] = "{:.2f} {:.2f} -1 1".format(gibuu_output.energy_min,
@@ -740,6 +741,7 @@ def write_detector_file(gibuu_output,
         tree.Branch("Evt", evt, 32000, 4)
         mc_trk_id = 0
 
+        head = ROOT.Head()
         for k, v in header_dct.items():
             head.set_line(k, v)
         head.Write("Head")
@@ -831,6 +833,7 @@ def write_detector_file(gibuu_output,
             tree.Fill()
         outfile.Write()
         outfile.Close()
+        del head
         del outfile
         del evt
         del tree