diff --git a/build/CMakeLists.txt b/build/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..161c2922aa86341aadc2f437fb88342f7e910a54
--- /dev/null
+++ b/build/CMakeLists.txt
@@ -0,0 +1,281 @@
+cmake_minimum_required(VERSION 3.10 FATAL_ERROR)
+
+set(PARENT_DIR /Summa-Actors)
+set(EXEC_DIR ${PARENT_DIR}/bin)
+
+set(EXEC_NAME summa_actors)
+
+project(summa_actors LANGUAGES CXX Fortran)
+enable_language(C)
+SET (CMAKE_Fortran_COMPILER  gfortran)
+include(FortranCInterface)
+FortranCInterface_VERIFY(CXX)
+
+set(ACTORS_DIR ${PARENT_DIR}/build/source/actors)
+set(DRIVER_DIR ${PARENT_DIR}/build/source/driver)
+set(DSHARE_DIR ${PARENT_DIR}/build/source/dshare)
+set(ENGINE_DIR ${PARENT_DIR}/build/source/engine)
+set(HOOKUP_DIR ${PARENT_DIR}/build/source/hookup)
+set(NETCDF_DIR ${PARENT_DIR}/build/source/netcdf)
+set(NOAHMP_DIR ${PARENT_DIR}/build/source/noah-mp)
+set(FILE_ACCESS_DIR ${ACTORS_DIR}/file_acces_actor)
+set(JOB_ACTOR_DIR ${ACTORS_DIR}/job_actor)
+set(HRU_ACTOR_DIR ${ACTORS_DIR}/hru_actor)
+set(GRU_ACTOR_DIR ${ACTORS_DIR}/gru_actor)
+
+set(NRUTIL
+    ${ENGINE_DIR}/nrtype.f90
+    ${ENGINE_DIR}/f2008funcs.f90
+    ${ENGINE_DIR}/nr_utility.f90)
+
+set(NRPROC
+    ${ENGINE_DIR}/expIntegral.f90
+    ${ENGINE_DIR}/spline_int.f90)
+
+SET(HOOKUP
+    ${HOOKUP_DIR}/ascii_util.f90
+    ${HOOKUP_DIR}/summaActors_FileManager.f90)
+
+SET(DATAMS 
+    ${DSHARE_DIR}/multiconst.f90
+    ${DSHARE_DIR}/var_lookup.f90
+    ${DSHARE_DIR}/data_types.f90
+    ${DSHARE_DIR}/globalData.f90
+    ${DSHARE_DIR}/flxMapping.f90
+    ${DSHARE_DIR}/get_ixname.f90)
+
+SET(DEPENDS_ON_FILEMANAGER
+    ${DSHARE_DIR}/popMetadat.f90
+    ${DSHARE_DIR}/outpt_stat.f90)
+
+SET(UTILMS
+    ${ENGINE_DIR}/time_utils.f90
+    ${ENGINE_DIR}/mDecisions.f90
+    ${ENGINE_DIR}/snow_utils.f90
+    ${ENGINE_DIR}/soil_utils.f90
+    ${ENGINE_DIR}/updatState.f90
+    ${ENGINE_DIR}/matrixOper.f90)
+
+set(SOLVER
+    ${ENGINE_DIR}/vegPhenlgy.f90
+    ${ENGINE_DIR}/diagn_evar.f90
+    ${ENGINE_DIR}/stomResist.f90
+    ${ENGINE_DIR}/groundwatr.f90
+    ${ENGINE_DIR}/vegSWavRad.f90
+    ${ENGINE_DIR}/vegNrgFlux.f90
+    ${ENGINE_DIR}/ssdNrgFlux.f90
+    ${ENGINE_DIR}/vegLiqFlux.f90
+    ${ENGINE_DIR}/snowLiqFlx.f90
+    ${ENGINE_DIR}/soilLiqFlx.f90
+    ${ENGINE_DIR}/bigAquifer.f90
+    ${ENGINE_DIR}/computFlux.f90
+    ${ENGINE_DIR}/computResid.f90
+    ${ENGINE_DIR}/computJacob.f90
+    ${ENGINE_DIR}/eval8summa.f90
+    ${ENGINE_DIR}/summaSolve.f90
+    ${ENGINE_DIR}/systemSolv.f90
+    ${ENGINE_DIR}/varSubstep.f90
+    ${ENGINE_DIR}/opSplittin.f90
+    ${ENGINE_DIR}/coupled_em.f90)
+
+set(INTERFACE
+    ${ACTORS_DIR}/global/cppwrap_datatypes.f90
+    ${ACTORS_DIR}/global/cppwrap_auxiliary.f90
+    ${ACTORS_DIR}/global/cppwrap_metadata.f90)
+
+set(FILE_ACCESS_INTERFACE
+    ${FILE_ACCESS_DIR}/initOutputStruc.f90
+    ${FILE_ACCESS_DIR}/deallocateOutputStruc.f90
+    ${FILE_ACCESS_DIR}/cppwrap_fileAccess.f90)
+
+set(JOB_INTERFACE
+    ${JOB_ACTOR_DIR}/job_actor.f90)
+
+set(HRU_INTERFACE
+    ${HRU_ACTOR_DIR}/cppwrap_hru.f90)
+
+set(GRU_INTERFACE
+    ${GRU_ACTOR_DIR}/gru_actor.f90)
+
+set(PRELIM
+    ${ENGINE_DIR}/conv_funcs.f90
+    ${ENGINE_DIR}/sunGeomtry.f90
+    ${ENGINE_DIR}/convE2Temp.f90
+    ${ENGINE_DIR}/allocspaceActors.f90
+    ${ENGINE_DIR}/alloc_file_access.f90
+    ${ENGINE_DIR}/checkStruc.f90
+    ${ENGINE_DIR}/childStruc.f90
+    ${ENGINE_DIR}/ffile_info.f90
+    ${ENGINE_DIR}/read_attribute.f90
+    ${ENGINE_DIR}/read_pinit.f90
+    ${ENGINE_DIR}/pOverwrite.f90
+    ${ENGINE_DIR}/read_paramActors.f90
+    ${ENGINE_DIR}/paramCheck.f90
+    ${ENGINE_DIR}/check_icondActors.f90)
+
+set(NOAHMP
+    ${NOAHMP_DIR}/module_model_constants.F
+    ${NOAHMP_DIR}/module_sf_noahutl.F
+    ${NOAHMP_DIR}/module_sf_noahlsm.F
+    ${NOAHMP_DIR}/module_sf_noahmplsm.F)
+
+set(MODRUN
+    ${ENGINE_DIR}/indexState.f90
+    ${ENGINE_DIR}/getVectorz.f90
+    ${ENGINE_DIR}/updateVars.f90
+    ${ENGINE_DIR}/var_derive.f90
+    ${ENGINE_DIR}/read_forcingActors.f90
+    ${ENGINE_DIR}/access_forcing.f90
+    ${ENGINE_DIR}/access_write.f90
+    ${ENGINE_DIR}/derivforce.f90
+    ${ENGINE_DIR}/snowAlbedo.f90
+    ${ENGINE_DIR}/canopySnow.f90
+    ${ENGINE_DIR}/tempAdjust.f90
+    ${ENGINE_DIR}/snwCompact.f90
+    ${ENGINE_DIR}/layerMerge.f90
+    ${ENGINE_DIR}/layerDivide.f90
+    ${ENGINE_DIR}/volicePack.f90
+    ${ENGINE_DIR}/qTimeDelay.f90)
+
+set(NETCDF
+    ${NETCDF_DIR}/netcdf_util.f90
+    ${NETCDF_DIR}/def_output.f90
+    ${NETCDF_DIR}/outputStrucWrite.f90
+    ${NETCDF_DIR}/writeOutput.f90
+    ${NETCDF_DIR}/read_icondActors.f90)
+
+set(DRIVER
+    ${DRIVER_DIR}/summaActors_type.f90
+    ${DRIVER_DIR}/summaActors_util.f90
+    ${DRIVER_DIR}/summaActors_globalData.f90
+    ${DRIVER_DIR}/summaActors_init.f90
+    ${DRIVER_DIR}/SummaActors_setup.f90
+    ${DRIVER_DIR}/summaActors_restart.f90
+    ${DRIVER_DIR}/summaActors_forcing.f90
+    ${DRIVER_DIR}/SummaActors_modelRun.f90
+    ${DRIVER_DIR}/summaActors_alarms.f90
+    ${DRIVER_DIR}/summaActors_wOutputStruc.f90)
+
+set(COMM_ALL
+    ${NRUTIL}
+    ${NRPROC}
+    ${DATAMS}
+    ${INTERFACE}
+    ${HOOKUP}
+    ${DEPENDS_ON_FILEMANAGER}
+    ${UTILMS})
+
+set(SUMMA_ALL
+    ${NETCDF}
+    ${PRELIM}
+    ${MODRUN}
+    ${SOLVER}
+    ${DRIVER}
+    ${JOB_INTERFACE}
+    ${HRU_INTERFACE}
+    ${GRU_INTERFACE})
+
+set(ACTORS_GLOBAL
+    ${ACTORS_DIR}/global/global.cpp
+    ${ACTORS_DIR}/global/timing_info.cpp)
+
+set(HRU_ACTOR
+    ${ACTORS_DIR}/hru_actor/hru_actor.cpp)
+
+set(GRU_ACTOR
+    ${ACTORS_DIR}/gru_actor/gru_actor.cpp)
+
+set(FILE_ACCESS_ACTOR
+    ${ACTORS_DIR}/file_access_actor/file_access_actor.cpp
+    ${ACTORS_DIR}/file_access_actor/forcing_file_info.cpp
+    ${ACTORS_DIR}/file_access_actor/output_manager.cpp)
+
+set(JOB_ACTOR
+    ${ACTORS_DIR}/job_actor/job_actor.cpp
+    ${ACTORS_DIR}/job_actor/GRUinfo.cpp)
+
+set(SUMMA_ACTOR
+    ${ACTORS_DIR}/summa_actor/summa_actor.cpp)
+
+set(SUMMA_CLIENT
+    ${ACTORS_DIR}/summa_actor/summa_client.cpp)
+
+set(SUMMA_SERVER
+    ${ACTORS_DIR}/summa_actor/summa_server.cpp
+    ${ACTORS_DIR}/summa_actor/batch_manager.cpp
+    ${ACTORS_DIR}/summa_actor/client.cpp)
+
+set(MAIN
+    ${ACTORS_DIR}/main.cpp)
+
+
+
+
+add_library(SUMMA_NOAHMP OBJECT
+    ${NOAHMP}
+    ${NRUTIL})
+    target_compile_options(SUMMA_NOAHMP PRIVATE
+        -g -O3 -ffree-form -ffree-line-length-none -fmax-errors=0 -fPIC -Wfatal-errors)
+
+add_library(SUMMA_COMM OBJECT
+    ${COMM_ALL})
+    target_compile_options(SUMMA_COMM PRIVATE
+        -g -O3 -ffree-line-length-none -fmax-errors=0 -fPIC -Wfatal-errors)
+    target_include_directories(SUMMA_COMM PRIVATE
+        "/usr/include"
+        ${netCDF_INCLUDES}
+        ${LAPACK_INCLUDES})
+    target_link_libraries(SUMMA_COMM PUBLIC
+        ${netCDF_LIBRARIES}
+        ${LAPACK_LIBRARIES}
+        SUMMA_NOAHMP)
+
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${EXEC_DIR})
+add_library(SUMMA_OBJ SHARED
+    ${SUMMA_ALL})
+    target_compile_options(SUMMA_OBJ PRIVATE
+        -g -O3 -ffree-line-length-none -fmax-errors=0 -fPIC -Wfatal-errors)
+    target_include_directories(SUMMA_OBJ PRIVATE
+        "/usr/include"
+        ${netCDF_INCLUDES}
+        ${LAPACK_INCLUDES})
+    target_link_libraries(SUMMA_OBJ PUBLIC
+        ${netCDF_LIBRARIES}
+        ${LAPACK_LIBRARIES}
+        SUMMA_COMM)
+
+set(CMAKE_CXX_FLAGS "-g -O3 -Wfatal-errors -std=c++17")
+
+find_package(CAF REQUIRED)
+find_package(netCDF REQUIRED)
+find_package(LAPACK REQUIRED)
+
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${EXEC_DIR})
+
+
+add_executable(${EXEC_NAME}
+    ${ACTORS_GLOBAL}
+    ${HRU_ACTOR}
+    ${GRU_ACTOR}
+    ${FILE_ACCESS_ACTOR}
+    ${JOB_ACTOR}
+    ${SUMMA_ACTOR}
+    ${SUMMA_CLIENT}
+    ${SUMMA_SERVER}
+    ${MAIN})
+    set_property(TARGET ${EXEC_NAME} PROPERTY LINKER_LANGUAGE Fortran)
+    target_include_directories(${EXEC_NAME} PUBLIC
+        ${CAF_INCLUDES}
+        ${netCDF_INCLUDES}
+        ${LAPACK_INCLUDES}
+        "/Summa-Actors/build/includes/global"
+        "/Summa-Actors/build/includes/summa_actor"
+        "/Summa-Actors/build/includes/gru_actor"
+        "/Summa-Actors/build/includes/job_actor"
+        "/Summa-Actors/build/includes/file_access_actor"
+        "/Summa-Actors/build/includes/hru_actor")
+    target_link_libraries( ${EXEC_NAME}
+       ${CAF_LIBRARIES}
+       ${netCDF_LIBRARIES}
+       ${LAPACK_LIBRARIES}
+       SUMMA_OBJ)
\ No newline at end of file
diff --git a/build/includes/global/message_atoms.hpp b/build/includes/global/message_atoms.hpp
index e185dcfc20776e2854e0e109f98c5e0654037383..93f1b8f2e40b472a40095155c3e568ed805e3c86 100644
--- a/build/includes/global/message_atoms.hpp
+++ b/build/includes/global/message_atoms.hpp
@@ -9,6 +9,7 @@ CAF_BEGIN_TYPE_ID_BLOCK(summa, first_custom_type_id)
     CAF_ADD_ATOM(summa, err)
     // GRU Actor
     CAF_ADD_ATOM(summa, init_gru)
