diff --git a/3d_party/rapidjson/include/rapidjson/reader.h b/3d_party/rapidjson/include/rapidjson/reader.h
index 9b28b268530ca29101b4e351fd4228899a223e4e..206b261417b9bc15594fec165685339123b639c0 100644
--- a/3d_party/rapidjson/include/rapidjson/reader.h
+++ b/3d_party/rapidjson/include/rapidjson/reader.h
@@ -1223,7 +1223,8 @@ class GenericReader {
                     }
                     i = i * 10 + static_cast<unsigned>(s.TakePush() - '0');
                     significandDigit++;
-                } else
+                }
+            else
                 while (RAPIDJSON_LIKELY(s.Peek() >= '0' && s.Peek() <= '9')) {
                     if (RAPIDJSON_UNLIKELY(i >= 429496729)) { // 2^32 - 1 = 4294967295
                         if (RAPIDJSON_LIKELY(i != 429496729 || s.Peek() > '5')) {
@@ -1264,7 +1265,8 @@ class GenericReader {
                         }
                     i64 = i64 * 10 + static_cast<unsigned>(s.TakePush() - '0');
                     significandDigit++;
-                } else
+                }
+            else
                 while (RAPIDJSON_LIKELY(s.Peek() >= '0' && s.Peek() <= '9')) {
                     if (RAPIDJSON_UNLIKELY(i64 >= RAPIDJSON_UINT64_C2(0x19999999, 0x99999999))) // 2^64 - 1 = 18446744073709551615
                         if (RAPIDJSON_LIKELY(i64 != RAPIDJSON_UINT64_C2(0x19999999, 0x99999999) || s.Peek() > '5')) {
diff --git a/common/cpp/include/common/error.h b/common/cpp/include/common/error.h
index 71c32b6e80c816d207bb6639952419c70d67e7de..e4602afd5a948194d8d7eb2214a6c40d69945c15 100644
--- a/common/cpp/include/common/error.h
+++ b/common/cpp/include/common/error.h
@@ -146,11 +146,11 @@ inline Error TextErrorWithType(const std::string& error, ErrorType error_type) {
 
 namespace ErrorTemplates {
 auto const kMemoryAllocationError = SimpleErrorTemplate {
-                                        "kMemoryAllocationError", ErrorType::kMemoryAllocationError
-                                    };
+    "kMemoryAllocationError", ErrorType::kMemoryAllocationError
+};
 auto const kEndOfFile = SimpleErrorTemplate {
-                            "End of file", ErrorType::kEndOfFile
-                        };
+    "End of file", ErrorType::kEndOfFile
+};
 
 }
 
diff --git a/common/cpp/include/common/io_error.h b/common/cpp/include/common/io_error.h
index db3606b3b0a8ea5276a1489fc1b703168f96b379..40c9d4dd7e2c62ad73531d0a4aa18ebbbdeff2d0 100644
--- a/common/cpp/include/common/io_error.h
+++ b/common/cpp/include/common/io_error.h
@@ -72,68 +72,68 @@ static inline std::ostream& operator<<(std::ostream& os, const IOErrorTemplate&
 
 namespace IOErrorTemplates {
 auto const kUnknownIOError = IOErrorTemplate {
-                                 "Unknown Error", IOErrorType::kUnknownIOError
-                             };
+    "Unknown Error", IOErrorType::kUnknownIOError
+};
 
 auto const kFileNotFound = IOErrorTemplate {
-                               "No such file or directory", IOErrorType::kFileNotFound
-                           };
+    "No such file or directory", IOErrorType::kFileNotFound
+};
 auto const kReadError = IOErrorTemplate {
-                            "Read error", IOErrorType::kReadError
-                        };
+    "Read error", IOErrorType::kReadError
+};
 auto const kBadFileNumber = IOErrorTemplate {
-                                "Bad file number", IOErrorType::kBadFileNumber
-                            };
+    "Bad file number", IOErrorType::kBadFileNumber
+};
 auto const kResourceTemporarilyUnavailable = IOErrorTemplate {
-                                                 "Resource temporarily unavailable", IOErrorType::kResourceTemporarilyUnavailable
-                                             };
+    "Resource temporarily unavailable", IOErrorType::kResourceTemporarilyUnavailable
+};
 auto const kPermissionDenied = IOErrorTemplate {
-                                   "Permission denied", IOErrorType::kPermissionDenied
-                               };
+    "Permission denied", IOErrorType::kPermissionDenied
+};
 auto const kUnsupportedAddressFamily = IOErrorTemplate {
-                                           "Unsupported address family", IOErrorType::kUnsupportedAddressFamily
-                                       };
+    "Unsupported address family", IOErrorType::kUnsupportedAddressFamily
+};
 auto const kInvalidAddressFormat = IOErrorTemplate {
-                                       "Invalid address format", IOErrorType::kInvalidAddressFormat
-                                   };
+    "Invalid address format", IOErrorType::kInvalidAddressFormat
+};
 auto const kAddressAlreadyInUse = IOErrorTemplate {
-                                      "Address already in use", IOErrorType::kAddressAlreadyInUse
-                                  };
+    "Address already in use", IOErrorType::kAddressAlreadyInUse
+};
 auto const kConnectionRefused = IOErrorTemplate {
-                                    "Connection refused", IOErrorType::kConnectionRefused
-                                };
+    "Connection refused", IOErrorType::kConnectionRefused
+};
 auto const kConnectionResetByPeer = IOErrorTemplate {
-                                        "kConnectionResetByPeer", IOErrorType::kConnectionResetByPeer
-                                    };
+    "kConnectionResetByPeer", IOErrorType::kConnectionResetByPeer
+};
 auto const kTimeout = IOErrorTemplate {
-                          "kTimeout", IOErrorType::kTimeout
-                      };
+    "kTimeout", IOErrorType::kTimeout
+};
 auto const kFileAlreadyExists = IOErrorTemplate {
-                                    "kFileAlreadyExists", IOErrorType::kFileAlreadyExists
-                                };
+    "kFileAlreadyExists", IOErrorType::kFileAlreadyExists
+};
 auto const kNoSpaceLeft = IOErrorTemplate {
-                              "kNoSpaceLeft", IOErrorType::kNoSpaceLeft
-                          };
+    "kNoSpaceLeft", IOErrorType::kNoSpaceLeft
+};
 auto const kSocketOperationOnNonSocket = IOErrorTemplate {
-                                             "kSocketOperationOnNonSocket", IOErrorType::kSocketOperationOnNonSocket
-                                         };
+    "kSocketOperationOnNonSocket", IOErrorType::kSocketOperationOnNonSocket
+};
 auto const kInvalidMemoryAddress = IOErrorTemplate {
-                                       "kInvalidMemoryAddress", IOErrorType::kInvalidMemoryAddress
-                                   };
+    "kInvalidMemoryAddress", IOErrorType::kInvalidMemoryAddress
+};
 auto const kUnableToResolveHostname = IOErrorTemplate {
-                                          "kUnableToResolveHostname", IOErrorType::kUnableToResolveHostname
-                                      };
+    "kUnableToResolveHostname", IOErrorType::kUnableToResolveHostname
+};
 auto const kSocketOperationUnknownAtLevel =  IOErrorTemplate {
-                                                 "kSocketOperationUnknownAtLevel", IOErrorType::kSocketOperationUnknownAtLevel
-                                             };
+    "kSocketOperationUnknownAtLevel", IOErrorType::kSocketOperationUnknownAtLevel
+};
 
 auto const kSocketOperationValueOutOfBound =  IOErrorTemplate {
-                                                  "kSocketOperationValueOutOfBound", IOErrorType::kSocketOperationValueOutOfBound
-                                              };
+    "kSocketOperationValueOutOfBound", IOErrorType::kSocketOperationValueOutOfBound
+};
 
 auto const kAddressNotValid =  IOErrorTemplate {
-                                   "Address not valid", IOErrorType::kAddressNotValid
-                               };
+    "Address not valid", IOErrorType::kAddressNotValid
+};
 
 }
 
