diff --git a/build/includes/hru_actor/hru_actor.hpp b/build/includes/hru_actor/hru_actor.hpp
index 394304613cf16e57a594154542f1caa3708bd571..2f4c8d9b6bd3f01cb23826997be4750ffc2d82cb 100644
--- a/build/includes/hru_actor/hru_actor.hpp
+++ b/build/includes/hru_actor/hru_actor.hpp
@@ -82,22 +82,6 @@ struct hru_state {
     int         yearLength;
     int         err = 0;			            // error conotrol
 
-    std::chrono::time_point<std::chrono::system_clock> start;
-    std::chrono::time_point<std::chrono::system_clock> end;
-    double duration = 0.0;
-    std::chrono::time_point<std::chrono::system_clock> initStart;
-    std::chrono::time_point<std::chrono::system_clock> initEnd;
-    double initDuration = 0.0;
-    std::chrono::time_point<std::chrono::system_clock> forcingStart;
-    std::chrono::time_point<std::chrono::system_clock> forcingEnd;
-    double forcingDuration = 0.0;
-    std::chrono::time_point<std::chrono::system_clock> runPhysicsStart;
-    std::chrono::time_point<std::chrono::system_clock> runPhysicsEnd;
-    double runPhysicsDuration = 0.0;
-    std::chrono::time_point<std::chrono::system_clock> writeOutputStart;
-    std::chrono::time_point<std::chrono::system_clock> writeOutputEnd;
-    double writeOutputDuration = 0.0;
-
     TimingInfo hru_timing;
 
 };
diff --git a/build/includes/job_actor/job_actor.hpp b/build/includes/job_actor/job_actor.hpp
index c4095cb592b15bd69399c88f90e95585be4ce0c7..f4f8ef5fe1c1985e5ffe28637e4f00749e5334d3 100644
--- a/build/includes/job_actor/job_actor.hpp
+++ b/build/includes/job_actor/job_actor.hpp
@@ -2,6 +2,7 @@
 #include "caf/all.hpp"
 #include "caf/io/all.hpp"
 #include "GRUinfo.hpp"
