diff --git a/build/includes/hru_actor/hru_actor_subroutine_wrappers.hpp b/build/includes/hru_actor/hru_actor_subroutine_wrappers.hpp
index cee5ba4cc3810f0a373421db1a163dbdf9fb0288..b5ce7cefe9447ffa13e000ee478a496d2c54bc14 100644
--- a/build/includes/hru_actor/hru_actor_subroutine_wrappers.hpp
+++ b/build/includes/hru_actor/hru_actor_subroutine_wrappers.hpp
@@ -7,11 +7,13 @@ extern "C" {
             // Statistics Structures
             void* forcStat, void* progStat, void* diagStat, void* fluxStat, void* indxStat, void* bvarStat,
             // Primary Data Structures (scalars) 
-            void* timeStruct, void* forcStruct,
+            void* timeStruct, void* forcStruct, void* attrStruct, void* typeStruct, void* idStruct,
             // primary data structures (variable length vectors)
-            void* indxStruct, void* progStruct, void* diagStruct, void* fluxStruct,
+            void* indxStruct, void* mparStruct, void* progStruct, void* diagStruct, void* fluxStruct,
             // basin-average structures
-            void* bvarStruct,
+            void* bvarStruct, void* bparStruct,
+            // ancillary data structures
+            void* dparStruct,
             // local HRU data 
             void* startTime, void* finshTime, void* refTime, void* oldTime, int* err);
 
