diff --git a/common/cpp/include/common/io_error.h b/common/cpp/include/common/io_error.h
index f6fa351fa6727fcef518ee6d10b9f5f70c2b5d82..4c6d2b67450b9e486929430cd5b834a7c3aecf8a 100644
--- a/common/cpp/include/common/io_error.h
+++ b/common/cpp/include/common/io_error.h
@@ -18,6 +18,7 @@ enum class IOErrorType {
     kAddressAlreadyInUse,
     kConnectionRefused,
     kConnectionResetByPeer,
+    kUnreachableNetwork,
     kTimeout,
     kFileAlreadyExists,
     kNoSpaceLeft,
@@ -51,6 +52,11 @@ auto const kBadFileNumber = IOErrorTemplate {
 auto const kResourceTemporarilyUnavailable = IOErrorTemplate {
     "Resource temporarily unavailable", IOErrorType::kResourceTemporarilyUnavailable
 };
+
+auto const kUnreachableNetwork = IOErrorTemplate {
+    "Network is unreachable", IOErrorType::kUnreachableNetwork
+};
+
 auto const kPermissionDenied = IOErrorTemplate {
     "Permission denied", IOErrorType::kPermissionDenied
 };
diff --git a/common/cpp/src/database/mongodb_client.cpp b/common/cpp/src/database/mongodb_client.cpp
index 63f69cd3f4e73ca6ced7d0f3db9cda7ef9c32b85..66c8b02cf95c507a7e01db91a6bdf5da56d897f5 100644
--- a/common/cpp/src/database/mongodb_client.cpp
+++ b/common/cpp/src/database/mongodb_client.cpp
@@ -236,14 +236,15 @@ Error MongoDBClient::InsertAsSubset(const FileInfo& file,
     if (err) {
         return err;
     }
-    auto query = BCON_NEW ("$and","[","{","_id", BCON_INT64(subset_id),"}","{","images._id","{","$ne",BCON_INT64(file.id),"}","}","]");
+    auto query = BCON_NEW ("$and", "[", "{", "_id", BCON_INT64(subset_id), "}", "{", "images._id", "{", "$ne",
+                           BCON_INT64(file.id), "}", "}", "]");
     auto update = BCON_NEW ("$setOnInsert", "{",
                             "size", BCON_INT64 (subset_size),
                             "}",
                             "$addToSet", "{",
                             "images", BCON_DOCUMENT(document.get()), "}");
 
-    err = AddBsonDocumentToArray(query, update,ignore_duplicates);
+    err = AddBsonDocumentToArray(query, update, ignore_duplicates);
 
     bson_destroy (query);
     bson_destroy (update);
diff --git a/common/cpp/src/request/request_pool.cpp b/common/cpp/src/request/request_pool.cpp
index 03f1e9bffa525be677097245191a0bc3edb9b386..163ad4599f385253876302b2054a12ba30858df6 100644
--- a/common/cpp/src/request/request_pool.cpp
+++ b/common/cpp/src/request/request_pool.cpp
@@ -1,5 +1,3 @@
-#include <request/request_pool.h>
-#include <request/request_pool.h>
 #include "request/request_pool.h"
 
 namespace asapo {
diff --git a/common/cpp/src/system_io/system_io.cpp b/common/cpp/src/system_io/system_io.cpp
index db0a2760cb0467d3a2a6e8a156615fa19593a996..0764fcad7a9e60419ed6f6a157de308c77685323 100644
--- a/common/cpp/src/system_io/system_io.cpp
+++ b/common/cpp/src/system_io/system_io.cpp
@@ -290,10 +290,13 @@ std::unique_ptr<sockaddr_in> SystemIO::BuildSockaddrIn(const std::string& addres
     std::string host;
     uint16_t port = 0;
     std::tie(host, port) = *hostname_port_tuple;
-    host = ResolveHostnameToIp(host, err);
-    if (*err != nullptr) {
-        return nullptr;
-    }
+
+// this is not thread safe call we should not resolve hostname here - we actually already have ip in address.
+// todo: remove this
+//    host = ResolveHostnameToIp(host, err);
+//    if (*err != nullptr) {
+//        return nullptr;
+//    }
 
     short family = AddressFamilyToPosixFamily(AddressFamilies::INET);
     if (family == -1) {
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 74d41e9e57c8a6ab0764d0ac281647c108f7cab8..c8b1d5b07533f60d41513251eb2c9154975a6123 100644
--- a/common/cpp/src/system_io/system_io_linux_mac.cpp
+++ b/common/cpp/src/system_io/system_io_linux_mac.cpp
@@ -35,6 +35,8 @@ Error GetLastErrorFromErrno() {
         return IOErrorTemplates::kBadFileNumber.Generate();
     case EAGAIN:
         return IOErrorTemplates::kResourceTemporarilyUnavailable.Generate();
+    case ENETUNREACH:
+        return IOErrorTemplates::kUnreachableNetwork.Generate();
     case ENOENT:
     case ENOTDIR:
         return IOErrorTemplates::kFileNotFound.Generate();
diff --git a/deploy/docker/cluster/Dockerfile b/deploy/docker/cluster/Dockerfile
index f810f8817210aaf8ed9e7d9a20a417258f166c0f..427524d878de46464d7953c947c3ef840be022ae 100644
--- a/deploy/docker/cluster/Dockerfile
+++ b/deploy/docker/cluster/Dockerfile
@@ -50,7 +50,7 @@ RUN cd /var/run/asapo asapo && terraform init
 
 COPY asapo-*  /usr/bin/
 
-COPY *.sh  /tmp/asapo_runscripts/
+COPY *.sh  asapo_overwrite_vars.tfvars /tmp/asapo_runscripts/
 
 COPY *.py  /etc/asapo/
 COPY *.hcl.tpl  /etc/asapo/
diff --git a/examples/producer/dummy-data-producer/dummy_data_producer.cpp b/examples/producer/dummy-data-producer/dummy_data_producer.cpp
index a9384b2a2b8bd3188d5c9e1452196d876209e3c2..8f62763ddeb4cdb66ac5d848fe332b4581eca83e 100644
--- a/examples/producer/dummy-data-producer/dummy_data_producer.cpp
+++ b/examples/producer/dummy-data-producer/dummy_data_producer.cpp
@@ -71,7 +71,7 @@ void ProcessCommandArguments(int argc, char* argv[], Args* args) {
         std::cout <<
                   "Usage: " << argv[0] <<
                   " <destination> <beamtime_id[%<stream>%<token>]> <number_of_byte> <iterations> <nthreads>"
-                  " <mode 0 -t tcp, 1 - filesystem> <timeout (sec)> [n images in set (default 1)]"
+                  " <mode x0 -t tcp, x1 - filesystem, 0x - write files, 1x - do not write files> <timeout (sec)> [n images in set (default 1)]"
                   << std::endl;
         exit(EXIT_FAILURE);
     }
@@ -127,7 +127,7 @@ asapo::FileData CreateMemoryBuffer(size_t size) {
 
 
 bool SendDummyData(asapo::Producer* producer, size_t number_of_byte, uint64_t iterations, uint64_t images_in_set,
-                   const std::string& stream) {
+                   const std::string& stream, bool write_files) {
 
     asapo::Error err;
     if (iterations > 0) { // send wrong meta, for negative integration tests
@@ -149,7 +149,8 @@ bool SendDummyData(asapo::Producer* producer, size_t number_of_byte, uint64_t it
         }
         event_header.user_metadata = std::move(meta);
         if (images_in_set == 1) {
-            auto err = producer->SendData(event_header, std::move(buffer), asapo::kDefaultIngestMode, &ProcessAfterSend);
+            auto err = producer->SendData(event_header, std::move(buffer), write_files ? asapo::kDefaultIngestMode :
+                                          asapo::kTransferData, &ProcessAfterSend);
             if (err) {
                 std::cerr << "Cannot send file: " << err << std::endl;
                 return false;
@@ -165,7 +166,8 @@ bool SendDummyData(asapo::Producer* producer, size_t number_of_byte, uint64_t it
                     event_header.file_name = stream + "/" + event_header.file_name;
                 }
                 event_header.user_metadata = meta;
-                auto err = producer->SendData(event_header, std::move(buffer), asapo::kDefaultIngestMode, &ProcessAfterSend);
+                auto err = producer->SendData(event_header, std::move(buffer), write_files ? asapo::kDefaultIngestMode :
+                                              asapo::kTransferData, &ProcessAfterSend);
                 if (err) {
                     std::cerr << "Cannot send file: " << err << std::endl;
                     return false;
@@ -179,7 +181,7 @@ bool SendDummyData(asapo::Producer* producer, size_t number_of_byte, uint64_t it
 std::unique_ptr<asapo::Producer> CreateProducer(const Args& args) {
     asapo::Error err;
     auto producer = asapo::Producer::Create(args.receiver_address, args.nthreads,
-                                            args.mode == 0 ? asapo::RequestHandlerType::kTcp : asapo::RequestHandlerType::kFilesystem,
+                                            args.mode % 10 == 0 ? asapo::RequestHandlerType::kTcp : asapo::RequestHandlerType::kFilesystem,
                                             asapo::SourceCredentials{args.beamtime_id, args.stream, args.token }, &err);
     if(err) {
         std::cerr << "Cannot start producer. ProducerError: " << err << std::endl;
@@ -231,7 +233,8 @@ int main (int argc, char* argv[]) {
 
     system_clock::time_point start_time = system_clock::now();
 
-    if(!SendDummyData(producer.get(), args.number_of_bytes, args.iterations, args.images_in_set, args.stream)) {
+    if(!SendDummyData(producer.get(), args.number_of_bytes, args.iterations, args.images_in_set, args.stream,
+                      args.mode / 10 == 0)) {
         return EXIT_FAILURE;
     }
 
diff --git a/tests/automatic/mongo_db/insert_dataset/insert_dataset_mongodb.cpp b/tests/automatic/mongo_db/insert_dataset/insert_dataset_mongodb.cpp
index 2d595be84c638c923eccd7fde6559281241ae3eb..c15b83406905c4a5de98c1d4b8c80e98a639404b 100644
--- a/tests/automatic/mongo_db/insert_dataset/insert_dataset_mongodb.cpp
+++ b/tests/automatic/mongo_db/insert_dataset/insert_dataset_mongodb.cpp
@@ -46,7 +46,7 @@ int main(int argc, char* argv[]) {
     fi.source = "host:1234";
     fi.id = 1;
 
-    uint64_t subset_size=2;
+    uint64_t subset_size = 2;
 
     if (args.keyword != "Notconnected") {
         db.Connect("127.0.0.1", "data", "test");
diff --git a/tests/automatic/system_io/ip_tcp_network/client_serv/ip_tcp_network.cpp b/tests/automatic/system_io/ip_tcp_network/client_serv/ip_tcp_network.cpp
index 8c304bcfd7bf0542c729ac6cd54f618178082be0..c95b33ebe1ea6f88fc2e52deb68cf87840188af7 100644
--- a/tests/automatic/system_io/ip_tcp_network/client_serv/ip_tcp_network.cpp
+++ b/tests/automatic/system_io/ip_tcp_network/client_serv/ip_tcp_network.cpp
@@ -158,7 +158,7 @@ int main(int argc, char* argv[]) {
 
     std::cout << "[META] Check unknown host" << std::endl;
     io->CreateAndConnectIPTCPSocket("some-host-that-might-not-exists.aa:1234", &err);
-    if(asapo::IOErrorTemplates::kUnableToResolveHostname != err) {
+    if(err != asapo::IOErrorTemplates::kUnreachableNetwork) {
         ExitIfErrIsNotOk(&err, 303);
     }
 
diff --git a/tests/manual/receiver_debug_local/discovery.json b/tests/manual/receiver_debug_local/discovery.json
new file mode 100644
index 0000000000000000000000000000000000000000..89b991729d2c089f7bea1a0ce7523ca065a25d9d
--- /dev/null
+++ b/tests/manual/receiver_debug_local/discovery.json
@@ -0,0 +1,19 @@
+{
+  "Mode": "static",
+  "Receiver": {
+    "StaticEndpoints": [
+      "localhost:22001"
+    ],
+    "MaxConnections": 32
+  },
+  "Broker": {
+    "StaticEndpoint": "localhost:5005"
+  },
+  "Mongo": {
+    "StaticEndpoint": "127.0.0.1:27017"
+  },
+  "Port": 5900,
+  "LogLevel":"debug"
+}
+
+
diff --git a/tests/manual/receiver_debug_local/discovery.json.tpl b/tests/manual/receiver_debug_local/discovery.json.tpl
index b068613852287d5c712033c65bd17b1725d12faf..120614c760605d3ed0ca632d24830e96ffd42f94 100644
--- a/tests/manual/receiver_debug_local/discovery.json.tpl
+++ b/tests/manual/receiver_debug_local/discovery.json.tpl
@@ -9,6 +9,9 @@
   "Broker": {
     "StaticEndpoint": "localhost:5005"
   },
+  "Mongo": {
+    "StaticEndpoint": "127.0.0.1:27017"
+  },
   "Port": {{ env "NOMAD_PORT_discovery" }},
   "LogLevel":"debug"
 }
diff --git a/tests/manual/receiver_debug_local/nginx_kill.nmd b/tests/manual/receiver_debug_local/nginx_kill.nmd
new file mode 100644
index 0000000000000000000000000000000000000000..cb3abbac259780ce7366042f24a19d635f032994
--- /dev/null
+++ b/tests/manual/receiver_debug_local/nginx_kill.nmd
@@ -0,0 +1,17 @@
+job "nginx_kill" {
+  datacenters = ["dc1"]
+
+  type = "batch"
+
+  group "nginx_kill" {
+    count = 1
+
+    task "nginx_kill" {
+      driver = "raw_exec"
+      config {
+        command = "killall",
+        args =  ["nginx"]
+      }
+   }
+  }
+}
diff --git a/tests/manual/receiver_debug_local/start_dummyproducer.sh b/tests/manual/receiver_debug_local/start_dummyproducer.sh
index 902e17cb1a8c94ebe8c0be2ddcff213653f10917..55640449ed847c43db3afb678d99a7e6faf07d1b 100755
--- a/tests/manual/receiver_debug_local/start_dummyproducer.sh
+++ b/tests/manual/receiver_debug_local/start_dummyproducer.sh
@@ -2,13 +2,13 @@
 
 beamtime_id=asapo_test
 
-nfiles=10
+nfiles=1000
 timeout=100
-fsize=100
-mode=0 #tcp
-nthreads=4
+fsize=10000
+mode=10 #tcp & no file write
+nthreads=32
 
 exec=/home/yakubov/projects/asapo/cmake-build-debug/examples/producer/dummy-data-producer/dummy-data-producer
 
 
-$exec localhost:8400 ${beamtime_id} $fsize $nfiles  $nthreads $mode  $timeout
\ No newline at end of file
+$exec localhost:8400 ${beamtime_id} $fsize $nfiles  $nthreads $mode  $timeout
diff --git a/tests/manual/receiver_debug_local/start_receiver.sh b/tests/manual/receiver_debug_local/start_receiver.sh
new file mode 100755
index 0000000000000000000000000000000000000000..231051afff79b8daa029c44a33e54a33098b3949
--- /dev/null
+++ b/tests/manual/receiver_debug_local/start_receiver.sh
@@ -0,0 +1,7 @@
+#!/usr/bin/env bash
+
+
+exec=/home/yakubov/projects/asapo/cmake-build-debug/receiver/receiver
+
+
+$exec receiver.json