diff --git a/build/includes/summa_actor/summa_actor.hpp b/build/includes/summa_actor/summa_actor.hpp
index d1a160356eb4ae6c0d3a01cc1d1e5eb9e0e6c243..8d26e51750421c1e25ecd89b1eaac9095980344a 100644
--- a/build/includes/summa_actor/summa_actor.hpp
+++ b/build/includes/summa_actor/summa_actor.hpp
@@ -30,10 +30,6 @@ struct summa_actor_state {
     // Information about the jobs
     int numFailed = 0;      // Number of jobs that have failed
 
-    // Values Set By Summa_Actors_Settings.json
-    int maxGRUPerJob; // maximum number of GRUs a job can compute at once
-    int outputStrucSize; 
-
     caf::actor currentJob;  // Reference to the current job actor
     caf::actor parent;
 
diff --git a/build/source/actors/summa_actor/summa_actor.cpp b/build/source/actors/summa_actor/summa_actor.cpp
index 9f9d42fcfd13f6d98acc41bde6899f8d57878cf6..679339251fcb8948242bb1794d59040028acb3ac 100644
--- a/build/source/actors/summa_actor/summa_actor.cpp
+++ b/build/source/actors/summa_actor/summa_actor.cpp
@@ -90,16 +90,16 @@ behavior summa_actor(stateful_actor<summa_actor_state>* self, int startGRU, int
 
 void spawnJob(stateful_actor<summa_actor_state>* self) {
 	// Ensure we do not start a job with too many GRUs
-	if (self->state.numGRU > self->state.maxGRUPerJob) {
+	if (self->state.numGRU > self->state.summa_actor_settings.max_gru_per_job) {
 		// spawn the job actor
 		aout(self) << "\n Starting Job with startGRU = " << self->state.startGRU << "\n";
-		self->state.currentJob = self->spawn(job_actor, self->state.startGRU, self->state.maxGRUPerJob, 
+		self->state.currentJob = self->spawn(job_actor, self->state.startGRU, self->state.summa_actor_settings.max_gru_per_job, 
 			self->state.file_access_actor_settings, self->state.job_actor_settings, 
 			self->state.hru_actor_settings, self);
 		
 		// Update GRU count
-		self->state.numGRU = self->state.numGRU - self->state.maxGRUPerJob;
-		self->state.startGRU = self->state.startGRU + self->state.maxGRUPerJob;
+		self->state.numGRU = self->state.numGRU - self->state.summa_actor_settings.max_gru_per_job;
+		self->state.startGRU = self->state.startGRU + self->state.summa_actor_settings.max_gru_per_job;
 
 	} else {
 
diff --git a/build/source/driver/SummaActors_setup.f90 b/build/source/driver/SummaActors_setup.f90
index c2f860ee9bd07c6d3746c6d7aac7a00481034afb..62fa12a1814b07c5716bb9e4f83c8664740e52ec 100755
--- a/build/source/driver/SummaActors_setup.f90
+++ b/build/source/driver/SummaActors_setup.f90
@@ -66,8 +66,8 @@ contains
 
 ! initializes parameter data structures (e.g. vegetation and soil parameters).
 subroutine setupHRUParam(&
-                  indxHRU,                 & ! ID of hru
-                  indxGRU,                 & ! Index of the parent GRU of the HRU 
+                  indxGRU,                 & ! ID of hru
+                  indxHRU,                 & ! Index of the parent GRU of the HRU 
                   ! primary data structures (scalars)
                   handle_attrStruct,              & ! local attributes for each HRU
                   handle_typeStruct,              & ! local classification of soil veg etc. for each HRU
diff --git a/build/source/engine/ffile_info.f90 b/build/source/engine/ffile_info.f90
index 32ff3292667bf16f4cefa4a6e391c603b96aacf2..e69a4823cac340791388e70e303197496f547d91 100755
--- a/build/source/engine/ffile_info.f90
+++ b/build/source/engine/ffile_info.f90
@@ -106,11 +106,20 @@ subroutine ffile_info(indxGRU,forcFileInfo,numFiles,err,message)
 
   ! open file
   call file_open(trim(infile),unt,err,cmessage)
-  if(err/=0)then; message=trim(message)//trim(cmessage); return; end if
+  if(err/=0)then
+    message=trim(message)//trim(cmessage)
+    print*, message
+    return
+  end if
 
   ! get a list of character strings from non-comment lines
   call get_vlines(unt,dataLines,err,cmessage)
-  if(err/=0)then; err=20; message=trim(message)//trim(cmessage); return; end if
+  if(err/=0)then
+    err=20
+    message=trim(message)//trim(cmessage)
+    print*, message
+    return
+  end if
   nFile = size(dataLines)
 
   ! Get the number of forcing files needed
@@ -128,7 +137,12 @@ subroutine ffile_info(indxGRU,forcFileInfo,numFiles,err,message)
                         startTime%var(iLookTIME%imin_tz),                      & ! time zone minnute
                         dsec_tz,                                               & ! time zone seconds
                         err,cmessage) 
-  if(err/=0)then; err=20; message=trim(message)//trim(cmessage); return; end if
+  if(err/=0)then
+    err=20
+    message=trim(message)//trim(cmessage)
+    print*, message
+    return
+  end if
   call extractTime(trim(FORCING_START),                                        & ! date-time string
                         forcingStart%var(iLookTIME%iyyy),                      & ! year
                         forcingStart%var(iLookTIME%im),                        & ! month
@@ -140,7 +154,12 @@ subroutine ffile_info(indxGRU,forcFileInfo,numFiles,err,message)
                         forcingStart%var(iLookTIME%imin_tz),                   & ! time zone minnute
                         dsec_tz,                                               & ! time zone seconds
                         err,cmessage)
-  if(err/=0)then; err=20; message=trim(message)//trim(cmessage); return; end if
+  if(err/=0)then
+    err=20
+    message=trim(message)//trim(cmessage)
+    print*, message
+    return
+  end if
   ! put simulation end time information into the time structures
   call extractTime(trim(SIM_END_TM),                                           & ! date-time string
                         finishTime%var(iLookTIME%iyyy),                        & ! year
@@ -153,26 +172,51 @@ subroutine ffile_info(indxGRU,forcFileInfo,numFiles,err,message)
                         finishTime%var(iLookTIME%imin_tz),                     & ! time zone minnute
                         dsec_tz,                                               & ! time zone seconds
                         err,cmessage)                                            ! error control
-  if(err/=0)then; err=20; message=trim(message)//trim(cmessage); return; end if
+  if(err/=0)then
+    err=20
+    message=trim(message)//trim(cmessage)
+    print*, message
+    return
+  end if
                         
   startIndx = (((startTime%var(iLookTIME%iyyy) - forcingStart%var(iLookTIME%iyyy)) * 12) &
     + startTime%var(iLookTIME%im) - forcingStart%var(iLookTIME%im) + 1)
+  if (startIndx < 0)then
+    print*, "Cannot have a startTime before the forcing files start. Check that forcingStart is less than startTime"
+    err=20
+    return
+  endif
     
   totalFiles = (((finishTime%var(iLookTIME%iyyy) - startTime%var(iLookTIME%iyyy)) * 12) &
     + finishTime%var(iLookTIME%im) - startTime%var(iLookTIME%im) + 1)
+  if (totalFiles < 0) then
+    print*, "Cannot have a negative number of forcing files, check end time is greater than starttime"
+    err=20
+    return
+  endif
     
   ! allocate space for forcing information
   if(allocated(forcFileInfo%ffile_list)) deallocate(forcFileInfo%ffile_list)
   allocate(forcFileInfo%ffile_list(totalFiles), stat=err)
-  if(err/=0)then; err=20; message=trim(message)//'problem allocating space for forcFileInfo'; return; end if
+  if(err/=0)then
+    err=20
+    message=trim(message)//'problem allocating space for forcFileInfo'
+    print*, message
+    return
+  end if
 
   ffinfo_index = 1
+  
   ! poputate the forcingInfo structure with filenames
   do iFile=startIndx,nFile
     if (ffinfo_index > totalFiles)then; exit; endif;
     ! split the line into "words" (expect one word: the file describing forcing data for that index)
     read(dataLines(iFile),*,iostat=err) filenameData
-    if(err/=0)then; message=trim(message)//'problem reading a line of data from file ['//trim(infile)//']'; return; end if
+    if(err/=0)then
+      message=trim(message)//'problem reading a line of data from file ['//trim(infile)//']'
+      print*, message
+      return
+    end if
     ! set forcing file name attribute
     forcFileInfo%ffile_list(ffinfo_index)%filenmData = trim(filenameData)
     ffinfo_index = ffinfo_index + 1
@@ -207,14 +251,20 @@ subroutine ffile_info(indxGRU,forcFileInfo,numFiles,err,message)
     ! check if file exists
     inquire(file=trim(infile),exist=xist)
     if(.not.xist)then
-    message=trim(message)//"FileNotFound[file='"//trim(infile)//"']"
-    err=10; return
+      message=trim(message)//"FileNotFound[file='"//trim(infile)//"']"
+      print*, message
+      err=10
+      return
     end if
 
     ! open file
     mode=nf90_NoWrite
     call nc_file_open(trim(infile), mode, ncid, err, cmessage)
-    if(err/=0)then; message=trim(message)//trim(cmessage); return; end if
+    if(err/=0)then
+      message=trim(message)//trim(cmessage)
+      print*, message
+      return
+    end if
 
     ! how many variables are there?
     err = nf90_inquire(ncid, nvariables=nVar)
diff --git a/build/source/engine/read_paramActors.f90 b/build/source/engine/read_paramActors.f90
index 661ffe63d577a98c83ac7a03b138d5dcb9a1723e..19dbb1462320057e12cdf8f27b3cca23b25f675a 100755
--- a/build/source/engine/read_paramActors.f90
+++ b/build/source/engine/read_paramActors.f90
@@ -68,13 +68,9 @@ subroutine read_param(indxHRU,indxGRU,mparStruct,bparStruct,dparStruct,err)
 
    ! Start procedure here
    err=0; message="read_paramActors.f90/"
-   ! do iVar=1, size(mpar_meta)
-      dparStruct%var(:) = outputStructure(1)%dparStruct(1)%gru(indxGRU)%hru(indxHRU)%var(:)
-   ! end do
 
-   ! do iVar=1, size(localParFallback)
-   !    mparStruct%var(iVar)%dat(:) = dparStruct%var(iVar)
-   ! end do
+   dparStruct%var(:) = outputStructure(1)%dparStruct(1)%gru(indxGRU)%hru(indxHRU)%var(:)
+
 
    ! populate parameter structures
    do iVar=1, size(mpar_meta)