diff --git a/common/cpp/include/json_parser/json_parser.h b/common/cpp/include/json_parser/json_parser.h
index 65302b7ef80b820bc42932ba282d28b1d5e723ed..ab8e49ab7bbdc99af60190e991bd3e84f8824c13 100644
--- a/common/cpp/include/json_parser/json_parser.h
+++ b/common/cpp/include/json_parser/json_parser.h
@@ -15,15 +15,16 @@ class RapidJson;
 
 class JsonParser {
   public:
-    JsonParser(const std::string& json, const std::unique_ptr<IO>* io); // nullptr as second parameter will use default IO
-    JsonParser(const std::string& json);
-    ~JsonParser();
-    JsonParser(JsonParser&& other);
     Error GetUInt64(const std::string& name, uint64_t* val) const noexcept;
     Error GetString(const std::string& name, std::string* val) const noexcept;
     Error GetArrayUInt64(const std::string& name, std::vector<uint64_t>* val) const noexcept;
     Error GetArrayString(const std::string& name, std::vector<std::string>* val) const noexcept;
     JsonParser Embedded(const std::string& name) const noexcept;
+    ~JsonParser();
+  protected:
+    JsonParser(const std::string& json, const std::unique_ptr<IO>* io); // nullptr as second parameter will use default IO
+    JsonParser(const std::string& json);
+    JsonParser(JsonParser&& other);
   private:
     std::unique_ptr<IO> default_io_;
     std::unique_ptr<RapidJson>  rapid_json_;
@@ -31,6 +32,19 @@ class JsonParser {
 
 };
 
+
+class JsonStringParser : public JsonParser {
+  public:
+    JsonStringParser(const std::string& json): JsonParser(json) {};
+};
+
+
+class JsonFileParser : public JsonParser {
+  public:
+    JsonFileParser(const std::string& json, const std::unique_ptr<IO>* io = nullptr): JsonParser(json, io) {};
+};
+
+
 }
 
 
