diff --git a/build/includes/file_access_actor/file_access_actor.hpp b/build/includes/file_access_actor/file_access_actor.hpp
index 57e0156b7d95fe6712773941e7e6604a2181564f..2c87019f702addc487659ef5a230acef2ac41b24 100644
--- a/build/includes/file_access_actor/file_access_actor.hpp
+++ b/build/includes/file_access_actor/file_access_actor.hpp
@@ -13,8 +13,8 @@
  * File Access Actor Fortran Functions
  *********************************************/
 extern "C" {
-  void defOutputFortran(void* handle_ncid, int* num_gru, int* num_hru, 
-      int* err);
+  void defOutputFortran(void* handle_ncid, int* start_gru, int* num_gru, 
+      int* num_hru, int* file_gru, int* err);
 
   void fileAccessActor_init_fortran(void* handle_forcing_file_info, 
       int* num_forcing_files, int* num_timesteps, 
diff --git a/build/includes/job_actor/job_actor.hpp b/build/includes/job_actor/job_actor.hpp
index cab8e6471aeea49df0050b6133f6167fd7e32a5f..73ff1d8490f6481a9aa87dad14484f5bcae8de7b 100644
--- a/build/includes/job_actor/job_actor.hpp
+++ b/build/includes/job_actor/job_actor.hpp
@@ -21,7 +21,7 @@
  *********************************************/
 extern "C" {
   void job_init_fortran(char const* file_manager, int* start_gru_index, 
-      int* num_gru, int* num_hru, int* err);
+      int* num_gru, int* num_hru, int* file_gru, int* err);
 
   void deallocateJobActor(int* err);
 }
diff --git a/build/source/file_access_actor/cppwrap_fileAccess.f90 b/build/source/file_access_actor/cppwrap_fileAccess.f90
index 8a4ebdff14197668892a4adddfa9ed632c98e01c..b6aacef607f8ac05eb4dfcf321c4cf6898001ce4 100644
--- a/build/source/file_access_actor/cppwrap_fileAccess.f90
+++ b/build/source/file_access_actor/cppwrap_fileAccess.f90
@@ -209,7 +209,7 @@ subroutine fileAccessActor_init_fortran(& ! Variables for forcing
 
   attrFile = trim(SETTINGS_PATH)//trim(LOCAL_ATTRIBUTES)
   call read_attrb(trim(attrFile),num_gru,outputStructure(1)%attrStruct,&
-                  outputStructure(1)%typeStruct,outputStructure(1)%idStruct,err,message)
+      outputStructure(1)%typeStruct,outputStructure(1)%idStruct,err,message)
   if(err/=0)then; print*,trim(message); return; endif
 
 
@@ -363,12 +363,13 @@ subroutine fileAccessActor_init_fortran(& ! Variables for forcing
   if(err/=0)then; print*, message; return; endif  
 end subroutine fileAccessActor_init_fortran
 
-subroutine defOutputFortran(handle_output_ncid, num_gru, num_hru, err) &
-    bind(C, name="defOutputFortran")
+subroutine defOutputFortran(handle_output_ncid, start_gru, num_gru, num_hru, &
+    file_gru, err) bind(C, name="defOutputFortran")
   USE globalData,only:nGRUrun,nHRUrun
   USE globalData,only:fileout,output_fileSuffix
   USE globalData,only:ncid
   USE globalData,only:integerMissing
+  USE globalData,only:iRunMode,iRunModeFull,iRunModeGRU,iRunModeHRU ! define the running modes
 
   USE summaFileManager,only:OUTPUT_PATH,OUTPUT_PREFIX ! define output file
 
@@ -380,16 +381,36 @@ subroutine defOutputFortran(handle_output_ncid, num_gru, num_hru, err) &
 
   ! Dummy Variables
   type(c_ptr),intent(in), value          :: handle_output_ncid
+  integer(c_int),intent(in)              :: start_gru
   integer(c_int),intent(in)              :: num_gru
   integer(c_int),intent(in)              :: num_hru
+  integer(c_int),intent(in)              :: file_gru
   integer(c_int),intent(out)             :: err
   ! Local Variables
   type(var_i),pointer                    :: output_ncid
+  character(len=128)                     :: fmtGruOutput ! a format string used to write start and end GRU in output file names
+
   character(len=256)                     :: message ! error message
 
 
   call c_f_pointer(handle_output_ncid, output_ncid)
 
+  output_fileSuffix = ''
+  if (output_fileSuffix(1:1) /= '_') output_fileSuffix='_'//trim(output_fileSuffix)
+  if (output_fileSuffix(len_trim(output_fileSuffix):len_trim(output_fileSuffix)) == '_') output_fileSuffix(len_trim(output_fileSuffix):len_trim(output_fileSuffix)) = ' '
+  select case (iRunMode)
+    case(iRunModeGRU)
+      ! left zero padding for startGRU and endGRU
+      write(fmtGruOutput,"(i0)") ceiling(log10(real(file_gru)+0.1))                      ! maximum width of startGRU and endGRU
+      fmtGruOutput = "i"//trim(fmtGruOutput)//"."//trim(fmtGruOutput)                   ! construct the format string for startGRU and endGRU
+      fmtGruOutput = "('_G',"//trim(fmtGruOutput)//",'-',"//trim(fmtGruOutput)//")"
+      write(output_fileSuffix((len_trim(output_fileSuffix)+1):len(output_fileSuffix)),fmtGruOutput) start_gru,start_gru+num_gru-1
+    case(iRunModeHRU)
+      write(output_fileSuffix((len_trim(output_fileSuffix)+1):len(output_fileSuffix)),"('_H',i0)") checkHRU
+  end select
+
+
+
   nGRUrun = num_gru
   nHRUrun = num_hru
   fileout = trim(OUTPUT_PATH)//trim(OUTPUT_PREFIX)//trim(output_fileSuffix)
diff --git a/build/source/file_access_actor/file_access_actor.cpp b/build/source/file_access_actor/file_access_actor.cpp
index 512c891be0578e7941e25b41e9bebdadd5f9d965..732af9d2affcc1d0d80f1f412cb67afd76077d71 100644
--- a/build/source/file_access_actor/file_access_actor.cpp
+++ b/build/source/file_access_actor/file_access_actor.cpp
@@ -67,12 +67,12 @@ behavior file_access_actor(stateful_actor<file_access_state>* self,
       fa_settings.num_timesteps_in_output_buffer, self->state.num_steps); 
 
   return {
-    [=](def_output) {
+    [=](def_output, int file_gru) {
       aout(self) << "Creating Output File\n";
       int num_hru = self->state.num_gru; // Filler for num_hrus
       int err = 0;
-      defOutputFortran(self->state.handle_ncid, &self->state.num_gru, &num_hru, 
-          &err);
+      defOutputFortran(self->state.handle_ncid, &self->state.start_gru, 
+          &self->state.num_gru, &num_hru, &file_gru, &err);
       if (self->state.err != 0) {
         aout(self) << "ERROR: Defining Output\n";
         self->quit();
diff --git a/build/source/job_actor/job_actor.cpp b/build/source/job_actor/job_actor.cpp
index 63d90505c877f227cd816a3a1f1ff80212fab73c..26c83e4976230284ab589450dbc9f2425bb4f40f 100644
--- a/build/source/job_actor/job_actor.cpp
+++ b/build/source/job_actor/job_actor.cpp
@@ -60,9 +60,10 @@ behavior job_actor(stateful_actor<job_state>* self,
     - read_icond_nlayers
     - Allocates time structures
   */
+  int file_gru = 0;
   job_init_fortran(self->state.job_actor_settings.file_manager_path.c_str(),
-                   &self->state.start_gru, &self->state.num_gru, 
-                   &self->state.num_hru, &err);
+      &self->state.start_gru, &self->state.num_gru, &self->state.num_hru, 
+      &file_gru, &err);
   if (err != 0) { 
     aout(self) << "\nERROR: Job_Actor - job_init_fortran\n"; 
     return {};
@@ -72,7 +73,7 @@ behavior job_actor(stateful_actor<job_state>* self,
   self->state.file_access_actor = self->spawn(file_access_actor, 
       self->state.start_gru, self->state.num_gru, 
       self->state.file_access_actor_settings, self);
-  self->send(self->state.file_access_actor, def_output_v);
+  self->send(self->state.file_access_actor, def_output_v, file_gru);
 
 
   aout(self) << "Job Actor Initialized \n";
diff --git a/build/source/job_actor/job_actor.f90 b/build/source/job_actor/job_actor.f90
index 4d5f09943b0e1daf36928e8cd2990db621e7bb7f..f06d610b91831deac022380c3fb17126c4a46abe 100644
--- a/build/source/job_actor/job_actor.f90
+++ b/build/source/job_actor/job_actor.f90
@@ -13,7 +13,7 @@ module job_actor
     contains
 
 subroutine job_init_fortran(file_manager, start_gru, num_gru,&
-                            num_hru, err) bind(C, name="job_init_fortran")
+                            num_hru, file_gru, err) bind(C, name="job_init_fortran")
   USE nrtype  ! variable types, etc.
   
   USE summaFileManager,only:summa_SetTimesDirsAndFiles       ! sets directories and filenames
@@ -50,13 +50,13 @@ subroutine job_init_fortran(file_manager, start_gru, num_gru,&
   integer(c_int),intent(inout)              :: start_gru
   integer(c_int),intent(inout)              :: num_gru
   integer(c_int),intent(inout)              :: num_hru
+  integer(c_int),intent(out)                :: file_gru
   integer(c_int),intent(out)                :: err
 
   ! local variables
   character(len=256)                        :: summaFileManagerIn
   character(len=256)                        :: restartFile        ! restart file name
   character(len=256)                        :: attrFile           ! attributes file name
-  integer(i4b)                              :: fileGRU            ! [used for filenames] number of GRUs in the input file
   integer(i4b)                              :: fileHRU            ! [used for filenames] number of HRUs in the input file
   character(len=128)                        :: fmtGruOutput       ! a format string used to write start and end GRU in output file names
 
@@ -86,31 +86,11 @@ subroutine job_init_fortran(file_manager, start_gru, num_gru,&
   attrFile = trim(SETTINGS_PATH)//trim(LOCAL_ATTRIBUTES)
   select case (iRunMode)
     case(iRunModeFull); err=20; message='iRunModeFull not implemented for Actors Code'
-    case(iRunModeGRU ); call read_dimension(trim(attrFile),fileGRU,fileHRU,num_gru,num_hru,err,message,startGRU=start_gru)
+    case(iRunModeGRU ); call read_dimension(trim(attrFile),file_gru,fileHRU,num_gru,num_hru,err,message,startGRU=start_gru)
     case(iRunModeHRU ); err=20; message='iRunModeHRU not implemented for Actors Code'
   end select
   if(err/=0)then; print*, trim(message); return; endif
 
-  ! ****************************************************************************
-  ! *** define the suffix for the model output file
-  ! *** OUTPUT_PREFIX'_'output_fileSuffix'_'startGRU-endGRU_outfreq.nc or
-  ! *** OUTPUT_PREFIX'_'output_fileSuffix'_'HRU_outfreq.nc
-  ! ****************************************************************************
-  output_fileSuffix = ''
-  if (output_fileSuffix(1:1) /= '_') output_fileSuffix='_'//trim(output_fileSuffix)
-  if (output_fileSuffix(len_trim(output_fileSuffix):len_trim(output_fileSuffix)) == '_') output_fileSuffix(len_trim(output_fileSuffix):len_trim(output_fileSuffix)) = ' '
-  select case (iRunMode)
-    case(iRunModeGRU)
-      ! left zero padding for startGRU and endGRU
-      write(fmtGruOutput,"(i0)") ceiling(log10(real(fileGRU)+0.1))                      ! maximum width of startGRU and endGRU
-      fmtGruOutput = "i"//trim(fmtGruOutput)//"."//trim(fmtGruOutput)                   ! construct the format string for startGRU and endGRU
-      fmtGruOutput = "('_G',"//trim(fmtGruOutput)//",'-',"//trim(fmtGruOutput)//")"
-      write(output_fileSuffix((len_trim(output_fileSuffix)+1):len(output_fileSuffix)),fmtGruOutput) start_gru,start_gru+num_gru-1
-    case(iRunModeHRU)
-      write(output_fileSuffix((len_trim(output_fileSuffix)+1):len(output_fileSuffix)),"('_H',i0)") checkHRU
-  end select
-
-
   ! *****************************************************************************
   ! *** read the number of snow and soil layers
   ! *****************************************************************************
diff --git a/build/source/job_actor/node_actor.cpp b/build/source/job_actor/node_actor.cpp
index b4d2e2577cfade4cb2e76ae1523e522c35d27549..0cec05cc5111e9a95ab5fdf2a6f241bb95f508e8 100644
--- a/build/source/job_actor/node_actor.cpp
+++ b/build/source/job_actor/node_actor.cpp
@@ -59,10 +59,10 @@ behavior node_actor(stateful_actor<node_state>* self,
       self->state.num_gru = num_gru;
       self->state.gru_container.num_gru_in_run_domain = num_gru;
       
-      int err;
+      int err, file_gru;
       job_init_fortran(self->state.job_actor_settings.file_manager_path.c_str(),
           &self->state.start_gru, &self->state.num_gru, &self->state.num_gru, 
-          &err);
+          &file_gru, &err);
       if (err != 0) { 
         aout(self) << "\nERROR: Job_Actor - job_init_fortran\n"; 
         self->quit();
@@ -71,8 +71,8 @@ behavior node_actor(stateful_actor<node_state>* self,
       // Spawn the file_access_actor.
       self->state.file_access_actor = self->spawn(file_access_actor, 
           self->state.start_gru, self->state.num_gru, 
-          self->state.file_access_actor_settings, 
-          self);
+          self->state.file_access_actor_settings, self);
+      self->send(self->state.file_access_actor, def_output_v, file_gru);
     },
 
     [=](init_file_access_actor, int num_timesteps) {