diff --git a/CMakeLists.txt b/CMakeLists.txt
index db2c3fd22c1a89c8825eead683e10c2895a146f7..58b498aa7a469b5dd4e8cc6324c074a8f69f576f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -46,6 +46,9 @@ include(astyle)
 
 include(testing_cpp)
 
+include(prepare_asapo)
+
+
 if(BUILD_WORKER_TOOLS)
     set (BUILD_MONGODB_CLIENTLIB ON)
 endif()
diff --git a/CMakeModules/prepare_asapo.cmake b/CMakeModules/prepare_asapo.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..dcb4d57505e3e095ffa6e5d695fb450e82cde49b
--- /dev/null
+++ b/CMakeModules/prepare_asapo.cmake
@@ -0,0 +1,11 @@
+function(prepare_asapo)
+    get_target_property(RECEIVER_DIR receiver-bin BINARY_DIR)
+    get_target_property(RECEIVER_NAME receiver-bin OUTPUT_NAME)
+    get_target_property(DISCOVERY_FULLPATH asapo-discovery EXENAME)
+    set(WORK_DIR ${CMAKE_CURRENT_BINARY_DIR})
+    configure_file(${CMAKE_SOURCE_DIR}/config/nomad/receiver.nmd.in  receiver.nmd @ONLY)
+    configure_file(${CMAKE_SOURCE_DIR}/config/nomad/discovery.nmd.in  discovery.nmd @ONLY)
+    configure_file(${CMAKE_SOURCE_DIR}/tests/automatic/settings/receiver.json.tpl receiver.json.tpl COPYONLY)
+    configure_file(${CMAKE_SOURCE_DIR}/tests/automatic/settings/discovery_settings.json.tpl discovery.json.tpl COPYONLY)
+endfunction()
+
diff --git a/config/nomad/discovery.nmd.in b/config/nomad/discovery.nmd.in
new file mode 100644
index 0000000000000000000000000000000000000000..60a8a174e1f5013ea963bd090684c6b9866cd504
--- /dev/null
+++ b/config/nomad/discovery.nmd.in
@@ -0,0 +1,49 @@
+job "discovery" {
+  datacenters = ["dc1"]
+
+  type = "service"
+
+  group "group" {
+    count = 1
+
+    task "service" {
+      driver = "raw_exec"
+
+      config {
+        command = "@DISCOVERY_FULLPATH@",
+        args =  ["-config","${NOMAD_TASK_DIR}/discovery.json"]
+      }
+
+      resources {
+        cpu    = 500 # 500 MHz
+        memory = 256 # 256MB
+        network {
+          port "discovery" {
+            static = "5006"
+          }
+        }
+      }
+
+      service {
+        name = "discovery"
+        port = "discovery"
+        check {
+          name     = "alive"
+          type     = "http"
+          path     = "/receivers"
+          interval = "10s"
+          timeout  = "2s"
+          initial_status =   "passing"
+        }
+      }
+
+      template {
+         source        = "@WORK_DIR@/discovery.json.tpl"
+         destination   = "local/discovery.json"
+         change_mode   = "signal"
+         change_signal = "SIGHUP"
+      }
+
+    }
+  }
+}
diff --git a/config/nomad/receiver.nmd.in b/config/nomad/receiver.nmd.in
index 1d9c1675e1d1b247e1b962533e207445a79b6e2a..4559aedc71870e3c6e91be7c8c0afa06084451fa 100644
--- a/config/nomad/receiver.nmd.in
+++ b/config/nomad/receiver.nmd.in
@@ -11,7 +11,7 @@ job "receiver" {
 
       config {
         command = "/bin/bash",
-        args =  ["-c", "mkdir files && exec ${RECEIVER_DIR}/${RECEIVER_NAME} receiver.json && rm -rf files"]
+        args =  ["-c", "cd  @WORK_DIR@ && exec @RECEIVER_DIR@/@RECEIVER_NAME@ ${NOMAD_TASK_DIR}/receiver.json"]
       }
 
       resources {
@@ -35,8 +35,8 @@ job "receiver" {
       }
 
       template {
-         source        = "${CMAKE_CURRENT_BINARY_DIR}/receiver.json.tpl"
-         destination   = "receiver.json"
+         source        = "@WORK_DIR@/receiver.json.tpl"
+         destination   = "local/receiver.json"
          change_mode   = "signal"
          change_signal = "SIGHUP"
       }
diff --git a/examples/producer/dummy-data-producer/check_linux.sh b/examples/producer/dummy-data-producer/check_linux.sh
index 51a14177248525416ad5e995fcca02f755bddf75..ec9b000ff2f021fbb8c8bc6054e766d76f2e92ae 100644
--- a/examples/producer/dummy-data-producer/check_linux.sh
+++ b/examples/producer/dummy-data-producer/check_linux.sh
@@ -6,5 +6,5 @@ database_name=test_run
 
 
 #just test that it starts, no reciever is running
-$@ 0.0.0.0 1 1 2>&1 | grep "Failed to connect"
+$@ 0.0.0.0 1 1 1 1 2>&1 | grep "not successfully"
 
diff --git a/producer/api/src/request_handler_tcp.cpp b/producer/api/src/request_handler_tcp.cpp
index b382e001086d47b25b6fd21fb18ac3b26639bf19..afbd2fd7593604ec87946a4dc7a1096a802c0938 100644
--- a/producer/api/src/request_handler_tcp.cpp
+++ b/producer/api/src/request_handler_tcp.cpp
@@ -29,14 +29,11 @@ Error RequestHandlerTcp::SendHeaderAndData(const Request* request, const std::st
     Error io_error;
     io__->Send(sd_, &(request->header), sizeof(request->header), &io_error);
     if(io_error) {
-// todo: add meaningful message to the io_error (here and below)
-        log__->Debug("cannot send header to " + receiver_address + " - " + io_error->Explain());
         return io_error;
     }
 
     io__->Send(sd_, request->data, request->header.data_size, &io_error);
     if(io_error) {
-        log__->Debug("cannot send data to " + receiver_address + " - " + io_error->Explain());
         return io_error;
     }
 
@@ -48,7 +45,6 @@ Error RequestHandlerTcp::ReceiveResponse(const std::string& receiver_address) {
     SendDataResponse sendDataResponse;
     io__->Receive(sd_, &sendDataResponse, sizeof(sendDataResponse), &err);
     if(err != nullptr) {
-        log__->Debug("cannot receive response from " + receiver_address + " - " + err->Explain());
         return err;
     }
 
@@ -69,7 +65,6 @@ Error RequestHandlerTcp::TrySendToReceiver(const Request* request, const std::st
 
     err = ReceiveResponse(receiver_address);
     if (err)  {
-        log__->Debug("cannot send data to " + receiver_address + ": " + err->Explain());
         return err;
     }
 
@@ -122,6 +117,7 @@ Error RequestHandlerTcp::ProcessRequestUnlocked(const Request* request) {
         if (err != nullptr && err != ProducerErrorTemplates::kFileIdAlreadyInUse)  {
             io__->CloseSocket(sd_, nullptr);
             sd_ = kDisconnectedSocketDescriptor;
+            log__->Debug("cannot send data to " + receiver_uri + ": " + err->Explain());
             log__->Debug("disconnected from  " + receiver_uri);
             continue;
         }
diff --git a/producer/api/unittests/test_request_handler_tcp.cpp b/producer/api/unittests/test_request_handler_tcp.cpp
index 8eb3a24d671676155f31944053bd2e0a00baa1a9..440d41f59adc210ece79625aa3614e8d2d9cc3a2 100644
--- a/producer/api/unittests/test_request_handler_tcp.cpp
+++ b/producer/api/unittests/test_request_handler_tcp.cpp
@@ -138,7 +138,13 @@ void RequestHandlerTcpTests::ExpectFailSendHeader(bool only_once) {
                 Return(-1)
             ));
         EXPECT_CALL(mock_logger, Debug(AllOf(
-                                           HasSubstr("cannot send header"),
+                                           HasSubstr("disconnected"),
+                                           HasSubstr(receivers_list[i])
+                                       )
+                                      ));
+
+        EXPECT_CALL(mock_logger, Debug(AllOf(
+                                           HasSubstr("cannot send"),
                                            HasSubstr(receivers_list[i])
                                        )
                                       ));
@@ -160,7 +166,13 @@ void RequestHandlerTcpTests::ExpectFailSendData(bool only_once) {
                 Return(-1)
             ));
         EXPECT_CALL(mock_logger, Debug(AllOf(
-                                           HasSubstr("cannot send data"),
+                                           HasSubstr("disconnected"),
+                                           HasSubstr(receivers_list[i])
+                                       )
+                                      ));
+
+        EXPECT_CALL(mock_logger, Debug(AllOf(
+                                           HasSubstr("cannot send"),
                                            HasSubstr(receivers_list[i])
                                        )
                                       ));
@@ -183,7 +195,14 @@ void RequestHandlerTcpTests::ExpectFailReceive(bool only_once) {
                 testing::Return(-1)
             ));
         EXPECT_CALL(mock_logger, Debug(AllOf(
-                                           HasSubstr("cannot receive"),
+                                           HasSubstr("disconnected"),
+                                           HasSubstr(receivers_list[i])
+                                       )
+                                      ));
+
+
+        EXPECT_CALL(mock_logger, Debug(AllOf(
+                                           HasSubstr("cannot send"),
                                            HasSubstr(receivers_list[i])
                                        )
                                       ));
diff --git a/tests/automatic/producer_receiver/check_monitoring/CMakeLists.txt b/tests/automatic/producer_receiver/check_monitoring/CMakeLists.txt
index 5b43f59df51f2c66fdb2e11682b0c1dcb6250601..45cadecbc453d59a38cbfa44307217a9456248d4 100644
--- a/tests/automatic/producer_receiver/check_monitoring/CMakeLists.txt
+++ b/tests/automatic/producer_receiver/check_monitoring/CMakeLists.txt
@@ -3,10 +3,6 @@ set(TARGET_NAME receiver)
 ################################
 # Testing
 ################################
-get_target_property(RECEIVER_DIR receiver-bin BINARY_DIR)
-get_target_property(RECEIVER_NAME receiver-bin OUTPUT_NAME)
+prepare_asapo()
 
-configure_file(${CMAKE_SOURCE_DIR}/config/nomad/receiver.nmd.in  receiver.nmd)
-configure_file(${CMAKE_SOURCE_DIR}/tests/automatic/settings/receiver.json.tpl receiver.json.tpl COPYONLY)
-configure_file(${CMAKE_SOURCE_DIR}/tests/automatic/settings/discovery_settings.json discovery.json COPYONLY)
 add_script_test("${TARGET_NAME}-monitoring" "$<TARGET_FILE:dummy-data-producer> $<TARGET_FILE:receiver-bin> $<TARGET_PROPERTY:asapo-discovery,EXENAME>" nomem)
diff --git a/tests/automatic/producer_receiver/check_monitoring/check_linux.sh b/tests/automatic/producer_receiver/check_monitoring/check_linux.sh
index 39597e47a943435d3f9c6a728d51aab33da7aef2..7c7e9eb0abfb16a6acdec205b69d0aa0b817a684 100644
--- a/tests/automatic/producer_receiver/check_monitoring/check_linux.sh
+++ b/tests/automatic/producer_receiver/check_monitoring/check_linux.sh
@@ -10,19 +10,18 @@ trap Cleanup EXIT
 Cleanup() {
 	echo cleanup
 	influx -execute "drop database ${database_name}"
-#    kill $receiverid
     nomad stop receiver
-    kill $discoveryid
+    nomad stop discovery
     echo "db.dropDatabase()" | mongo ${mongo_database_name}
+    rm -rf files
 }
 
+mkdir files
+
 influx -execute "create database ${database_name}"
 
 nomad run receiver.nmd
-sleep 0.3
-
-nohup $3 -config discovery.json &>/dev/null &
-discoveryid=`echo $!`
+nomad run discovery.nmd
 
 sleep 1
 
diff --git a/tests/automatic/producer_receiver/transfer_single_file/CMakeLists.txt b/tests/automatic/producer_receiver/transfer_single_file/CMakeLists.txt
index f745213b85ef22c898bce3130b1ae24dcfa33a13..c74ddedc8f912a8ef481a6df1bf050c802ade55a 100644
--- a/tests/automatic/producer_receiver/transfer_single_file/CMakeLists.txt
+++ b/tests/automatic/producer_receiver/transfer_single_file/CMakeLists.txt
@@ -3,5 +3,5 @@ set(TARGET_NAME transfer-single-file)
 ################################
 # Testing
 ################################
-configure_file(${CMAKE_SOURCE_DIR}/tests/automatic/settings/receiver.json receiver.json COPYONLY)
+prepare_asapo()
 add_script_test("${TARGET_NAME}" "$<TARGET_FILE:dummy-data-producer> $<TARGET_FILE:receiver-bin>" nomem)
diff --git a/tests/automatic/producer_receiver/transfer_single_file/check_linux.sh b/tests/automatic/producer_receiver/transfer_single_file/check_linux.sh
index 48d4ff3dc0a304c83e88d3fc659acb39bcfa2014..ae8edbf6cca3cfe8dd81a4176b38bb4e352a754e 100644
--- a/tests/automatic/producer_receiver/transfer_single_file/check_linux.sh
+++ b/tests/automatic/producer_receiver/transfer_single_file/check_linux.sh
@@ -9,16 +9,17 @@ database_name=test_run
 Cleanup() {
 	echo cleanup
 	rm -rf files
-    kill $receiverid
+    nomad stop receiver
+    nomad stop discovery
     echo "db.dropDatabase()" | mongo ${database_name}
 }
 
-nohup $2 receiver.json &>/dev/null &
-sleep 0.3
-receiverid=`echo $!`
+nomad run receiver.nmd
+nomad run discovery.nmd
 
 mkdir files
 
-$1 localhost:4200 100 1
+$1 localhost:5006 100 1 1  0
+
 
 ls -ln files/1.bin | awk '{ print $5 }'| grep 102400
diff --git a/tests/automatic/settings/discovery_settings.json.tpl b/tests/automatic/settings/discovery_settings.json.tpl
new file mode 100644
index 0000000000000000000000000000000000000000..62cb9864b6b7cf0c4a738ca8f1a2b254ff4400fc
--- /dev/null
+++ b/tests/automatic/settings/discovery_settings.json.tpl
@@ -0,0 +1,8 @@
+{
+  "MaxConnections": 32,
+  "Mode": "consul",
+  "Port": {{ env "NOMAD_PORT_discovery" }},
+  "LogLevel":"debug"
+}
+
+