diff --git a/build/includes/file_access_actor/file_access_actor.hpp b/build/includes/file_access_actor/file_access_actor.hpp
index 5deecd1cc1decca43641456ba31f443eaeddf968..200532b38bf07e7a32dba414bec76648f0d489d9 100644
--- a/build/includes/file_access_actor/file_access_actor.hpp
+++ b/build/includes/file_access_actor/file_access_actor.hpp
@@ -40,7 +40,10 @@ struct file_access_state {
     std::vector<std::vector<double>> dpar_arrays_for_hrus;
     int dpar_array_size;
     int bpar_array_size;
+    int type_array_size;
     bool param_file_exists;
+    int num_var_in_param_file;
+    int param_ncid;
 
 
      // Timing Variables
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 1df3e82af33a01c8b55981b7330db3a912d8f832..134f00dfb86cf899f5f951cb6d5ed7d15992546b 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
@@ -72,7 +72,7 @@ extern "C" {
   void openParamFile(int* param_ncid, bool* param_file_exists, int* err);
   void getNumVarParam(int* param_ncid, int* num_var_param, int* err);
   void closeParamFile(int* param_ncid, int* err);
-  void getParamSizes(int* dpar_array_size, int* bpar_array_size);
+  void getParamSizes(int* dpar_array_size, int* bpar_array_size, int* type_array_size);
 
   void overwriteParam(int* index_gru, int* index_hru, int* num_var_attr,
     void* type_array, void* dpar_array, void* handle_mpar_struct, void* bpar_array,
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 e8bfca78606759ee43e0de893f2fd90350a913a4..5f56b7d5d347f42826a7c456ee4eee7f6d6ef8a3 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
@@ -133,9 +133,17 @@ behavior file_access_actor(stateful_actor<file_access_state>* self, int start_gr
             std::vector<double> attr_array_to_send = self->state.attr_arrays_for_hrus[ref_gru-1];
             std::vector<int> type_array_to_send = self->state.type_arrays_for_hrus[ref_gru-1];
             std::vector<long int> id_array_to_send = self->state.id_arrays_for_hrus[ref_gru-1];
+            std::vector<double> bpar_array_to_send = self->state.bpar_arrays_for_hrus[ref_gru-1];
+            std::vector<double> dpar_array_to_send = self->state.dpar_arrays_for_hrus[ref_gru-1];
+
+            void* handle_mpar_struct = self->state.mpar_structs_for_hrus[ref_gru-1];
+
+            std::vector<std::vector<double>> mpar_array_to_send = get_var_dlength(handle_mpar_struct);
+
 
             self->send(actor_to_respond, get_attributes_v, attr_array_to_send,
-                type_array_to_send, id_array_to_send);
+                type_array_to_send, id_array_to_send, bpar_array_to_send, 
+                dpar_array_to_send, mpar_array_to_send);
             
         },
 
@@ -220,8 +228,7 @@ behavior file_access_actor(stateful_actor<file_access_state>* self, int start_gr
                 &err);
             
             self->state.file_access_timing.updateEndPoint("write_duration");
-            
-
+        
         },
 
         [=](write_output, int indxGRU, int indxHRU, int numStepsToWrite,
@@ -332,36 +339,10 @@ void initalizeFileAccessActor(stateful_actor<file_access_state>* self) {
         return;
     }
 
-    // Initalize the output Structure
-    aout(self) << "Initalizing Output Structure" << std::endl;
-    Init_OutputStruct(self->state.handle_forcing_file_info, &self->state.outputStrucSize, 
-        &self->state.num_gru, &self->state.err);
-
-    // Read in the attribute information for the HRUs to request
+    // Read in the attribute and parameter information for the HRUs to request
     readAttributes(self);
-
     readParameters(self);
 
-    // Noah-MP table information
-    // overwriteParam(&self->state.num_gru, &err);
-    // if (err != 0) {
-    //     aout(self) << "ERROR: FILE_ACCESS_ACTOR overwriteParam() \n";
-    //     std::string function = "overwriteParam";
-    //     self->send(self->state.parent, file_access_actor_err_v, function);
-    //     self->quit();
-    //     return;
-    // }
-
-    // Read in all of the parmeters for the number of GRUs in the run Domain
-    // readParamFileAccessActor(&self->state.start_gru, &self->state.num_gru, &err);
-    // if (err != 0) {
-    //     aout(self) <<  "ERROR: FILE_ACCESS_ACTOR readParamFileAccessActor() \n";
-    //     std::string function = "readParamFileAccessActor";
-    //     self->send(self->state.parent, file_access_actor_err_v, function);
-    //     self->quit();
-    //     return;
-    // }
-
     // Initalize the output manager  
     self->state.output_manager = new OutputManager(self->state.num_vectors_in_output_manager, self->state.num_gru);
     
@@ -434,8 +415,21 @@ void readAttributes(stateful_actor<file_access_state>* self) {
 void readParameters(stateful_actor<file_access_state>* self) {
     int err = 0;
     int index_hru = 1;
-    getParamSizes(&self->state.dpar_array_size, &self->state.bpar_array_size);
-    // openParamFile();
+
+    openParamFile(&self->state.param_ncid, &self->state.param_file_exists, 
+        &err);
+
+    getParamSizes(&self->state.dpar_array_size, &self->state.bpar_array_size,
+        &self->state.type_array_size);
+    
+
+    if (self->state.param_file_exists) {
+        getNumVarParam(&self->state.param_ncid, &self->state.num_var_in_param_file,
+            &err);
+    } else {
+        self->state.num_var_in_param_file = self->state.type_array_size;
+    }
+
     for (int index_gru = 1; index_gru < self->state.num_gru + 1; index_gru++) {
 
         std::vector<double> dpar_array(self->state.dpar_array_size);
@@ -443,18 +437,22 @@ void readParameters(stateful_actor<file_access_state>* self) {
         std::vector<double> bpar_array(self->state.dpar_array_size);        
 
 
-        overwriteParam(&index_gru, &index_hru, &self->state.num_var_in_attributes_file, 
+        overwriteParam(&index_gru, &index_hru, &self->state.num_var_in_param_file, 
             &self->state.attr_arrays_for_hrus[index_gru-1][0],
             &dpar_array[0], handle_mpar_struct, &bpar_array[0], &err);
 
-
-        // readParamFromNetCDF();
+        if (self->state.param_file_exists) {
+            readParamFromNetCDF(&self->state.param_ncid, &index_gru, &index_hru,
+                &self->state.start_gru, &self->state.num_var_in_param_file, 
+                &self->state.bpar_array_size, handle_mpar_struct, &bpar_array[0],
+                &err);
+        }
 
         self->state.dpar_arrays_for_hrus.push_back(dpar_array);
         self->state.mpar_structs_for_hrus.push_back(handle_mpar_struct);
         self->state.bpar_arrays_for_hrus.push_back(bpar_array);
     }
-    // closeParamFile();
+    closeParamFile(&self->state.param_ncid, &err);
 
 }
 
diff --git a/build/source/actors/file_access_actor/fortran_code/read_param.f90 b/build/source/actors/file_access_actor/fortran_code/read_param.f90
index a56efe304aefd3e63ab12285baf67cd192370c47..eaaca2603c231112f83ab4207481ee63a834f83a 100644
--- a/build/source/actors/file_access_actor/fortran_code/read_param.f90
+++ b/build/source/actors/file_access_actor/fortran_code/read_param.f90
@@ -94,17 +94,20 @@ subroutine closeParamFile(param_ncid, err) bind(C, name="closeParamFile")
 end subroutine closeParamFile
 
 ! get the sizes of the arrays for dpar_array bpar_array
-subroutine getParamSizes(dpar_array_size, bpar_array_size) bind(C, name="getParamSizes")
+subroutine getParamSizes(dpar_array_size, bpar_array_size, type_array_size) bind(C, name="getParamSizes")
   USE var_lookup,only:maxvarMpar      ! model parameters: maximum number variables
   USE var_lookup,only:maxvarBpar      ! model parameters: maximum number variables
+  USE var_lookup,only:maxvarType
 
   implicit none
   integer(c_int),intent(out)    :: dpar_array_size
   integer(c_int),intent(out)    :: bpar_array_size
+  integer(c_int),intent(out)    :: type_array_size
 
 
   dpar_array_size = maxvarMpar
   bpar_array_size = maxvarBpar
+  type_array_size = maxvarType
 
 
 end subroutine getParamSizes
diff --git a/build/source/actors/hru_actor/hru_actor.cpp b/build/source/actors/hru_actor/hru_actor.cpp
index 879daf5b1990a83981bfd6b8ed37359ca185f40f..e8a4fa0d35f73537c579ac310dad8f0f3d062c08 100644
--- a/build/source/actors/hru_actor/hru_actor.cpp
+++ b/build/source/actors/hru_actor/hru_actor.cpp
@@ -77,7 +77,8 @@ behavior hru_actor(stateful_actor<hru_state>* self, int refGRU, int indxGRU,
     return {
         // Starts the HRU and tells it to ask for data from the file_access_actor
         [=](get_attributes, std::vector<double> attr_array, std::vector<int> type_array, 
-            std::vector<long int> id_array) {
+            std::vector<long int> id_array, std::vector<double> bpar_array, 
+            std::vector<double> dpar_array, std::vector<std::vector<double>> mpar_array) {
             
             aout(self) << "Received Attribute Information \n";