diff --git a/build/source/actors/file_access_actor/cpp_code/file_access_actor.cpp b/build/source/actors/file_access_actor/cpp_code/file_access_actor.cpp
index 2284a8a48459beb114324b136eee2757f191fe3b..aa9da25fd1e5cf011b6a6c6efad324e056633b22 100644
--- a/build/source/actors/file_access_actor/cpp_code/file_access_actor.cpp
+++ b/build/source/actors/file_access_actor/cpp_code/file_access_actor.cpp
@@ -45,8 +45,8 @@ behavior file_access_actor(stateful_actor<file_access_state>* self, int start_gr
     aout(self) << "Simluations Steps: " << self->state.num_steps << "\n";
 
     // Read in the attribute and parameter information for the HRUs to request
-    readAttributes(self);
-    readParameters(self);
+    // readAttributes(self);
+    // readParameters(self);
 
     // read in the inital conditions for the grus/hrus
     readInitConditions(self);
diff --git a/build/source/actors/file_access_actor/fortran_code/cppwrap_fileAccess.f90 b/build/source/actors/file_access_actor/fortran_code/cppwrap_fileAccess.f90
index ac0b842092de90aa9c27f75f1b8dd433a96413d0..d3707ab2575e9c3fff80ec26c255fdd25d905d07 100644
--- a/build/source/actors/file_access_actor/fortran_code/cppwrap_fileAccess.f90
+++ b/build/source/actors/file_access_actor/fortran_code/cppwrap_fileAccess.f90
@@ -6,6 +6,9 @@ module cppwrap_fileAccess
   USE nrtype
   USE data_types
   USE globalData
+  USE globalData,only:integerMissing      ! missing integer value
+  USE globalData,only:realMissing         ! missing double precision value
+
   USE var_lookup,only:maxvarFreq                ! maximum number of output files
 
 
@@ -36,17 +39,29 @@ subroutine fileAccessActor_init_fortran(& ! Variables for forcing
   USE def_output_actors_module,only:def_output                ! module to define output variables
   USE output_structure_module,only:initOutputStructure        ! module to initialize output structure
   USE output_structure_module,only:initOutputTimeStep         ! module to initialize output timestep structure (tracks GRUs timestep for output)
-
+  USE read_attrb_module,only:read_attrb                       ! module to read local attributes
+  USE read_param_module,only:read_param                       ! module to read model parameter sets
+  USE pOverwrite_module,only:pOverwrite                       ! module to overwrite default parameter values with info from the Noah tables
+  
+  USE mDecisions_module,only:&
+                              sameRulesAllLayers, & ! SNTHERM option: same combination/sub-dividion rules applied to all layers
+                              rulesDependLayerIndex ! CLM option: combination/sub-dividion rules depend on layer index
   USE globalData,only:localParFallback                        ! local column default parameters
   USE globalData,only:basinParFallback                        ! basin-average default parameters
   USE summaFileManager,only:LOCALPARAM_INFO,BASINPARAM_INFO   ! files defining the default values and constraints for model parameters
   USE globalData,only:mpar_meta,bpar_meta                     ! parameter metadata structures
   USE summaFileManager,only:SETTINGS_PATH                     ! define path to settings files (e.g., parameters, soil and veg. tables)
+  USE summaFileManager,only:LOCAL_ATTRIBUTES                  ! name of model initial attributes file
   USE summaFileManager,only:GENPARM,VEGPARM,SOILPARM,MPTABLE  ! files defining the noah tables
   USE globalData,only:model_decisions                         ! model decision structure
   USE var_lookup,only:iLookDECISIONS                          ! look-up values for model decisions
-
+  USE var_lookup,only:iLookTYPE                               ! look-up values for model types
+  USE output_structure_module,only:outputStructure            ! output structure
   USE globalData,only:failedHRUs                              ! Flag for file access actor to know which GRUs have failed
+  
+  USE globalData,only:iRunModeFull,iRunModeGRU,iRunModeHRU
+  USE globalData,only:iRunMode                                ! define the current running mode
+  USE globalData,only:checkHRU                                ! index of the HRU for a single HRU run
 
 
   USE globalData,only:numtim                 ! number of time steps in the simulation
@@ -67,9 +82,14 @@ subroutine fileAccessActor_init_fortran(& ! Variables for forcing
 
   ! local Variables
   type(file_info_array),pointer          :: forcFileInfo
-  type(var_i),pointer                    :: output_ncid                        ! id of output file
+  type(var_i),pointer                    :: output_ncid        ! id of output file
+  integer(i4b)                           :: iGRU               ! counter for GRUs
+  integer(i4b)                           :: iHRU               ! counter for HRUs
+  integer(i4b)                           :: ivar               ! counter for variables
+  character(len=256)                     :: attrFile           ! attributes file name
   integer(i4b)                           :: indxGRU=1
-  character(len=256)                     :: message         ! error message for downwind routine
+  character(len=256)                     :: message            ! error message for downwind routine
+
 
   err=0; message="fileAccessActor_init_fortran/"
 
@@ -85,6 +105,16 @@ subroutine fileAccessActor_init_fortran(& ! Variables for forcing
   if(err/=0)then; print*,trim(message); return; endif
   num_timesteps = numtim
 
+    ! get the maximum number of snow layers
+  select case(model_decisions(iLookDECISIONS%snowLayers)%iDecision)
+    case(sameRulesAllLayers);    maxSnowLayers = 100
+    case(rulesDependLayerIndex); maxSnowLayers = 5
+    case default; err=20; message=trim(message)//'unable to identify option to combine/sub-divide snow layers';print*,message;return
+  end select ! (option to combine/sub-divide snow layers)
+
+
+  maxLayers = gru_struc(1)%hruInfo(1)%nSoil + maxSnowLayers
+
   ! *****************************************************************************
   ! *** read default model parameters
   ! *****************************************************************************
@@ -96,20 +126,37 @@ subroutine fileAccessActor_init_fortran(& ! Variables for forcing
   call read_pinit(BASINPARAM_INFO,.FALSE.,bpar_meta,basinParFallback,err,message)
   if(err/=0)then; print*,trim(message); return; endif
   
+  
+  ! *****************************************************************************
+  ! *** read Noah vegetation and soil tables
+  ! *****************************************************************************
 
- ! read Noah soil and vegetation tables
+  greenVegFrac_monthly = (/0.01_dp, 0.02_dp, 0.03_dp, 0.07_dp, 0.50_dp, 0.90_dp, 0.95_dp, 0.96_dp, 0.65_dp, 0.24_dp, 0.11_dp, 0.02_dp/)
+
+
+  ! read Noah soil and vegetation tables
   call soil_veg_gen_parm(trim(SETTINGS_PATH)//trim(VEGPARM),      & ! filename for vegetation table
-      trim(SETTINGS_PATH)//trim(SOILPARM),                        & ! filename for soils table
-      trim(SETTINGS_PATH)//trim(GENPARM),                         & ! filename for general table
-      trim(model_decisions(iLookDECISIONS%vegeParTbl)%cDecision), & ! classification system used for vegetation
-      trim(model_decisions(iLookDECISIONS%soilCatTbl)%cDecision))   ! classification system used for soils
+                         trim(SETTINGS_PATH)//trim(SOILPARM),                        & ! filename for soils table
+                         trim(SETTINGS_PATH)//trim(GENPARM),                         & ! filename for general table
+                         trim(model_decisions(iLookDECISIONS%vegeParTbl)%cDecision), & ! classification system used for vegetation
+                         trim(model_decisions(iLookDECISIONS%soilCatTbl)%cDecision))   ! classification system used for soils
   if(err/=0)then; print*,trim(message); return; endif
 
   ! read Noah-MP vegetation tables
   call read_mp_veg_parameters(trim(SETTINGS_PATH)//trim(MPTABLE),                       & ! filename for Noah-MP table
-       trim(model_decisions(iLookDECISIONS%vegeParTbl)%cDecision)) ! classification system used for vegetation
+                              trim(model_decisions(iLookDECISIONS%vegeParTbl)%cDecision)) ! classification system used for vegetation
   if(err/=0)then; print*,trim(message); return; endif
 
+    ! define urban vegetation category
+  select case(trim(model_decisions(iLookDECISIONS%vegeParTbl)%cDecision))
+    case('USGS');                     urbanVegCategory =    1
+    case('MODIFIED_IGBP_MODIS_NOAH'); urbanVegCategory =   13
+    case('plumberCABLE');             urbanVegCategory = -999
+    case('plumberCHTESSEL');          urbanVegCategory = -999
+    case('plumberSUMMA');             urbanVegCategory = -999
+    case default; message=trim(message)//'unable to identify vegetation category';print*,message;return
+  end select
+
   ! *****************************************************************************
   ! *** Initalize failed HRU tracker
   ! *****************************************************************************
@@ -136,6 +183,54 @@ subroutine fileAccessActor_init_fortran(& ! Variables for forcing
   call initOutputTimeStep(num_gru, err)
   if(err/=0)then; print*,trim(message); return; endif
 
+
+  ! *****************************************************************************
+  ! *** Read Attributes
+  ! *****************************************************************************
+
+  attrFile = trim(SETTINGS_PATH)//trim(LOCAL_ATTRIBUTES)
+  call read_attrb(trim(attrFile),num_gru,outputStructure(1)%attrStruct(1),&
+                  outputStructure(1)%typeStruct(1),outputStructure(1)%idStruct(1),err,message)
+  if(err/=0)then; print*,trim(message); return; endif
+
+
+  ! set default model parameters
+  do iGRU=1, num_gru
+    do iHRU=1, gru_struc(iGRU)%hruCount
+      ! set parmameters to their default value
+      outputStructure(1)%dparStruct(1)%gru(iGRU)%hru(iHRU)%var(:) = localParFallback(:)%default_val         ! x%hru(:)%var(:)
+
+      ! overwrite default model parameters with information from the Noah-MP tables
+      call pOverwrite(outputStructure(1)%typeStruct(1)%gru(iGRU)%hru(iHRU)%var(iLookTYPE%vegTypeIndex),  &  ! vegetation category
+                      outputStructure(1)%typeStruct(1)%gru(iGRU)%hru(iHRU)%var(iLookTYPE%soilTypeIndex), &  ! soil category
+                      outputStructure(1)%dparStruct(1)%gru(iGRU)%hru(iHRU)%var,                          &  ! default model parameters
+                      err,message)                                                   ! error control
+      if(err/=0)then; print*, trim(message); return; endif
+
+
+   ! copy over to the parameter structure
+   ! NOTE: constant for the dat(:) dimension (normally depth)
+      do ivar=1,size(localParFallback)
+        outputStructure(1)%mparStruct(1)%gru(iGRU)%hru(iHRU)%var(ivar)%dat(:) = outputStructure(1)%dparStruct(1)%gru(iGRU)%hru(iHRU)%var(ivar)
+      end do  ! looping through variables
+    
+    end do  ! looping through HRUs
+    
+    ! set default for basin-average parameters
+    outputStructure(1)%bparStruct(1)%gru(iGRU)%var(:) = basinParFallback(:)%default_val
+    
+  end do  ! looping through GRUs
+
+
+  ! *****************************************************************************
+  ! *** Read Parameters
+  ! *****************************************************************************
+  irunMode = iRunModeFull; checkHRU = integerMissing
+  call read_param(iRunMode,checkHRU,start_gru,num_hru,num_gru,outputStructure(1)%idStruct(1),&
+                  outputStructure(1)%mparStruct(1),outputStructure(1)%bparStruct(1),err,message)
+  if(err/=0)then; print*,trim(message); return; endif
+
+  
 end subroutine fileAccessActor_init_fortran
 
 
diff --git a/build/source/actors/file_access_actor/fortran_code/output_structure.f90 b/build/source/actors/file_access_actor/fortran_code/output_structure.f90
index b497bb59717ae80a6e3f542c11c72b41eced4af4..60a28ca3899cfa2bdcc9138ae73f3b3c10f6febf 100644
--- a/build/source/actors/file_access_actor/fortran_code/output_structure.f90
+++ b/build/source/actors/file_access_actor/fortran_code/output_structure.f90
@@ -71,7 +71,7 @@ module output_structure_module
     type(gru_hru_time_int),allocatable                :: timeStruct(:)                 ! x%gru(:)%hru(:)%var(:)%tim(:)     -- model time data
     type(gru_hru_time_double),allocatable             :: forcStruct(:)                 ! x%gru(:)%hru(:)%var(:)%tim(:)     -- model forcing data
     type(gru_hru_double),allocatable                  :: attrStruct(:)                 ! x%gru(:)%hru(:)%var(:)            -- local attributes for each HRU, DOES NOT CHANGE OVER TIMESTEPS
-    type(gru_hru_int),allocatable                     :: typeStruct(:)                 ! x%gru(:)%hru(:)%var(:)%tim(:)     -- local classification of soil veg etc. for each HRU, DOES NOT CHANGE OVER TIMESTEPS
+    type(gru_hru_int),allocatable                     :: typeStruct(:)                 ! x%gru(:)%hru(:)%var(:)            -- local classification of soil veg etc. for each HRU, DOES NOT CHANGE OVER TIMESTEPS
     type(gru_hru_int8),allocatable                    :: idStruct(:)                   ! x%gru(:)%hru(:)%var(:)
 
     ! define the primary data structures (variable length vectors)
@@ -95,7 +95,7 @@ module output_structure_module
   end type summa_output_type  
   
   
-  type(summa_output_type),allocatable,save,public :: outputStructure(:) ! summa_OutputStructure(iFile)%struc%var(:)%dat(nTimeSteps) 
+  type(summa_output_type),allocatable,save,public :: outputStructure(:) ! summa_OutputStructure(1)%struc%var(:)%dat(nTimeSteps) 
   
   contains
 
@@ -132,9 +132,11 @@ subroutine initOutputStructure(forcFileInfo, maxSteps, num_gru, err)
   USE globalData,only:statBvar_meta                           ! child metadata for stats
   USE globalData,only:gru_struc
   USE globalData,only:structInfo                              ! information on the data structures
-  USE multiconst,only:secprday               ! number of seconds in a day
+  USE multiconst,only:secprday                                ! number of seconds in a day
   USE data_types,only:file_info_array
-  USE var_lookup,only:maxvarFreq                ! maximum number of output files
+  USE var_lookup,only:maxvarFreq                              ! maximum number of output files
+
+  USE allocspace_module,only:allocGlobal                      ! module to allocate space for global data structures
   
   implicit none
   type(file_info_array),intent(in)      :: forcFileInfo
@@ -273,20 +275,14 @@ subroutine initOutputStructure(forcFileInfo, maxSteps, num_gru, err)
               call alloc_outputStruc(statForc_meta(:)%var_info,outputStructure(1)%forcStat(1)%gru(iGRU)%hru(iHRU), &
                                       nSteps=maxSteps,nSnow=nSnow,nSoil=nSoil,err=err,message=message);    ! model forcing data
             case('attr')
-              call alloc_outputStruc(attr_meta,outputStructure(1)%attrStruct(1)%gru(iGRU)%hru(iHRU), &
-                                      nSteps=maxSteps,nSnow=nSnow,nSoil=nSoil,err=err,message=message);    ! local attributes for each HRU
+              call allocGlobal(attr_meta, outputStructure(1)%attrStruct(1)%gru(iGRU)%hru(iHRU), err, message)
             case('type')
-              call alloc_outputStruc(type_meta,outputStructure(1)%typeStruct(1)%gru(iGRU)%hru(iHRU), &
-                                      nSteps=maxSteps,nSnow=nSnow,nSoil=nSoil,err=err,message=message);    ! classification of soil veg etc.
+              call allocGlobal(type_meta, outputStructure(1)%typeStruct(1), err, message)
             case('id'  )
-              call alloc_outputStruc(id_meta,outputStructure(1)%idStruct(1)%gru(iGRU)%hru(iHRU), &
-                                      nSteps=maxSteps,nSnow=nSnow,nSoil=nSoil,err=err,message=message);        ! local values of hru gru IDs
+              call allocGlobal(id_meta, outputStructure(1)%idStruct(1), err, message)
             case('mpar') ! model parameters
-              call alloc_outputStruc(mpar_meta,outputStructure(1)%mparStruct(1)%gru(iGRU)%hru(iHRU), &
-                                      nSteps=maxSteps,nSnow=nSnow,nSoil=nSoil,err=err,message=message); 
-
-              call alloc_outputStruc(mpar_meta, outputStructure(1)%dparStruct(1)%gru(iGRU)%hru(iHRU), &
-                                      nSteps=maxSteps,err=err,message=message)
+              call allocGlobal(mpar_meta,outputStructure(1)%mparStruct(1),err,message); 
+              call allocGlobal(mpar_meta,outputStructure(1)%dparStruct(1),err,message);
             case('indx')
               ! Structure
               call alloc_outputStruc(indx_meta,outputStructure(1)%indxStruct(1)%gru(iGRU)%hru(iHRU), &
@@ -316,8 +312,7 @@ subroutine initOutputStructure(forcFileInfo, maxSteps, num_gru, err)
               call alloc_outputStruc(statFlux_meta(:)%var_info,outputStructure(1)%fluxStat(1)%gru(iGRU)%hru(iHRU), &
                                       nSteps=maxSteps,nSnow=nSnow,nSoil=nSoil,err=err,message=message);    ! model fluxes
             case('bpar')
-              call alloc_outputStruc(bpar_meta,outputStructure(1)%bparStruct(1)%gru(iGRU), &
-                                      nSteps=maxSteps,nSnow=0,nSoil=0,err=err,message=message);  ! basin-average params 
+              call allocGlobal(bpar_meta,outputStructure(1)%bparStruct(1),err,message);  ! basin-average params 
             case('bvar')
               ! Structure
               call alloc_outputStruc(bvar_meta,outputStructure(1)%bvarStruct(1)%gru(iGRU)%hru(iHRU), &
diff --git a/build/source/actors/hru_actor/cpp_code/hru_actor.cpp b/build/source/actors/hru_actor/cpp_code/hru_actor.cpp
index 171f994f2e0a00805d6b2b1004b2f6ab063f24f0..757586beb5bb1470aacf93dc3dba4257ea91a923 100644
--- a/build/source/actors/hru_actor/cpp_code/hru_actor.cpp
+++ b/build/source/actors/hru_actor/cpp_code/hru_actor.cpp
@@ -41,12 +41,18 @@ behavior hru_actor(stateful_actor<hru_state>* self, int refGRU, int indxGRU,
             self->state.handle_indxStat, 
             self->state.handle_bvarStat, 
             self->state.handle_timeStruct, 
-            self->state.handle_forcStruct, 
+            self->state.handle_forcStruct,
+            self->state.handle_attrStruct,
+            self->state.handle_typeStruct,
+            self->state.handle_idStruct,
             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_dparStruct,
             self->state.handle_startTime, 
             self->state.handle_finshTime, 
             self->state.handle_refTime,
@@ -76,30 +82,34 @@ behavior hru_actor(stateful_actor<hru_state>* self, int refGRU, int indxGRU,
                   .await([=](int num_steps){
                     self->state.num_steps_until_write = num_steps;
                     self->state.output_structure_step_index = 1;
+                    Initialize_HRU(self);
+                    self->send(self, start_hru_v);
                   });
 
-    // Get the attributes and parameters for the HRU
-    self->request(self->state.file_access_actor,
-                  caf::infinite,
-                  get_attributes_params_v,
-                  self->state.indxGRU)
-                  .await([=](std::tuple<std::vector<double>,
-                                        std::vector<int>,
-                                        std::vector<long int>, 
-                                        std::vector<double>, 
-                                        std::vector<double>, 
-                                        std::vector<std::vector<double>>> attr_and_params) {
-                                int err = 0;
-                                set_var_d(std::get<0>(attr_and_params), self->state.handle_attrStruct);
-                                set_var_i(std::get<1>(attr_and_params), self->state.handle_typeStruct);
-                                set_var_i8(std::get<2>(attr_and_params), self->state.handle_idStruct);
-                                set_var_d(std::get<3>(attr_and_params), self->state.handle_bparStruct);
-                                set_var_d(std::get<4>(attr_and_params), self->state.handle_dparStruct);
-                                set_var_dlength(std::get<5>(attr_and_params), self->state.handle_mparStruct);
-
-                                Initialize_HRU(self);
-
-                                self->send(self, start_hru_v); });
+
+
+    // // Get the attributes and parameters for the HRU
+    // self->request(self->state.file_access_actor,
+    //               caf::infinite,
+    //               get_attributes_params_v,
+    //               self->state.indxGRU)
+    //               .await([=](std::tuple<std::vector<double>,
+    //                                     std::vector<int>,
+    //                                     std::vector<long int>, 
+    //                                     std::vector<double>, 
+    //                                     std::vector<double>, 
+    //                                     std::vector<std::vector<double>>> attr_and_params) {
+    //                             int err = 0;
+    //                             set_var_d(std::get<0>(attr_and_params), self->state.handle_attrStruct);
+    //                             set_var_i(std::get<1>(attr_and_params), self->state.handle_typeStruct);
+    //                             set_var_i8(std::get<2>(attr_and_params), self->state.handle_idStruct);
+    //                             set_var_d(std::get<3>(attr_and_params), self->state.handle_bparStruct);
+    //                             set_var_d(std::get<4>(attr_and_params), self->state.handle_dparStruct);
+    //                             set_var_dlength(std::get<5>(attr_and_params), self->state.handle_mparStruct);
+
+    //                             Initialize_HRU(self);
+
+    //                             self->send(self, start_hru_v); });
 
 
     return {
@@ -242,8 +252,8 @@ behavior hru_actor(stateful_actor<hru_state>* self, int refGRU, int indxGRU,
 
 void Initialize_HRU(stateful_actor<hru_state>* self) {
 
-    setupHRUParam(&self->state.indxHRU, 
-                  &self->state.indxGRU,
+    setupHRUParam(&self->state.indxGRU,
+                  &self->state.indxHRU, 
                   self->state.handle_attrStruct, 
                   self->state.handle_typeStruct, 
                   self->state.handle_idStruct,
diff --git a/build/source/actors/hru_actor/fortran_code/hru_init.f90 b/build/source/actors/hru_actor/fortran_code/hru_init.f90
index 09a63f8e1788f85c25dce3632a954cbe44276333..f8ac820e1d66f229bd2b2ecd5d3ccad8e4a2f00e 100755
--- a/build/source/actors/hru_actor/fortran_code/hru_init.f90
+++ b/build/source/actors/hru_actor/fortran_code/hru_init.f90
@@ -55,13 +55,20 @@ contains
                         ! primary data structures (scalars)
                         handle_timeStruct,  & !  model time data
                         handle_forcStruct,  & !  model forcing data
+                        handle_attrStruct,  & !  model attribute data
+                        handle_typeStruct,  & !  model type data
+                        handle_idStruct,    & !  model id data
                         ! primary data structures (variable length vectors)
                         handle_indxStruct,  & !  model indices
+                        handle_mparStruct,  & !  model parameters
                         handle_progStruct,  & !  model prognostic (state) variables
                         handle_diagStruct,  & !  model diagnostic variables
                         handle_fluxStruct,  & !  model fluxes
                         ! basin-average structures
+                        handle_bparStruct,  & !  basin-average variables
                         handle_bvarStruct,  & !  basin-average variables
+                        ! ancillary data structures
+                        handle_dparStruct,  & !  default model parameters
                         ! local HRU data structures
                         handle_startTime,   & ! start time for the model simulation
                         handle_finshTime,   & ! end time for the model simulation
@@ -108,14 +115,20 @@ contains
   ! primary data structures (scalars)
   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 !  model attribute data
+  type(c_ptr), intent(in), value             :: handle_typeStruct !  model type data
+  type(c_ptr), intent(in), value             :: handle_idStruct !  model id data
   ! primary data structures (variable length vectors)
   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(c_ptr), intent(in), value             :: handle_bparStruct !  basin-average variables
   type(c_ptr), intent(in), value             :: handle_bvarStruct !  basin-average variables
   ! ancillary data structures
+  type(c_ptr), intent(in), value             :: handle_dparStruct !  ancillary data structures 
   ! local hru data structures
   type(c_ptr), intent(in), value             :: handle_startTime  ! start time for the model simulation
   type(c_ptr), intent(in), value             :: handle_finshTime ! end time for the model simulation
@@ -125,23 +138,29 @@ contains
   ! ---------------------------------------------------------------------------------------
   ! * Fortran Variables For Conversion
   ! ---------------------------------------------------------------------------------------
-  type(zLookup),pointer                      :: lookupStruct               !  z(:)%var(:)%lookup(:) -- lookup tables
-  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(zLookup),pointer                      :: lookupStruct               ! z(:)%var(:)%lookup(:) -- lookup tables
+  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
   ! primary data structures (scalars)
-  type(var_i),pointer                        :: timeStruct                 !  model time data
-  type(var_d),pointer                        :: forcStruct                 !  model forcing data
+  type(var_i),pointer                        :: timeStruct                 ! model time data
+  type(var_d),pointer                        :: forcStruct                 ! model forcing data
+  type(var_d),pointer                        :: attrStruct                 ! model attribute data
+  type(var_i),pointer                        :: typeStruct                 ! model type data
+  type(var_i8),pointer                       :: idStruct                   ! model id data
   ! primary data structures (variable length vectors)
-  type(var_ilength),pointer                  :: indxStruct                 !  model indices
-  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_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
   ! basin-average structures
-  type(var_dlength),pointer                  :: bvarStruct                 !  basin-average variables
+  type(var_d),pointer                        :: bparStruct                 ! basin-average variables
+  type(var_dlength),pointer                  :: bvarStruct                 ! basin-average variables
+  type(var_d),pointer                        :: dparStruct                 ! default model parameters
   ! local HRU data structures
   type(var_i),pointer                        :: startTime_hru              ! start time for the model simulation
   type(var_i),pointer                        :: finishTime_hru             ! end time for the model simulation
@@ -165,11 +184,17 @@ contains
   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_idStruct,   idStruct)
   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_dparStruct, dparStruct)
   call c_f_pointer(handle_startTime,  startTime_hru)
   call c_f_pointer(handle_finshTime,  finishTime_hru)
   call c_f_pointer(handle_refTime,    refTime_hru)
@@ -221,17 +246,17 @@ contains
   do iStruct=1,size(structInfo)
   ! allocate space  
   select case(trim(structInfo(iStruct)%structName))    
-    case('time'); call allocLocal(time_meta,timeStruct,err=err,message=cmessage)     ! model forcing data
+    case('time'); call allocLocal(time_meta,timeStruct,err=err,message=cmessage)     ! model time data
     case('forc'); call allocLocal(forc_meta,forcStruct,nSnow,nSoil,err,cmessage);    ! model forcing data
-    case('attr'); cycle ! set by file_access_actor  
-    case('type'); cycle ! set by file_access_actor
-    case('id'  ); cycle ! set by file_access_actor   
-    case('mpar'); cycle ! set by file_access_actor  
+    case('attr'); call allocLocal(attr_meta,attrStruct,nSnow,nSoil,err,cmessage);    ! model attribute data
+    case('type'); call allocLocal(type_meta,typeStruct,nSnow,nSoil,err,cmessage);    ! model type data
+    case('id'  ); call allocLocal(id_meta,idStruct,nSnow,nSoil,err,cmessage);        ! model id data
+    case('mpar'); call allocLocal(mpar_meta,mparStruct,nSnow,nSoil,err,cmessage);    ! model parameters  
     case('indx'); call allocLocal(indx_meta,indxStruct,nSnow,nSoil,err,cmessage);    ! model variables
     case('prog'); call allocLocal(prog_meta,progStruct,nSnow,nSoil,err,cmessage);    ! model prognostic (state) variables
     case('diag'); call allocLocal(diag_meta,diagStruct,nSnow,nSoil,err,cmessage);    ! model diagnostic variables
     case('flux'); call allocLocal(flux_meta,fluxStruct,nSnow,nSoil,err,cmessage);    ! model fluxes
-    case('bpar'); cycle ! set by file_access_actor
+    case('bpar'); call allocLocal(bpar_meta,bparStruct,nSnow=0,nSoil=0,err=err,message=cmessage);  ! basin-average variables
     case('bvar'); call allocLocal(bvar_meta,bvarStruct,nSnow=0,nSoil=0,err=err,message=cmessage);  ! basin-average variables
     case('lookup'); cycle ! allocated in t2enthalpy.f90
     case('deriv'); cycle
@@ -245,6 +270,12 @@ contains
   endif
   end do  ! looping through data structures
 
+  ! allocate space for default model parameters
+	! NOTE: This is done here, rather than in the loop above, because dpar is not one of the "standard" data structures
+	call allocLocal(mpar_meta,dparStruct,nSnow,nSoil,err,cmessage);    ! default model parameters
+	if(err/=0)then; message=trim(message)//trim(cmessage)//' [problem allocating dparStruct]'; print*,message;return;endif
+	 
+
 
   ! *****************************************************************************
   ! *** allocate space for output statistics data structures
diff --git a/build/source/actors/hru_actor/fortran_code/hru_setup.f90 b/build/source/actors/hru_actor/fortran_code/hru_setup.f90
index 323c4991b1ce6ef9ad6897fcc853e579a401dc96..efa37585bb610591c8a3afca2a57fee45e2acb96 100644
--- a/build/source/actors/hru_actor/fortran_code/hru_setup.f90
+++ b/build/source/actors/hru_actor/fortran_code/hru_setup.f90
@@ -49,9 +49,7 @@ USE globalData,only:urbanVegCategory                        ! vegetation categor
 USE globalData,only:mpar_meta,bpar_meta                     ! parameter metadata structures
 
 ! named variables to define the decisions for snow layers
-USE mDecisions_module,only:&
-  sameRulesAllLayers, & ! SNTHERM option: same combination/sub-dividion rules applied to all layers
-  rulesDependLayerIndex ! CLM option: combination/sub-dividion rules depend on layer index
+
 
 ! named variables to define LAI decisions
 USE mDecisions_module,only:&
@@ -89,10 +87,10 @@ subroutine setupHRUParam(&
   ! * desired modules
   ! ---------------------------------------------------------------------------------------
   USE nrtype                                                  ! variable types, etc.
+  USE output_structure_module,only:outputStructure
   ! subroutines and functions
   use time_utils_module,only:elapsedSec                       ! calculate the elapsed time
   USE mDecisions_module,only:mDecisions                       ! module to read model decisions
-  ! USE read_attrb_module,only:read_attrb               ! module to read local attributes
   USE paramCheck_module,only:paramCheck                       ! module to check consistency of model parameters
   USE pOverwrite_module,only:pOverwrite                       ! module to overwrite default parameter values with info from the Noah tables
   USE ConvE2Temp_module,only:E2T_lookup                       ! module to calculate a look-up table for the temperature-enthalpy conversion
@@ -169,34 +167,21 @@ subroutine setupHRUParam(&
   
   oldTime%var(:) = startTime%var(:)
 
-  ! get the maximum number of snow layers
-  select case(model_decisions(iLookDECISIONS%snowLayers)%iDecision)
-    case(sameRulesAllLayers);    maxSnowLayers = 100
-    case(rulesDependLayerIndex); maxSnowLayers = 5
-    case default; err=20; 
-        message=trim(message)//'unable to identify option to combine/sub-divide snow layers'
-        print*, message
-        return
-  end select ! (option to combine/sub-divide snow layers)
-
-  ! get the maximum number of layers
-  maxLayers = gru_struc(1)%hruInfo(1)%nSoil + maxSnowLayers
-
-  ! define monthly fraction of green vegetation
-  greenVegFrac_monthly = (/0.01_dp, 0.02_dp, 0.03_dp, 0.07_dp, 0.50_dp, 0.90_dp, 0.95_dp, 0.96_dp, 0.65_dp, 0.24_dp, 0.11_dp, 0.02_dp/)
-
-  ! define urban vegetation category
-  select case(trim(model_decisions(iLookDECISIONS%vegeParTbl)%cDecision))
-    case('USGS');                     urbanVegCategory =    1
-    case('MODIFIED_IGBP_MODIS_NOAH'); urbanVegCategory =   13
-    case('plumberCABLE');             urbanVegCategory = -999
-    case('plumberCHTESSEL');          urbanVegCategory = -999
-    case('plumberSUMMA');             urbanVegCategory = -999
-    case default
-      message=trim(message)//'unable to identify vegetation category'
-      print*, message
-      return
-  end select
+  ! Copy the attrStruct
+  attrStruct%var(:) = outputStructure(1)%attrStruct(1)%gru(indxGRU)%hru(indxHRU)%var(:)
+  ! Copy the typeStruct
+  typeStruct%var(:) = outputStructure(1)%typeStruct(1)%gru(indxGRU)%hru(indxHRU)%var(:)
+  ! Copy the idStruct
+  idStruct%var(:) = outputStructure(1)%idStruct(1)%gru(indxGRU)%hru(indxHRU)%var(:)
+
+  ! Copy the mparStruct
+  mparStruct%var(:) = outputStructure(1)%mparStruct(1)%gru(indxGRU)%hru(indxHRU)%var(:)
+  ! Copy the bparStruct
+  bparStruct%var(:) = outputStructure(1)%bparStruct(1)%gru(indxGRU)%var(:)
+  ! Copy the dparStruct
+  dparStruct%var(:) = outputStructure(1)%dparStruct(1)%gru(indxGRU)%hru(indxHRU)%var(:)
+
+
 
   ! *****************************************************************************
   ! *** compute derived model variables that are pretty much constant for the basin as a whole