diff --git a/host/host_central_mast/lib/Utilities/Utilities.cpp b/host/host_central_mast/lib/Utilities/Utilities.cpp
index 9439cc40cd2eca9553353a3544f0fd98e5341562..20059901e68c099351901d047b5d41ad8e431c4a 100644
--- a/host/host_central_mast/lib/Utilities/Utilities.cpp
+++ b/host/host_central_mast/lib/Utilities/Utilities.cpp
@@ -179,4 +179,51 @@ String getMacAddressAsString(const uint8_t *mac) {
     }
     esp_log_write(ESP_LOG_DEBUG, TAG_ESPNOW, "MAC: %s\n", macAddress.c_str());
     return macAddress;
+}
+
+String documentToLineProtocolString(const DynamicJsonDocument &doc) {
+    String measurementType = doc["measurementType"].as<String>();
+    String sensorName = doc["sensorName"].as<String>();
+    String timestamp = doc["timestamp"].as<String>();
+    String protocol = doc["protocol"].as<String>();
+    String value = doc["value"].as<String>();
+    String channel = doc["channel"].as<String>();
+    String clientMac = doc["clientMac"].as<String>();
+
+    String lineData = sensorName + ",clientMac=" + clientMac + ",protocol=" + protocol + ",channel=" + channel + " "
+                      + measurementType + "=" + value + " " + timestamp;
+    return lineData;
+}
+DynamicJsonDocument parseReceivedJsonData(char *data) {
+    DynamicJsonDocument doc(250);
+    auto error = deserializeJson(doc, data);
+    if (error) {
+        esp_log_write(ESP_LOG_ERROR, TAG_ESPNOW, "Error while parsing json: %s\n", error.c_str());
+        // TODO error handling
+    }
+    return doc;
+}
+
+String documentToServerReadableString(const DynamicJsonDocument &doc) {
+    StaticJsonDocument<1024> serverDoc;
+    String hostMacAddressString = WiFi.macAddress();
+    hostMacAddressString.replace(":", "");
+    hostMacAddressString.toLowerCase();
+
+    serverDoc["host"] = hostMacAddressString;
+    serverDoc["client"] = doc["clientMac"].as<String>();
+    serverDoc["sensorProtocol"] = doc["protocol"].as<String>();
+    serverDoc["protocolAddress"] = doc["channel"].as<String>();
+    serverDoc["hardwareName"] = doc["sensorName"].as<String>();
+    // each value is a element in the readigs array
+    JsonArray readings = serverDoc.createNestedArray("readings");
+    JsonObject reading = readings.createNestedObject();
+    reading["name"] = doc["measurementType"].as<String>();
+    reading["value"] = doc["value"].as<float>();
+    serverDoc["time"] = doc["timestamp"].as<uint32_t>();
+
+    String serverString;
+    serializeJson(serverDoc, serverString);
+    esp_log_write(ESP_LOG_DEBUG, TAG_ESPNOW, "Server readable data: %s\n", serverString.c_str());
+    return serverString;
 }
\ No newline at end of file
diff --git a/host/host_central_mast/lib/Utilities/Utilities.h b/host/host_central_mast/lib/Utilities/Utilities.h
index b78843c62ef70dc76de3390827f7a2a77b660191..dae9e62d88f82b3d1a0b7f145d51f3001ffe5b68 100644
--- a/host/host_central_mast/lib/Utilities/Utilities.h
+++ b/host/host_central_mast/lib/Utilities/Utilities.h
@@ -5,6 +5,7 @@
 #ifndef HOST_CENTRAL_MAST_UTILITIES_H
 #define HOST_CENTRAL_MAST_UTILITIES_H
 
+#include "ArduinoJson.h"
 #include "SD.h"
 #include "SDCardException.h"
 #include "SDSetupException.h"
@@ -12,6 +13,7 @@
 #include <Definitions.h>
 #include <WString.h>
 #include <list>
+#include "WiFi.h"
 
 File openDirectory(const String &dirname);
 std::list<String> getFilesInDirectory(const String &dirname);
@@ -24,4 +26,8 @@ void setupSDCard(int MISO, int MOSI, int SCLK, int CS);
 void saveStringToSDCard(const std::string &dataString);
 void turnOffLEDs();
 String getMacAddressAsString(const uint8_t *mac);
+String documentToLineProtocolString(const DynamicJsonDocument &doc);
+DynamicJsonDocument parseReceivedJsonData(char *data);
+String documentToServerReadableString(const DynamicJsonDocument &doc);
+
 #endif // HOST_CENTRAL_MAST_UTILITIES_H
