diff --git a/src/DynamicModel.cc b/src/DynamicModel.cc
index 15131e6ee517b815507ec4f80aa9e4134df83bb7..cc011879ff4694c364ca526db88d54bc75f02c70 100644
--- a/src/DynamicModel.cc
+++ b/src/DynamicModel.cc
@@ -619,9 +619,9 @@ DynamicModel::writeDynamicBytecode(const string &basename) const
 void
 DynamicModel::writeDynamicBlockBytecode(const string &basename) const
 {
-  BytecodeWriter code_file {basename + "/model/bytecode/dynamic.cod"};
+  BytecodeWriter code_file {basename + "/model/bytecode/block/dynamic.cod"};
 
-  const filesystem::path bin_filename {basename + "/model/bytecode/dynamic.bin"};
+  const filesystem::path bin_filename {basename + "/model/bytecode/block/dynamic.bin"};
   ofstream bin_file {bin_filename, ios::out | ios::binary};
   if (!bin_file.is_open())
     {
@@ -3318,13 +3318,11 @@ DynamicModel::writeDynamicFile(const string &basename, bool block, bool use_dll,
 
       create_directories(plusfolder / "+debug");
     }
-  create_directories(model_dir / "bytecode");
+  create_directories(model_dir / "bytecode" / "block");
 
   // Legacy representation
   if (block)
     {
-      writeDynamicBlockBytecode(basename);
-
       if (use_dll)
         {
           auto per_block_object_files { writeDynamicPerBlockCFiles(basename, mexext, matlabroot, dynareroot) };
@@ -3343,14 +3341,15 @@ DynamicModel::writeDynamicFile(const string &basename, bool block, bool use_dll,
     }
   else
     {
-      writeDynamicBytecode(basename);
-
       if (use_dll)
         writeModelCFile<true>(basename, mexext, matlabroot, dynareroot);
       else if (!julia) // M-files
         writeDynamicMFile(basename);
       // The legacy representation is no longer produced for Julia
     }
+  writeDynamicBytecode(basename);
+  if (block_decomposed)
+    writeDynamicBlockBytecode(basename);
 
   // Sparse representation
   if (use_dll)
diff --git a/src/StaticModel.cc b/src/StaticModel.cc
index 2c993b4df8431aeebba42926e5ee73797159531e..faa81502678be041a619955727f544f337d86470 100644
--- a/src/StaticModel.cc
+++ b/src/StaticModel.cc
@@ -283,9 +283,9 @@ StaticModel::writeStaticBytecode(const string &basename) const
 void
 StaticModel::writeStaticBlockBytecode(const string &basename) const
 {
-  BytecodeWriter code_file {basename + "/model/bytecode/static.cod"};
+  BytecodeWriter code_file {basename + "/model/bytecode/block/static.cod"};
 
-  const filesystem::path bin_filename {basename + "/model/bytecode/static.bin"};
+  const filesystem::path bin_filename {basename + "/model/bytecode/block/static.bin"};
   ofstream bin_file {bin_filename, ios::out | ios::binary};
   if (!bin_file.is_open())
     {
@@ -642,13 +642,11 @@ StaticModel::writeStaticFile(const string &basename, bool block, bool use_dll, c
 
       create_directories(plusfolder / "+debug");
     }
-  create_directories(model_dir / "bytecode");
+  create_directories(model_dir / "bytecode" / "block");
 
   // Legacy representation
   if (block)
     {
-      writeStaticBlockBytecode(basename);
-
       if (use_dll)
         {
           auto per_block_object_files { writeStaticPerBlockCFiles(basename, mexext, matlabroot, dynareroot) };
@@ -667,14 +665,15 @@ StaticModel::writeStaticFile(const string &basename, bool block, bool use_dll, c
     }
   else
     {
-      writeStaticBytecode(basename);
-
       if (use_dll)
         writeModelCFile<false>(basename, mexext, matlabroot, dynareroot);
       else if (!julia) // M-files
         writeStaticMFile(basename);
       // The legacy representation is no longer produced for Julia
     }
+  writeStaticBytecode(basename);
+  if (block_decomposed)
+    writeStaticBlockBytecode(basename);
 
   // Sparse representation
   if (use_dll)