diff --git a/src/OutputFile.cc b/src/OutputFile.cc
index f4832ac4e655028db2678b80767bf9f882e472e0..80f3fd1a5ec860e16442369609d4aeb872515062 100644
--- a/src/OutputFile.cc
+++ b/src/OutputFile.cc
@@ -49,7 +49,7 @@ std::string Detail::LumisectionMetadata::MakeFooter(uint32_t run_number) const {
   return footer.str();
 }
 
-void Detail::RunMetadata::AddLumisectionMetadata(LumisectionMetadata& ls) {
+void Detail::RunMetadata::AddLumisectionMetadata(const LumisectionMetadata& ls) {
   std::lock_guard<std::mutex> l(mutex_);
   num_orbits += ls.num_orbits;
   num_files += ls.num_files;
diff --git a/src/OutputFile.h b/src/OutputFile.h
index 8f2369ca4a80a7617d1131f6c3b126022138610c..c9585f6ffbbfe174e1b1368cdde10fc5762638d7 100644
--- a/src/OutputFile.h
+++ b/src/OutputFile.h
@@ -92,7 +92,7 @@ struct RunMetadata {
     num_orbits = num_files = 0;
     number = run_number;
   }
-  void AddLumisectionMetadata(LumisectionMetadata& ls);
+  void AddLumisectionMetadata(const LumisectionMetadata& ls);
   std::string MakeFooter(uint32_t ls_index) const;
 };
 
@@ -110,23 +110,23 @@ class Output {
   Output() = default;
   ~Output() {}
 
-  auto GetHandle() const { return handle_; }
+  [[maybe_unused]] auto GetHandle() const { return handle_; }
   auto GetMetadata() const { return md_; }
-  auto GetLumisection() const { return md_.lumisection; }
-  auto GetLumisectionFooter() const { return ls_footer_; }
+  [[maybe_unused]] auto GetLumisection() const { return md_.lumisection; }
+  [[maybe_unused]] auto GetLumisectionFooter() const { return ls_footer_; }
   auto HasPayload() const {
     auto min_val = header_.has_value() ? sizeof(HeaderType) : 0;
     return md_.size > min_val;
   }
-  auto HasLumisectionFooter() const { return ls_footer_.lumisection != 0; }
+  [[maybe_unused]] auto HasLumisectionFooter() const { return ls_footer_.lumisection != 0; }
   auto HasHeader() const { return reserved_header_; };
-  auto GetHeader() const -> std::optional<HeaderType> { return header_; }
+  [[maybe_unused]] auto GetHeader() const -> std::optional<HeaderType> { return header_; }
 
   void UpdateHeader() {
     header_ = HeaderType(md_.source_id, md_.num_orbits, md_.run_number, md_.lumisection, md_.size);
   }
 
-  void SetLumisectionFooter(Detail::LumisectionMetadata ls) {
+  void SetLumisectionFooter(const Detail::LumisectionMetadata& ls) {
     // The last file in a lumisection carries an LS metadata footer
     ls_footer_ = ls;
   }
@@ -136,14 +136,15 @@ class Output {
 
   virtual bool Open() = 0;
   virtual int Write(const char*& buffer, size_t size_bytes, uint32_t size_orbits) = 0;
-  [[maybe_unused]] virtual int WriteAt(const char*& data, size_t size_bytes, std::optional<off_t> abs_seek) = 0;
+  [[maybe_unused]] virtual int WriteAt(const char*& data, size_t size_bytes,
+                                       std::optional<off_t> abs_seek) = 0;
   virtual bool Close() = 0;
   virtual bool IsOpen() const = 0;
 
  protected:
   OutputHandleType handle_;
   std::optional<HeaderType> header_;
-  Detail::FileMetadata md_;
+  Detail::FileMetadata md_{};
   Detail::LumisectionMetadata ls_footer_{};
   bool reserved_header_{false};
 
diff --git a/src/OutputFileHandler.cc b/src/OutputFileHandler.cc
index a0d0c0f5ffdab2f66fe0290440cd0b6a1d572b27..873ac4eb94d8094c9e1f0ea43b80f6191118c5c9 100644
--- a/src/OutputFileHandler.cc
+++ b/src/OutputFileHandler.cc
@@ -50,6 +50,7 @@ void OutputFileHandler::UpdateRunInfo(uint32_t next_run, uint32_t next_index) {
 }
 
 void OutputFileHandler::CommitFile() {
+  assert(ls_);
   ls_->AddFileMetadata(outputFile_.GetMetadata());
   Detail::FileMetadata file_meta = outputFile_.GetMetadata();
   if (ls_->IsLastIndex(file_meta.index_in_ls) && IsMainPipeline() && HasCmsswHeaders()) {
diff --git a/src/sink.cc b/src/sink.cc
index 5555cbc48e0eaa6e9e2fffa4b16fc29b02c8be1e..319bfb829ee8bf0a11b3b8adab08b78a6cbd066b 100644
--- a/src/sink.cc
+++ b/src/sink.cc
@@ -26,9 +26,9 @@ void Sink<TOutput>::CommitFileHeader(TOutput &file) {
 }
 
 template <typename TOutput>
-void Sink<TOutput>::CommitOutput(TOutput &f) {
+void Sink<TOutput>::CommitOutput(const TOutput &f) {
   if constexpr (std::is_same<TOutput, FileOutput>()) {
-    auto file = reinterpret_cast<FileOutput &>(f);
+    auto file = reinterpret_cast<const FileOutput &>(f);
     auto filename = file.GetFilename();
     LOG(TRACE) << "Closing file '" << filename << "'";
     assert(file.Close());
diff --git a/src/sink.h b/src/sink.h
index f9bfccc8ece3600d6196bfc9b00f922842ce58bc..0205568cdc24414c220b47599fbe8b4922d8e682 100644
--- a/src/sink.h
+++ b/src/sink.h
@@ -50,10 +50,11 @@ class Sink {
       }
     }
   }
-  void CommitOutput(TOutput &f);
+  void CommitOutput(const TOutput &f);
+  // CommitFileHeader: updates header
   void CommitFileHeader(TOutput &f);
 
-  Sink(std::string rp, std::string mp) : root_path_(rp), metadata_path_(mp) {
+  Sink(const std::string &rp, const std::string &mp) : root_path_(rp), metadata_path_(mp) {
     commit_thread_ = std::thread(&Sink::ProcessQueue, this);
   }
 
@@ -65,7 +66,7 @@ class Sink {
     commit_thread_.join();
   }
 
-  void WriteLumisectionFooter(uint32_t run_number, Detail::LumisectionMetadata &ls) {
+  void WriteLumisectionFooter(uint32_t run_number, const Detail::LumisectionMetadata &ls) {
     auto footer = ls.MakeFooter(run_number);
 
     auto filename = Detail::FormatRun(run_number) + "_" +