diff --git a/Documentation/ProjectFile/prj/time_loop/output/t_fixed_output_times_from_file.md b/Documentation/ProjectFile/prj/time_loop/output/t_fixed_output_times_from_file.md
new file mode 100644
index 0000000000000000000000000000000000000000..80a26c004fb62fb3959f77eb20584408a66b487b
--- /dev/null
+++ b/Documentation/ProjectFile/prj/time_loop/output/t_fixed_output_times_from_file.md
@@ -0,0 +1 @@
+Read **\<fixed_output_times\>** from binary file (double precision, little endian).
diff --git a/ProcessLib/Output/CreateOutputConfig.cpp b/ProcessLib/Output/CreateOutputConfig.cpp
index 1366c99599ad47b5e2ac918411b7d45520214518..0f8e687d190a92e136b20cfe8f081bf95c24388c 100644
--- a/ProcessLib/Output/CreateOutputConfig.cpp
+++ b/ProcessLib/Output/CreateOutputConfig.cpp
@@ -14,6 +14,7 @@
 
 #include "BaseLib/Algorithm.h"
 #include "BaseLib/ConfigTree.h"
+#include "BaseLib/FileTools.h"  // required for reading output_times from binary file
 #include "MaterialLib/Utils/MediaCreation.h"  // required for splitMaterialIDString
 #include "MeshLib/Mesh.h"
 #include "MeshLib/Utils/createMaterialIDsBasedSubMesh.h"
@@ -146,6 +147,18 @@ OutputConfig createOutputConfig(
         //! \ogs_file_param{prj__time_loop__output__fixed_output_times}
         config.getConfigParameter<std::vector<double>>("fixed_output_times",
                                                        {});
+    if (output_config.fixed_output_times.empty())
+    {
+        //! \ogs_file_param{prj__time_loop__output__fixed_output_times_from_file}
+        std::string filename = config.getConfigParameter<std::string>(
+            "fixed_output_times_from_file", "no_file");
+
+        if (filename != "no_file")
+        {
+            output_config.fixed_output_times =
+                BaseLib::readDoublesFromBinaryFile(filename);
+        }
+    }
     // Remove possible duplicated elements and sort.
     BaseLib::makeVectorUnique(output_config.fixed_output_times);