diff --git a/.gitignore b/.gitignore
index d7c8d680d0598ba1ac993843cf1d2ee7f45fad02..c04618641923b19dd84739be023d064d3c645ba3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -54,9 +54,7 @@
 .idea/**/libraries
 
 # CMake
-cmake-build-debug/
-cmake-build-release/
-cmake-build-relwithdebinfo/
+cmake-build-*/
 
 # Mongo Explorer plugin:
 .idea/**/mongoSettings.xml
diff --git a/common/cpp/include/asapo/common/io_error.h b/common/cpp/include/asapo/common/io_error.h
index ef15e630836fe854ea5f51f069f800413e52c5e6..52245430bc6d610dd2de2009b2dabd38d74d973e 100644
--- a/common/cpp/include/asapo/common/io_error.h
+++ b/common/cpp/include/asapo/common/io_error.h
@@ -36,39 +36,39 @@ using IOErrorTemplate = ServiceErrorTemplate<IOErrorType>;
 
 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 kNotConnected = IOErrorTemplate {
-    "Not connected", IOErrorType::kNotConnected
+    "not connected", IOErrorType::kNotConnected
 };
 
 auto const kConnectionResetByPeer = IOErrorTemplate {
@@ -101,11 +101,11 @@ auto const kSocketOperationValueOutOfBound =  IOErrorTemplate {
 };
 
 auto const kAddressNotValid =  IOErrorTemplate {
-    "Address not valid", IOErrorType::kAddressNotValid
+    "address not valid", IOErrorType::kAddressNotValid
 };
 
 auto const kBrokenPipe =  IOErrorTemplate {
-    "Broken pipe/connection", IOErrorType::kBrokenPipe
+    "broken pipe/connection", IOErrorType::kBrokenPipe
 };
 
 
diff --git a/consumer/api/cpp/src/consumer_impl.cpp b/consumer/api/cpp/src/consumer_impl.cpp
index 18abec7a70d575ef4316f924634ab749846040da..7f623e67b2f9cf6dd09470f127770a6e78eeaa44 100644
--- a/consumer/api/cpp/src/consumer_impl.cpp
+++ b/consumer/api/cpp/src/consumer_impl.cpp
@@ -222,6 +222,7 @@ Error ConsumerImpl::ProcessDiscoverServiceResult(Error err, std::string* uri_to_
             return err;
         }
         auto ret_err = ConsumerErrorTemplates::kUnavailableService.Generate(std::move(err));
+        ret_err->AddDetails("destination",endpoint_);
         return ret_err;
     }
     return nullptr;
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 e1d983add1f2b912373530e5261fc7b9bd20132e..6f24fc62a6555b94540efb41a01d1c11b0794cc2 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
@@ -51,6 +51,7 @@ ReceiverDataServerRequestPtr RdsTcpServer::ReadRequest(SocketDescriptor socket,
     io__->Receive(socket, &header,
                   sizeof(GenericRequestHeader), &io_err);
     if (io_err == GeneralErrorTemplates::kEndOfFile) {
+        *err = std::move(io_err);
         CloseSocket(socket);
         return nullptr;
     } else if (io_err) {
diff --git a/receiver/unittests/receiver_data_server/net_server/test_rds_tcp_server.cpp b/receiver/unittests/receiver_data_server/net_server/test_rds_tcp_server.cpp
index 22a0aae334f80e050b2d7470f614f2ee59276daa..a80f9f0c86dc125a5c4c33531633bb379dbc80e2 100644
--- a/receiver/unittests/receiver_data_server/net_server/test_rds_tcp_server.cpp
+++ b/receiver/unittests/receiver_data_server/net_server/test_rds_tcp_server.cpp
@@ -126,10 +126,6 @@ void RdsTCPServerTests::MockReceiveRequest(bool ok ) {
             DoAll(SetArgPointee<3>(ok ? nullptr : asapo::IOErrorTemplates::kUnknownIOError.Generate().release()),
                   Return(0))
         );
-        if (!ok) {
-            std::string connected_uri = std::to_string(conn);
-            EXPECT_CALL(mock_logger, Error(AllOf(HasSubstr("request"), HasSubstr(connected_uri))));
-        }
     }
 }
 