+#include "timing_info.hpp"
 
 namespace caf {
 struct job_state {
@@ -27,9 +28,8 @@ struct job_state {
     int outputStrucSize;
 
     // Timing Variables
-    std::chrono::time_point<std::chrono::system_clock> start;
-    std::chrono::time_point<std::chrono::system_clock> end;
-    double duration;
+    TimingInfo job_timing;
+
     
     // Output File Names for Timings
     bool outputCSV;
diff --git a/build/source/actors/hru_actor/hru_actor.cpp b/build/source/actors/hru_actor/hru_actor.cpp
index da50ed0f2117cc1578aaf9305ea3d884babc9e5e..6a2ed14801c4a3fec802d7df1638cbb53c65d81f 100644
--- a/build/source/actors/hru_actor/hru_actor.cpp
+++ b/build/source/actors/hru_actor/hru_actor.cpp
@@ -20,12 +20,6 @@ behavior hru_actor(stateful_actor<hru_state>* self, int refGRU, int indxGRU,
     self->state.hru_timing.addTimePoint("run_physics_duration");
     self->state.hru_timing.addTimePoint("write_output_duration");
 
-
-
-    self->state.start = std::chrono::high_resolution_clock::now();
-    self->state.duration            = 0.0;
-    self->state.initDuration        = 0.0;
-
     // Actor References
     self->state.file_access_actor = file_access_actor;
     self->state.parent      = parent;
@@ -61,18 +55,12 @@ behavior hru_actor(stateful_actor<hru_state>* self, int refGRU, int indxGRU,
 
 
     Initialize_HRU(self);
-
-    self->state.end = std::chrono::high_resolution_clock::now();
-    self->state.duration += calculateTime(self->state.start, self->state.end);
-
     self->state.hru_timing.updateEndPoint("total_duration");
-
     self->send(self->state.parent, done_init_hru_v);
 
     return {
         // Starts the HRU and tells it to ask for data from the file_access_actor
         [=](start_hru) {
-            self->state.start = std::chrono::high_resolution_clock::now();
             self->state.hru_timing.updateStartPoint("total_duration");
 
             
@@ -90,47 +78,33 @@ behavior hru_actor(stateful_actor<hru_state>* self, int refGRU, int indxGRU,
             
             
             self->send(self->state.file_access_actor, access_forcing_v, self->state.iFile, self);
-            self->state.end = std::chrono::high_resolution_clock::now();
             self->state.hru_timing.updateEndPoint("total_duration");
-
-            self->state.duration += calculateTime(self->state.start, self->state.end);
         },
 
         [=](done_write) {
-            self->state.start = std::chrono::high_resolution_clock::now();
             self->state.hru_timing.updateStartPoint("total_duration");
 
             // We receive a done_write message so we ensure that
             // stepsInCurrentFFile remains unchanged
             if (self->state.timestep >= self->state.num_steps) {
-                
-                self->state.end = std::chrono::high_resolution_clock::now();
                 self->state.hru_timing.updateEndPoint("total_duration");
 
-                self->state.duration += calculateTime(self->state.start, self->state.end);
                 // Tell our parent we are done, convert all timings to seconds
-
-                self->state.duration = self->state.duration / 1000; // Convert to milliseconds
-                self->state.initDuration = self->state.initDuration / 1000; // Convert to milliseconds
-                self->state.forcingDuration = self->state.forcingDuration / 1000; // Convert to milliseconds
-                self->state.runPhysicsDuration = self->state.runPhysicsDuration / 1000; // Convert to milliseconds
-                self->state.writeOutputDuration = self->state.writeOutputDuration / 1000; // Convert to milliseconds
                 aout(self) << "\n________________PRINTING HRU TIMING INFO RESULTS________________\n";
-                aout(self) << "Total Duration = " << self->state.hru_timing.getDuration("total_duration").value_or(-1.0) << "\n";
-                aout(self) << "Init Duration = " << self->state.hru_timing.getDuration("init_duration").value_or(-1.0) << "\n";
-                aout(self) << "Forcing Duration = " << self->state.hru_timing.getDuration("forcing_duration").value_or(-1.0) << "\n";
-                aout(self) << "Run Physics Duration = " << self->state.hru_timing.getDuration("run_physics_duration").value_or(-1.0) << "\n";
-                aout(self) << "Write Output Duration = " << self->state.hru_timing.getDuration("write_output_duration").value_or(-1.0) << "\n";
-
+                aout(self) << "Total Duration = " << self->state.hru_timing.getDuration("total_duration").value_or(-1.0) << " Seconds\n";
+                aout(self) << "Init Duration = " << self->state.hru_timing.getDuration("init_duration").value_or(-1.0) << " Seconds\n";
+                aout(self) << "Forcing Duration = " << self->state.hru_timing.getDuration("forcing_duration").value_or(-1.0) << " Seconds\n";
+                aout(self) << "Run Physics Duration = " << self->state.hru_timing.getDuration("run_physics_duration").value_or(-1.0) << " Seconds\n";
+                aout(self) << "Write Output Duration = " << self->state.hru_timing.getDuration("write_output_duration").value_or(-1.0) << " Seconds\n\n";
 
                 self->send(self->state.parent, 
                     done_hru_v,
                     self->state.indxGRU, 
-                    self->state.duration / 1000,
-                    self->state.initDuration / 1000, 
-                    self->state.forcingDuration / 1000, 
-                    self->state.runPhysicsDuration / 1000, 
-                    self->state.writeOutputDuration / 1000);
+                    self->state.hru_timing.getDuration("total_duration").value_or(-1.0),
+                    self->state.hru_timing.getDuration("init_duration").value_or(-1.0), 
+                    self->state.hru_timing.getDuration("forcing_duration").value_or(-1.0), 
+                    self->state.hru_timing.getDuration("run_physics_duration").value_or(-1.0), 
+                    self->state.hru_timing.getDuration("write_output_duration").value_or(-1.0));
                 
                 deallocateHRUStructures(self);
 
@@ -138,16 +112,11 @@ behavior hru_actor(stateful_actor<hru_state>* self, int refGRU, int indxGRU,
                 return;
             }
 
-            self->state.end = std::chrono::high_resolution_clock::now();
             self->state.hru_timing.updateEndPoint("total_duration");
-            
-            self->state.duration += calculateTime(self->state.start, self->state.end);
-            
             self->send(self, run_hru_v, self->state.stepsInCurrentFFile);
         },
 
         [=](run_hru, int stepsInCurrentFFile) {
-            self->state.start = std::chrono::high_resolution_clock::now();
             self->state.hru_timing.updateStartPoint("total_duration");
 
             bool keepRunning = true;
@@ -163,19 +132,12 @@ behavior hru_actor(stateful_actor<hru_state>* self, int refGRU, int indxGRU,
                 self->state.outputStep += 1;
                 self->state.forcingStep += 1;
 
-                // if (self->state.timestep == 450 && self->state.indxGRU == 5) {
-                //     err = 20;
-                // }
-
                 keepRunning = check_HRU(self, err); // check if we are done, need to write
 
             }
      
-            self->state.end = std::chrono::high_resolution_clock::now();
             self->state.hru_timing.updateEndPoint("total_duration");
 
-            self->state.duration += calculateTime(self->state.start, self->state.end);
-
         },
 
         [=](dt_init_factor, int dt_init_factor) {
@@ -189,7 +151,6 @@ behavior hru_actor(stateful_actor<hru_state>* self, int refGRU, int indxGRU,
 }
 
 void Initialize_HRU(stateful_actor<hru_state>* self) {
-    self->state.initStart = std::chrono::high_resolution_clock::now();
     self->state.hru_timing.updateStartPoint("init_duration");
     
     // aout(self) << "Initalizing HRU" << std::endl;
@@ -266,18 +227,13 @@ void Initialize_HRU(stateful_actor<hru_state>* self) {
         return;
     }
             
-    // aout(self) << self->state.refGRU << " - Done Init" << std::endl;
-    self->state.initEnd = std::chrono::high_resolution_clock::now();
     self->state.hru_timing.updateEndPoint("init_duration");
-
-    self->state.initDuration = calculateTime(self->state.initStart, self->state.initEnd);
 }
 
 int Run_HRU(stateful_actor<hru_state>* self) {
     /**********************************************************************
     ** READ FORCING
     **********************************************************************/    
-    self->state.forcingStart = std::chrono::high_resolution_clock::now();
     self->state.hru_timing.updateStartPoint("forcing_duration");
 
     Forcing(&self->state.indxGRU,
@@ -297,12 +253,8 @@ int Run_HRU(stateful_actor<hru_state>* self) {
         return 10;
 
     }
-    self->state.forcingEnd = std::chrono::high_resolution_clock::now();
     self->state.hru_timing.updateEndPoint("forcing_duration");
 
-    self->state.forcingDuration += calculateTime(self->state.forcingStart, self->state.forcingEnd);
-
-
     if (self->state.printOutput && 
         self->state.timestep % self->state.outputFrequency == 0) {
         printOutput(self);
@@ -312,7 +264,6 @@ int Run_HRU(stateful_actor<hru_state>* self) {
     /**********************************************************************
     ** RUN_PHYSICS    
     **********************************************************************/    
-    self->state.runPhysicsStart = std::chrono::high_resolution_clock::now();
     self->state.hru_timing.updateStartPoint("run_physics_duration");
 
     self->state.err = 0;
@@ -341,14 +292,11 @@ int Run_HRU(stateful_actor<hru_state>* self) {
             " - Timestep = " << self->state.timestep << std::endl;
         return 20;
     }
-    self->state.runPhysicsEnd = std::chrono::high_resolution_clock::now();
     self->state.hru_timing.updateEndPoint("run_physics_duration");
-    self->state.runPhysicsDuration += calculateTime(self->state.runPhysicsStart, self->state.runPhysicsEnd);
 
     /**********************************************************************
     ** WRITE_OUTPUT  
     **********************************************************************/
-    self->state.writeOutputStart = std::chrono::high_resolution_clock::now();
     self->state.hru_timing.updateStartPoint("write_output_duration");
     WriteOutput(&self->state.indxHRU,
             &self->state.indxGRU,
@@ -384,9 +332,7 @@ int Run_HRU(stateful_actor<hru_state>* self) {
             " - Timestep = " << self->state.timestep << std::endl;
         return 30;
     }
-    self->state.writeOutputEnd = std::chrono::high_resolution_clock::now();
     self->state.hru_timing.updateEndPoint("write_output_duration");
-    self->state.writeOutputDuration += calculateTime(self->state.writeOutputStart, self->state.writeOutputEnd);
 
     return 0;      
 }
@@ -414,11 +360,8 @@ bool check_HRU(stateful_actor<hru_state>* self, int err) {
         self->send(self->state.file_access_actor, write_output_v, 
             self->state.indxGRU, self->state.indxHRU, self->state.outputStep, self);
 
-        self->state.end = std::chrono::high_resolution_clock::now();
         self->state.hru_timing.updateEndPoint("total_duration");
 
-        self->state.duration += calculateTime(self->state.start, self->state.end);
-
         return false;
 
     } else if (self->state.outputStep > self->state.outputStrucSize && 
@@ -512,8 +455,6 @@ void deallocateHRUStructures(stateful_actor<hru_state>* self) {
 
 void printOutput(stateful_actor<hru_state>* self) {
         aout(self) << self->state.refGRU << " - Timestep = " << self->state.timestep << std::endl;
-        aout(self) << self->state.refGRU << ":Accumulated Run Physics Time = " << 
-        self->state.runPhysicsDuration << std::endl;
 }
 
 }
\ No newline at end of file
diff --git a/build/source/actors/job_actor/job_actor.cpp b/build/source/actors/job_actor/job_actor.cpp
index a33240cde3b0fc707379e86148e7cb7585fb3ac1..f74baabc489ff9a9fa34ae4b0c3dc51ec9e857fb 100644
--- a/build/source/actors/job_actor/job_actor.cpp
+++ b/build/source/actors/job_actor/job_actor.cpp
@@ -20,7 +20,12 @@ namespace caf {
  */
 behavior job_actor(stateful_actor<job_state>* self, int startGRU, int numGRU, 
     std::string configPath, int outputStrucSize, caf::actor parent) {
-    self->state.start = std::chrono::high_resolution_clock::now();
+    // Timinig Information
+    self->state.job_timing = TimingInfo();
+    self->state.job_timing.addTimePoint("total_duration");
+    self->state.job_timing.updateStartPoint("total_duration");
+
+
     // Set Job Variables
     self->state.startGRU = startGRU;
     self->state.numGRU = numGRU;
@@ -28,6 +33,7 @@ behavior job_actor(stateful_actor<job_state>* self, int startGRU, int numGRU,
     self->state.parent = parent;
     self->state.outputStrucSize = outputStrucSize;
 
+    // Get All Settings
     self->state.fileManager = getSettings(self->state.configPath, "JobActor", "FileManagerPath", 
         self->state.fileManager).value_or("");
     self->state.outputCSV = getSettings(self->state.configPath, "JobActor", "outputCSV",
@@ -79,16 +85,16 @@ behavior job_actor(stateful_actor<job_state>* self, int startGRU, int numGRU,
             }
         },
 
-        [=](done_hru, int indxGRU, double totalDuration, double initDuration, 
-            double forcingDuration, double runPhysicsDuration, double writeOutputDuration) {
-            aout(self) << "GRU:" << self->state.GRUList[indxGRU - 1]->getRefGRU()
-                << "indxGRU = " << indxGRU << "Done \n";
+        [=](done_hru, int indx_gru, double total_duration, double init_duration, 
+            double forcing_duration, double run_physics_duration, double write_output_duration) {
+            aout(self) << "\nGRU:" << self->state.GRUList[indx_gru - 1]->getRefGRU()
+                << " - IndexInJob = " << indx_gru << " Done\n";
 
-            self->state.GRUList[indxGRU - 1]->doneRun(totalDuration, initDuration, forcingDuration,
-                runPhysicsDuration, writeOutputDuration);
+            self->state.GRUList[indx_gru - 1]->doneRun(total_duration, init_duration, forcing_duration,
+                run_physics_duration, write_output_duration);
             
             if (self->state.outputCSV) {
-                self->state.GRUList[indxGRU - 1]->writeSuccess(self->state.successOutputFile);            
+                self->state.GRUList[indx_gru - 1]->writeSuccess(self->state.successOutputFile);            
             }
             
             self->state.numGRUDone++;
@@ -146,15 +152,14 @@ behavior job_actor(stateful_actor<job_state>* self, int startGRU, int numGRU,
             self->state.GRUList.clear();
 
 
-            self->state.end = std::chrono::high_resolution_clock::now();
-            self->state.duration = calculateTime(self->state.start, self->state.end);
+            self->state.job_timing.updateEndPoint("total_duration");
 
-            self->state.duration = self->state.duration / 1000; // Convert to milliseconds
+            aout(self) << "\n________________PRINTING JOB_ACTOR TIMING INFO RESULTS________________\n";
+            aout(self) << "Total Duration = " << self->state.job_timing.getDuration("total_duration").value_or(-1.0) << " Seconds\n";
+            aout(self) << "Total Duration = " << self->state.job_timing.getDuration("total_duration").value_or(-1.0) / 60 << " Minutes\n";
+            aout(self) << "Total Duration = " << (self->state.job_timing.getDuration("total_duration").value_or(-1.0) / 60) / 60 << " Hours\n\n";
+            
 
-            aout(self) << "\nTotal Job Duration:\n";
-            aout(self) << "     " << self->state.duration / 1000  << " Seconds\n";
-            aout(self) << "     " << (self->state.duration / 1000) / 60  << " Minutes\n";
-            aout(self) << "     " << ((self->state.duration / 1000) / 60) / 60 << " Hours\n";
             aout(self) << "\nReading Duration:\n";
             aout(self) << "     " << read_duration  << " Seconds\n";
             aout(self) << "\nWriting Duration:\n";
@@ -162,8 +167,11 @@ behavior job_actor(stateful_actor<job_state>* self, int startGRU, int numGRU,
 
             cleanUpJobActor(&err);
             // Tell Parent we are done
-            self->send(self->state.parent, done_job_v, self->state.numGRUFailed, self->state.duration,
-                read_duration, write_duration);
+            self->send(self->state.parent, 
+                    done_job_v, 
+                    self->state.numGRUFailed, 
+                    self->state.job_timing.getDuration("total_duration").value_or(-1.0),
+                    read_duration, write_duration);
             self->quit();
         },