diff --git a/src/OutputFileHandler.cc b/src/OutputFileHandler.cc
index 9afd8e39544d14db6a1bdfbb40ae2b6464bb2a3a..2e620690e5df6156a2bbbf88a8bc1ff981df8078 100644
--- a/src/OutputFileHandler.cc
+++ b/src/OutputFileHandler.cc
@@ -1,5 +1,7 @@
 #include "OutputFileHandler.h"
 
+#include <iomanip>
+
 #include "log.h"
 
 void OutputFileHandler::create_output_directory_maybe(std::string &output_directory) {
@@ -28,30 +30,24 @@ void OutputFileHandler::create_output_directory_maybe(std::string &output_direct
 void OutputFileHandler::open_file(uint32_t index, uint32_t run) {
   // Create a new file
   create_output_directory_maybe(working_files_basepath_);
-  std::string current_filename_a =
-      output_directory + "/" +
-      format_run_file_stem(my_output_filename_prefix, current_run_number, index_);
   std::string filename =
-      output_directory + "/" +
-      format_run_file_stem(my_output_filename_prefix, control.run_number, index_);
-  LOG(INFO) << "opening file with index " << index_;
-  outFile.setFile(fopen(filename.c_str(), "w"));
-  outFile.setIndex(index_);
-  if (outFile.getFile() == NULL) {
+      working_files_base_path_ + "/" + format_filename(control.run_number, index);
+  LOG(TRACE) << "opening file with index " << index;
+  current_file_ = fopen( filename.c_str(), "wbx" ));
+  if (current_file_ == NULL) {
     std::string err = tools::strerror("ERROR when creating file '" + current_filename_a + "'");
     LOG(ERROR) << err;
     throw std::runtime_error(err);
   }
+  current_index_ = index;
 }
 
 /*
  * Create a properly formatted file name
- * TODO: Change to C++
  */
-std::string OutputFileHandler::format_filename(std::string &path, uint32_t run_number,
-                                               uint32_t index) {
-  char run_order_stem[PATH_MAX];
-  snprintf(run_order_stem, sizeof(run_order_stem), "%s_%06d_%06d.dat", filename_prefix.c_str(),
-           run_number, file_count);
-  return std::string(run_order_stem);
+std::string OutputFileHandler::format_filename(uint32_t run_number, uint32_t index) {
+  std::ostringstream ofilename;
+  ofilename << filename_prefix_ << "_" << std::setfill(0) << std::setw(6) << run_number << "_"
+            << index << ".dat";
+  return ofilename.str();
 }
diff --git a/src/OutputFileHandler.h b/src/OutputFileHandler.h
index c03b3872c8251e318ac874237e4ce6de13e24318..f4adba1d4721352119e2ec15985a40abf3b78bb1 100644
--- a/src/OutputFileHandler.h
+++ b/src/OutputFileHandler.h
@@ -7,35 +7,21 @@
 
 class OutputFileHandler {
  public:
-  OutputFileHandler(const std::string filename_base_path, const std::string filename_prefix)
-      : filename_base_path_(filename_base_path),
+  OutputFileHandler(const std::string base_path, const std::string filename_prefix)
+      : base_path_(base_path),
         filename_prefix_(filename_prefix),
-        working_files_basepath_(filename_base_path_ + "/" + working_dir_) {
-    create_output_directory_maybe(working_files_basepath_);
+        working_files_base_path_(filename_base_path_ + "/" + working_dir_),
+        current_run_number_(0),
+        current_file_(0),
+        current_index_(-1) {
+    create_output_directory_maybe(working_files_base_path_);
   }
   virtual ~OutputFileHandler() {}
 
   void open_file(uint32_t index,
                  uint32_t run);  // Used for fixedNorbits per file option
-  {
-    // Create a new file
-    std::string output_directory = my_output_filename_base + "/" + working_dir;
-    create_output_directory(output_directory);
-    std::string current_filename_a =
-        output_directory + "/" +
-        format_run_file_stem(my_output_filename_prefix, current_run_number, index_);
-    std::string filename =
-        output_directory + "/" +
-        format_run_file_stem(my_output_filename_prefix, control.run_number, index_);
-    LOG(INFO) << "opening file with index " << index_;
-    outFile.setFile(fopen(filename.c_str(), "w"));
-    outFile.setIndex(index_);
-    if (outFile.getFile() == NULL) {
-      std::string err = tools::strerror("ERROR when creating file '" + current_filename_a + "'");
-      LOG(ERROR) << err;
-      throw std::runtime_error(err);
-    }
-  }
+
+  std::string format_filename(uint32_t run_number, uint32_t index);
 
  private:
   void create_output_directory_maybe(std::string &output_directory);
@@ -47,9 +33,9 @@ class OutputFileHandler {
   // filename
   static constexpr std::string journal_file_{"index.journal"};
 
-  std::string filename_base_path_;
+  std::string base_path_;
   std::string filename_prefix_;
-  std::string working_files_basepath_;
+  std::string working_files_base_path_;
   uint32_t current_run_number_;
   FILE *current_file_;
   int32_t current_index_;