diff --git a/host/host_central_mast/src/main.cpp b/host/host_central_mast/src/main.cpp
index 0eea7a56d93a7631fd90eefc87ab051e93fef1ac..97ec5455b64d4a27d12b9ffb6cb266b71507370c 100644
--- a/host/host_central_mast/src/main.cpp
+++ b/host/host_central_mast/src/main.cpp
@@ -9,6 +9,7 @@
 #include "MessageType.h"
 #include "SDCardLogger.h"
 #include "SPI.h"
+#include "Utilities.h"
 #include <ArduinoJson.h>
 #include <Definitions.h>
 #include <ESP32Time.h>
@@ -20,6 +21,7 @@
 #include <queue>
 #include <sys/unistd.h>
 
+// TODO: TimeManager should handle this or rename TimeManager to NTPManager
 ESP32Time rtc;
 
 #define TINY_GSM_RX_BUFFER 1024 // Set RX buffer to 1Kb
@@ -54,42 +56,6 @@ void on_data_sent(const uint8_t *mac_addr, esp_now_send_status_t status) {
     // go to sleep
 }
 
-String getMacAddressAsString(const uint8_t *mac);
-
-DynamicJsonDocument parseReceivedJsonData(char *data);
-
-void saveStringToSDCard(const std::string &dataString);
-
-String documentToLineProtocolString(const DynamicJsonDocument &doc);
-
-void turnOffLEDs();
-
-void setupSDCard();
-
-String documentToServerReadableString(const DynamicJsonDocument &doc) {
-    StaticJsonDocument<1024> serverDoc;
-    String hostMacAddressString = WiFi.macAddress();
-    hostMacAddressString.replace(":", "");
-    hostMacAddressString.toLowerCase();
-
-    serverDoc["host"] = hostMacAddressString;
-    serverDoc["client"] = doc["clientMac"].as<String>();
-    serverDoc["sensorProtocol"] = doc["protocol"].as<String>();
-    serverDoc["protocolAddress"] = doc["channel"].as<String>();
-    serverDoc["hardwareName"] = doc["sensorName"].as<String>();
-    // each value is a element in the readigs array
-    JsonArray readings = serverDoc.createNestedArray("readings");
-    JsonObject reading = readings.createNestedObject();
-    reading["name"] = doc["measurementType"].as<String>();
-    reading["value"] = doc["value"].as<float>();
-    serverDoc["time"] = doc["timestamp"].as<uint32_t>();
-
-    String serverString;
-    serializeJson(serverDoc, serverString);
-    esp_log_write(ESP_LOG_DEBUG, TAG_ESPNOW, "Server readable data: %s\n", serverString.c_str());
-    return serverString;
-}
-
 void on_data_recv(const uint8_t *mac, const uint8_t *incomingData, int len) {
     esp_log_write(ESP_LOG_INFO, TAG_ESPNOW, "Message recieved\n");
     // copy received data to a char array
@@ -141,28 +107,8 @@ void on_data_recv(const uint8_t *mac, const uint8_t *incomingData, int len) {
     esp_log_write(ESP_LOG_DEBUG, TAG_ESPNOW, (success == ESP_OK) ? "Response sent\n" : "Failed to respond\n");
 }
 
-String documentToLineProtocolString(const DynamicJsonDocument &doc) {
-    String measurementType = doc["measurementType"].as<String>();
-    String sensorName = doc["sensorName"].as<String>();
-    String timestamp = doc["timestamp"].as<String>();
-    String protocol = doc["protocol"].as<String>();
-    String value = doc["value"].as<String>();
-    String channel = doc["channel"].as<String>();
-    String clientMac = doc["clientMac"].as<String>();
-
-    String lineData = sensorName + ",clientMac=" + clientMac + ",protocol=" + protocol + ",channel=" + channel + " "
-                      + measurementType + "=" + value + " " + timestamp;
-    return lineData;
-}
-
-DynamicJsonDocument parseReceivedJsonData(char *data) {
-    DynamicJsonDocument doc(250);
-    auto error = deserializeJson(doc, data);
-    if (error) {
-        esp_log_write(ESP_LOG_ERROR, TAG_ESPNOW, "Error while parsing json: %s\n", error.f_str());
-        // TODO error handling
-    }
-    return doc;
+[[noreturn]] void esp_loop(){
+    while (true){}
 }
 
 [[noreturn]] void ESPNOWReceiveTask(void *parameter) {
@@ -198,15 +144,14 @@ DynamicJsonDocument parseReceivedJsonData(char *data) {
         esp_log_write(ESP_LOG_DEBUG, TAG_ESPNOW, "Mac announced!");
     }
 
-    while (true) {
-    }
+    esp_loop();
 }
 
 void setup() {
     // Set console baud rate
     Serial.begin(115200);
     delay(10);
-    setupSDCard();
+    setupSDCard(SD_MISO, SD_MOSI, SD_SCLK, SD_CS);
 
     SDCardLogger::printDebugToSerial(true);