@@ -163,8 +159,7 @@ void RdsTCPServerTests::ExpectReceiveOk() {
                 A_ReceiveData(asapo::kOpcodeGetBufferData, conn),
                 testing::ReturnArg<2>()
             ));
-        EXPECT_CALL(mock_logger, Debug(AllOf(HasSubstr("request"), HasSubstr("id: " + std::to_string(conn)),
-                                             HasSubstr("opcode: " + std::to_string(asapo::kOpcodeGetBufferData)))));
+        EXPECT_CALL(mock_logger, Debug(AllOf(HasSubstr("request"), HasSubstr(std::to_string(conn)))));
     }
 }
 
@@ -249,8 +244,6 @@ TEST_F(RdsTCPServerTests, SendResponse) {
             Return(1)
         ));
 
-    EXPECT_CALL(mock_logger, Error(HasSubstr("cannot send")));
-
     auto err = tcp_server.SendResponse(&expectedRequest, &tmp);
 
     ASSERT_THAT(err, Ne(nullptr));
@@ -272,8 +265,6 @@ TEST_F(RdsTCPServerTests, SendResponseAndSlotData_SendResponseError) {
                   testing::SetArgPointee<3>(asapo::IOErrorTemplates::kUnknownIOError.Generate().release()),
                   Return(0)
               ));
-    EXPECT_CALL(mock_logger, Error(HasSubstr("cannot send")));
-
     auto err = tcp_server.SendResponseAndSlotData(&expectedRequest, &tmp, &expectedMeta);
 
     ASSERT_THAT(err, Ne(nullptr));
@@ -298,8 +289,6 @@ TEST_F(RdsTCPServerTests, SendResponseAndSlotData_SendError) {
             Return(0)
         ));
 
-    EXPECT_CALL(mock_logger, Error(HasSubstr("cannot send")));
-
     auto err = tcp_server.SendResponseAndSlotData(&expectedRequest, &tmp, &expectedMeta);
 
     ASSERT_THAT(err, Ne(nullptr));
