diff --git a/common/cpp/include/asapo/common/error.tpp b/common/cpp/include/asapo/common/error.tpp
index a48955d2b3677e4bdd439f970bcf3a3074594dce..aa14d4015d95d0b5bd9e0e0da0904dccac2620f7 100644
--- a/common/cpp/include/asapo/common/error.tpp
+++ b/common/cpp/include/asapo/common/error.tpp
@@ -38,7 +38,7 @@ std::string ServiceError<ServiceErrorType>::ExplainPretty(uint8_t shift) const n
         err += "\n" + base_shift + shift_s + "message: " + error_message_;
     }
     if (!details_.empty()) {
-        err += "\n" + base_shift + shift_s + "context: ";
+        err += "\n" + base_shift + shift_s + "details: ";
         auto i = 0;
         for (const auto &kv : details_) {
             err += (i > 0 ? ", " : "") + kv.first + ":" + kv.second;
@@ -94,7 +94,7 @@ std::string ServiceError<ServiceErrorType>::ExplainInJSON() const noexcept {
         err += "," + WrapInQuotes("message") + ":" + WrapInQuotes(error_message_);
     }
     if (!details_.empty()) {
-        err += "," + WrapInQuotes("context") + ":{";
+        err += "," + WrapInQuotes("details") + ":{";
         auto i = 0;
         for (const auto &kv : details_) {
             err += (i > 0 ? ", " : "") + WrapInQuotes(kv.first) + ":" + WrapInQuotes(kv.second);
diff --git a/common/cpp/src/database/mongodb_client.cpp b/common/cpp/src/database/mongodb_client.cpp
index 50db4ae16cccf1f3dacd8701e708cb7e2c3ba968..eff22561e7020a6d997145291760ac6c0d67a70b 100644
--- a/common/cpp/src/database/mongodb_client.cpp
+++ b/common/cpp/src/database/mongodb_client.cpp
@@ -163,7 +163,7 @@ bson_p PrepareUpdateDocument(const uint8_t* json, Error* err) {
     std::string json_flat;
     auto parser_err = parser.GetFlattenedString("meta", ".", &json_flat);
     if (parser_err) {
-        *err = DBErrorTemplates::kJsonParseError.Generate("cannof flatten meta " + parser_err->Explain());
+        *err = DBErrorTemplates::kJsonParseError.Generate("cannof flatten meta ",std::move(parser_err));
         return nullptr;
     }
     bson_error_t mongo_err;
@@ -832,7 +832,7 @@ Error MongoDBClient::GetMetaFromDb(const std::string& collection, const std::str
     err = parser.Embedded("meta").GetRawString(res);
     if (err) {
         return DBErrorTemplates::kJsonParseError.Generate(
-                   "GetMetaFromDb: cannot parse database response: " + err->Explain());
+                   "GetMetaFromDb: cannot parse database response",std::move(err));
     }
     return nullptr;
 }
diff --git a/common/cpp/src/system_io/system_io.cpp b/common/cpp/src/system_io/system_io.cpp
index 8a5b403f3be6b83bfe71660d9be749a7a296acfe..d19f0f46fada88b333e15763c3ea027937e79e6c 100644
--- a/common/cpp/src/system_io/system_io.cpp
+++ b/common/cpp/src/system_io/system_io.cpp
@@ -167,7 +167,8 @@ FileDescriptor SystemIO::OpenWithCreateFolders(const std::string& root_folder, c
     if (*err == IOErrorTemplates::kFileNotFound && create_directories)  {
         size_t pos = fname.rfind(kPathSeparator);
         if (pos == std::string::npos) {
-            *err = IOErrorTemplates::kFileNotFound.Generate(full_name);
+            *err = IOErrorTemplates::kFileNotFound.Generate();
+            (*err)->AddDetails("name",fname);
             return -1;
         }
         *err = CreateDirectoryWithParents(root_folder, fname.substr(0, pos));
diff --git a/consumer/api/cpp/src/consumer.cpp b/consumer/api/cpp/src/consumer.cpp
index ea1fa64a91c5ec917fd05bf6b41c55baaa57523d..df44db24b879b5a268dd738e35f1c1556c69e52c 100644
--- a/consumer/api/cpp/src/consumer.cpp
+++ b/consumer/api/cpp/src/consumer.cpp
@@ -10,7 +10,7 @@ std::unique_ptr<Consumer> Create(const std::string& source_name,
                                  Error* error,
                                  Args&& ... args) noexcept {
     if (source_name.empty()) {
-        *error = ConsumerErrorTemplates::kWrongInput.Generate("Empty Data Source");
+        *error = ConsumerErrorTemplates::kWrongInput.Generate("empty data source");
         return nullptr;
     }
 
diff --git a/consumer/api/cpp/src/consumer_impl.cpp b/consumer/api/cpp/src/consumer_impl.cpp
index e20366e14109e3a8bc6cf21110041b50ac385284..18abec7a70d575ef4316f924634ab749846040da 100644
--- a/consumer/api/cpp/src/consumer_impl.cpp
+++ b/consumer/api/cpp/src/consumer_impl.cpp
@@ -48,7 +48,9 @@ Error ConsumerErrorFromPartialDataResponse(const std::string& response) {
     PartialErrorData data;
     auto parse_error = GetPartialDataResponseFromJson(response, &data);
     if (parse_error) {
-        return ConsumerErrorTemplates::kInterruptedTransaction.Generate("malformed response - " + response);
+        auto err = ConsumerErrorTemplates::kInterruptedTransaction.Generate("malformed response" );
+        err->AddDetails("response",response);
+        return err;
     }
     auto err = ConsumerErrorTemplates::kPartialData.Generate();
     PartialErrorData* error_data = new PartialErrorData{data};
@@ -219,9 +221,8 @@ Error ConsumerImpl::ProcessDiscoverServiceResult(Error err, std::string* uri_to_
         if (err == ConsumerErrorTemplates::kUnsupportedClient) {
             return err;
         }
-        return ConsumerErrorTemplates::kUnavailableService.Generate(" on " + endpoint_
-                + (err != nullptr ? ": " + err->Explain()
-                   : ""));
+        auto ret_err = ConsumerErrorTemplates::kUnavailableService.Generate(std::move(err));
+        return ret_err;
     }
     return nullptr;
 }
@@ -244,7 +245,8 @@ bool ConsumerImpl::SwitchToGetByIdIfPartialData(Error* err,
     if (*err == ConsumerErrorTemplates::kPartialData) {
         auto error_data = static_cast<const PartialErrorData*>((*err)->GetCustomData());
         if (error_data == nullptr) {
-            *err = ConsumerErrorTemplates::kInterruptedTransaction.Generate("malformed response - " + response);
+            *err = ConsumerErrorTemplates::kInterruptedTransaction.Generate("malformed response");
+            (*err)->AddDetails("response",response);
             return false;
         }
         *redirect_uri = std::to_string(error_data->id);
@@ -428,7 +430,7 @@ Error ConsumerImpl::GetDataFromFile(MessageMeta* info, MessageData* data) {
                                             (system_clock::now() - start).count());
     }
     if (err != nullptr) {
-        return ConsumerErrorTemplates::kLocalIOError.Generate(err->Explain());
+        return ConsumerErrorTemplates::kLocalIOError.Generate(std::move(err));
     }
     return nullptr;
 }
@@ -654,7 +656,8 @@ std::string ConsumerImpl::GetStreamMeta(const std::string& stream, Error* err) {
 DataSet DecodeDatasetFromResponse(std::string response, Error* err) {
     DataSet res;
     if (!res.SetFromJson(std::move(response))) {
-        *err = ConsumerErrorTemplates::kInterruptedTransaction.Generate("malformed response:" + response);
+        *err = ConsumerErrorTemplates::kInterruptedTransaction.Generate("malformed response");
+        (*err)->AddDetails("response",response);
         return {0, 0, MessageMetas{}};
     } else {
         return res;
diff --git a/producer/api/cpp/src/producer_impl.cpp b/producer/api/cpp/src/producer_impl.cpp
index 80dd71e168d39bc0d1a77b037ce388ee5bce97ee..a0b68f07018a2281f5df907387107f5164b3e3f2 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.autwo_id) {
+    if (message_header.auto_id) {
         return ProducerErrorTemplates::kWrongInput.Generate("auto id mode not implemented for datasets");
     }