diff --git a/src/OutputFileHandler.cc b/src/OutputFileHandler.cc
index dba0aafdff5a3fa4d33a6b9548071e23700dd24f..8649556fd7cff3a8de0f20ae911dfca5572cd94d 100644
--- a/src/OutputFileHandler.cc
+++ b/src/OutputFileHandler.cc
@@ -1,5 +1,7 @@
 #include "OutputFileHandler.h"
 
+#include <stdint.h>
+
 #include <atomic>
 #include <cassert>
 #include <string>
@@ -15,6 +17,22 @@ std::string OutputFileHandler::GetSinkDataDir() const {
   return Detail::FormatRun(run_.number) + "/";
 }
 
+uint32_t OutputFileHandler::GetMaxFileIndexPerLumisection() {
+  auto max_index = static_cast<uint32_t>(constants::N_orbits_per_lumisection / nOrbitsPerFile_) - 1;
+  if (HasCmsswHeaders()) {
+    return 10;
+  } else {
+    return UINT32_MAX;
+  }
+}
+
+uint32_t OutputFileHandler::GetLumisectionFromFileIndex(int index) {
+  assert(index > 0 && nOrbitsPerFile_ > 0);
+  uint32_t i = index;
+  auto ls_index = 1 + (i * nOrbitsPerFile_) / constants::N_orbits_per_lumisection;
+  return 1 + i / 10;
+}
+
 void OutputFileHandler::UpdateRunInfo(uint32_t run, uint32_t index) {
   if (run_.number != static_cast<int>(run)) {
     LOG(TRACE) << "Previous run: " << run_.number << " | New run: " << run;
@@ -27,12 +45,12 @@ void OutputFileHandler::UpdateRunInfo(uint32_t run, uint32_t index) {
     current_index_ = static_cast<int>(index);
   }
 
+//      1706770016 //+ 96
+//      1706769920 // +864
+//      1706769056
+
   if (!ls_) {
-    if (HasCmsswHeaders())
-      ls_ = std::make_unique<Detail::LumisectionMetadata>(
-          static_cast<uint32_t>(constants::N_orbits_per_lumisection / nOrbitsPerFile_) - 1);
-    else
-      ls_ = std::make_unique<Detail::LumisectionMetadata>();
+    ls_ = std::make_unique<Detail::LumisectionMetadata>(GetMaxFileIndexPerLumisection());
   }
 
   ls_->UpdateIndex(current_index_);
@@ -100,15 +118,13 @@ void OutputFileHandler::CommitLumisection() {
 }
 
 void OutputFileHandler::CommitRun() {
-  assert(current_index_ > 0 && nOrbitsPerFile_ > 0);
-  int ls_index = 1 + (current_index_ * nOrbitsPerFile_) / constants::N_orbits_per_lumisection;
-
-  auto lumi_number = ls_->lumisection;
+  auto ls_index = GetLumisectionFromFileIndex(current_index_);
 
   LOG(INFO) << "Lumi " << std::to_string(ls_index)
             << ". Assert that lumisection pointer exists: " << bool(ls_);
   if (ls_) {
-    assert(lumi_number == static_cast<uint32_t>(ls_index));
+    auto lumi_number = ls_->lumisection;
+    assert(lumi_number == ls_index);
 
     if (IsMainPipeline()) {
       LOG(INFO) << "Committing lumi EOLS before EoR can be written";
diff --git a/src/OutputFileHandler.h b/src/OutputFileHandler.h
index 47128bfe361c200e1546b2cee56968c1bd5cc045..ed8da0d28351ef21b64ae771c248352c8a8d032f 100644
--- a/src/OutputFileHandler.h
+++ b/src/OutputFileHandler.h
@@ -39,8 +39,7 @@ class OutputFileHandler {
         is_main_pipeline_(loc_.filename_suffix == ".raw"),
         sourceID_(source_id),
         sink_(root_path_, root_path_) {
-    ls_ = std::make_unique<Detail::LumisectionMetadata>(
-        static_cast<uint32_t>(constants::N_orbits_per_lumisection / num_orbits_per_file) - 1);
+    ls_ = std::make_unique<Detail::LumisectionMetadata>(GetMaxFileIndexPerLumisection());
   }
 
   ~OutputFileHandler() { CommitFile(run_.number, current_index_); }
@@ -49,6 +48,9 @@ class OutputFileHandler {
   int StageSlice(const char *buffer, size_t size_bytes, uint32_t size_orbits, uint32_t run_number,
                  uint32_t file_index);
 
+  uint32_t GetMaxFileIndexPerLumisection();
+  uint32_t GetLumisectionFromFileIndex(int index);
+
   auto HasFile() const { return outputFile_.IsOpen(); }
   auto HasCmsswHeaders() const { return has_cmssw_headers_; }
   auto IsMainPipeline() const { return is_main_pipeline_; }