diff --git a/build/includes/file_access_actor/file_access_actor_subroutine_wrappers.hpp b/build/includes/file_access_actor/file_access_actor_subroutine_wrappers.hpp
index 03c7e93507ce59e5671f1239db82353510ea42bf..d2f750866bd887fbb30ec3b0920800a2c238c903 100644
--- a/build/includes/file_access_actor/file_access_actor_subroutine_wrappers.hpp
+++ b/build/includes/file_access_actor/file_access_actor_subroutine_wrappers.hpp
@@ -38,7 +38,7 @@ extern "C" {
   
   void readParamFileAccessActor(int* start_gru, int* num_gru, int* err);
 
-  void writeParamToNetCDF(void* handle_ncid, int* index_gru, int* index_hru, 
+  void writeParamToNetCDF(void* handle_ncid, int* index_gru, int* index_hru,
     void* handle_attr_struct, void* handle_type_struct, void* handle_mpar_struct,
     void* handle_bpar_struct, int* err);
 }
diff --git a/build/includes/hru_actor/hru_actor_subroutine_wrappers.hpp b/build/includes/hru_actor/hru_actor_subroutine_wrappers.hpp
index e85004ee1cce03439c1341b5ba951abfe94b4bc9..bebaf0e0011cdc7d899d23d3bddc0069c21dabf2 100644
--- a/build/includes/hru_actor/hru_actor_subroutine_wrappers.hpp
+++ b/build/includes/hru_actor/hru_actor_subroutine_wrappers.hpp
@@ -96,4 +96,13 @@ extern "C" {
         int* indxGRU, int* indxHRU,
         void* handle_attrStruct, void* handle_typeStruct, void* handle_mparStruct, void* handle_bparStruct,
         int* err);
+
+  void prepareOutput(int* model_timestep, void* handle_force_stat, void* handle_prog_stat, 
+        void* handle_diag_stat, void* handle_flux_stat, void* handle_indx_stat,
+        void* handle_bvar_stat, void* handle_time_struct, void* handle_forc_struct,
+        void* handle_attr_struct, void* handle_type_struct, void* handle_indx_struct,
+        void* handle_mpar_struct, void* handle_prog_struct, void* handle_diag_struct,
+        void* handle_flux_struct, void* handle_bpar_struct, void* handle_bvar_struct,
+        void* stat_counter, void* output_timestep, void* reset_stats, void* finalize_stats,
+        void* finish_time, void* old_time, int* err);
 }
\ No newline at end of file
diff --git a/build/source/actors/file_access_actor/file_access_actor.cpp b/build/source/actors/file_access_actor/file_access_actor.cpp
index d1003deb85b6b409d4345be08f46ea0127cef791..b81fdba66b23bf0731765ebc445d64633fef0a30 100644
--- a/build/source/actors/file_access_actor/file_access_actor.cpp
+++ b/build/source/actors/file_access_actor/file_access_actor.cpp
@@ -57,24 +57,21 @@ behavior file_access_actor(stateful_actor<file_access_state>* self, int startGRU
             std::vector<int> type_struct, std::vector<std::vector<double>> mpar_struct,
             std::vector<double> bpar_struct) {
             int err = 0;
+
+            // create structures to populate in Fortran
             void *handle_attr_struct = new_handle_var_d();
             void *handle_type_struct = new_handle_var_i();
             void *handle_mpar_struct = new_handle_var_dlength();
             void *handle_bpar_struct = new_handle_var_d(); 
-
+            // populate the newly created Fortran structures
             set_var_d(attr_struct, handle_attr_struct);
             set_var_i(type_struct, handle_type_struct);
             set_var_dlength(mpar_struct, handle_mpar_struct);
             set_var_d(bpar_struct, handle_bpar_struct);
-
+            // write the populated data to netCDF
             writeParamToNetCDF(self->state.handle_ncid, &index_gru, &index_hru, 
                 handle_attr_struct, handle_type_struct, handle_mpar_struct, 
                 handle_bpar_struct, &err);
-
-            // Write_HRU_Param(self->state.handle_ncid, &index_gru, &index_hru, &err);
-            // if (err != 0) {
-            //     aout(self) << "ERROR: Write_HRU_PARAM -- For HRU = " << index_hru << "\n"; 
-            // }
         },
 
         [=](access_forcing, int currentFile, caf::actor refToRespondTo) {
@@ -139,6 +136,18 @@ behavior file_access_actor(stateful_actor<file_access_state>* self, int startGRU
             }
         },
 
