diff --git a/build/includes/global/global.hpp b/build/includes/global/global.hpp
index 376ef7e0397f9b122b836ba59b106678f399cd7a..08104ec274048b9240e65ef977561aaeabba4516 100644
--- a/build/includes/global/global.hpp
+++ b/build/includes/global/global.hpp
@@ -1,20 +1,8 @@
 #pragma once
 
 #include <chrono>
-#include <optional>
-#include <iostream>
-#include <vector>
-#include <bits/stdc++.h>
-#include <unistd.h>
-#include "json.hpp"
-#include "caf/all.hpp"
-
-using json = nlohmann::json;
-
-
 
 extern bool debug;
-// get_settings
 
 /**
  * Return the time between to time points
@@ -24,33 +12,3 @@ double calculateTime(std::chrono::time_point<std::chrono::system_clock> start,
 
 
 
-template <typename T>
-std::optional<T> getSettings(std::string json_settings_file, std::string key_1, std::string key_2, 
-    T return_value) {
-    json settings;
-    std::ifstream settings_file(json_settings_file);
-    settings_file >> settings;
-    settings_file.close();
-    
-    // find first key
-    try {
-        if (settings.find(key_1) != settings.end()) {
-            json key_1_settings = settings[key_1];
-
-            // find value behind second key
-            if (key_1_settings.find(key_2) != key_1_settings.end()) {
-                return key_1_settings[key_2];
-            } else 
-                return {};
-
-        } else {
-            return {}; // return none in the optional (error value)
-        }
-    } catch (json::exception& e) {
-        std::cout << e.what() << "\n";
-        std::cout << key_1 << "\n";
-        std::cout << key_2 << "\n";
-        return {};
-    }
-   
-}
\ No newline at end of file
diff --git a/build/includes/global/settings_functions.hpp b/build/includes/global/settings_functions.hpp
index c0985db230b97e7073a6296285ad057306abeeb8..9989aa11acf05770391bed3277a46eeef1d10c04 100644
--- a/build/includes/global/settings_functions.hpp
+++ b/build/includes/global/settings_functions.hpp
@@ -1,6 +1,12 @@
 #pragma once
+#include <string>
+#include <vector>
+#include <optional>
+#include "json.hpp"
+#include <bits/stdc++.h>
+#include <sys/stat.h>
 
-#include "caf/all.hpp"
+using json = nlohmann::json;
 
 struct Distributed_Settings;
 struct Summa_Actor_Settings;
@@ -18,6 +24,7 @@ struct Distributed_Settings {
     int heartbeat_interval; // number of seconds between each heartbeat message
     int lost_node_threshold; // the maximum value the lost_potentail_indicator value can be before
     // we assume the node is lost
+    std::vector<std::string> backup_servers;
 };
 
 template<class Inspector>
@@ -84,7 +91,43 @@ bool inspect(Inspector& inspector, HRU_Actor_Settings& hru_actor_settings) {
                 inspector.field("output_frequency", hru_actor_settings.output_frequency));
 }
 
+// Read in the settings from JSON
+template <typename T>
+std::optional<T> getSettings(std::string json_settings_file, std::string key_1, std::string key_2, 
+    T return_value) {
+    json settings;
+    std::ifstream settings_file(json_settings_file);
+    settings_file >> settings;
+    settings_file.close();
+    
+    // find first key
+    try {
+        if (settings.find(key_1) != settings.end()) {
+            json key_1_settings = settings[key_1];
+
+            // find value behind second key
+            if (key_1_settings.find(key_2) != key_1_settings.end()) {
+                return key_1_settings[key_2];
+            } else 
+                return {};
+
+        } else {
+            return {}; // return none in the optional (error value)
+        }
+    } catch (json::exception& e) {
+        std::cout << e.what() << "\n";
+        std::cout << key_1 << "\n";
+        std::cout << key_2 << "\n";
+        return {};
+    }
+   
+}
+
+// Get settings from settings file in array format
+std::optional<std::vector<std::string>> getSettingsArray(std::string json_settings_file, std::string key_1, std::string key_2);
+
 
+// Load in the settings from Json For SUMMA
 int read_settings_from_json(std::string json_settings_file_path,
                             Distributed_Settings &distributed_settings, 
                             Summa_Actor_Settings &summa_actor_settings,
@@ -92,6 +135,7 @@ int read_settings_from_json(std::string json_settings_file_path,
                             Job_Actor_Settings &job_actor_settings, 
                             HRU_Actor_Settings &hru_actor_settings);
 
+// Check the settings - Print them out to stdout
 void check_settings_from_json(Distributed_Settings &distributed_settings, 
     Summa_Actor_Settings &summa_actor_settings, File_Access_Actor_Settings &file_access_actor_settings, 
     Job_Actor_Settings &job_actor_settings, HRU_Actor_Settings &hru_actor_settings);
\ No newline at end of file
diff --git a/build/source/actors/global/global.cpp b/build/source/actors/global/global.cpp
index c6e01f6a11a3575184033f06ee1a15f51e42f0fc..f6c1efb3747a381d2ba7d9bbe55c1c848aa78a33 100644
--- a/build/source/actors/global/global.cpp
+++ b/build/source/actors/global/global.cpp
@@ -1,7 +1,4 @@
 #include "global.hpp"
-#include <chrono>
-#include "json.hpp"
-
 
 
 double calculateTime(std::chrono::time_point<std::chrono::system_clock> start, 
diff --git a/build/source/actors/global/settings_functions.cpp b/build/source/actors/global/settings_functions.cpp
index b0656ba5cc403767195f3a11524e4c84eefa9626..4079ef4a353eb1eebe595639aa15df93b9f3c7c0 100644
--- a/build/source/actors/global/settings_functions.cpp
+++ b/build/source/actors/global/settings_functions.cpp
@@ -1,5 +1,42 @@
 #include "settings_functions.hpp"
-#include "global.hpp"
+
+std::optional<std::vector<std::string>> getSettingsArray(std::string json_settings_file, 
+    std::string key_1, std::string key_2) {
+    json settings;
+    std::ifstream settings_file(json_settings_file);
+    settings_file >> settings;
+    settings_file.close();
+    std::vector<std::string> return_vector;
+
+    // find first key
+    try {
+        if (settings.find(key_1) != settings.end()) {
+            json key_1_settings = settings[key_1];
+
+            // find value behind second key
+            if (key_1_settings.find(key_2) != key_1_settings.end()) {
+                for(auto& host : key_1_settings[key_2]) {
+                    return_vector.push_back(host["hostname"]);
+                }
+                return return_vector;
+            } else 
+                return {};
+
+        } else {
+            return {}; // return none in the optional (error value)
+        }
+    } catch (json::exception& e) {
+        std::cout << e.what() << "\n";
+        std::cout << key_1 << "\n";
+        std::cout << key_2 << "\n";
+        return {};
+    }
+   
+}
+
+
+
+
 
 int read_settings_from_json(std::string json_settings_file,
         Distributed_Settings &distributed_settings, 
@@ -8,6 +45,12 @@ int read_settings_from_json(std::string json_settings_file,
         Job_Actor_Settings &job_actor_settings, 
         HRU_Actor_Settings &hru_actor_settings) {
     
+    // Check if File Exists
+    struct stat buffer;
+    if (stat(json_settings_file.c_str(), &buffer) != 0) {
+        std::cout << "JSON Configuration File Could Not Be Found\n";
+        return -1;
+    }
     
     // read distributed settings
     std::string parent_key = "Distributed_Settings";
@@ -32,6 +75,8 @@ int read_settings_from_json(std::string json_settings_file,
     distributed_settings.lost_node_threshold = getSettings(json_settings_file, parent_key,
         "lost_node_threshold", distributed_settings.lost_node_threshold).value_or(-1);
 
+    distributed_settings.backup_servers = getSettingsArray(json_settings_file, parent_key,
+        "backup_servers").value_or(std::vector<std::string>());
     
     // read settings for summa actor
     parent_key = "Summa_Actor";    
diff --git a/build/source/testing/settings_functions/config_files/Summa_Actors_Settings.json b/build/source/testing/settings_functions/config_files/Summa_Actors_Settings.json
new file mode 100644
index 0000000000000000000000000000000000000000..4785c449aebf4c7cd3783498a7839328e6065494
--- /dev/null
+++ b/build/source/testing/settings_functions/config_files/Summa_Actors_Settings.json
@@ -0,0 +1,38 @@
+{
+  "Distributed_Settings": {
+      "distributed_mode": true,
+      "hostname": "7c75a36f6f33",
+      "port": 4444,
+      "total_hru_count": 12,
+      "num_hru_per_batch": 2,
+      "heartbeat_interval": 10,
+      "lost_node_threshold": 3,
+      "backup_servers": [{
+          "hostname": "7c75a36"      
+        }, 
+        { 
+          "hostname": "7ca36"      
+      }] 
+  },
+
+  "Summa_Actor": {
+      "max_gru_per_job": 100
+  },
+
+  "File_Access_Actor": {
+    "num_vectors_in_output_manager": 1
+  },
+  
+  "Job_Actor": {
+      "file_manager_path": "/Summa-Actors-Settings-Output-Test-Fix/summa-output-fix/fileManager.txt",
+      "output_structure_size": 1,
+      "output_csv": false,
+      "csv_path": "/Summa-Actors/Laugh-Tests/test_cases/output/actors/celia1990/"
+
+  },
+
+  "HRU_Actor": {
+      "print_output": true,
+      "output_frequency": 100
+  }
+}
\ No newline at end of file
diff --git a/build/source/testing/settings_functions/main.cpp b/build/source/testing/settings_functions/main.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..bb88bea458c9f5d5586bcd85cbd94ef2fcb385fb
--- /dev/null
+++ b/build/source/testing/settings_functions/main.cpp
@@ -0,0 +1,6 @@
+#include "test.hpp"
+
+
+int main() {
+    testDistributedSettings();
+}
\ No newline at end of file
diff --git a/build/source/testing/settings_functions/makefile b/build/source/testing/settings_functions/makefile
new file mode 100644
index 0000000000000000000000000000000000000000..76c1e6f510a984fd1d8c33dee7add1dd21ff5d00
--- /dev/null
+++ b/build/source/testing/settings_functions/makefile
@@ -0,0 +1,23 @@
+CC = g++	  # C++
+
+INCLUDES=-I/usr/local/include
+LIBRARIES=-L/usr/local/lib
+FLAGS = -g -O0 -Wfatal-errors -std=c++17
+
+SOURCE_DIR = /Summa-Actors/build/source/actors
+INCLUDE_DIR = /Summa-Actors/build/includes
+SETTINGS_FILES = $(SOURCE_DIR)/global/settings_functions.cpp
+GLOBAL_INCLUDES = -I$(INCLUDE_DIR)/global
+
+
+
+all: compile link clean
+
+compile:
+	$(CC) $(FLAGS) -c main.cpp test.cpp $(SETTINGS_FILES) $(GLOBAL_INCLUDES) $(INCLUDES)
+
+link:
+	$(CC) $(FLAGS) -o main *.o $(LIBRARIES)
+
+clean:
+	rm *.o
diff --git a/build/source/testing/settings_functions/test.cpp b/build/source/testing/settings_functions/test.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..aac5a2c55d7e69606462136f07884ba6d91778a1
--- /dev/null
+++ b/build/source/testing/settings_functions/test.cpp
@@ -0,0 +1,60 @@
+#include "test.hpp"
+
+
+#define IS_TRUE(x) { if (!(x)) std::cout << __FUNCTION__ << " failed on line " << __LINE__ << std::endl; }
+
+
+
+void testDistributedSettings() {
+    std::cout << "Testing Distributed Settings\n";
+    std::string failing_config_file = "somewhere/that/doesn't/exist.json\n";
+    std::string config_file_1 = "config_files/Summa_Actors_Settings.json";
+    int err;
+    // Define Structures to hold settings
+    Distributed_Settings distributed_settings;
+    Summa_Actor_Settings summa_actor_settings;
+    File_Access_Actor_Settings file_access_actor_settings;
+    Job_Actor_Settings job_actor_settings;
+    HRU_Actor_Settings hru_actor_settings;
+
+    // Test with file that should fail
+    err = read_settings_from_json(failing_config_file,
+                                distributed_settings, 
+                                summa_actor_settings, 
+                                file_access_actor_settings,
+                                job_actor_settings, 
+                                hru_actor_settings);
+    IS_TRUE(err == -1);
+
+    // Test with real settings file
+    err = read_settings_from_json(config_file_1,
+                                distributed_settings, 
+                                summa_actor_settings, 
+                                file_access_actor_settings,
+                                job_actor_settings, 
+                                hru_actor_settings);
+
+    IS_TRUE(distributed_settings.distributed_mode);
+    IS_TRUE(distributed_settings.hostname == "7c75a36f6f33");
+    IS_TRUE(distributed_settings.port == 4444);
+    IS_TRUE(distributed_settings.total_hru_count == 12);
+    IS_TRUE(distributed_settings.num_hru_per_batch == 2);
+    IS_TRUE(distributed_settings.heartbeat_interval == 10);
+    IS_TRUE(distributed_settings.lost_node_threshold == 3);
+    std::vector<std::string> verification_vector = {"7c75a36", "7ca36"};
+    IS_TRUE(distributed_settings.backup_servers == verification_vector);
+
+    IS_TRUE(summa_actor_settings.max_gru_per_job == 100);
+    
+    IS_TRUE(file_access_actor_settings.num_vectors_in_output_manager == 1);
+    
+    IS_TRUE(job_actor_settings.file_manager_path == "/Summa-Actors-Settings-Output-Test-Fix/summa-output-fix/fileManager.txt")
+    IS_TRUE(job_actor_settings.output_structure_size == 1)
+    IS_TRUE(!job_actor_settings.output_csv)
+    IS_TRUE(job_actor_settings.csv_path == "/Summa-Actors/Laugh-Tests/test_cases/output/actors/celia1990/")
+
+    IS_TRUE(hru_actor_settings.print_output)
+    IS_TRUE(hru_actor_settings.output_frequency == 100)
+
+
+}
\ No newline at end of file
diff --git a/build/source/testing/settings_functions/test.hpp b/build/source/testing/settings_functions/test.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..dac7e5f0f7c95b383ae408f81b40cfbe861fb08e
--- /dev/null
+++ b/build/source/testing/settings_functions/test.hpp
@@ -0,0 +1,7 @@
+#include <iostream>
+#include "settings_functions.hpp"
+
+
+
+// Testing function for setting specific to SUMMA-Distributed
+void testDistributedSettings();
\ No newline at end of file
diff --git a/build/source/testing/summa_actor/makefile b/build/source/testing/summa_actor/makefile
index 1730dd9254048dbc207f8bfd04a5029f670d6939..043ffb1c4c527af215d02875890a49a2beb0b085 100644
--- a/build/source/testing/summa_actor/makefile
+++ b/build/source/testing/summa_actor/makefile
@@ -20,11 +20,11 @@ CLIENT_MANAGER = $(SOURCE_DIR)/summa_actor/client.cpp
 all: compile link clean
 
 compile:
-	g++ $(FLAGS) -c main.cpp test.cpp $(BATCH_MANGER) $(CLIENT_MANAGER) $(SETTINGS_FILES) \
+	$(CC) $(FLAGS) -c main.cpp test.cpp $(BATCH_MANGER) $(CLIENT_MANAGER) $(SETTINGS_FILES) \
 		$(SUMMA_SERVER) $(SUMMA_SERVER_BACKUP) $(SUMMA_ACTOR_INCLUDES) $(GLOBAL_INCLUDES) $(INCLUDES)
 
 link:
-	g++ $(FLAGS) -Wl,-rpath='/usr/local/lib' -o main *.o $(LIBRARIES)
+	$(CC) $(FLAGS) -Wl,-rpath='/usr/local/lib' -o main *.o $(LIBRARIES)
 
 clean:
 	rm *.o
\ No newline at end of file