diff --git a/common/cpp/include/asapo/common/error.h b/common/cpp/include/asapo/common/error.h
index 510ea0866dc7c3e1659e3b3eb9680d487fe8fee1..4c38ae3ca1445289b4bd7435141f5b63b08ea412 100644
--- a/common/cpp/include/asapo/common/error.h
+++ b/common/cpp/include/asapo/common/error.h
@@ -21,7 +21,8 @@ class ErrorInterface {
     virtual std::string Explain() const noexcept = 0;
     virtual std::string ExplainPretty(uint8_t shift = 0) const noexcept = 0;
     virtual std::string ExplainInJSON() const noexcept = 0;
-    virtual ErrorInterface* AddContext(std::string key, std::string value) noexcept = 0;
+    virtual ErrorInterface* AddDetails(std::string key, std::string value) noexcept = 0;
+    virtual ErrorInterface* AddDetails(std::string key, uint64_t value) noexcept = 0;
     virtual ErrorInterface* SetCause(Error cause_err) noexcept = 0;
     virtual const Error& GetCause() const noexcept = 0;
     virtual CustomErrorData* GetCustomData() noexcept = 0;
@@ -50,7 +51,7 @@ class ServiceError : public ErrorInterface {
     ServiceErrorType error_type_;
     std::string error_name_;
     std::string error_message_;
-    std::map<std::string, std::string> context_;
+    std::map<std::string, std::string> details_;
     Error cause_err_;
     std::unique_ptr<CustomErrorData> custom_data_;
   public:
@@ -58,7 +59,8 @@ class ServiceError : public ErrorInterface {
     ServiceErrorType GetServiceErrorType() const noexcept;
     CustomErrorData* GetCustomData() noexcept override;
     void SetCustomData(std::unique_ptr<CustomErrorData> data) noexcept override;
-    ErrorInterface* AddContext(std::string key, std::string value) noexcept override;
+    ErrorInterface* AddDetails(std::string key, std::string value) noexcept override;
+    ErrorInterface* AddDetails(std::string key, uint64_t value) noexcept override;
     ErrorInterface* SetCause(Error cause_err) noexcept override;
     const Error& GetCause() const noexcept override;
     std::string Explain() const noexcept override;
diff --git a/common/cpp/include/asapo/common/error.tpp b/common/cpp/include/asapo/common/error.tpp
index 95f6eed6606794d1596731640ce58b58614841c2..a48955d2b3677e4bdd439f970bcf3a3074594dce 100644
--- a/common/cpp/include/asapo/common/error.tpp
+++ b/common/cpp/include/asapo/common/error.tpp
@@ -37,10 +37,10 @@ std::string ServiceError<ServiceErrorType>::ExplainPretty(uint8_t shift) const n
     if (!error_message_.empty()) {
         err += "\n" + base_shift + shift_s + "message: " + error_message_;
     }
-    if (!context_.empty()) {
+    if (!details_.empty()) {
         err += "\n" + base_shift + shift_s + "context: ";
         auto i = 0;
-        for (const auto &kv : context_) {
+        for (const auto &kv : details_) {
             err += (i > 0 ? ", " : "") + kv.first + ":" + kv.second;
             i++;
         }
@@ -58,10 +58,10 @@ std::string ServiceError<ServiceErrorType>::Explain() const noexcept {
     if (!error_message_.empty()) {
         err += ", message: " + error_message_;
     }
-    if (!context_.empty()) {
-        err += ", context: ";
+    if (!details_.empty()) {
+        err += ", details: ";
         auto i = 0;
-        for (const auto &kv : context_) {
+        for (const auto &kv : details_) {
             err += (i > 0 ? ", " : "") + kv.first + ":" + kv.second;
             i++;
         }
@@ -73,8 +73,8 @@ std::string ServiceError<ServiceErrorType>::Explain() const noexcept {
 }
 
 template<typename ServiceErrorType>
-ErrorInterface *ServiceError<ServiceErrorType>::AddContext(std::string key, std::string value) noexcept {
-    context_[std::move(key)] = std::move(value);
+ErrorInterface *ServiceError<ServiceErrorType>::AddDetails(std::string key, std::string value) noexcept {
+    details_[std::move(key)] = std::move(value);
     return this;
 }
 template<typename ServiceErrorType>
@@ -93,10 +93,10 @@ std::string ServiceError<ServiceErrorType>::ExplainInJSON() const noexcept {
     if (!error_message_.empty()) {
         err += "," + WrapInQuotes("message") + ":" + WrapInQuotes(error_message_);
     }
-    if (!context_.empty()) {
+    if (!details_.empty()) {
         err += "," + WrapInQuotes("context") + ":{";
         auto i = 0;
-        for (const auto &kv : context_) {
+        for (const auto &kv : details_) {
             err += (i > 0 ? ", " : "") + WrapInQuotes(kv.first) + ":" + WrapInQuotes(kv.second);
             i++;
         }
@@ -112,6 +112,11 @@ const Error &ServiceError<ServiceErrorType>::GetCause() const noexcept {
     return cause_err_;
 }
 
+template<typename ServiceErrorType>
+ErrorInterface *ServiceError<ServiceErrorType>::AddDetails(std::string key, uint64_t value) noexcept {
+    return AddDetails(key,std::to_string(value));
+}
+
 template<typename ServiceErrorType>
 Error ServiceErrorTemplate<ServiceErrorType>::Generate() const noexcept {
     return Generate("");
diff --git a/common/cpp/include/asapo/logger/logger.h b/common/cpp/include/asapo/logger/logger.h
index e4dc868959f8b5347b95a7a51b19623f166a6e73..4bd212dc240a3f6d8cdaf1f1012cc156d51c100f 100644
--- a/common/cpp/include/asapo/logger/logger.h
+++ b/common/cpp/include/asapo/logger/logger.h
@@ -27,10 +27,11 @@ class LogMessageWithFields {
     LogMessageWithFields& Append(std::string key, uint64_t val);
     LogMessageWithFields& Append(std::string key, double val, int precision);
     LogMessageWithFields& Append(const LogMessageWithFields& log_msg);
+    LogMessageWithFields& Append(std::string key, const LogMessageWithFields& log_msg);
     LogMessageWithFields& Append(std::string key, std::string val);
     std::string LogString() const;
   private:
-    inline std::string QuoteIFNeeded();
+    inline std::string CommaIfNeeded();
     std::string log_string_;
 };
 
diff --git a/common/cpp/src/logger/logger.cpp b/common/cpp/src/logger/logger.cpp
index 546112130bee461f1dc39e9160e0ecddbe865454..e9613d768f30e7a205a6aa87c6c29577450dfa53 100644
--- a/common/cpp/src/logger/logger.cpp
+++ b/common/cpp/src/logger/logger.cpp
@@ -6,7 +6,7 @@
 
 namespace asapo {
 
-Logger CreateLogger(std::string name, bool console, bool centralized_log, const std::string& endpoint_uri) {
+Logger CreateLogger(std::string name, bool console, bool centralized_log, const std::string &endpoint_uri) {
     auto logger = new SpdLogger{name, endpoint_uri};
     logger->SetLogLevel(LogLevel::Info);
     if (console) {
@@ -19,15 +19,15 @@ Logger CreateLogger(std::string name, bool console, bool centralized_log, const
     return Logger{logger};
 }
 
-Logger CreateDefaultLoggerBin(const std::string& name) {
+Logger CreateDefaultLoggerBin(const std::string &name) {
     return CreateLogger(name, true, false, "");
 }
 
-Logger CreateDefaultLoggerApi(const std::string& name, const std::string& endpoint_uri) {
+Logger CreateDefaultLoggerApi(const std::string &name, const std::string &endpoint_uri) {
     return CreateLogger(name, false, true, endpoint_uri);
 }
 
-LogLevel StringToLogLevel(const std::string& name, Error* err) {
+LogLevel StringToLogLevel(const std::string &name, Error *err) {
     *err = nullptr;
     if (name == "debug") return LogLevel::Debug;
     if (name == "info") return LogLevel::Info;
@@ -40,7 +40,7 @@ LogLevel StringToLogLevel(const std::string& name, Error* err) {
 }
 
 template<typename ... Args>
-std::string string_format(const std::string& format, Args ... args) {
+std::string string_format(const std::string &format, Args ... args) {
     size_t size = static_cast<size_t>(snprintf(nullptr, 0, format.c_str(), args ...) + 1);
     std::unique_ptr<char[]> buf(new char[size]);
     snprintf(buf.get(), size, format.c_str(), args ...);
@@ -52,11 +52,11 @@ std::string EncloseQuotes(std::string str) {
 }
 
 LogMessageWithFields::LogMessageWithFields(std::string key, uint64_t val) {
-    log_string_ = EncloseQuotes(key) + ":" + std::to_string(val);
+    log_string_ = EncloseQuotes(std::move(key)) + ":" + std::to_string(val);
 }
 
 LogMessageWithFields::LogMessageWithFields(std::string key, double val, int precision) {
-    log_string_ = EncloseQuotes(key) + ":" + string_format("%." + std::to_string(precision) + "f", val);
+    log_string_ = EncloseQuotes(std::move(key)) + ":" + string_format("%." + std::to_string(precision) + "f", val);
 }
 
 LogMessageWithFields::LogMessageWithFields(std::string val) {
@@ -66,25 +66,26 @@ LogMessageWithFields::LogMessageWithFields(std::string val) {
 }
 
 LogMessageWithFields::LogMessageWithFields(std::string key, std::string val) {
-    log_string_ = EncloseQuotes(key) + ":" + EncloseQuotes(escape_json(val));
+    log_string_ = EncloseQuotes(std::move(key)) + ":" + EncloseQuotes(escape_json(val));
 }
 
-inline std::string LogMessageWithFields::QuoteIFNeeded() {
+inline std::string LogMessageWithFields::CommaIfNeeded() {
     return log_string_.empty() ? "" : ",";
 }
 
-LogMessageWithFields& LogMessageWithFields::Append(std::string key, uint64_t val) {
-    log_string_ += QuoteIFNeeded() + EncloseQuotes(key) + ":" + std::to_string(val);
+LogMessageWithFields &LogMessageWithFields::Append(std::string key, uint64_t val) {
+    log_string_ += CommaIfNeeded() + EncloseQuotes(std::move(key)) + ":" + std::to_string(val);
     return *this;
 }
 
-LogMessageWithFields& LogMessageWithFields::Append(std::string key, double val, int precision) {
-    log_string_ += QuoteIFNeeded() + EncloseQuotes(key) + ":" + string_format("%." + std::to_string(precision) + "f", val);
+LogMessageWithFields &LogMessageWithFields::Append(std::string key, double val, int precision) {
+    log_string_ += CommaIfNeeded() + EncloseQuotes(std::move(key)) + ":"
+        + string_format("%." + std::to_string(precision) + "f", val);
     return *this;
 }
 
-LogMessageWithFields& LogMessageWithFields::Append(std::string key, std::string val) {
-    log_string_ += QuoteIFNeeded() + EncloseQuotes(key) + ":" + EncloseQuotes(escape_json(val));
+LogMessageWithFields &LogMessageWithFields::Append(std::string key, std::string val) {
+    log_string_ += CommaIfNeeded() + EncloseQuotes(std::move(key)) + ":" + EncloseQuotes(escape_json(val));
     return *this;
 }
 
@@ -92,11 +93,17 @@ std::string LogMessageWithFields::LogString() const {
     return log_string_;
 }
 
-LogMessageWithFields::LogMessageWithFields(const Error& error) {
+LogMessageWithFields::LogMessageWithFields(const Error &error) {
     log_string_ = error->ExplainInJSON();
 }
-LogMessageWithFields& LogMessageWithFields::Append(const LogMessageWithFields& log_msg) {
-    log_string_ += QuoteIFNeeded() + log_msg.LogString();
+
+LogMessageWithFields &LogMessageWithFields::Append(const LogMessageWithFields &log_msg) {
+    log_string_ += CommaIfNeeded() + log_msg.LogString();
+    return *this;
+}
+
+LogMessageWithFields &LogMessageWithFields::Append(std::string key, const LogMessageWithFields &log_msg) {
+    log_string_ += CommaIfNeeded() + EncloseQuotes(std::move(key)) + ":{" + log_msg.LogString() + "}";
     return *this;
 }
 
diff --git a/common/cpp/src/system_io/system_io.cpp b/common/cpp/src/system_io/system_io.cpp
index 3165a6a3d26c5c4654dbcb09f5f6dfd57fd015ed..8a5b403f3be6b83bfe71660d9be749a7a296acfe 100644
--- a/common/cpp/src/system_io/system_io.cpp
+++ b/common/cpp/src/system_io/system_io.cpp
@@ -116,7 +116,7 @@ MessageData SystemIO::GetDataFromFile(const std::string& fname, uint64_t* fsize,
 
     Read(fd, data_array, (size_t)*fsize, err);
     if (*err != nullptr) {
-        (*err)->AddContext("name", fname)->AddContext("expected size", std::to_string(*fsize));
+        (*err)->AddDetails("name", fname)->AddDetails("expected size", std::to_string(*fsize));
         Close(fd, nullptr);
         return nullptr;
     }
@@ -191,7 +191,7 @@ Error SystemIO::WriteDataToFile(const std::string& root_folder, const std::strin
 
     Write(fd, data, length, &err);
     if (err) {
-        err->AddContext("name", fname);
+        err->AddDetails("name", fname);
         return err;
     }
 
@@ -402,7 +402,7 @@ asapo::FileDescriptor asapo::SystemIO::Open(const std::string& filename,
     FileDescriptor fd = _open(filename.c_str(), flags);
     if (fd == -1) {
         *err = GetLastError();
-        (*err)->AddContext("name", filename);
+        (*err)->AddDetails("name", filename);
     } else {
         *err = nullptr;
     }
@@ -616,7 +616,7 @@ Error SystemIO::CreateDirectoryWithParents(const std::string& root_path, const s
         Error err;
         CreateNewDirectory(new_path, &err);
         if (err && err != IOErrorTemplates::kFileAlreadyExists) {
-            err->AddContext("name", new_path);
+            err->AddDetails("name", new_path);
             return err;
         }
         if (iter != path.end()) {
diff --git a/common/cpp/src/system_io/system_io_linux.cpp b/common/cpp/src/system_io/system_io_linux.cpp
index f4256bddba5fdecb3e9bb9869943d03c9c642d81..18c4f1afe81635c58728981800b5a27c5cf9a3d6 100644
--- a/common/cpp/src/system_io/system_io_linux.cpp
+++ b/common/cpp/src/system_io/system_io_linux.cpp
@@ -28,7 +28,7 @@ Error SystemIO::AddToEpool(SocketDescriptor sd) const {
     event.data.fd = sd;
     if((epoll_ctl(epoll_fd_, EPOLL_CTL_ADD, sd, &event) == -1) && (errno != EEXIST)) {
         auto err =  GetLastError();
-        err->AddContext("where", "add to epoll");
+        err->AddDetails("where", "add to epoll");
         close(epoll_fd_);
         return err;
     }
@@ -43,7 +43,7 @@ Error SystemIO::CreateEpoolIfNeeded(SocketDescriptor master_socket) const {
     epoll_fd_ = epoll_create1(0);
     if(epoll_fd_ == kDisconnectedSocketDescriptor) {
         auto err = GetLastError();
-        err->AddContext("where", "create epoll");
+        err->AddDetails("where", "create epoll");
         return err;
     }
     return AddToEpool(master_socket);
@@ -84,7 +84,7 @@ ListSocketDescriptors SystemIO::WaitSocketsActivity(SocketDescriptor master_sock
         }
         if (event_count < 0) {
             *err = GetLastError();
-            (*err)->AddContext("where", "epoll wait");
+            (*err)->AddDetails("where", "epoll wait");
             return {};
         }
 
diff --git a/common/cpp/src/system_io/system_io_linux_mac.cpp b/common/cpp/src/system_io/system_io_linux_mac.cpp
index 371c12e4d3464ac2478bab25c8733bf068f5989a..8aba5f76925436a59239ea434a42f1384dacb780 100644
--- a/common/cpp/src/system_io/system_io_linux_mac.cpp
+++ b/common/cpp/src/system_io/system_io_linux_mac.cpp
@@ -68,7 +68,7 @@ Error GetLastErrorFromErrno() {
         return IOErrorTemplates::kBrokenPipe.Generate();
     default:
         Error err = IOErrorTemplates::kUnknownIOError.Generate();
-        (*err).AddContext("Unknown error code: ", std::to_string(errno));
+            (*err).AddDetails("Unknown error code: ", std::to_string(errno));
         return err;
     }
 }
@@ -122,7 +122,7 @@ MessageMeta GetMessageMeta(const string& name, Error* err) {
 
     auto t_stat = FileStat(name, err);
     if (*err != nullptr) {
-        (*err)->AddContext("name", name);
+        (*err)->AddDetails("name", name);
         return MessageMeta{};
     }
 
@@ -157,7 +157,7 @@ void SystemIO::GetSubDirectoriesRecursively(const std::string& path, SubDirList*
     auto dir = opendir((path).c_str());
     if (dir == nullptr) {
         *err = GetLastError();
-        (*err)->AddContext("name", path);
+        (*err)->AddDetails("name", path);
         return;
     }
 
@@ -183,7 +183,7 @@ void SystemIO::CollectMessageMetarmationRecursively(const std::string& path,
     auto dir = opendir((path).c_str());
     if (dir == nullptr) {
         *err = GetLastError();
-        (*err)->AddContext("name", path);
+        (*err)->AddDetails("name", path);
         return;
     }
 
diff --git a/common/cpp/src/system_io/system_io_windows.cpp b/common/cpp/src/system_io/system_io_windows.cpp
index b847d747b70f0a9c4204ce375518453fbc505475..d8df3328f521effb03467346b5f8b8cef581d189 100644
--- a/common/cpp/src/system_io/system_io_windows.cpp
+++ b/common/cpp/src/system_io/system_io_windows.cpp
@@ -66,7 +66,7 @@ Error IOErrorFromGetLastError() {
     default:
         std::cout << "[IOErrorFromGetLastError] Unknown error code: " << last_error << std::endl;
         Error err = IOErrorTemplates::kUnknownIOError.Generate();
-        (*err).AddContext("Unknown error code", std::to_string(last_error));
+            (*err).AddDetails("Unknown error code", std::to_string(last_error));
         return err;
     }
 }
@@ -151,7 +151,7 @@ MessageMeta SystemIO::GetMessageMeta(const std::string& name, Error* err) const
     auto hFind = FindFirstFile(name.c_str(), &f);
     if (hFind == INVALID_HANDLE_VALUE) {
         *err = IOErrorFromGetLastError();
-        (*err)->AddContext("name", name);
+        (*err)->AddDetails("name", name);
         return {};
     }
     FindClose(hFind);
@@ -179,7 +179,7 @@ void SystemIO::GetSubDirectoriesRecursively(const std::string& path, SubDirList*
     HANDLE handle = FindFirstFile((path + "\\*.*").c_str(), &find_data);
     if (handle == INVALID_HANDLE_VALUE) {
         *err = IOErrorFromGetLastError();
-        (*err)->AddContext("name", path);
+        (*err)->AddDetails("name", path);
         return;
     }
 
@@ -208,7 +208,7 @@ void SystemIO::CollectMessageMetarmationRecursively(const std::string& path,
     HANDLE handle = FindFirstFile((path + "\\*.*").c_str(), &find_data);
     if (handle == INVALID_HANDLE_VALUE) {
         *err = IOErrorFromGetLastError();
-        (*err)->AddContext("name", path);
+        (*err)->AddDetails("name", path);
         return;
     }
 
diff --git a/common/cpp/unittests/common/test_error.cpp b/common/cpp/unittests/common/test_error.cpp
index c588ea0526be16f5977367ee9e5fdb36cdaf3cee..4d459ba1a8b9fcfda124f432f13bc2d1702e32d0 100644
--- a/common/cpp/unittests/common/test_error.cpp
+++ b/common/cpp/unittests/common/test_error.cpp
@@ -27,13 +27,13 @@ TEST(ErrorTemplate, Explain) {
     ASSERT_THAT(error->Explain(), HasSubstr("test"));
 }
 
-TEST(ErrorTemplate, Context) {
+TEST(ErrorTemplate, Details) {
     Error error = asapo::GeneralErrorTemplates::kEndOfFile.Generate("test");
-    error->AddContext("key", "value");
-    error->AddContext("key2", "value2");
+    error->AddDetails("key", "value");
+    error->AddDetails("key2", "value2");
 
     ASSERT_THAT(error->Explain(), AllOf(HasSubstr("test"),
-                                        HasSubstr("context"),
+                                        HasSubstr("details"),
                                         HasSubstr("key:value"),
                                         HasSubstr("key2:value2")
                                        ));
@@ -43,8 +43,8 @@ TEST(ErrorTemplate, Cause) {
     Error error = asapo::GeneralErrorTemplates::kEndOfFile.Generate("test");
     Error error_c = asapo::GeneralErrorTemplates::kMemoryAllocationError.Generate("cause_test");
     Error error_c1 = asapo::GeneralErrorTemplates::kSimpleError.Generate("simple error");
-    error->AddContext("key", "value");
-    error_c->AddContext("key2", "value2");
+    error->AddDetails("key", "value");
+    error_c->AddDetails("key2", "value2");
     error_c->SetCause(std::move(error_c1));
     error->SetCause(std::move(error_c));
     ASSERT_THAT(error->Explain(), AllOf(HasSubstr("test"),
@@ -64,10 +64,10 @@ TEST(ErrorTemplate, Cause) {
 TEST(ErrorTemplate, Json) {
     Error error = asapo::GeneralErrorTemplates::kEndOfFile.Generate("test");
     Error error_c = asapo::GeneralErrorTemplates::kMemoryAllocationError.Generate("cause_test");
-    error->AddContext("key", "value");
+    error->AddDetails("key", "value");
     error->SetCause(std::move(error_c));
     auto expected_string =
-        R"("error":"end of file","message":"test","context":{"key":"value"},"cause":{"error":"memory allocation","message":"cause_test"})";
+        R"("error":"end of file","message":"test","details":{"key":"value"},"cause":{"error":"memory allocation","message":"cause_test"})";
     ASSERT_THAT(error->ExplainInJSON(),  Eq(expected_string));
 }
 
diff --git a/consumer/api/cpp/src/consumer_impl.cpp b/consumer/api/cpp/src/consumer_impl.cpp
index 0fda0f43709ff1e1d72915856043e11244415f49..e20366e14109e3a8bc6cf21110041b50ac385284 100644
--- a/consumer/api/cpp/src/consumer_impl.cpp
+++ b/consumer/api/cpp/src/consumer_impl.cpp
@@ -124,7 +124,7 @@ Error ProcessRequestResponce(const RequestInfo& request,
     }
 
     if (err != nullptr) {
-        err->AddContext("host", request.host)->AddContext("api", "request.api");
+        err->AddDetails("host", request.host)->AddDetails("api", request.api);
     }
     return err;
 
diff --git a/producer/api/cpp/src/producer_impl.cpp b/producer/api/cpp/src/producer_impl.cpp
index a0b68f07018a2281f5df907387107f5164b3e3f2..80dd71e168d39bc0d1a77b037ce388ee5bce97ee 100644
--- a/producer/api/cpp/src/producer_impl.cpp
+++ b/producer/api/cpp/src/producer_impl.cpp
@@ -89,7 +89,7 @@ Error CheckDatasetInRequest(const MessageHeader& message_header) {
         return ProducerErrorTemplates::kWrongInput.Generate("dataset dimensions");
     }
 
-    if (message_header.auto_id) {
+    if (message_header.autwo_id) {
         return ProducerErrorTemplates::kWrongInput.Generate("auto id mode not implemented for datasets");
     }
 
diff --git a/producer/api/cpp/src/request_handler_tcp.cpp b/producer/api/cpp/src/request_handler_tcp.cpp
index 9595e3146b790beae689cb043978678cea7285db..defaa31a51e326d0c4329bf9fba0c6f6212b19e3 100644
--- a/producer/api/cpp/src/request_handler_tcp.cpp
+++ b/producer/api/cpp/src/request_handler_tcp.cpp
@@ -93,22 +93,22 @@ Error RequestHandlerTcp::ReceiveResponse(std::string* response) {
     switch (sendDataResponse.error_code) {
     case kNetAuthorizationError : {
         auto res_err = ProducerErrorTemplates::kWrongInput.Generate();
-        res_err->AddContext("response", sendDataResponse.message);
+        res_err->AddDetails("response", sendDataResponse.message);
         return res_err;
     }
     case kNetErrorNotSupported : {
         auto res_err = ProducerErrorTemplates::kUnsupportedClient.Generate();
-        res_err->AddContext("response", sendDataResponse.message);
+        res_err->AddDetails("response", sendDataResponse.message);
         return res_err;
     }
     case kNetErrorWrongRequest : {
         auto res_err = ProducerErrorTemplates::kWrongInput.Generate();
-        res_err->AddContext("response", sendDataResponse.message);
+        res_err->AddDetails("response", sendDataResponse.message);
         return res_err;
     }
     case kNetErrorWarning: {
         auto res_err = ProducerErrorTemplates::kServerWarning.Generate();
-        res_err->AddContext("response", sendDataResponse.message);
+        res_err->AddDetails("response", sendDataResponse.message);
         return res_err;
     }
     case kNetErrorReauthorize: {
@@ -122,7 +122,7 @@ Error RequestHandlerTcp::ReceiveResponse(std::string* response) {
         return nullptr;
     default:
         auto res_err = ProducerErrorTemplates::kInternalServerError.Generate();
-        res_err->AddContext("response", sendDataResponse.message);
+            res_err->AddDetails("response", sendDataResponse.message);
         return res_err;
     }
 }
diff --git a/receiver/src/receiver_data_server/net_server/rds_fabric_server.cpp b/receiver/src/receiver_data_server/net_server/rds_fabric_server.cpp
index a31ab18747093992b53c9665bbfaa5f6906f53ea..4df46716de5beb55056628bdbe6784685b255b9a 100644
--- a/receiver/src/receiver_data_server/net_server/rds_fabric_server.cpp
+++ b/receiver/src/receiver_data_server/net_server/rds_fabric_server.cpp
@@ -30,7 +30,7 @@ Error RdsFabricServer::Initialize() {
         return err;
     }
 
-    log__->Info("Started Fabric ReceiverDataServer at '" + server__->GetAddress() + "'");
+    log__->Info(LogMessageWithFields("started fabric data server").Append("address",server__->GetAddress()));
 
     return err;
 }
diff --git a/receiver/src/receiver_data_server/net_server/rds_tcp_server.cpp b/receiver/src/receiver_data_server/net_server/rds_tcp_server.cpp
index fc8efd3fee6b67a12a13681e71832a3be0ba7319..e1d983add1f2b912373530e5261fc7b9bd20132e 100644
--- a/receiver/src/receiver_data_server/net_server/rds_tcp_server.cpp
+++ b/receiver/src/receiver_data_server/net_server/rds_tcp_server.cpp
@@ -1,34 +1,38 @@
 #include "rds_tcp_server.h"
 #include "../receiver_data_server_logger.h"
+#include "../receiver_data_server_error.h"
 
 #include "asapo/io/io_factory.h"
 #include "asapo/common/networking.h"
 
 namespace asapo {
 
-RdsTcpServer::RdsTcpServer(std::string address, const AbstractLogger* logger) : io__{GenerateDefaultIO()}, log__{logger},
-    address_{std::move(address)} {}
+RdsTcpServer::RdsTcpServer(std::string address, const AbstractLogger *logger) : io__{GenerateDefaultIO()},
+                                                                                log__{logger},
+                                                                                address_{std::move(address)} {}
 
 Error RdsTcpServer::Initialize() {
-    Error err;
-    if (master_socket_ == kDisconnectedSocketDescriptor) {
-        master_socket_ = io__->CreateAndBindIPTCPSocketListener(address_, kMaxPendingConnections, &err);
-        if (!err) {
-            log__->Info("Started TCP ReceiverDataServer at '" + address_ + "'");
-        } else {
-            log__->Error("TCP ReceiverDataServer cannot listen on " + address_ + ": " + err->Explain());
-        }
+    if (master_socket_ != kDisconnectedSocketDescriptor) {
+        return GeneralErrorTemplates::kSimpleError.Generate("server was already initialized");
+    }
+    Error io_err;
+    master_socket_ = io__->CreateAndBindIPTCPSocketListener(address_, kMaxPendingConnections, &io_err);
+    if (!io_err) {
+        log__->Info(LogMessageWithFields("started TCP data server").Append("address", address_));
     } else {
-        err = GeneralErrorTemplates::kSimpleError.Generate("Server was already initialized");
+        auto err =
+            ReceiverDataServerErrorTemplates::kServerError.Generate("cannot start TCP data server", std::move(io_err));
+        err->AddDetails("address", address_);
+        return err;
     }
-    return err;
+    return nullptr;
 }
 
-ListSocketDescriptors RdsTcpServer::GetActiveSockets(Error* err) {
+ListSocketDescriptors RdsTcpServer::GetActiveSockets(Error *err) {
     std::vector<std::string> new_connections;
     auto sockets = io__->WaitSocketsActivity(master_socket_, &sockets_to_listen_, &new_connections, err);
-    for (auto& connection : new_connections) {
-        log__->Debug("new connection from " + connection);
+    for (auto &connection: new_connections) {
+        log__->Debug(LogMessageWithFields("new connection").Append("origin", connection));
     }
     return sockets;
 }
@@ -36,42 +40,44 @@ ListSocketDescriptors RdsTcpServer::GetActiveSockets(Error* err) {
 void RdsTcpServer::CloseSocket(SocketDescriptor socket) {
     sockets_to_listen_.erase(std::remove(sockets_to_listen_.begin(), sockets_to_listen_.end(), socket),
                              sockets_to_listen_.end());
-    log__->Debug("connection " + io__->AddressFromSocket(socket) + " closed");
+    log__->Debug(LogMessageWithFields("connection closed").Append("origin", io__->AddressFromSocket(socket)));
     io__->CloseSocket(socket, nullptr);
 }
 
-ReceiverDataServerRequestPtr RdsTcpServer::ReadRequest(SocketDescriptor socket, Error* err) {
+ReceiverDataServerRequestPtr RdsTcpServer::ReadRequest(SocketDescriptor socket, Error *err) {
     GenericRequestHeader header;
+    Error io_err;
+    *err = nullptr;
     io__->Receive(socket, &header,
-                  sizeof(GenericRequestHeader), err);
-    if (*err == GeneralErrorTemplates::kEndOfFile) {
+                  sizeof(GenericRequestHeader), &io_err);
+    if (io_err == GeneralErrorTemplates::kEndOfFile) {
         CloseSocket(socket);
         return nullptr;
-    } else if (*err) {
-        log__->Error("error getting next request from " + io__->AddressFromSocket(socket) + ": " + (*err)->
-                     Explain()
-                    );
+    } else if (io_err) {
+        *err = ReceiverDataServerErrorTemplates::kServerError.Generate("error getting next request",std::move(io_err));
+        (*err)->AddDetails("origin",io__->AddressFromSocket(socket));
         return nullptr;
     }
     return ReceiverDataServerRequestPtr{new ReceiverDataServerRequest{header, (uint64_t) socket}};
 }
 
-GenericRequests RdsTcpServer::ReadRequests(const ListSocketDescriptors& sockets) {
+GenericRequests RdsTcpServer::ReadRequests(const ListSocketDescriptors &sockets) {
     GenericRequests requests;
-    for (auto client : sockets) {
+    for (auto client: sockets) {
         Error err;
         auto request = ReadRequest(client, &err);
         if (err) {
             continue;
         }
-        log__->Debug("received request opcode: " + std::to_string(request->header.op_code) + " id: " + std::to_string(
-                         request->header.data_id));
+        log__->Debug(LogMessageWithFields("received request").
+            Append("operation", OpcodeToString(request->header.op_code)).
+            Append("id", request->header.data_id));
         requests.emplace_back(std::move(request));
     }
     return requests;
 }
 
-GenericRequests RdsTcpServer::GetNewRequests(Error* err) {
+GenericRequests RdsTcpServer::GetNewRequests(Error *err) {
     auto sockets = GetActiveSockets(err);
     if (*err) {
         return {};
@@ -82,7 +88,7 @@ GenericRequests RdsTcpServer::GetNewRequests(Error* err) {
 
 RdsTcpServer::~RdsTcpServer() {
     if (!io__) return; // need for test that override io__ to run
-    for (auto client : sockets_to_listen_) {
+    for (auto client: sockets_to_listen_) {
         io__->CloseSocket(client, nullptr);
     }
     io__->CloseSocket(master_socket_, nullptr);
@@ -92,28 +98,31 @@ void RdsTcpServer::HandleAfterError(uint64_t source_id) {
     CloseSocket(static_cast<int>(source_id));
 }
 
-Error RdsTcpServer::SendResponse(const ReceiverDataServerRequest* request, const GenericNetworkResponse* response) {
-    Error err;
-    io__->Send(static_cast<int>(request->source_id), response, sizeof(*response), &err);
-    if (err) {
-        log__->Error("cannot send to consumer" + err->Explain());
+Error RdsTcpServer::SendResponse(const ReceiverDataServerRequest *request, const GenericNetworkResponse *response) {
+    Error io_err,err;
+    auto socket= static_cast<int>(request->source_id);
+    io__->Send(socket, response, sizeof(*response), &io_err);
+    if (io_err) {
+        err = ReceiverDataServerErrorTemplates::kServerError.Generate("error sending response",std::move(io_err));
+        err->AddDetails("origin",io__->AddressFromSocket(socket));
     }
     return err;
 }
 
 Error
-RdsTcpServer::SendResponseAndSlotData(const ReceiverDataServerRequest* request, const GenericNetworkResponse* response,
-                                      const CacheMeta* cache_slot) {
+RdsTcpServer::SendResponseAndSlotData(const ReceiverDataServerRequest *request, const GenericNetworkResponse *response,
+                                      const CacheMeta *cache_slot) {
     Error err;
-
     err = SendResponse(request, response);
     if (err) {
         return err;
     }
-
-    io__->Send(static_cast<int>(request->source_id), cache_slot->addr, cache_slot->size, &err);
-    if (err) {
-        log__->Error("cannot send slot to worker" + err->Explain());
+    Error io_err;
+    auto socket= static_cast<int>(request->source_id);
+    io__->Send(socket, cache_slot->addr, cache_slot->size, &io_err);
+    if (io_err) {
+        err = ReceiverDataServerErrorTemplates::kServerError.Generate("error sending slot data",std::move(io_err));
+        err->AddDetails("origin",io__->AddressFromSocket(socket));
     }
     return err;
 }
diff --git a/receiver/src/receiver_data_server/receiver_data_server.cpp b/receiver/src/receiver_data_server/receiver_data_server.cpp
index 1dd311a908276934e5f0ef80c8baca839d203044..3ac686056c5e58887e388e3711e6a9283db230c9 100644
--- a/receiver/src/receiver_data_server/receiver_data_server.cpp
+++ b/receiver/src/receiver_data_server/receiver_data_server.cpp
@@ -24,12 +24,11 @@ void ReceiverDataServer::Run() {
         if (err == IOErrorTemplates::kTimeout) {
             continue;
         }
-
         if (!err) {
             err = request_pool__->AddRequests(std::move(requests));
         }
         if (err) {
-            log__->Error(std::string("receiver data server stopped: ") + err->Explain());
+            log__->Error(LogMessageWithFields("receiver data server stopped").Append("cause",std::move(err)));
             return;
         }
     }
diff --git a/receiver/src/receiver_data_server/receiver_data_server_error.h b/receiver/src/receiver_data_server/receiver_data_server_error.h
index 3e2e48601aa4b2d886ba216b7d731a15c593bfd7..be9bd21d5311d405f3cf8f1e993cb5a197a6db26 100644
--- a/receiver/src/receiver_data_server/receiver_data_server_error.h
+++ b/receiver/src/receiver_data_server/receiver_data_server_error.h
@@ -7,7 +7,8 @@ namespace asapo {
 
 enum class ReceiverDataServerErrorType {
     kMemoryPool,
-    kWrongRequest
+    kWrongRequest,
+    kServerError
 };
 
 using ReceiverDataServerErrorTemplate = ServiceErrorTemplate<ReceiverDataServerErrorType>;
@@ -21,6 +22,9 @@ auto const kWrongRequest = ReceiverDataServerErrorTemplate {
     "wrong request", ReceiverDataServerErrorType::kWrongRequest
 };
 
+auto const kServerError = ReceiverDataServerErrorTemplate {
+    "server error", ReceiverDataServerErrorType::kServerError
+};
 
 }
 }
diff --git a/receiver/src/receiver_data_server/request_handler/receiver_data_server_request_handler.cpp b/receiver/src/receiver_data_server/request_handler/receiver_data_server_request_handler.cpp
index f2409de029b5cb2cfcb49b469ed16a8d5b13f987..3ecec5d8811bb8551e6c671e08dc8befa9a2ecab 100644
--- a/receiver/src/receiver_data_server/request_handler/receiver_data_server_request_handler.cpp
+++ b/receiver/src/receiver_data_server/request_handler/receiver_data_server_request_handler.cpp
@@ -92,7 +92,10 @@ void ReceiverDataServerRequestHandler::ProcessRequestTimeoutUnlocked(GenericRequ
 
 void ReceiverDataServerRequestHandler::HandleInvalidRequest(const ReceiverDataServerRequest* receiver_request,
         NetworkErrorCode code) {
-    SendResponse(receiver_request, code);
+    auto err = SendResponse(receiver_request, code);
+    if (err) {
+        log__->Error(err);
+    }
     server_->HandleAfterError(receiver_request->source_id);
     switch (code) {
     case NetworkErrorCode::kNetErrorWrongRequest:
@@ -111,8 +114,8 @@ void ReceiverDataServerRequestHandler::HandleValidRequest(const ReceiverDataServ
         const CacheMeta* meta) {
     auto err = SendResponseAndSlotData(receiver_request, meta);
     if (err) {
-        log__->Error("failed to send slot:" + err->Explain());
         server_->HandleAfterError(receiver_request->source_id);
+        log__->Error(err);
     } else {
         statistics__->IncreaseRequestCounter();
         statistics__->IncreaseRequestDataVolume(receiver_request->header.data_size);
diff --git a/receiver/src/request.cpp b/receiver/src/request.cpp
index 0c4ed721b105dc68bf7a93c044ecc8b71150d212..25172a9abf261044f31f6fc272b5d9ea23aedb3f 100644
--- a/receiver/src/request.cpp
+++ b/receiver/src/request.cpp
@@ -18,7 +18,9 @@ Error Request::PrepareDataBufferAndLockIfNeeded() {
         try {
             data_buffer_.reset(new uint8_t[(size_t)request_header_.data_size]);
         } catch(std::exception& e) {
-            auto err = GeneralErrorTemplates::kMemoryAllocationError.Generate(e.what());
+            auto err = GeneralErrorTemplates::kMemoryAllocationError.Generate(
+                std::string("cannot allocate memory for request"));
+            err->AddDetails("reason", e.what())->AddDetails("size", std::to_string(request_header_.data_size));
             return err;
         }
     } else {
@@ -27,7 +29,9 @@ Error Request::PrepareDataBufferAndLockIfNeeded() {
         if (data_ptr) {
             slot_meta_ = slot;
         } else {
-            return GeneralErrorTemplates::kMemoryAllocationError.Generate("cannot allocate slot in cache");
+            auto err = GeneralErrorTemplates::kMemoryAllocationError.Generate("cannot allocate slot in cache");
+            err->AddDetails("size", std::to_string(request_header_.data_size));
+            return err;
         }
     }
     return nullptr;
diff --git a/receiver/src/request_handler/authorization_client.cpp b/receiver/src/request_handler/authorization_client.cpp
index 183fac7cb8fd1e2d2b9de895704f22f7993c5303..cb5c737f421783871b05d0d8f83e4ae98b96248d 100644
--- a/receiver/src/request_handler/authorization_client.cpp
+++ b/receiver/src/request_handler/authorization_client.cpp
@@ -26,7 +26,7 @@ Error ErrorFromAuthorizationServerResponse(Error err, const std::string response
     } else {
         if (code != HttpCode::Unauthorized) {
             return_err = asapo::ReceiverErrorTemplates::kInternalServerError.Generate();
-            return_err->AddContext("response", response)->AddContext("errorCode", std::to_string(int(
+            return_err->AddDetails("response", response)->AddDetails("errorCode", std::to_string(int(
                 code)));
         } else {
             return_err = asapo::ReceiverErrorTemplates::kAuthorizationFailure.Generate();
@@ -45,7 +45,7 @@ Error CheckAccessType(SourceType source_type, const std::vector<std::string> &ac
         for (size_t i = 0; i < access_types.size(); i++) {
             types += (i > 0 ? "," : "") + access_types[i];
         }
-        err->AddContext("expected", source_type == SourceType::kProcessed ? "write" : "writeraw")->AddContext("have",
+        err->AddDetails("expected", source_type == SourceType::kProcessed ? "write" : "writeraw")->AddDetails("have",
                                                                                                               types);
         return err;
     }
diff --git a/receiver/src/request_handler/file_processors/receive_file_processor.cpp b/receiver/src/request_handler/file_processors/receive_file_processor.cpp
index 3ff0d607e6c98e7d30d9f5dcc0e0e4cc12d0ae08..02da8d258b2471bbd524cdd71989eeea9ecacdf2 100644
--- a/receiver/src/request_handler/file_processors/receive_file_processor.cpp
+++ b/receiver/src/request_handler/file_processors/receive_file_processor.cpp
@@ -5,6 +5,7 @@
 #include "../../receiver_error.h"
 #include "../../request.h"
 #include "../../receiver_config.h"
+#include "../../receiver_logger.h"
 
 namespace asapo {
 
@@ -23,7 +24,8 @@ Error ReceiveFileProcessor::ProcessFile(const Request* request, bool overwrite)
     }
     err =  io__->ReceiveDataToFile(socket, root_folder, fname, (size_t) fsize, true, overwrite);
     if (!err) {
-        log__->Debug("received file of size " + std::to_string(fsize) + " to " + root_folder + kPathSeparator + fname);
+        log__->Debug(RequestLog("received file", request).Append("size",std::to_string(fsize)).Append("name",
+                root_folder + kPathSeparator + fname));
     }
     return err;
 }
diff --git a/receiver/src/request_handler/file_processors/write_file_processor.cpp b/receiver/src/request_handler/file_processors/write_file_processor.cpp
index 3dcc5ae0076116e780f2d4ebc76e0bdaebfab68f..e9886926f32c749692b6af7dc8d204144fb5b446 100644
--- a/receiver/src/request_handler/file_processors/write_file_processor.cpp
+++ b/receiver/src/request_handler/file_processors/write_file_processor.cpp
@@ -3,6 +3,7 @@
 #include "asapo/preprocessor/definitions.h"
 #include "../../receiver_error.h"
 #include "../../request.h"
+#include "../../receiver_logger.h"
 
 namespace asapo {
 
@@ -14,7 +15,9 @@ WriteFileProcessor::WriteFileProcessor() : FileProcessor()  {
 Error WriteFileProcessor::ProcessFile(const Request* request, bool overwrite) const {
     auto fsize = request->GetDataSize();
     if (fsize <= 0) {
-        return ReceiverErrorTemplates::kBadRequest.Generate("wrong file size");
+        auto err = ReceiverErrorTemplates::kBadRequest.Generate("wrong file size");
+        err->AddDetails("size",std::to_string(fsize));
+        return err;
     }
 
     auto data = request->GetData();
@@ -27,7 +30,8 @@ Error WriteFileProcessor::ProcessFile(const Request* request, bool overwrite) co
 
     err =  io__->WriteDataToFile(root_folder, fname, (uint8_t*)data, (size_t) fsize, true, overwrite);
     if (!err) {
-        log__->Debug("saved file of size " + std::to_string(fsize) + " to " + root_folder + kPathSeparator + fname);
+        log__->Debug(RequestLog("saved file", request).Append("size",std::to_string(fsize)).Append("name",
+                                                                                                      root_folder + kPathSeparator + fname));
     }
 
     return err;
diff --git a/receiver/src/request_handler/request_handler_authorize.cpp b/receiver/src/request_handler/request_handler_authorize.cpp
index f29681fec5f094fadd82c1394605d7d985d90933..bb158c38e4d168ea1d71292edc79091f196e02a7 100644
--- a/receiver/src/request_handler/request_handler_authorize.cpp
+++ b/receiver/src/request_handler/request_handler_authorize.cpp
@@ -15,7 +15,7 @@ Error RequestHandlerAuthorize::CheckVersion(const Request* request) const {
     int verService = VersionToNumber(GetReceiverApiVersion());
     if (verClient > verService) {
         auto err = asapo::ReceiverErrorTemplates::kUnsupportedClient.Generate();
-        err->AddContext("client",version_from_client)->AddContext("server",GetReceiverApiVersion());
+        err->AddDetails("client", version_from_client)->AddDetails("server", GetReceiverApiVersion());
         return err;
     }
     return nullptr;
diff --git a/receiver/src/request_handler/request_handler_db.cpp b/receiver/src/request_handler/request_handler_db.cpp
index fea6e82467656c132cd83a3300bb24f38f659d05..ed201b17952bf180f03dd4aab6e0c2821acdde50 100644
--- a/receiver/src/request_handler/request_handler_db.cpp
+++ b/receiver/src/request_handler/request_handler_db.cpp
@@ -43,13 +43,14 @@ Error RequestHandlerDb::GetDatabaseServerUri(std::string* uri) const {
                      Append("origin", GetReceiverConfig()->discovery_server));
         auto err = ReceiverErrorTemplates::kInternalServerError.Generate("http error while discovering database server",
                 std::move(http_err));
-        err->AddContext("discoveryEndpoint",GetReceiverConfig()->discovery_server);
+        err->AddDetails("discoveryEndpoint", GetReceiverConfig()->discovery_server);
         return err;
     }
 
     if (code != HttpCode::OK) {
         auto err =  ReceiverErrorTemplates::kInternalServerError.Generate("error when discover database server");
-        err->AddContext("discoveryEndpoint",GetReceiverConfig()->discovery_server)->AddContext("errorCode",std::to_string((int) code));
+        err->AddDetails("discoveryEndpoint", GetReceiverConfig()->discovery_server)->AddDetails("errorCode",
+                                                                                                std::to_string((int) code));
         return err;
     }
 
diff --git a/receiver/src/request_handler/request_handler_receive_data.cpp b/receiver/src/request_handler/request_handler_receive_data.cpp
index 8c840c0266e684acae2eb7f3e4801c710102e44c..e81a5e30402ef70c533930b0b4b662ad42933146 100644
--- a/receiver/src/request_handler/request_handler_receive_data.cpp
+++ b/receiver/src/request_handler/request_handler_receive_data.cpp
@@ -18,8 +18,16 @@ Error RequestHandlerReceiveData::ProcessRequest(Request* request) const {
     if (err) {
         return err;
     }
-    io__->Receive(request->GetSocket(), request->GetData(), (size_t) request->GetDataSize(), &err);
+    Error io_err;
+    io__->Receive(request->GetSocket(), request->GetData(), (size_t) request->GetDataSize(), &io_err);
+    if (io_err) {
+        err = ReceiverErrorTemplates::kProcessingError.Generate("cannot receive data",std::move(io_err));
+    }
     request->UnlockDataBufferIfNeeded();
+    if (err == nullptr) {
+        log__->Debug(RequestLog("received request data", request).Append("size",request->GetDataSize()));
+    }
+
     return err;
 }
 
diff --git a/receiver/src/request_handler/request_handler_receive_metadata.cpp b/receiver/src/request_handler/request_handler_receive_metadata.cpp
index 71aab0b7423f5c767aa03075b2eb5e25bea1f41d..6e0826a15012a7875853109d90cf6933d7c3b93f 100644
--- a/receiver/src/request_handler/request_handler_receive_metadata.cpp
+++ b/receiver/src/request_handler/request_handler_receive_metadata.cpp
@@ -15,9 +15,9 @@ Error RequestHandlerReceiveMetaData::ProcessRequest(Request* request) const {
     auto buf = std::unique_ptr<uint8_t[]> {new uint8_t[meta_size]};
     io__->Receive(request->GetSocket(), (void*) buf.get(), meta_size, &err);
     if (err) {
-        return err;
+        return ReceiverErrorTemplates::kProcessingError.Generate("cannot receive metadata",std::move(err));
     }
-
+    log__->Debug(RequestLog("received request metadata", request).Append("size",meta_size));
     request->SetMetadata(std::string((char*)buf.get(), meta_size));
     return nullptr;
 }
diff --git a/receiver/unittests/request_handler/file_processors/test_receive_file_processor.cpp b/receiver/unittests/request_handler/file_processors/test_receive_file_processor.cpp
index 0fe70c057a2890bc0cb0a01fe5c8d7aabb419014..81d8aa89096d6f2aba5060005e07a6c68e55a73f 100644
--- a/receiver/unittests/request_handler/file_processors/test_receive_file_processor.cpp
+++ b/receiver/unittests/request_handler/file_processors/test_receive_file_processor.cpp
@@ -27,7 +27,7 @@ class ReceiveFileProcessorTests : public Test {
   public:
     ReceiveFileProcessor processor;
     NiceMock<MockIO> mock_io;
-    std::unique_ptr<MockRequest> mock_request;
+    std::unique_ptr<NiceMock<MockRequest>> mock_request;
     NiceMock<asapo::MockLogger> mock_logger;
     SocketDescriptor expected_socket_id = SocketDescriptor{1};
     std::string expected_file_name = std::string("processed") + asapo::kPathSeparator + std::string("2");
@@ -54,8 +54,10 @@ class ReceiveFileProcessorTests : public Test {
         asapo::ReceiverConfig test_config;
         asapo::SetReceiverConfig(test_config, "none");
         processor.log__ = &mock_logger;
-        mock_request.reset(new MockRequest{request_header, 1, "", nullptr});
+        mock_request.reset(new NiceMock<MockRequest>{request_header, 1, "", nullptr});
         processor.io__ = std::unique_ptr<asapo::IO> {&mock_io};
+        SetDefaultRequestCalls(mock_request.get(),expected_beamtime_id);
+
     }
     void TearDown() override {
         processor.io__.release();
@@ -119,7 +121,6 @@ TEST_F(ReceiveFileProcessorTests, WritesToLog) {
 
     EXPECT_CALL(mock_logger, Debug(AllOf(HasSubstr("received file"),
                                          HasSubstr(expected_file_name),
-                                         HasSubstr(expected_beamtime_id),
                                          HasSubstr(std::to_string(expected_file_size))
                                         )
                                   )
diff --git a/receiver/unittests/request_handler/file_processors/test_write_file_processor.cpp b/receiver/unittests/request_handler/file_processors/test_write_file_processor.cpp
index bead654171b2962415c58e6e9c28aa08c6c9d4b8..5a4e77115230a99db29e52e9e3edd96d0179daf4 100644
--- a/receiver/unittests/request_handler/file_processors/test_write_file_processor.cpp
+++ b/receiver/unittests/request_handler/file_processors/test_write_file_processor.cpp
@@ -27,7 +27,7 @@ class WriteFileProcessorTests : public Test {
   public:
     WriteFileProcessor processor;
     NiceMock<MockIO> mock_io;
-    std::unique_ptr<MockRequest> mock_request;
+    std::unique_ptr<NiceMock<MockRequest>> mock_request;
     NiceMock<asapo::MockLogger> mock_logger;
     std::string expected_file_name = std::string("raw") + asapo::kPathSeparator + std::string("2");
     asapo::SourceType expected_source_type = asapo::SourceType::kRaw;
@@ -53,8 +53,10 @@ class WriteFileProcessorTests : public Test {
         asapo::ReceiverConfig test_config;
         asapo::SetReceiverConfig(test_config, "none");
         processor.log__ = &mock_logger;
-        mock_request.reset(new MockRequest{request_header, 1, "", nullptr});
+        mock_request.reset(new NiceMock<MockRequest>{request_header, 1, "", nullptr});
         processor.io__ = std::unique_ptr<asapo::IO> {&mock_io};
+        SetDefaultRequestCalls(mock_request.get(),expected_beamtime_id);
+
     }
     void TearDown() override {
         processor.io__.release();
@@ -114,15 +116,8 @@ TEST_F(WriteFileProcessorTests, WritesToLog) {
 
     ExpectFileWrite(nullptr);
 
-    EXPECT_CALL(mock_logger, Debug(AllOf(HasSubstr("saved file"),
-                                         HasSubstr(expected_file_name),
-                                         HasSubstr(expected_beamtime_id),
-                                         HasSubstr(expected_facility),
-                                         HasSubstr(expected_year),
-                                         HasSubstr(std::to_string(expected_file_size))
-                                        )
-                                  )
-               );
+    EXPECT_CALL(mock_logger, Debug(HasSubstr("saved file")));
+
     auto err = processor.ProcessFile(mock_request.get(), expected_overwrite);
     ASSERT_THAT(err, Eq(nullptr));
 }
diff --git a/receiver/unittests/request_handler/test_request_handler_receive_data.cpp b/receiver/unittests/request_handler/test_request_handler_receive_data.cpp
index d3e679b7c4f57a3459975acf9e0ff18698001b82..8d734e18cad50406bf4e1b06dad2acb6da103e30 100644
--- a/receiver/unittests/request_handler/test_request_handler_receive_data.cpp
+++ b/receiver/unittests/request_handler/test_request_handler_receive_data.cpp
@@ -109,7 +109,7 @@ TEST_F(ReceiveDataHandlerTests, HandleDoesNotReceiveDataWhenMetadataOnlyWasSent)
 TEST_F(ReceiveDataHandlerTests, HandleReturnsErrorOnDataReceive) {
     ExpectReceiveData(false);
     auto err = handler.ProcessRequest(request.get());
-    ASSERT_THAT(err, Eq(asapo::IOErrorTemplates::kReadError));
+    ASSERT_THAT(err, Eq(asapo::ReceiverErrorTemplates::kProcessingError));
 }
 
 TEST_F(ReceiveDataHandlerTests, HandleReturnsOK) {
diff --git a/receiver/unittests/request_handler/test_request_handler_receive_metadata.cpp b/receiver/unittests/request_handler/test_request_handler_receive_metadata.cpp
index 99b3e4ed5136293068adacbfa3413e763c858266..0b15844d47183ea15cb24edda92596dafa46030d 100644
--- a/receiver/unittests/request_handler/test_request_handler_receive_metadata.cpp
+++ b/receiver/unittests/request_handler/test_request_handler_receive_metadata.cpp
@@ -87,7 +87,7 @@ TEST_F(ReceiveMetaDataHandlerTests, CheckStatisticEntity) {
 TEST_F(ReceiveMetaDataHandlerTests, HandleReturnsErrorOnMetaDataReceive) {
     ExpectReceiveMetaData(false);
     auto err = handler.ProcessRequest(request.get());
-    ASSERT_THAT(err, Eq(asapo::IOErrorTemplates::kReadError));
+    ASSERT_THAT(err, Eq(asapo::ReceiverErrorTemplates::kProcessingError));
 }
 
 TEST_F(ReceiveMetaDataHandlerTests, HandleReturnsOK) {
diff --git a/tests/automatic/system_io/read_folder_content/CMakeLists.txt b/tests/automatic/system_io/read_folder_content/CMakeLists.txt
index 42bc1ec48ee536502e96f50e1ae26b59fac96683..222ab458578c58e4426d79152ed2a7fa14237361 100644
--- a/tests/automatic/system_io/read_folder_content/CMakeLists.txt
+++ b/tests/automatic/system_io/read_folder_content/CMakeLists.txt
@@ -27,6 +27,6 @@ ELSE()
 ENDIF(WIN32)
 
 
-add_integration_test(${TARGET_NAME} foldernotfound "test_notexist error:Nosuchfileordirectory,context:name:test_notexist")
-add_integration_test(${TARGET_NAME} foldernoaccess "test_noaccess1 error:Permissiondenied,context:name:test_noaccess1")
+add_integration_test(${TARGET_NAME} foldernotfound "test_notexist error:Nosuchfileordirectory,details:name:test_notexist")
+add_integration_test(${TARGET_NAME} foldernoaccess "test_noaccess1 error:Permissiondenied,details:name:test_noaccess1")
 
diff --git a/tests/automatic/system_io/read_string_from_file/CMakeLists.txt b/tests/automatic/system_io/read_string_from_file/CMakeLists.txt
index 8cfa3aed8aecbc37b1b8643f8812e9687c5f433d..358742805704fd81b1b53bc4c5f1a4e5b5bdad2f 100644
--- a/tests/automatic/system_io/read_string_from_file/CMakeLists.txt
+++ b/tests/automatic/system_io/read_string_from_file/CMakeLists.txt
@@ -16,6 +16,6 @@ set_target_properties(${TARGET_NAME} PROPERTIES LINKER_LANGUAGE CXX)
 
 add_test_setup_cleanup(${TARGET_NAME})
 add_integration_test(${TARGET_NAME} readfile "test/1 123")
-add_integration_test(${TARGET_NAME} filenotfound "test_notexist error:Nosuchfileordirectory,context:name:test_notexist")
-add_integration_test(${TARGET_NAME} filenoaccess "file_noaccess error:Permissiondenied,context:name:file_noaccess")
+add_integration_test(${TARGET_NAME} filenotfound "test_notexist error:Nosuchfileordirectory,details:name:test_notexist")
+add_integration_test(${TARGET_NAME} filenoaccess "file_noaccess error:Permissiondenied,details:name:file_noaccess")
 
diff --git a/tests/automatic/system_io/read_subdirectories/CMakeLists.txt b/tests/automatic/system_io/read_subdirectories/CMakeLists.txt
index ab9b1908fa01a83bee13dfd7bf19ea9332c19cd4..837b0c6b1e04768c898c6bd4df1ffbbf685d8e18 100644
--- a/tests/automatic/system_io/read_subdirectories/CMakeLists.txt
+++ b/tests/automatic/system_io/read_subdirectories/CMakeLists.txt
@@ -27,6 +27,6 @@ ELSE()
 ENDIF(WIN32)
 
 
-add_integration_test(${TARGET_NAME} foldernotfound "test_notexist error:Nosuchfileordirectory,context:name:test_notexist")
-add_integration_test(${TARGET_NAME} foldernoaccess "test_noaccess1 error:Permissiondenied,context:name:test_noaccess1")
+add_integration_test(${TARGET_NAME} foldernotfound "test_notexist error:Nosuchfileordirectory,details:name:test_notexist")
+add_integration_test(${TARGET_NAME} foldernoaccess "test_noaccess1 error:Permissiondenied,details:name:test_noaccess1")