diff --git a/receiver/unittests/receiver_data_server/request_handler/test_request_handler.cpp b/receiver/unittests/receiver_data_server/request_handler/test_request_handler.cpp
index fb85f18e56798d664529c1223ad59e39dce1c61d..b6a0951a3ccba60c097091aecabfb2306396c3ca 100644
--- a/receiver/unittests/receiver_data_server/request_handler/test_request_handler.cpp
+++ b/receiver/unittests/receiver_data_server/request_handler/test_request_handler.cpp
@@ -112,7 +112,7 @@ TEST_F(RequestHandlerTests, RequestAlwaysReady) {
 
 TEST_F(RequestHandlerTests, ProcessRequest_WrongOpCode) {
     request.header.op_code = asapo::kOpcodeUnknownOp;
-    MockSendResponse(asapo::kNetErrorWrongRequest, false);
+    MockSendResponse(asapo::kNetErrorWrongRequest, true);
     EXPECT_CALL(mock_net, HandleAfterError_t(expected_source_id));
 
     EXPECT_CALL(mock_logger, Error(HasSubstr("wrong request")));
@@ -124,7 +124,7 @@ TEST_F(RequestHandlerTests, ProcessRequest_WrongOpCode) {
 
 TEST_F(RequestHandlerTests, ProcessRequest_WrongClientVersion) {
     strcpy(request.header.api_version, "v0.2");
-    MockSendResponse(asapo::kNetErrorNotSupported, false);
+    MockSendResponse(asapo::kNetErrorNotSupported, true);
     EXPECT_CALL(mock_net, HandleAfterError_t(expected_source_id));
 
     EXPECT_CALL(mock_logger, Error(HasSubstr("unsupported client")));
diff --git a/receiver/unittests/receiver_data_server/test_receiver_data_server.cpp b/receiver/unittests/receiver_data_server/test_receiver_data_server.cpp
index b3ce88a40f7cc44333e7cac70eed46aa4ad6adb4..004915c1f8694fa9150574ddc61a48e4d491d10e 100644
--- a/receiver/unittests/receiver_data_server/test_receiver_data_server.cpp
+++ b/receiver/unittests/receiver_data_server/test_receiver_data_server.cpp
@@ -94,8 +94,6 @@ TEST_F(ReceiverDataServerTests, TimeoutGetNewRequests) {
     data_server.Run();
 }
 
-
-
 TEST_F(ReceiverDataServerTests, ErrorGetNewRequests) {
     EXPECT_CALL(mock_net, GetNewRequests_t(_)).WillOnce(
         DoAll(SetArgPointee<0>(asapo::IOErrorTemplates::kUnknownIOError.Generate().release()),
@@ -103,9 +101,7 @@ TEST_F(ReceiverDataServerTests, ErrorGetNewRequests) {
              )
     );
 
-    auto errtext = asapo::IOErrorTemplates::kUnknownIOError.Generate()->Explain();
-
-    EXPECT_CALL(mock_logger, Error(AllOf(HasSubstr("stopped"), HasSubstr(errtext))));
+    EXPECT_CALL(mock_logger, Error(AllOf(HasSubstr("stopped"), HasSubstr("unknown error"))));
 
     data_server.Run();
 }
@@ -121,9 +117,7 @@ TEST_F(ReceiverDataServerTests, ErrorAddingRequests) {
         Return(asapo::ReceiverDataServerErrorTemplates::kMemoryPool.Generate("cannot add request to pool").release())
     );
 
-    auto errtext = asapo::ReceiverDataServerErrorTemplates::kMemoryPool.Generate("cannot add request to pool")->Explain();
-
-    EXPECT_CALL(mock_logger, Error(AllOf(HasSubstr("stopped"), HasSubstr(errtext))));
+    EXPECT_CALL(mock_logger, Error(AllOf(HasSubstr("stopped"), HasSubstr("pool"))));
 
     data_server.Run();
 }
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 81d8aa89096d6f2aba5060005e07a6c68e55a73f..518ef7d189c458066af15c17d7af883ce99db193 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
@@ -120,7 +120,6 @@ TEST_F(ReceiveFileProcessorTests, WritesToLog) {
     .WillOnce(Return(nullptr));
 
     EXPECT_CALL(mock_logger, Debug(AllOf(HasSubstr("received file"),
-                                         HasSubstr(expected_file_name),
                                          HasSubstr(std::to_string(expected_file_size))
                                         )
                                   )
diff --git a/tests/automatic/producer/aai/check_windows.bat b/tests/automatic/producer/aai/check_windows.bat
index 28a3e3c9d0e230b2f91e1bba3df56382218b17d9..36373fedab7f1d50403c69f39b8aec901b79a2f5 100644
--- a/tests/automatic/producer/aai/check_windows.bat
+++ b/tests/automatic/producer/aai/check_windows.bat
@@ -33,7 +33,7 @@ echo %NUM% | findstr 3 || goto error
 for /F %%N in ('find /C "reauthorization" ^< "out"') do set NUM=%%N
 echo %NUM% | findstr 1 || goto error
 
-for /F %%N in ('find /C "} error: server warning, context: response:duplicated request" ^< "out"') do set NUM=%%N
+for /F %%N in ('find /C "} error: server warning, details: response:duplicated request" ^< "out"') do set NUM=%%N
 echo %NUM% | findstr 1 || goto error
 
 goto :clean
diff --git a/tests/automatic/producer/python_api/check_windows.bat b/tests/automatic/producer/python_api/check_windows.bat
index 5920874f07bc788076de2dc13087d312561e8fb8..78389910ead22f0ccb8ac2692679345c9c18ec4a 100644
--- a/tests/automatic/producer/python_api/check_windows.bat
+++ b/tests/automatic/producer/python_api/check_windows.bat
@@ -20,13 +20,13 @@ set NUM=0
 for /F %%N in ('find /C "successfuly sent" ^< "out"') do set NUM=%%N
 echo %NUM% | findstr 17 || goto error
 
-for /F %%N in ('find /C "} error: wrong input, context: response:error: Bad request, message: already have record with same id" ^< "out"') do set NUM=%%N
+for /F %%N in ('find /C "} error: wrong input, details: response:error: Bad request, message: already have record with same id" ^< "out"') do set NUM=%%N
 echo %NUM% | findstr 2 || goto error
 
-for /F %%N in ('find /C "} error: server warning, context: response:ignoring duplicate record" ^< "out"') do set NUM=%%N
+for /F %%N in ('find /C "} error: server warning, details: response:ignoring duplicate record" ^< "out"') do set NUM=%%N
 echo %NUM% | findstr 2 || goto error
 
-for /F %%N in ('find /C "} error: server warning, context: response:duplicated request" ^< "out"') do set NUM=%%N
+for /F %%N in ('find /C "} error: server warning, details: response:duplicated request" ^< "out"') do set NUM=%%N
 echo %NUM% | findstr 1 || goto error
 
 
diff --git a/tests/automatic/system_io/read_file_content/CMakeLists.txt b/tests/automatic/system_io/read_file_content/CMakeLists.txt
index 5f302cdb12e8f9f74b452a88b5370b04dd26761e..c4a37e8638a3f273847a6177be065409fd7098d5 100644
--- a/tests/automatic/system_io/read_file_content/CMakeLists.txt
+++ b/tests/automatic/system_io/read_file_content/CMakeLists.txt
@@ -17,6 +17,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} readfile_unkown_size "test/2 unknown_size")
-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_folder_content/CMakeLists.txt b/tests/automatic/system_io/read_folder_content/CMakeLists.txt
index 222ab458578c58e4426d79152ed2a7fa14237361..c6938f921ac62bc9d31e8fdb0e040ad69fbfd450 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,details:name:test_notexist")
-add_integration_test(${TARGET_NAME} foldernoaccess "test_noaccess1 error:Permissiondenied,details: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 358742805704fd81b1b53bc4c5f1a4e5b5bdad2f..35645add62b86d0e66e05ca6e7221519efbf7e41 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,details:name:test_notexist")
-add_integration_test(${TARGET_NAME} filenoaccess "file_noaccess error:Permissiondenied,details: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 837b0c6b1e04768c898c6bd4df1ffbbf685d8e18..4ec44441e63fe7601eda52d39450c788fc4a43aa 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,details:name:test_notexist")
-add_integration_test(${TARGET_NAME} foldernoaccess "test_noaccess1 error:Permissiondenied,details: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/write_data_to_file/CMakeLists.txt b/tests/automatic/system_io/write_data_to_file/CMakeLists.txt
index 3e7a13c469495cc372c2132356ca9f1efc8d3993..c062aa99347424f9b35ec8ec7b87cf102bf9f559 100644
--- a/tests/automatic/system_io/write_data_to_file/CMakeLists.txt
+++ b/tests/automatic/system_io/write_data_to_file/CMakeLists.txt
@@ -22,5 +22,5 @@ else ()
 endif()
 
 add_integration_test(${TARGET_NAME} writetwice "test_file ok dummy" nomem)
-add_integration_test(${TARGET_NAME} dirnoaccess "test_noaccess/test_file error error:Permissiondenied,context:name:test_noaccess/test_file" nomem)
+add_integration_test(${TARGET_NAME} dirnoaccess "test_noaccess/test_file error error:permissiondenied,details:name:test_noaccess/test_file" nomem)