diff --git a/common/cpp/src/data_structs/data_structs.cpp b/common/cpp/src/data_structs/data_structs.cpp
index 4625c052f75299dbc40141a750c057a292be6fe3..5887f4e6994e66f0356f2464c99fcd9798a8b235 100644
--- a/common/cpp/src/data_structs/data_structs.cpp
+++ b/common/cpp/src/data_structs/data_structs.cpp
@@ -16,7 +16,7 @@ std::string FileInfo::Json() const {
 }
 
 
-bool TimeFromJson(const JsonParser& parser, const std::string name, std::chrono::system_clock::time_point* val) {
+bool TimeFromJson(const JsonStringParser& parser, const std::string name, std::chrono::system_clock::time_point* val) {
     uint64_t nanoseconds_from_epoch;
     if (parser.GetUInt64(name, &nanoseconds_from_epoch)) {
         return false;
@@ -34,7 +34,7 @@ bool TimeFromJson(const JsonParser& parser, const std::string name, std::chrono:
 bool FileInfo::SetFromJson(const std::string& json_string) {
     auto old = *this;
 
-    JsonParser parser(json_string);
+    JsonStringParser parser(json_string);
 
     if (parser.GetUInt64("_id", &id) ||
             parser.GetUInt64("size", &size) ||
diff --git a/common/cpp/src/json_parser/json_parser.cpp b/common/cpp/src/json_parser/json_parser.cpp
index e0e1c680b99e63978452dba4dba94c701397dd0e..c38f855f07853b1a93a4a42d8285c9cab5fab35a 100644
--- a/common/cpp/src/json_parser/json_parser.cpp
+++ b/common/cpp/src/json_parser/json_parser.cpp
@@ -4,7 +4,6 @@
 
 namespace hidra2 {
 
-
 JsonParser::~JsonParser() {
 
 }
diff --git a/common/cpp/unittests/json_parser/test_json_parser.cpp b/common/cpp/unittests/json_parser/test_json_parser.cpp
index 3f97389e7661ff790c63efc10094f5592918620e..5db4292aeb3b143c976dcf7c2e44f6dea374f2e7 100644
--- a/common/cpp/unittests/json_parser/test_json_parser.cpp
+++ b/common/cpp/unittests/json_parser/test_json_parser.cpp
@@ -20,7 +20,8 @@ using ::testing::SetArgPointee;
 using ::testing::HasSubstr;
 using ::testing::ElementsAre;
 
-using hidra2::JsonParser;
+using hidra2::JsonFileParser;
+using hidra2::JsonStringParser;
 using hidra2::RapidJson;
 using hidra2::MockIO;
 using hidra2::IO;
@@ -31,7 +32,7 @@ namespace {
 TEST(ParseString, SimpleConvertToJson) {
     std::string json = R"({"_id":2,"foo":"foo","bar":1})";
 
-    JsonParser parser{json};
+    JsonStringParser parser{json};
 
     uint64_t id, bar;
     std::string foo;
@@ -52,7 +53,7 @@ TEST(ParseString, SimpleConvertToJson) {
 TEST(ParseString, EmbeddedConvertToJson) {
     std::string json = R"({"id":{"test":2}})";
 
-    JsonParser parser{json};
+    JsonStringParser parser{json};
 
     uint64_t id;
     auto err1 = parser.Embedded("id").GetUInt64("test", &id);
@@ -64,7 +65,7 @@ TEST(ParseString, EmbeddedConvertToJson) {
 TEST(ParseString, DoubleEmbeddedConvertToJson) {
     std::string json = R"({"id":{"test":{"test2":2}}})";
 
-    JsonParser parser{json};
+    JsonStringParser parser{json};
 
     uint64_t id;
     auto err1 = parser.Embedded("id").Embedded("test").GetUInt64("test2", &id);
@@ -76,7 +77,7 @@ TEST(ParseString, DoubleEmbeddedConvertToJson) {
 TEST(ParseString, ErrorOnWrongEmbeddedKey) {
     std::string json = R"({"id1":{"test":2}})";
 
-    JsonParser parser{json};
+    JsonStringParser parser{json};
 
     uint64_t id;
     auto err = parser.Embedded("id").GetUInt64("test", &id);
@@ -88,7 +89,7 @@ TEST(ParseString, ErrorOnWrongEmbeddedKey) {
 TEST(ParseString, ErrorOnWrongEmbeddedSubKey) {
     std::string json = R"({"id1":{"test1":2}})";
 
-    JsonParser parser{json};
+    JsonStringParser parser{json};
 
     uint64_t id;
     auto err = parser.Embedded("id").GetUInt64("test", &id);
@@ -100,7 +101,7 @@ TEST(ParseString, ErrorOnWrongEmbeddedSubKey) {
 TEST(ParseString, ErrorOnWrongKey) {
     std::string json = R"({"_id":"2"})";
 
-    JsonParser parser{json};
+    JsonStringParser parser{json};
 
     uint64_t id;
     auto err = parser.GetUInt64("_id1", &id);
@@ -112,7 +113,7 @@ TEST(ParseString, ErrorOnWrongKey) {
 TEST(ParseString, ErrorOnWrongType) {
     std::string json = R"({"_id":"2"})";
 
-    JsonParser parser{json};
+    JsonStringParser parser{json};
 
     uint64_t id;
     auto err = parser.GetUInt64("_id", &id);
@@ -125,7 +126,7 @@ TEST(ParseString, ErrorOnWrongType) {
 TEST(ParseString, ErrorOnWrongDocument) {
     std::string json = R"({"_id":2)";
 
-    JsonParser parser{json};
+    JsonStringParser parser{json};
 
     uint64_t id;
     auto err = parser.GetUInt64("_id", &id);
@@ -139,7 +140,7 @@ TEST(ParseString, ErrorOnWrongDocument) {
 TEST(ParseString, IntArrayConvertToJson) {
     std::string json = R"({"array":[1,2,3]})";
 
-    JsonParser parser{json};
+    JsonStringParser parser{json};
 
     std::vector<uint64_t> vec;
     auto err = parser.GetArrayUInt64("array", &vec);
@@ -151,7 +152,7 @@ TEST(ParseString, IntArrayConvertToJson) {
 TEST(ParseString, IntArrayErrorConvertToJson) {
     std::string json = R"({"array":[1,2,"3"]})";
 
-    JsonParser parser{json};
+    JsonStringParser parser{json};
 
     std::vector<uint64_t> vec;
     auto err = parser.GetArrayUInt64("array", &vec);
@@ -164,7 +165,7 @@ TEST(ParseString, IntArrayErrorConvertToJson) {
 TEST(ParseString, StringArrayConvertToJson) {
     std::string json = R"({"array":["s1","s2","s3"]})";
 
-    JsonParser parser{json};
+    JsonStringParser parser{json};
 
     std::vector<std::string> vec;
     auto err = parser.GetArrayString("array", &vec);
@@ -179,7 +180,7 @@ class ParseFileTests : public Test {
     std::unique_ptr<IO> io_ptr = std::unique_ptr<IO> {
         &mock_io
     };
-    JsonParser parser{"filename", &io_ptr};
+    JsonFileParser parser{"filename", &io_ptr};
 
     void SetUp() override {
     }
diff --git a/producer/api/include/producer/producer_error.h b/producer/api/include/producer/producer_error.h
index decf910834fe976b84b787e61e476bb22e17c8e1..cdcf69a742ad54dd6d248f654e56953ce6faf701 100644
--- a/producer/api/include/producer/producer_error.h
+++ b/producer/api/include/producer/producer_error.h
@@ -53,23 +53,23 @@ class ProducerErrorTemplate : public SimpleErrorTemplate {
 
 namespace ProducerErrorTemplates {
 auto const kAlreadyConnected = ProducerErrorTemplate {
-                                   "Already connected", ProducerErrorType::kAlreadyConnected
-                               };
+    "Already connected", ProducerErrorType::kAlreadyConnected
+};
 auto const kConnectionNotReady = ProducerErrorTemplate {
-                                     "Connection not ready", ProducerErrorType::kConnectionNotReady
-                                 };
+    "Connection not ready", ProducerErrorType::kConnectionNotReady
+};
 
 auto const kFileTooLarge = ProducerErrorTemplate {
-                               "File too large", ProducerErrorType::kFileTooLarge
-                           };
+    "File too large", ProducerErrorType::kFileTooLarge
+};
 
 auto const kFileIdAlreadyInUse = ProducerErrorTemplate {
-                                     "File already in use", ProducerErrorType::kFileIdAlreadyInUse
-                                 };
+    "File already in use", ProducerErrorType::kFileIdAlreadyInUse
+};
 
 auto const kUnknownServerError = ProducerErrorTemplate {
-                                     "Unknown server error", ProducerErrorType::kUnknownServerError
-                                 };
+    "Unknown server error", ProducerErrorType::kUnknownServerError
+};
 
 
 };
diff --git a/receiver/src/receiver_config.cpp b/receiver/src/receiver_config.cpp
index e6652cb974b0dcb4a648b122a454193b48e8c734..d6d1154117a88e825f8fb923718367adf9d8099d 100644
--- a/receiver/src/receiver_config.cpp
+++ b/receiver/src/receiver_config.cpp
@@ -12,7 +12,7 @@ ReceiverConfigFactory::ReceiverConfigFactory() : io__{GenerateDefaultIO()} {
 }
 
 Error ReceiverConfigFactory::SetConfigFromFile(std::string file_name) {
-    JsonParser parser(file_name, &io__);
+    JsonFileParser parser(file_name, &io__);
     return parser.GetString("influxdb_uri", &config.influxdb_uri);
 }
 
diff --git a/receiver/src/receiver_error.h b/receiver/src/receiver_error.h
index 63da34f6fe47518ca7d55278a47e82b0f302d7ed..42eb039d8e5720e23a98dfded74973b788233235 100644
--- a/receiver/src/receiver_error.h
+++ b/receiver/src/receiver_error.h
@@ -50,11 +50,11 @@ class ReceiverErrorTemplate : public SimpleErrorTemplate {
 
 namespace ReceiverErrorTemplates {
 auto const kInvalidOpCode = ReceiverErrorTemplate {
-                                "Invalid Opcode", ReceiverErrorType::kInvalidOpCode
-                            };
+    "Invalid Opcode", ReceiverErrorType::kInvalidOpCode
+};
 auto const kBadRequest = ReceiverErrorTemplate {
-                             "Bad request", ReceiverErrorType::kBadRequest
-                         };
+    "Bad request", ReceiverErrorType::kBadRequest
+};
 
 };
 }
diff --git a/tests/automatic/json_parser/parse_config_file/parse_config_file.cpp b/tests/automatic/json_parser/parse_config_file/parse_config_file.cpp
index fc89626697df933a1e2d9362679428509ddc1f89..4fb391b756cf2b45059808fc330a9e3100ca496c 100644
--- a/tests/automatic/json_parser/parse_config_file/parse_config_file.cpp
+++ b/tests/automatic/json_parser/parse_config_file/parse_config_file.cpp
@@ -40,7 +40,7 @@ void AssertSettings(const Settings& settings) {
 
 Settings Parse(const std::string& fname, Error* err) {
 
-    hidra2::JsonParser parser(fname, nullptr);
+    hidra2::JsonFileParser parser(fname);
 
     Settings settings;