+    CAF_ADD_ATOM(summa, done_init_gru)
     // Job Actor
     CAF_ADD_ATOM(summa, done_reading_forcingFile)
     CAF_ADD_ATOM(summa, done_reading_first_forcing_file)
diff --git a/build/includes/gru_actor/gru_actor.hpp b/build/includes/gru_actor/gru_actor.hpp
index fd9a7a6075e8a88267ba49f3d322f933fbc2e45e..b0de9609e4ac9ba7c1782c007ea0ded4d131fa77 100644
--- a/build/includes/gru_actor/gru_actor.hpp
+++ b/build/includes/gru_actor/gru_actor.hpp
@@ -8,6 +8,7 @@
 #include <array>
 #include <chrono>
 #include <string>
+#include "var_lookup.hpp"
 
 namespace caf{
 struct gru_state {
@@ -20,7 +21,9 @@ struct gru_state {
     int ref_gru; // The actual ID of the GRU we are
     int num_hrus;
 
+    int nTimeDelay = 2000; // number of hours in the time delay histogram (default: ~1 season = 24*365/4)
 
+    struct iLookVarType var_type_lookup;
     
     int num_bpar_vars;                               // number of variables in the fortran structure for bpar_struct
     std::vector<double> bpar_struct;   
diff --git a/build/includes/gru_actor/gru_actor_subroutine_wrappers.hpp b/build/includes/gru_actor/gru_actor_subroutine_wrappers.hpp
index 5e103fac8eee002f8b4b9b7e3fa7aa3d32f3c657..a078d41d6dca35216126318e4aff3b1b85074dcc 100644
--- a/build/includes/gru_actor/gru_actor_subroutine_wrappers.hpp
+++ b/build/includes/gru_actor/gru_actor_subroutine_wrappers.hpp
@@ -4,7 +4,9 @@ extern "C" {
 
     void getVarSizes(int* num_var_types, int* num_bpar_vars, int* num_bvar_vars);
 
-    void fillVarTypeLists(int* num_var_types, int* num_bpar_vars, int* num_bvar_vars, void* i_look_var_type_list, 
-        void* bpar_struct_var_type_list, void* bvar_struct_var_type_list);
+    void initVarType(void* var_type_lookup);
+
+    void fillVarTypeLists( int* num_bpar_vars, int* num_bvar_vars,
+        void* bpar_struct_var_type_list, void* bvar_struct_var_type_list, int* err);
 
 }
\ No newline at end of file
diff --git a/build/makefile b/build/makefile
index bffef6f90ce0c2fd2bba7c7a2125adf223843304..94a5a62466990dbf9476f21b1b85ea2f2d511db9 100644
--- a/build/makefile
+++ b/build/makefile
@@ -262,8 +262,8 @@ TIMEINFO = $(SOURCE_DIR)/global/timing_info.cpp
 SUMMA_ACTOR_INCLUDES = -I$(INCLUDE_DIR)/summa_actor
 SUMMA_ACTOR = $(SOURCE_DIR)/summa_actor/summa_actor.cpp
 SUMMA_CLIENT = $(SOURCE_DIR)/summa_actor/summa_client.cpp
-SUMMA_SERVER = $(SOURCE_DIR)/summa_actor/summa_server.cpp
 
+SUMMA_SERVER = $(SOURCE_DIR)/summa_actor/summa_server.cpp
 BATCH_MANGER = $(SOURCE_DIR)/summa_actor/batch_manager.cpp
 CLIENT_MANAGER = $(SOURCE_DIR)/summa_actor/client.cpp
 
diff --git a/build/source/actors/gru_actor/gru_actor.cpp b/build/source/actors/gru_actor/gru_actor.cpp
index 23449a18f0eb833ce9e3a8bb5e98fbb6da7d40c7..d715db2bc510a5cd25406e052d591b83f6d98b87 100644
--- a/build/source/actors/gru_actor/gru_actor.cpp
+++ b/build/source/actors/gru_actor/gru_actor.cpp
@@ -11,12 +11,11 @@ behavior gru_actor(stateful_actor<gru_state>* self, int refGRU, int indxGRU,
     std::string configPath, int outputStrucSize, caf::actor parent) {
 
     aout(self) << "GRU Actor Has Started\n";
+    self->state.parent = parent;
 
     return {
 
-
         // What does a GRU need to assemble its data structure?
-        //
         [=](init_gru) {
             // Get the variable data length, we also need the type information
             aout(self) << "init GRU \n";
@@ -42,15 +41,65 @@ behavior gru_actor(stateful_actor<gru_state>* self, int refGRU, int indxGRU,
                 self->state.bvar_struct_var_type_list.push_back(integer_missing_value);
             }
 
+            initVarType(&self->state.var_type_lookup);
+                // aout(self) << "************C++************\n";
+                // aout(self) << self->state.var_type_lookup.scalarv << "\n";
+                // aout(self) << self->state.var_type_lookup.wLength << "\n";
+                // aout(self) << self->state.var_type_lookup.midSnow << "\n";
+                // aout(self) << self->state.var_type_lookup.midSoil << "\n";
+                // aout(self) << self->state.var_type_lookup.midToto << "\n";
+                // aout(self) << self->state.var_type_lookup.ifcSnow << "\n";
+                // aout(self) << self->state.var_type_lookup.ifcSoil << "\n";
+                // aout(self) << self->state.var_type_lookup.ifcToto << "\n";
+                // aout(self) << self->state.var_type_lookup.parSoil << "\n";
+                // aout(self) << self->state.var_type_lookup.routing << "\n";
+                // aout(self) << self->state.var_type_lookup.outstat << "\n";
+                // aout(self) << self->state.var_type_lookup.unknown << "\n";
+                // aout(self) << "************C++************\n";
+
             // Fill The lists with the values from the fortran lists
-            fillVarTypeLists(&self->state.num_var_types,
-                             &self->state.num_bpar_vars,
+            int err = 0;
+            fillVarTypeLists(&self->state.num_bpar_vars,
                              &self->state.num_bvar_vars,
-                             &self->state.i_look_var_type_list[0],
                              &self->state.bpar_struct_var_type_list[0],
-                             &self->state.bvar_struct_var_type_list[0]);
+                             &self->state.bvar_struct_var_type_list[0],
+                             &err);
+            // aout(self) << "Printing BPAR\n";
+            // for(int i = 0; i < self->state.num_bpar_vars; i++) {
+            //     aout(self) << i << ": " << self->state.bpar_struct_var_type_list[i] << "\n";
+            // }
+            // aout(self) << "Printing BVAR\n";
+            // for(int i = 0; i < self->state.num_bvar_vars; i++) {
+            //     aout(self) << i << ": " << self->state.bvar_struct_var_type_list[i] << "\n";
+            // }
+
+            // Now we can allocate space for the structures
+            for(int i = 0; i < self->state.num_bpar_vars; i++) {
+                if (self->state.bpar_struct_var_type_list[i] == self->state.var_type_lookup.scalarv) {
+                    self->state.bpar_struct.push_back(0.0);
+                } else {
+                    aout(self) << "ERROR: GRU - bpar_struct contains type that is not a scalar\n";
+                }
+            }
+            for(int i = 0; i < self->state.num_bvar_vars; i++) {
+                if (self->state.bvar_struct_var_type_list[i] == self->state.var_type_lookup.scalarv) {
+                    std::vector<double> temp;
+                    self->state.bvar_struct.push_back(temp);
+                    self->state.bvar_struct[i].push_back(0.0);
+
+                } else if(self->state.bvar_struct_var_type_list[i] == self->state.var_type_lookup.routing) {
+                    std::vector<double> temp;
+                    self->state.bvar_struct.push_back(temp);
+                    for (int x = 0; x < self->state.nTimeDelay; x++) {
+                        self->state.bvar_struct[i].push_back(0.0);
+                    }
+                } else {
+                    aout(self) << "ERROR: GRU - bvar_struct contains type that is not a scalar or routing\n";
 
+                }
+            }
 
+            self->send(self->state.parent, done_init_gru_v);
         }
 
 
diff --git a/build/source/actors/gru_actor/gru_actor.f90 b/build/source/actors/gru_actor/gru_actor.f90
index fe4c0b461f06573c8a439cef9d2ba4542929daf8..ae867c1239a756f0d7cf67c409c7f3deab59bd69 100644
--- a/build/source/actors/gru_actor/gru_actor.f90
+++ b/build/source/actors/gru_actor/gru_actor.f90
@@ -28,76 +28,103 @@ subroutine getVarSizes(num_var_types, &
 
 end subroutine getVarSizes
 
-subroutine initVarType(num_var_types, &
-                       i_look_var_type_list) bind(C, name="initVarType")
+subroutine initVarType(var_type_lookup) bind(C, name="initVarType")
     USE var_lookup,only:iLookVarType
+    USE var_lookup,only:iLook_VarType
+
     implicit none
-    integer(c_int), intent(in)                              :: num_var_types
-    integer(c_int), intent(out), dimension(num_var_types)   :: i_look_var_type_list   
-
-    i_look_var_type_list(1) = iLookVarType%scalarv 
-    i_look_var_type_list(2) = iLookVarType%wLength
-    i_look_var_type_list(3) = iLookVarType%midSnow
-    i_look_var_type_list(4) = iLookVarType%midSoil
-    i_look_var_type_list(5) = iLookVarType%midToto
-    i_look_var_type_list(6) = iLookVarType%ifcSnow
-    i_look_var_type_list(7) = iLookVarType%ifcSoil
-    i_look_var_type_list(8) = iLookVarType%ifcToto
-    i_look_var_type_list(9) = iLookVarType%parSoil
-    i_look_var_type_list(10) = iLookVarType%routing
-    i_look_var_type_list(11) = iLookVarType%outstat
-    i_look_var_type_list(12) = iLookVarType%unknown
+    type(iLook_VarType) :: var_type_lookup
+
+    ! Get the indexes to match C++ offset starting at 0
+    var_type_lookup%scalarv = iLookVarType%scalarv - 1
+    var_type_lookup%wLength = iLookVarType%wLength - 1
+    var_type_lookup%midSnow = iLookVarType%midSnow - 1
+    var_type_lookup%midSoil = iLookVarType%midSoil - 1
+    var_type_lookup%midToto = iLookVarType%midToto - 1
+    var_type_lookup%ifcSnow = iLookVarType%ifcSnow - 1
+    var_type_lookup%ifcSoil = iLookVarType%ifcSoil - 1
+    var_type_lookup%ifcToto = iLookVarType%ifcToto - 1
+    var_type_lookup%parSoil = iLookVarType%parSoil - 1
+    var_type_lookup%routing = iLookVarType%routing - 1
+    var_type_lookup%outstat = iLookVarType%outstat - 1
+    var_type_lookup%unknown = iLookVarType%unknown - 1
+
+    ! check the values
+    ! print*, "************FORTRAN************"
+    ! print*, "iLookVarType%scalarv", iLookVarType%scalarv
+    ! print*, "iLookVarType%wLength", iLookVarType%wLength
+    ! print*, "iLookVarType%midSnow", iLookVarType%midSnow
+    ! print*, "iLookVarType%midSoil", iLookVarType%midSoil
+    ! print*, "iLookVarType%midToto", iLookVarType%midToto
+    ! print*, "iLookVarType%ifcSnow", iLookVarType%ifcSnow
+    ! print*, "iLookVarType%ifcSoil", iLookVarType%ifcSoil
+    ! print*, "iLookVarType%ifcToto", iLookVarType%ifcToto
+    ! print*, "iLookVarType%parSoil", iLookVarType%parSoil
+    ! print*, "iLookVarType%routing", iLookVarType%routing
+    ! print*, "iLookVarType%outstat", iLookVarType%outstat
+    ! print*, "iLookVarType%unknown", iLookVarType%unknown
+    ! print*, "************FORTRAN************"
+
 
 end subroutine
-subroutine fillVarTypeLists(num_var_types, &
-                            num_bpar_vars, &
+subroutine fillVarTypeLists(num_bpar_vars, &
                             num_bvar_vars, &
-                            i_look_var_type_list, &
                             bpar_struct_var_type_list, &
-                            bvar_struct_var_type_list) bind(C, name="fillVarTypeLists")
+                            bvar_struct_var_type_list, &
+                            err) bind(C, name="fillVarTypeLists")
     
     USE globalData,only:type_meta,bpar_meta,bvar_meta
     USE var_lookup,only:iLookBVAR,iLookBPAR,iLookVarType
     implicit none
-    integer(c_int), intent(in)                              :: num_var_types
     integer(c_int), intent(in)                              :: num_bpar_vars
     integer(c_int), intent(in)                              :: num_bvar_vars
-    integer(c_int), intent(out), dimension(num_var_types)   :: i_look_var_type_list   
     integer(c_int), intent(out), dimension(num_bpar_vars)   :: bpar_struct_var_type_list
     integer(c_int), intent(out), dimension(num_bvar_vars)   :: bvar_struct_var_type_list
-
-    integer(i4b)                                            :: i
-
-    i_look_var_type_list(1) = iLookVarType%scalarv 
-    i_look_var_type_list(2) = iLookVarType%wLength
-    i_look_var_type_list(3) = iLookVarType%midSnow
-    i_look_var_type_list(4) = iLookVarType%midSoil
-    i_look_var_type_list(5) = iLookVarType%midToto
-    i_look_var_type_list(6) = iLookVarType%ifcSnow
-    i_look_var_type_list(7) = iLookVarType%ifcSoil
-    i_look_var_type_list(8) = iLookVarType%ifcToto
-    i_look_var_type_list(9) = iLookVarType%parSoil
-    i_look_var_type_list(10) = iLookVarType%routing
-    i_look_var_type_list(11) = iLookVarType%outstat
-    i_look_var_type_list(12) = iLookVarType%unknown
-
-    do i = 1, num_var_types
-       print*, "iLookVarType = ", i_look_var_type_list(i)
+    integer(c_int), intent(out)                             :: err  
+    integer(i4b)                                            :: iVar
+
+
+    ! Get the types of the variables for bparStruct
+    ! Index in bpar_struct_var_type_list will match bpar_Struct
+    do iVar=1, num_bpar_vars
+        select case(bpar_meta(iVar)%vartype)
+            case(iLookVarType%scalarv); bpar_struct_var_type_list(iVar) = iLookVarType%scalarv - 1
+            case(iLookVarType%wLength); bpar_struct_var_type_list(iVar) = iLookVarType%wLength - 1
+            case(iLookVarType%midSnow); bpar_struct_var_type_list(iVar) = iLookVarType%midSnow - 1
+            case(iLookVarType%midSoil); bpar_struct_var_type_list(iVar) = iLookVarType%midSoil - 1
+            case(iLookVarType%midToto); bpar_struct_var_type_list(iVar) = iLookVarType%midToto - 1
+            case(iLookVarType%ifcSnow); bpar_struct_var_type_list(iVar) = iLookVarType%ifcSnow - 1
+            case(iLookVarType%ifcSoil); bpar_struct_var_type_list(iVar) = iLookVarType%ifcSoil - 1
+            case(iLookVarType%ifcToto); bpar_struct_var_type_list(iVar) = iLookVarType%ifcToto - 1
+            case(iLookVarType%parSoil); bpar_struct_var_type_list(iVar) = iLookVarType%parSoil - 1
+            case(iLookVarType%routing); bpar_struct_var_type_list(iVar) = iLookVarType%routing - 1
+            case(iLookVarType%outstat); bpar_struct_var_type_list(iVar) = iLookVarType%outstat - 1
+            case(iLookVarType%unknown); bpar_struct_var_type_list(iVar) = iLookVarType%unknown - 1
+            case default
+                err = 40;
+                return
+        end select
     end do
 
-    do i = 1, num_bpar_vars
-        bpar_struct_var_type_list(i) = bpar_meta(i)%varType
+    do iVar=1, num_bvar_vars
+        select case(bvar_meta(iVar)%vartype)
+            case(iLookVarType%scalarv); bvar_struct_var_type_list(iVar) = iLookVarType%scalarv - 1
+            case(iLookVarType%wLength); bvar_struct_var_type_list(iVar) = iLookVarType%wLength - 1
+            case(iLookVarType%midSnow); bvar_struct_var_type_list(iVar) = iLookVarType%midSnow - 1
+            case(iLookVarType%midSoil); bvar_struct_var_type_list(iVar) = iLookVarType%midSoil - 1
+            case(iLookVarType%midToto); bvar_struct_var_type_list(iVar) = iLookVarType%midToto - 1
+            case(iLookVarType%ifcSnow); bvar_struct_var_type_list(iVar) = iLookVarType%ifcSnow - 1
+            case(iLookVarType%ifcSoil); bvar_struct_var_type_list(iVar) = iLookVarType%ifcSoil - 1
+            case(iLookVarType%ifcToto); bvar_struct_var_type_list(iVar) = iLookVarType%ifcToto - 1
+            case(iLookVarType%parSoil); bvar_struct_var_type_list(iVar) = iLookVarType%parSoil - 1
+            case(iLookVarType%routing); bvar_struct_var_type_list(iVar) = iLookVarType%routing - 1
+            case(iLookVarType%outstat); bvar_struct_var_type_list(iVar) = iLookVarType%outstat - 1
+            case(iLookVarType%unknown); bvar_struct_var_type_list(iVar) = iLookVarType%unknown - 1
+            case default
+                err = 40;
+                return
+        end select
     end do
-
-    do i = 1, num_bvar_vars
-        bvar_struct_var_type_list(i) = bvar_meta(i)%varType
-    end do
-
-
-
-
-
-
 end subroutine fillVarTypeLists
 
 
diff --git a/build/source/actors/job_actor/job_actor.cpp b/build/source/actors/job_actor/job_actor.cpp
index 11e5b6dec8dfac2aa400fb7f1054759e6e55006a..bd91bfa234b26ae55bce386e8062f47e7a81e7fd 100644
--- a/build/source/actors/job_actor/job_actor.cpp
+++ b/build/source/actors/job_actor/job_actor.cpp
@@ -167,11 +167,17 @@ behavior job_actor(stateful_actor<job_state>* self, int start_gru, int num_gru,
 
         [=](done_file_access_actor_init) {
             // Init GRU Actors and the Output Structure
-            self->send(self, init_hru_v);
-            // auto gru = self->spawn(gru_actor, 1, 1, 
-            //     self->state.config_path,
-            //     self->state.output_struct_size, self);
-            // self->send(gru, init_gru_v);
+            // self->send(self, init_hru_v);
+            auto gru = self->spawn(gru_actor, 1, 1, 
+                self->state.config_path,
+                self->state.output_struct_size, self);
+            self->send(gru, init_gru_v);
+        },
+
+        [=](done_init_gru) {
+            aout(self) << "GRU is Initialized\n";
+            self->quit();
+            return;
         },
 
         [=](file_access_actor_done, double read_duration, double write_duration) {
diff --git a/build/source/dshare/var_lookup.f90 b/build/source/dshare/var_lookup.f90
index b1ae8c0ad725c0c80862e549b26dc1e118ac482d..9ae9d716b2e56839fc74e859bae0e6b5298e98b8 100755
--- a/build/source/dshare/var_lookup.f90
+++ b/build/source/dshare/var_lookup.f90
@@ -20,6 +20,7 @@
 
 MODULE var_lookup
  ! defines named variables used to index array elements
+ USE, intrinsic :: iso_c_binding
  USE nrtype, integerMissing=>nr_integerMissing
  implicit none
  private
@@ -719,19 +720,19 @@ MODULE var_lookup
  ! (13) structure for looking up the type of a model variable (this is only needed for backward
  ! compatability, and should be removed eventually)
  ! ***********************************************************************************************************
- type, public :: iLook_varType
-  integer(i4b)    :: scalarv   = integerMissing ! scalar variables
-  integer(i4b)    :: wLength   = integerMissing ! # spectral bands
-  integer(i4b)    :: midSnow   = integerMissing ! mid-layer snow variables
-  integer(i4b)    :: midSoil   = integerMissing ! mid-layer soil variables
-  integer(i4b)    :: midToto   = integerMissing ! mid-layer, both snow and soil
-  integer(i4b)    :: ifcSnow   = integerMissing ! interface snow variables
-  integer(i4b)    :: ifcSoil   = integerMissing ! interface soil variables
-  integer(i4b)    :: ifcToto   = integerMissing ! interface, snow and soil
-  integer(i4b)    :: parSoil   = integerMissing ! soil depth
-  integer(i4b)    :: routing   = integerMissing ! routing variables
-  integer(i4b)    :: outstat   = integerMissing ! output statistic
-  integer(i4b)    :: unknown   = integerMissing ! cath-cal alternative type
+ type, public, bind(C) :: iLook_varType
+  integer(c_int)    :: scalarv   = integerMissing ! scalar variables
+  integer(c_int)    :: wLength   = integerMissing ! # spectral bands
+  integer(c_int)    :: midSnow   = integerMissing ! mid-layer snow variables
+  integer(c_int)    :: midSoil   = integerMissing ! mid-layer soil variables
+  integer(c_int)    :: midToto   = integerMissing ! mid-layer, both snow and soil
+  integer(c_int)    :: ifcSnow   = integerMissing ! interface snow variables
+  integer(c_int)    :: ifcSoil   = integerMissing ! interface soil variables
+  integer(c_int)    :: ifcToto   = integerMissing ! interface, snow and soil
+  integer(c_int)    :: parSoil   = integerMissing ! soil depth
+  integer(c_int)    :: routing   = integerMissing ! routing variables
+  integer(c_int)    :: outstat   = integerMissing ! output statistic
+  integer(c_int)    :: unknown   = integerMissing ! cath-cal alternative type
  endtype iLook_varType
 
  ! ***********************************************************************************************************
diff --git a/build/source/hookup/summaActors_FileManager.f90 b/build/source/hookup/summaActors_FileManager.f90
index 8183fc79adbc63916529280bd10fb50c2c372fd8..f21f47635ec507cbaf9c7d0d561ecbd8a4d7d093 100755
--- a/build/source/hookup/summaActors_FileManager.f90
+++ b/build/source/hookup/summaActors_FileManager.f90
@@ -102,7 +102,12 @@ subroutine summa_SetTimesDirsAndFiles(file_manager,err) bind(C, name="setTimesDi
 
   ! open file, read non-comment lines, close file
   call file_open(trim(summaFileManagerIn),unt,err,cmessage)
-  if(err/=0) then; message=trim(message)//trim(cmessage)//"/Failed to open control file [''"//trim(summaFileManagerIn)//"']"; err=-10; return; end if
+  if(err/=0) then 
+    message=trim(message)//trim(cmessage)//"/Failed to open control file [''"//trim(summaFileManagerIn)//"']"
+    print*, message
+    err=-10 
+    return 
+  end if
   call get_vlines(unt,charline,err,cmessage)  ! 'charline' is a list of strings from non-comment lines
   if(err/=0) then; message=trim(message)//trim(cmessage)//"/Control file read issue in get_vlines()"; return; end if
   close(unt)