diff --git a/src/OutputFileHandler.cc b/src/OutputFileHandler.cc
index 7d28f28ed8b8f8ff722c55608d0523820ea98872..081360ea6c1348711025b14898d5d3926f218554 100644
--- a/src/OutputFileHandler.cc
+++ b/src/OutputFileHandler.cc
@@ -1,5 +1,6 @@
 #include "OutputFileHandler.h"
 #include "log.h"
+#include <iomanip>
 
 void OutputFileHandler::create_output_directory_maybe(
     std::string &output_directory) {
@@ -28,33 +29,26 @@ void OutputFileHandler::create_output_directory_maybe(
 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) {
+  std::string filename = 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,
+std::string OutputFileHandler::format_filename(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::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 922f8d43802e22c60c5e5a44a2ce0c0763b9f663..8d8ff9daa871db440a3961e204e70f963e57ba89 100644
--- a/src/OutputFileHandler.h
+++ b/src/OutputFileHandler.h
@@ -8,38 +8,19 @@
 class OutputFileHandler {
 
 public:
-  OutputFileHandler(const std::string filename_base_path,
+  OutputFileHandler(const std::string base_path,
                     const std::string filename_prefix)
-      : filename_base_path_(filename_base_path),
-        filename_prefix_(filename_prefix),
-        working_files_basepath_(filename_base_path_ + "/" + working_dir_) {
-    create_output_directory_maybe(working_files_basepath_);
+      : base_path_(base_path), filename_prefix_(filename_prefix),
+        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);
@@ -51,9 +32,9 @@ private:
   // 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_;