+        [=](write_output, int index_gru, int index_hru, std::vector<int> finalize_stats, 
+            std::vector<std::vector<double>> forc_stat, std::vector<double> forc_struct,
+            std::vector<std::vector<double>> prog_stat, std::vector<std::vector<double>> prog_struct,
+            std::vector<std::vector<double>> diag_stat, std::vector<std::vector<double>> diag_struct,
+            std::vector<std::vector<double>> flux_stat, std::vector<std::vector<double>> flux_struct,
+            std::vector<std::vector<double>> indx_stat, std::vector<std::vector<int>> indx_struct,
+            std::vector<int> outptu_timestep) {
+                
+
+
+        },
+
         [=](write_output, int indxGRU, int indxHRU, int numStepsToWrite,
             caf::actor refToRespondTo) {
             int err;
diff --git a/build/source/actors/file_access_actor/file_access_actor.f90 b/build/source/actors/file_access_actor/file_access_actor.f90
index 5af004c2983ee4d1da4c5154442f269e06163ba5..d164fd829dbf04add88e2ec83af63012d0f8737d 100644
--- a/build/source/actors/file_access_actor/file_access_actor.f90
+++ b/build/source/actors/file_access_actor/file_access_actor.f90
@@ -80,8 +80,121 @@ subroutine writeParamToNetCDF(handle_ncid,    &
 
 end subroutine writeParamToNetCDF
 
-subroutine writeDataToNetCDF() bind(C, name="writeDataToNetCDF")
-implicit none
+subroutine writeDataToNetCDF(handle_ncid,          &
+                            index_gru,             &
+                            index_hru,             &
+                            handle_finalize_stats, & 
+                            handle_forc_stat,      &
+                            handle_forc_struct,    &
+                            handle_prog_stat,      &
+                            handle_prog_struct,    &
+                            handle_diag_stat,      &
+                            handle_diag_struct,    &
+                            handle_flux_stat,      &
+                            handle_flux_struct,    &
+                            handle_indx_stat,      &
+                            handle_indx_struct,    &
+                            handle_output_timestep,&
+                            err) bind(C, name="writeDataToNetCDF")
+  USE globalData, only:forc_meta, prog_meta, diag_meta, flux_meta, indx_meta
+  USE globalData, only:forcChild_map, progChild_map, diagChild_map, fluxChild_map, indxChild_map
+  USE globalData,only:maxLayers                               ! maximum number of layers
+  USE globalData,only:structInfo
+  USE writeOutput_module,only:writeParm 
+  USE writeOutput_module,only:writeDataNew
+
+  implicit none
+  ! dummy variables
+  type(c_ptr),    intent(in), value  :: handle_ncid
+  integer(c_int), intent(in)         :: index_gru
+  integer(c_int), intent(in)         :: index_hru
+  type(c_ptr),    intent(in), value  :: handle_finalize_stats
+  type(c_ptr),    intent(in), value  :: handle_forc_stat
+  type(c_ptr),    intent(in), value  :: handle_forc_struct
+  type(c_ptr),    intent(in), value  :: handle_prog_stat
+  type(c_ptr),    intent(in), value  :: handle_prog_struct
+  type(c_ptr),    intent(in), value  :: handle_diag_stat
+  type(c_ptr),    intent(in), value  :: handle_diag_struct
+  type(c_ptr),    intent(in), value  :: handle_flux_stat
+  type(c_ptr),    intent(in), value  :: handle_flux_struct
+  type(c_ptr),    intent(in), value  :: handle_indx_stat
+  type(c_ptr),    intent(in), value  :: handle_indx_struct
+  type(c_ptr),    intent(in), value  :: handle_output_timestep
+  integer(c_int), intent(out)        :: err
+  ! local pointers
+  type(var_i), pointer               :: ncid
+  type(flagVec), pointer             :: finalize_stats
+  type(var_dlength),pointer          :: forc_stat 
+  type(var_d),pointer                :: forc_struct 
+  type(var_dlength),pointer          :: prog_stat
+  type(var_dlength),pointer          :: prog_struct 
+  type(var_dlength),pointer          :: diag_stat
+  type(var_dlength),pointer          :: diag_struct 
+  type(var_dlength),pointer          :: flux_stat 
+  type(var_dlength),pointer          :: flux_struct 
+  type(var_dlength),pointer          :: indx_stat 
+  type(var_ilength),pointer          :: indx_struct 
+  type(var_i),pointer                :: output_timestep
+  ! local_variables
+  integer(i4b)                       :: numGRU=1
+  integer(i4b)                       :: nSteps=1
+  integer(i4b)                       :: iStruct
+  character(LEN=256)                 :: cmessage
+  character(LEN=256)                 :: message
+  ! ---------------------------------------------------------------------------------------
+  ! * Convert From C++ to Fortran
+  ! ---------------------------------------------------------------------------------------
+  call c_f_pointer(handle_ncid, ncid)
+  call c_f_pointer(handle_finalize_stats, finalize_stats)
+  call c_f_pointer(handle_forc_stat, forc_stat)
+  call c_f_pointer(handle_forc_struct, forc_struct)
+  call c_f_pointer(handle_prog_stat, prog_stat)
+  call c_f_pointer(handle_prog_struct, prog_struct)
+  call c_f_pointer(handle_diag_stat, diag_stat)
+  call c_f_pointer(handle_diag_struct, diag_struct)
+  call c_f_pointer(handle_flux_stat, flux_stat)
+  call c_f_pointer(handle_flux_struct, flux_struct)
+  call c_f_pointer(handle_indx_stat, indx_stat)
+  call c_f_pointer(handle_indx_struct, indx_struct)
+  call c_f_pointer(handle_output_timestep, output_timestep)
+
+  message="file_access_actor.f90 - writeDataToNetCDF"
+  do iStruct=1,size(structInfo)
+    select case(trim(structInfo(iStruct)%structName))
+      case('forc')
+        call writeDataNew(ncid, finalize_stats%dat(:), output_timestep%var(:),maxLayers,&
+                      index_gru, numGRU, & 
+                      forc_meta,forc_stat,forc_struct,'forc', &
+                      forcChild_map,indx_struct,err,cmessage)
+      case('prog')
+        call writeDataNew(ncid, finalize_stats%dat(:), output_timestep%var(:),maxLayers,&
+                      index_gru, numGRU, &
+                      prog_meta,prog_stat,prog_struct,'prog', &
+                      progChild_map,indx_struct,err,cmessage)
+      case('diag')
+        call writeDataNew(ncid, finalize_stats%dat(:), output_timestep%var(:),maxLayers,&
+                      index_gru, numGRU, &
+                      diag_meta, diag_stat, diag_struct,'diag', &
+                      diagChild_map,indx_struct,err,cmessage)
+      case('flux')
+        call writeDataNew(ncid, finalize_stats%dat(:), output_timestep%var(:),maxLayers,&
+                      index_gru, numGRU, &
+                      flux_meta,flux_stat,flux_struct,'flux', &
+                      fluxChild_map,indx_struct,err,cmessage)
+      case('indx')
+        call writeDataNew(ncid, finalize_stats%dat(:), output_timestep%var(:),maxLayers,&
+                      index_gru, numGRU, &
+                      indx_meta,indx_stat, indx_struct, 'indx', &
+                      indxChild_map,indx_struct,err,cmessage)
+    end select
+    if(err/=0)then
+      message=trim(message)//trim(cmessage)//'['//trim(structInfo(iStruct)%structName)//']'
+      print*, message
+      return
+    endif
+  end do  ! (looping through structures)
+  
+
 end subroutine writeDataToNetCDF
 
 subroutine writeBasinToNetCDF() bind(C, name="writeBasinToNetCDF")
diff --git a/build/source/actors/hru_actor/hru_actor.cpp b/build/source/actors/hru_actor/hru_actor.cpp
index 467c59e2d573d5f00ff0320f2ea24de757e424b3..7784fa9d9851c8d14071af31f9af394ddca31336 100644
--- a/build/source/actors/hru_actor/hru_actor.cpp
+++ b/build/source/actors/hru_actor/hru_actor.cpp
@@ -61,15 +61,7 @@ behavior hru_actor(stateful_actor<hru_state>* self, int refGRU, int indxGRU,
         [=](start_hru) {
             self->state.hru_timing.updateStartPoint("total_duration");
 
-            
-            int err;
-            
-            err = 0;
-            // Write Paramaters to OutputStruc
-            // Write_Param_C(&self->state.indxGRU, &self->state.indxHRU, 
-            //     self->state.handle_attrStruct, self->state.handle_typeStruct,
-            //     self->state.handle_mparStruct, self->state.handle_bparStruct, 
-            //     &err);
+            int err = 0;
             std::vector<double> attr_struct_array = get_var_d(self->state.handle_attrStruct); 
             std::vector<int> type_struct_array    = get_var_i(self->state.handle_typeStruct);
             std::vector<std::vector<double>> mpar_struct_array = get_var_dlength(self->state.handle_mparStruct);
@@ -112,9 +104,6 @@ behavior hru_actor(stateful_actor<hru_state>* self, int refGRU, int indxGRU,
 
         },
 
-
-
-
         [=](done_write) {
             self->state.hru_timing.updateStartPoint("total_duration");
 
@@ -364,34 +353,31 @@ int Run_HRU(stateful_actor<hru_state>* self) {
     self->state.hru_timing.updateEndPoint("run_physics_duration");
 
     self->state.hru_timing.updateStartPoint("write_output_duration");
-    WriteOutput(&self->state.indxHRU,
-            &self->state.indxGRU,
-            &self->state.timestep,
-            self->state.handle_forcStat, 
-            self->state.handle_progStat,
-            self->state.handle_diagStat,
-            self->state.handle_fluxStat, 
-            self->state.handle_indxStat,
-            self->state.handle_bvarStat,
-            self->state.handle_timeStruct, 
-            self->state.handle_forcStruct,
-            self->state.handle_attrStruct,
-            self->state.handle_typeStruct,
-            self->state.handle_indxStruct,
-            self->state.handle_mparStruct, 
-            self->state.handle_progStruct,
-            self->state.handle_diagStruct,
-            self->state.handle_fluxStruct,
-            self->state.handle_bparStruct,
-            self->state.handle_bvarStruct,
-            self->state.handle_statCounter,
-            self->state.handle_outputTimeStep,
-            self->state.handle_resetStats, 
-            self->state.handle_finalizeStats,
-            self->state.handle_finshTime,
-            self->state.handle_oldTime,
-            &self->state.outputStep, 
-            &self->state.err);
+    prepareOutput(&self->state.timestep,
+        self->state.handle_forcStat,
+        self->state.handle_progStat,
+        self->state.handle_diagStat,
+        self->state.handle_fluxStat,
+        self->state.handle_indxStat,
+        self->state.handle_bvarStat,
+        self->state.handle_timeStruct,
+        self->state.handle_forcStruct,
+        self->state.handle_attrStruct,
+        self->state.handle_typeStruct,
+        self->state.handle_indxStruct,
+        self->state.handle_mparStruct,
+        self->state.handle_progStruct,
+        self->state.handle_diagStruct,
+        self->state.handle_fluxStruct,
+        self->state.handle_bparStruct,
+        self->state.handle_bvarStruct,
+        self->state.handle_statCounter,
+        self->state.handle_outputTimeStep,
+        self->state.handle_resetStats,
+        self->state.handle_finalizeStats,
+        self->state.handle_finshTime,
+        self->state.handle_oldTime,
+        &self->state.err);
     if (self->state.err != 0) {
         aout(self) << "Error: WriteOutput - HRU = " << self->state.indxHRU << 
             " - indxGRU = " << self->state.indxGRU << " - refGRU = " << self->state.refGRU <<
diff --git a/build/source/actors/hru_actor/hru_actor.f90 b/build/source/actors/hru_actor/hru_actor.f90
index 04811c62a7e0d28004f420b75578f77588df8604..2ad3473d43aff2f3eb0d054ce7b69f2ff1643ba6 100644
--- a/build/source/actors/hru_actor/hru_actor.f90
+++ b/build/source/actors/hru_actor/hru_actor.f90
@@ -24,34 +24,33 @@ end subroutine getSummaVariableInfo
 subroutine prepareOutput(&
                         modelTimeStep,      &
                         ! statistics variables
-                        forcStat,           & ! model forcing data
-                        progStat,           & ! model prognostic (state) variables
-                        diagStat,           & ! model diagnostic variables
-                        fluxStat,           & ! model fluxes
-                        indxStat,           & ! model indices
-                        bvarStat,           & ! basin-average variables
+                        handle_forcStat,           & ! model forcing data
+                        handle_progStat,           & ! model prognostic (state) variables
+                        handle_diagStat,           & ! model diagnostic variables
+                        handle_fluxStat,           & ! model fluxes
+                        handle_indxStat,           & ! model indices
+                        handle_bvarStat,           & ! basin-average variables
                         ! primary data structures (scalars)
-                        timeStruct,         & ! x%var(:)     -- model time data
-                        forcStruct,         & ! x%var(:)     -- model forcing data
-                        attrStruct,         & ! x%var(:)     -- local attributes for each HRU
-                        typeStruct,         & ! x%var(:)     -- local classification of soil veg etc. for each HRU
+                        handle_timeStruct,         & ! x%var(:)     -- model time data
+                        handle_forcStruct,         & ! x%var(:)     -- model forcing data
+                        handle_attrStruct,         & ! x%var(:)     -- local attributes for each HRU
+                        handle_typeStruct,         & ! x%var(:)     -- local classification of soil veg etc. for each HRU
                         ! primary data structures (variable length vectors)
-                        indxStruct,         & ! x%var(:)%dat -- model indices
-                        mparStruct,         & ! x%var(:)%dat -- model parameters
-                        progStruct,         & ! x%var(:)%dat -- model prognostic (state) variables
-                        diagStruct,         & ! x%var(:)%dat -- model diagnostic variables
-                        fluxStruct,         & ! x%var(:)%dat -- model fluxes
+                        handle_indxStruct,         & ! x%var(:)%dat -- model indices
+                        handle_mparStruct,         & ! x%var(:)%dat -- model parameters
+                        handle_progStruct,         & ! x%var(:)%dat -- model prognostic (state) variables
+                        handle_diagStruct,         & ! x%var(:)%dat -- model diagnostic variables
+                        handle_fluxStruct,         & ! x%var(:)%dat -- model fluxes
                         ! basin-average structures
-                        bparStruct,         & ! x%var(:)     -- basin-average parameters
-                        bvarStruct,         & ! x%var(:)%dat -- basin-average variables
-                        statCounter,        &
-                        outputTimeStep,     & ! x%var(:)
-                        resetStats,         & ! x%var(:)
-                        finalizeStats,      & ! x%var(:)
-                        finshTime,          & ! x%var(:)    -- end time for the model simulation
-                        oldTime,            & ! x%var(:)    -- time for the previous model time step
-                        outputStep,         & ! index into the output Struc
-                        err, message)
+                        handle_bparStruct,         & ! x%var(:)     -- basin-average parameters
+                        handle_bvarStruct,         & ! x%var(:)%dat -- basin-average variables
+                        handle_statCounter,        &
+                        handle_outputTimeStep,     & ! x%var(:)
+                        handle_resetStats,         & ! x%var(:)
+                        handle_finalizeStats,      & ! x%var(:)
+                        handle_finshTime,          & ! x%var(:)    -- end time for the model simulation
+                        handle_oldTime,            & ! x%var(:)    -- time for the previous model time step
+                        err) bind(C, name="prepareOutput")
   USE globalData,only:structInfo
   USE globalData,only:startWrite,endWrite
 
@@ -67,79 +66,106 @@ subroutine prepareOutput(&
   USE outputStrucWrite_module,only:writeParm                  ! module to write model parameters
   USE time_utils_module,only:elapsedSec                       ! calculate the elapsed time
   USE globalData,only:elapsedWrite   
-  USE var_lookup,only:iLookTIME                 ! named variables for time data structure
-  USE var_lookup,only:iLookDIAG                 ! named variables for local column model diagnostic variables
-  USE var_lookup,only:iLookPROG                 ! named variables for local column model prognostic variables
-  USE var_lookup,only:iLookINDEX                ! named variables for local column index variables
-  USE var_lookup,only:iLookFreq                 ! named variables for the frequency structure
-  USE var_lookup,only:maxvarFreq                ! maximum number of output files
-  USE globalData,only:time_meta                 ! metadata on the model time
-  USE globalData,only:forc_meta                 ! metadata on the model forcing data
-  USE globalData,only:diag_meta                 ! metadata on the model diagnostic variables
-  USE globalData,only:prog_meta                 ! metadata on the model prognostic variables
-  USE globalData,only:flux_meta                 ! metadata on the model fluxes
-  USE globalData,only:indx_meta                 ! metadata on the model index variables
-  USE globalData,only:bvar_meta                 ! metadata on basin-average variables
-  USE globalData,only:bpar_meta                 ! basin parameter metadata structure
-  USE globalData,only:mpar_meta                 ! local parameter metadata structure
-  ! child metadata for stats
-  USE globalData,only:statForc_meta             ! child metadata for stats
-  USE globalData,only:statProg_meta             ! child metadata for stats
-  USE globalData,only:statDiag_meta             ! child metadata for stats
-  USE globalData,only:statFlux_meta             ! child metadata for stats
-  USE globalData,only:statIndx_meta             ! child metadata for stats
-  USE globalData,only:statBvar_meta             ! child metadata for stats
+  USE var_lookup,only:iLookTIME,iLookDIAG,iLookPROG,iLookINDEX, &
+    iLookFreq,maxvarFreq ! named variables for time data structure
+  USE globalData,only:time_meta,forc_meta,diag_meta,prog_meta,&
+    flux_meta,indx_meta,bvar_meta,bpar_meta,mpar_meta           ! metadata on the model time
+  USE globalData,only:statForc_meta,statProg_meta,statDiag_meta,&
+    statFlux_meta,statIndx_meta,statBvar_meta             ! child metadata for stats
   ! index of the child data structure
-  USE globalData,only:forcChild_map             ! index of the child data structure: stats forc
-  USE globalData,only:progChild_map             ! index of the child data structure: stats prog
-  USE globalData,only:diagChild_map             ! index of the child data structure: stats diag
-  USE globalData,only:fluxChild_map             ! index of the child data structure: stats flux
-  USE globalData,only:indxChild_map             ! index of the child data structure: stats indx
-  USE globalData,only:bvarChild_map             ! index of the child data structure: stats bvar
+  USE globalData,only:forcChild_map,progChild_map,diagChild_map,&
+    fluxChild_map,indxChild_map,bvarChild_map             ! index of the child data structure: stats forc
   implicit none
   integer(i4b),intent(in)                  :: modelTimeStep   ! time step index
-  type(var_dlength),intent(inout)          :: forcStat        ! model forcing data
-  type(var_dlength),intent(inout)          :: progStat        ! model prognostic (state) variables
-  type(var_dlength),intent(inout)          :: diagStat        ! model diagnostic variables
-  type(var_dlength),intent(inout)          :: fluxStat        ! model fluxes
-  type(var_dlength),intent(inout)          :: indxStat        ! model indices
-  type(var_dlength),intent(inout)          :: bvarStat        ! basin-average variabl
+  type(c_ptr), intent(in), value           :: handle_forcStat !  model forcing data
+  type(c_ptr), intent(in), value           :: handle_progStat !  model prognostic (state) variables
+  type(c_ptr), intent(in), value           :: handle_diagStat !  model diagnostic variables
+  type(c_ptr), intent(in), value           :: handle_fluxStat !  model fluxes
+  type(c_ptr), intent(in), value           :: handle_indxStat !  model indices
+  type(c_ptr), intent(in), value           :: handle_bvarStat !  basin-average variables
   ! primary data structures (scalars)
-  type(var_i),intent(inout)                :: timeStruct      ! model time data
-  type(var_d),intent(inout)                :: forcStruct      ! model forcing data
-  type(var_d),intent(inout)                :: attrStruct      ! local attributes for each HRU
-  type(var_i),intent(inout)                :: typeStruct      ! local classification of soil veg etc. for each HRU
+  type(c_ptr), intent(in), value           :: handle_timeStruct !  model time data
+  type(c_ptr), intent(in), value           :: handle_forcStruct !  model forcing data
+  type(c_ptr), intent(in), value           :: handle_attrStruct !  local attributes for each HRU
+  type(c_ptr), intent(in), value           :: handle_typeStruct !  local classification of soil veg etc. for each HRU
   ! primary data structures (variable length vectors)
-  type(var_ilength),intent(inout)          :: indxStruct      ! model indices
-  type(var_dlength),intent(inout)          :: mparStruct      ! model parameters
-  type(var_dlength),intent(inout)          :: progStruct      ! model prognostic (state) variables
-  type(var_dlength),intent(inout)          :: diagStruct      ! model diagnostic variables
-  type(var_dlength),intent(inout)          :: fluxStruct      ! model fluxes
+  type(c_ptr), intent(in), value           :: handle_indxStruct !  model indices
+  type(c_ptr), intent(in), value           :: handle_mparStruct !  model parameters
+  type(c_ptr), intent(in), value           :: handle_progStruct !  model prognostic (state) variables
+  type(c_ptr), intent(in), value           :: handle_diagStruct !  model diagnostic variables
+  type(c_ptr), intent(in), value           :: handle_fluxStruct !  model fluxes
   ! basin-average structures
-  type(var_d),intent(inout)                :: bparStruct      ! basin-average parameters
-  type(var_dlength),intent(inout)          :: bvarStruct      ! basin-average variables
-  ! local HRU data
-  type(var_i),intent(inout)                :: statCounter     ! time counter for stats
-  type(var_i),intent(inout)                :: outputTimeStep  ! timestep in output files
-  type(flagVec),intent(inout)              :: resetStats      ! flags to reset statistics
-  type(flagVec),intent(inout)              :: finalizeStats   ! flags to finalize statistics
-  type(var_i),intent(inout)                :: finshTime       ! end time for the model simulation
-  type(var_i),intent(inout)                :: oldTime         !
-  integer(i4b),intent(in)                  :: outputStep      ! index into the outputStructure
+  type(c_ptr), intent(in), value           :: handle_bparStruct !  basin-average parameters
+  type(c_ptr), intent(in), value           :: handle_bvarStruct !  basin-average variables
+  ! local HRU variables
+  type(c_ptr), intent(in), value           :: handle_statCounter
+  type(c_ptr), intent(in), value           :: handle_outputTimeStep
+  type(c_ptr), intent(in), value           :: handle_resetStats
+  type(c_ptr), intent(in), value           :: handle_finalizeStats
+  type(c_ptr), intent(in), value           :: handle_finshTime    ! end time for the model simulation
+  type(c_ptr), intent(in), value           :: handle_oldTime      ! time for the previous model time step
   ! run time variables
   integer(i4b),intent(out)                 :: err
-  character(*),intent(out)                 :: message 
-
+  ! local vairiables for pointers
+  type(var_dlength),pointer                :: forcStat        ! model forcing data
+  type(var_dlength),pointer                :: progStat        ! model prognostic (state) variables
+  type(var_dlength),pointer                :: diagStat        ! model diagnostic variables
+  type(var_dlength),pointer                :: fluxStat        ! model fluxes
+  type(var_dlength),pointer                :: indxStat        ! model indices
+  type(var_dlength),pointer                :: bvarStat        ! basin-average variabl
+  type(var_i),pointer                      :: timeStruct      ! model time data
+  type(var_d),pointer                      :: forcStruct      ! model forcing data
+  type(var_d),pointer                      :: attrStruct      ! local attributes for each HRU
+  type(var_i),pointer                      :: typeStruct      ! local classification of soil veg etc. for each HRU
+  type(var_ilength),pointer                :: indxStruct      ! model indices
+  type(var_dlength),pointer                :: mparStruct      ! model parameters
+  type(var_dlength),pointer                :: progStruct      ! model prognostic (state) variables
+  type(var_dlength),pointer                :: diagStruct      ! model diagnostic variables
+  type(var_dlength),pointer                :: fluxStruct      ! model fluxes
+  type(var_d),pointer                      :: bparStruct      ! basin-average parameters
+  type(var_dlength),pointer                :: bvarStruct      ! basin-average variables
+  type(var_i),pointer                      :: statCounter     ! time counter for stats
+  type(var_i),pointer                      :: outputTimeStep  ! timestep in output files
+  type(flagVec),pointer                    :: resetStats      ! flags to reset statistics
+  type(flagVec),pointer                    :: finalizeStats   ! flags to finalize statistics
+  type(var_i),pointer                      :: finshTime       ! end time for the model simulation
+  type(var_i),pointer                      :: oldTime         !
+  ! local variables
+  character(len=256)                       :: message 
   character(len=256)                       :: cmessage
-
   logical(lgt)                             :: defNewOutputFile=.false.
   integer(i4b)                             :: iFreq             ! index of the output frequency
   integer(i4b)                             :: iStruct           ! index of model structure
   logical(lgt)                             :: printProgress=.false.
   logical(lgt)                             :: printRestart=.false.
-
-
-
+  ! ---------------------------------------------------------------------------------------
+  ! * Convert From C++ to Fortran
+  ! ---------------------------------------------------------------------------------------
+  call c_f_pointer(handle_forcStat, forcStat)
+  call c_f_pointer(handle_progStat, progStat)
+  call c_f_pointer(handle_diagStat, diagStat)
+  call c_f_pointer(handle_fluxStat, fluxStat)
+  call c_f_pointer(handle_indxStat, indxStat)
+  call c_f_pointer(handle_bvarStat, bvarStat)
+  call c_f_pointer(handle_timeStruct, timeStruct)
+  call c_f_pointer(handle_forcStruct, forcStruct)
+  call c_f_pointer(handle_attrStruct, attrStruct)
+  call c_f_pointer(handle_typeStruct, typeStruct)
+  call c_f_pointer(handle_indxStruct, indxStruct)
+  call c_f_pointer(handle_mparStruct, mparStruct)
+  call c_f_pointer(handle_progStruct, progStruct)
+  call c_f_pointer(handle_diagStruct, diagStruct)
+  call c_f_pointer(handle_fluxStruct, fluxStruct)
+  call c_f_pointer(handle_bparStruct, bparStruct)
+  call c_f_pointer(handle_bvarStruct, bvarStruct)
+  call c_f_pointer(handle_statCounter, statCounter)
+  call c_f_pointer(handle_outputTimeStep, outputTimeStep)
+  call c_f_pointer(handle_resetStats, resetStats)
+  call c_f_pointer(handle_finalizeStats, finalizeStats)
+  call c_f_pointer(handle_finshTime, finshTime);
+  call c_f_pointer(handle_oldTime, oldTime)
+  
+  ! Start of Subroutine
   err=0; message='summa_manageOutputFiles/'
   ! identify the start of the writing
   call date_and_time(values=startWrite)
diff --git a/build/source/netcdf/writeOutput.f90 b/build/source/netcdf/writeOutput.f90
index 5eb8af2cfb71dae6be6fc0bca01d68bcce36c89b..8c3fbaefccdbf7662d54638d74747984c4c80eb9 100644
--- a/build/source/netcdf/writeOutput.f90
+++ b/build/source/netcdf/writeOutput.f90
@@ -78,6 +78,7 @@ public::writeParm
 public::writeData
 public::writeBasin
 public::writeTime
+public::writeDataNew
 private::writeScalar
 private::writeVector
 ! define dimension lengths
@@ -148,6 +149,34 @@ subroutine writeParm(ncid,ispatial,struct,meta,err,message)
 
 end subroutine writeParm
 
+! Change Name to writeData when done
+subroutine writeDataNew(ncid, finalize_stats, output_timestep, max_layers, index_gru, num_gru, meta, &
+    stat, dat, structName, map, indx, err, message)
+  
+  USE data_types,only:var_info                       ! metadata type
+
+  implicit none
+  type(var_i),      intent(in)       :: ncid
+  logical(lgt),     intent(in)       :: finalize_stats(:)  ! flags to finalize statistics
+  integer(i4b),     intent(inout)    :: output_timestep(:) ! number of HRUs in the run domain
+  integer(i4b),     intent(in)       :: max_layers
+  integer(i4b),     intent(in)       :: index_gru
+  integer(i4b),     intent(in)       :: num_gru
+  type(var_info),   intent(in)       :: meta(:)           ! meta data
+  class(*),         intent(in)       :: stat              ! stats data
+  class(*),         intent(in)       :: dat               ! timestep data
+  character(*),     intent(in)       :: structName
+  integer(i4b),     intent(in)       :: map(:)            ! map into stats child struct
+  type(var_ilength),intent(in)       :: indx
+  integer(i4b)  ,intent(out)         :: err               ! error code
+  character(*)  ,intent(out)         :: message           ! error message
+
+  err=0;message="writeParm/"
+
+
+
+end subroutine writeDataNew
+
 ! **************************************************************************************
 ! public subroutine writeData: write model time-dependent data
 ! **************************************************************************************
@@ -205,7 +234,6 @@ subroutine writeData(ncid,outputTimestep,outputTimestepUpdate,maxLayers,nSteps,
 
     ! loop through model variables
     do iVar = 1,size(meta)
-      stepCounter = 0
 
       if (meta(iVar)%varName=='time' .and. structName == 'forc')then
         ! get variable index
@@ -224,12 +252,6 @@ subroutine writeData(ncid,outputTimestep,outputTimestepUpdate,maxLayers,nSteps,
           end do  
         endif
 
-        do iStep = 1, nSteps
-          ! check if we want this timestep
-          if(.not.outputStructure(1)%finalizeStats(1)%gru(verifiedGRUIndex)%hru(1)%tim(iStep)%dat(iFreq)) cycle
-          stepCounter = stepCounter+1
-          timeVec(stepCounter) = outputStructure(1)%forcStruct(1)%gru(verifiedGRUIndex)%hru(1)%var(iVar)%tim(iStep)
-        end do ! iStep
 
         err = nf90_put_var(ncid%var(iFreq),ncVarID,timeVec(1:stepCounter),start=(/outputTimestep(iFreq)/),count=(/stepCounter/))
         call netcdf_err(err,message); if (err/=0)then; print*, "err"; return; endif