diff --git a/common/cpp/src/system_io/system_io_linux.cpp b/common/cpp/src/system_io/system_io_linux.cpp
index 76342ac4f5b9eb4d71a30bd1185be26f6048dd37..a1013b29b74ede4a4112709bc661b15570fa1ecd 100644
--- a/common/cpp/src/system_io/system_io_linux.cpp
+++ b/common/cpp/src/system_io/system_io_linux.cpp
@@ -1,4 +1,5 @@
 
+
 #include <cstring>
 
 #include <dirent.h>
@@ -236,11 +237,11 @@ SocketDescriptor SystemIO::_socket(int address_family, int socket_type, int sock
 }
 
 ssize_t SystemIO::_send(SocketDescriptor socket_fd, const void* buffer, size_t length) {
-    return ::send(socket_fd, buffer, length, MSG_DONTWAIT);
+    return ::send(socket_fd, buffer, length, MSG_NOSIGNAL);
 }
 
 ssize_t SystemIO::_recv(SocketDescriptor socket_fd, void* buffer, size_t length) {
-    return ::recv(socket_fd, buffer, length, MSG_DONTWAIT);
+    return ::recv(socket_fd, buffer, length, 0);
 }
 
 int SystemIO::_mkdir(const char* dirname) const {
diff --git a/producer/event_monitor_producer/src/shared_event_list.cpp b/producer/event_monitor_producer/src/shared_event_list.cpp
index 8787ead8515b393d9ed7816847f6d6b6217856bd..286165cd743240873f56f06d44f82611cb7fe5ee 100644
--- a/producer/event_monitor_producer/src/shared_event_list.cpp
+++ b/producer/event_monitor_producer/src/shared_event_list.cpp
@@ -1,4 +1,5 @@
 #include "shared_event_list.h"
+#include "eventmon_logger.h"
 
 #include <algorithm>
 
@@ -13,6 +14,7 @@ FilesToSend SharedEventList::GetAndClearEvents() {
         uint64_t elapsed_ms = std::chrono::duration_cast<std::chrono::milliseconds>( high_resolution_clock::now() -
                               it->time).count();
         if (!it->apply_delay || elapsed_ms > kFileDelayMs) {
+            GetDefaultEventMonLogger()->Debug("file considered closed or file moved: " + it->file_name);
             events.push_back(it->file_name);
             it = events_.erase(it);
         } else {
diff --git a/producer/event_monitor_producer/src/single_folder_watch_windows.cpp b/producer/event_monitor_producer/src/single_folder_watch_windows.cpp
index 8f0010fab57301ec404deca9075403ed1cd946de..0453c4ea94a3fd19686256bd9b74468a208f91fa 100644
--- a/producer/event_monitor_producer/src/single_folder_watch_windows.cpp
+++ b/producer/event_monitor_producer/src/single_folder_watch_windows.cpp
@@ -27,6 +27,7 @@ Error SingleFolderWatch::Init()  {
         this->log__->Error("cannot add folder watch for " + full_path + ": " + err->Explain());
         return err;
     }
+    GetDefaultEventMonLogger()->Debug("added folder to monitor: " + full_path);
     return nullptr;
 }
 
@@ -53,9 +54,11 @@ Error SingleFolderWatch::ProcessEvent(const WinEvent& event) {
     if (watch_io__->IsDirectory(root_folder_ + kPathSeparator + fname)) {
         return nullptr;
     }
+    GetDefaultEventMonLogger()->Debug("file modified event: " + fname);
     event_list_->AddEvent(fname, event.ShouldBeProcessedAfterDelay());
     return nullptr;
 }
+
 void SingleFolderWatch::ProcessEvents(DWORD bytes_to_read) {
     for (char* p = buffer_.get(); p < buffer_.get() + bytes_to_read; ) {
         WinEvent event{(FILE_NOTIFY_INFORMATION*) p};
diff --git a/receiver/src/receiver.cpp b/receiver/src/receiver.cpp
index 9a94afe45df43c47522ce68d850883976a6ad4ec..7588178739dc7cf4159fa559a160a9c3d8b688eb 100644
--- a/receiver/src/receiver.cpp
+++ b/receiver/src/receiver.cpp
@@ -61,7 +61,7 @@ void Receiver::StartNewConnectionInSeparateThread(int connection_socket_fd, cons
     });
 
     if (thread) {
-        thread->detach();
+        threads_.emplace_back(std::move(thread));
     }
     return;
 }
diff --git a/receiver/src/receiver.h b/receiver/src/receiver.h
index c7435ce68aba8fa561e7a1df8086a75b40ca8149..bc90ac6780418754a664408dca651133f565067b 100644
--- a/receiver/src/receiver.h
+++ b/receiver/src/receiver.h
@@ -17,6 +17,7 @@ class Receiver {
     Error PrepareListener(std::string listener_address);
     void StartNewConnectionInSeparateThread(int connection_socket_fd, const std::string& address);
     void ProcessConnections(Error* err);
+    std::vector<std::unique_ptr<std::thread>> threads_;
   public:
     static const int kMaxUnacceptedConnectionsBacklog;//TODO: Read from config
     Receiver(const Receiver&) = delete;
diff --git a/tests/automatic/CMakeLists.txt b/tests/automatic/CMakeLists.txt
index b75349614935b69003f2bfec8a89da763bb46392..ea37ce600f63e9b4fe92fa165313b08a91f9aa11 100644
--- a/tests/automatic/CMakeLists.txt
+++ b/tests/automatic/CMakeLists.txt
@@ -31,4 +31,6 @@ add_subdirectory(producer)
 
 if (UNIX)
     add_subdirectory(high_avail)
-endif()
\ No newline at end of file
+endif()
+
+add_subdirectory(bug_fixes)
diff --git a/tests/automatic/bug_fixes/CMakeLists.txt b/tests/automatic/bug_fixes/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..91bd326920c5e3ddbad08c688448bb1239a2bbae
--- /dev/null
+++ b/tests/automatic/bug_fixes/CMakeLists.txt
@@ -0,0 +1,5 @@
+if (UNIX)
+    add_subdirectory(receiver_cpu_usage)
+endif()
+
+add_subdirectory(producer_send_after_restart)
\ No newline at end of file
diff --git a/tests/automatic/bug_fixes/producer_send_after_restart/CMakeLists.txt b/tests/automatic/bug_fixes/producer_send_after_restart/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..56a0067a3f0fb59f618d56247db84c8f4141ca15
--- /dev/null
+++ b/tests/automatic/bug_fixes/producer_send_after_restart/CMakeLists.txt
@@ -0,0 +1,16 @@
+set(TARGET_NAME producer_send_after_restart)
+
+################################
+# Testing
+################################
+prepare_asapo()
+
+if (UNIX)
+    set (ROOT_PATH "/tmp/asapo/")
+else()
+    set (ROOT_PATH "c:\\\\tmp\\\\asapo\\\\")
+endif()
+
+configure_file(test.json.in test.json @ONLY)
+
+add_script_test("${TARGET_NAME}" "$<TARGET_FILE:event-monitor-producer-bin> $<TARGET_FILE:getnext_broker> $<TARGET_PROPERTY:asapo,EXENAME>" nomem)
diff --git a/tests/automatic/bug_fixes/producer_send_after_restart/check_linux.sh b/tests/automatic/bug_fixes/producer_send_after_restart/check_linux.sh
new file mode 100644
index 0000000000000000000000000000000000000000..250584350afff1ae5093aaafc55309c1eeefe88a
--- /dev/null
+++ b/tests/automatic/bug_fixes/producer_send_after_restart/check_linux.sh
@@ -0,0 +1,55 @@
+#!/usr/bin/env bash
+
+set -e
+
+trap Cleanup EXIT
+
+beamtime_id=asapo_test
+
+monitor_database_name=db_test
+proxy_address=127.0.0.1:8400
+
+beamline=test
+receiver_root_folder=/tmp/asapo/receiver/files
+receiver_folder=${receiver_root_folder}/${beamline}/${beamtime_id}
+
+mkdir -p /tmp/asapo/test_in/test1/
+
+Cleanup() {
+    echo cleanup
+    rm -rf ${receiver_root_folder}
+    nomad stop nginx
+    nomad stop receiver
+    nomad stop discovery
+    nomad stop authorizer
+    echo "db.dropDatabase()" | mongo ${beamtime_id}
+}
+
+nomad run nginx.nmd
+nomad run authorizer.nmd
+nomad run receiver.nmd
+nomad run discovery.nmd
+
+sleep 1
+
+#producer
+mkdir -p ${receiver_folder}
+$1 test.json &> output &
+producerid=`echo $!`
+
+sleep 1
+
+echo hello > /tmp/asapo/test_in/test1/file1
+sleep 1
+nomad stop receiver
+sleep 1
+nomad run receiver.nmd
+
+echo hello > /tmp/asapo/test_in/test1/file1
+sleep 1
+
+kill -s INT $producerid
+sleep 0.5
+cat output
+cat output | grep "Processed 2"
+
diff --git a/tests/automatic/bug_fixes/producer_send_after_restart/check_windows.bat b/tests/automatic/bug_fixes/producer_send_after_restart/check_windows.bat
new file mode 100644
index 0000000000000000000000000000000000000000..162097f75524e5e86f98dfd5296e7eea57c08362
--- /dev/null
+++ b/tests/automatic/bug_fixes/producer_send_after_restart/check_windows.bat
@@ -0,0 +1,76 @@
+
+
+SET mongo_exe="c:\Program Files\MongoDB\Server\3.6\bin\mongo.exe"
+SET beamtime_id=asapo_test
+SET beamline=test
+SET receiver_root_folder=c:\tmp\asapo\receiver\files
+SET receiver_folder="%receiver_root_folder%\%beamline%\%beamtime_id%"
+
+set producer_short_name="%~nx1"
+
+
+"%3" token -secret broker_secret.key %beamtime_id% > token
+set /P token=< token
+
+set proxy_address="127.0.0.1:8400"
+
+echo db.%beamtime_id%.insert({dummy:1}) | %mongo_exe% %beamtime_id%
+
+c:\opt\consul\nomad run receiver.nmd
+c:\opt\consul\nomad run authorizer.nmd
+c:\opt\consul\nomad run discovery.nmd
+c:\opt\consul\nomad run broker.nmd
+c:\opt\consul\nomad run nginx.nmd
+
+ping 1.0.0.0 -n 10 -w 100 > nul
+
+REM producer
+mkdir %receiver_folder%
+mkdir  c:\tmp\asapo\test_in\test1
+mkdir  c:\tmp\asapo\test_in\test2
+start /B "" "%1" test.json
+
+ping 1.0.0.0 -n 3 -w 100 > nul
+
+echo hello > c:\tmp\asapo\test_in\test1\file1
+echo hello > c:\tmp\asapo\test_in\test1\file2
+
+ping 1.0.0.0 -n 3 -w 100 > nul
+
+c:\opt\consul\nomad stop receiver
+c:\opt\consul\nomad run receiver.nmd
+
+ping 1.0.0.0 -n 3 -w 100 > nul
+
+
+echo hello > c:\tmp\asapo\test_in\test1\file3
+
+ping 1.0.0.0 -n 10 -w 100 > nul
+
+
+REM worker
+"%2" %proxy_address% %beamtime_id% 2 %token% 1000 | findstr /c:"Processed 3 file(s)"  || goto :error
+
+
+goto :clean
+
+:error
+call :clean
+exit /b 1
+
+:clean
+c:\opt\consul\nomad stop receiver
+c:\opt\consul\nomad stop discovery
+c:\opt\consul\nomad stop broker
+c:\opt\consul\nomad stop authorizer
+c:\opt\consul\nomad stop nginx
+rmdir /S /Q %receiver_root_folder%
+rmdir /S /Q c:\tmp\asapo\test_in\test1
+rmdir /S /Q c:\tmp\asapo\test_in\test2
+Taskkill /IM "%producer_short_name%" /F
+
+del /f token
+echo db.dropDatabase() | %mongo_exe% %beamtime_id%
+
+
+
diff --git a/tests/automatic/bug_fixes/producer_send_after_restart/test.json.in b/tests/automatic/bug_fixes/producer_send_after_restart/test.json.in
new file mode 100644
index 0000000000000000000000000000000000000000..22b699c17deff35749c9c7ac59d82f8d62b473ae
--- /dev/null
+++ b/tests/automatic/bug_fixes/producer_send_after_restart/test.json.in
@@ -0,0 +1,12 @@
+{
+ "AsapoEndpoint":"localhost:8400",
+ "Tag":"test_tag",
+ "BeamtimeID":"asapo_test",
+ "Mode":"tcp",
+ "NThreads":1,
+ "LogLevel":"debug",
+ "RootMonitoredFolder":"@ROOT_PATH@test_in",
+ "MonitoredSubFolders":["test1"],
+ "IgnoreExtentions":["tmp"],
+ "RemoveAfterSend":true
+}
diff --git a/tests/automatic/bug_fixes/receiver_cpu_usage/CMakeLists.txt b/tests/automatic/bug_fixes/receiver_cpu_usage/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..f6bf9f8cfb1b26ca6b7fe568a41d61e641a76c11
--- /dev/null
+++ b/tests/automatic/bug_fixes/receiver_cpu_usage/CMakeLists.txt
@@ -0,0 +1,11 @@
+set(TARGET_NAME receiver_cpu_usage)
+
+################################
+# Testing
+################################
+prepare_asapo()
+set (ROOT_PATH "/tmp/asapo/")
+
+configure_file(test.json.in test.json @ONLY)
+
+add_script_test("${TARGET_NAME}" "$<TARGET_FILE:event-monitor-producer-bin> $<TARGET_FILE:getnext_broker> $<TARGET_PROPERTY:asapo,EXENAME>" nomem)
diff --git a/tests/automatic/bug_fixes/receiver_cpu_usage/check_linux.sh b/tests/automatic/bug_fixes/receiver_cpu_usage/check_linux.sh
new file mode 100644
index 0000000000000000000000000000000000000000..52228deb296efc93a858e6d28ee0e5b14a3499d3
--- /dev/null
+++ b/tests/automatic/bug_fixes/receiver_cpu_usage/check_linux.sh
@@ -0,0 +1,56 @@
+#!/usr/bin/env bash
+
+set -e
+
+trap Cleanup EXIT
+
+beamtime_id=asapo_test
+
+monitor_database_name=db_test
+proxy_address=127.0.0.1:8400
+
+beamline=test
+receiver_root_folder=/tmp/asapo/receiver/files
+receiver_folder=${receiver_root_folder}/${beamline}/${beamtime_id}
+
+mkdir -p /tmp/asapo/test_in/test1/
+
+Cleanup() {
+    echo cleanup
+    kill $producerid
+    rm -rf /tmp/asapo/test_in/test1
+    rm -rf ${receiver_root_folder}
+    nomad stop nginx
+    nomad stop receiver
+    nomad stop discovery
+    nomad stop authorizer
+    echo "db.dropDatabase()" | mongo ${beamtime_id}
+}
+
+nomad run nginx.nmd
+nomad run authorizer.nmd
+nomad run receiver.nmd
+nomad run discovery.nmd
+
+sleep 1
+
+#producer
+mkdir -p ${receiver_folder}
+$1 test.json &
+producerid=`echo $!`
+
+sleep 1
+
+echo hello > /tmp/asapo/test_in/test1/file1
+
+sleep 5
+
+usage=`top -b -n 1 | grep receiver | awk  '{print int($9)'}`
+echo CPU usage: $usage
+if [ -z "$usage" ]; then
+exit 1
+fi
+
+if (( $usage > 50 )); then
+    exit 1
+fi
diff --git a/tests/automatic/bug_fixes/receiver_cpu_usage/test.json.in b/tests/automatic/bug_fixes/receiver_cpu_usage/test.json.in
new file mode 100644
index 0000000000000000000000000000000000000000..22b699c17deff35749c9c7ac59d82f8d62b473ae
--- /dev/null
+++ b/tests/automatic/bug_fixes/receiver_cpu_usage/test.json.in
@@ -0,0 +1,12 @@
+{
+ "AsapoEndpoint":"localhost:8400",
+ "Tag":"test_tag",
+ "BeamtimeID":"asapo_test",
+ "Mode":"tcp",
+ "NThreads":1,
+ "LogLevel":"debug",
+ "RootMonitoredFolder":"@ROOT_PATH@test_in",
+ "MonitoredSubFolders":["test1"],
+ "IgnoreExtentions":["tmp"],
+ "RemoveAfterSend":true
+}
diff --git a/tests/automatic/settings/discovery_fixed_settings.json b/tests/automatic/settings/discovery_fixed_settings.json
new file mode 100644
index 0000000000000000000000000000000000000000..25cba67824339d7c81a9d39b4a89d8356d4ea9bf
--- /dev/null
+++ b/tests/automatic/settings/discovery_fixed_settings.json
@@ -0,0 +1,10 @@
+{
+  "Mode": "consul",
+  "Receiver": {
+    "MaxConnections": 32
+  },
+  "Port": {{ env "NOMAD_PORT_discovery" }},
+  "LogLevel":"debug"
+}
+
+
diff --git a/tests/manual/tests_via_nomad/asapo-test_filegen_filemon.nomad b/tests/manual/tests_via_nomad/asapo-test_filegen_filemon.nomad
index c5181c44bac5d2d960fd4d8f154398accc23b828..6ea2313dc6130d8462d884828da7454757ab72c8 100644
--- a/tests/manual/tests_via_nomad/asapo-test_filegen_filemon.nomad
+++ b/tests/manual/tests_via_nomad/asapo-test_filegen_filemon.nomad
@@ -20,9 +20,10 @@ job "asapo-test" {
         command = "local/filegen_win.exe"
         args = [
           "1",
-          "1M",
-          "10",
-          "c:/tmp/asapo/test_in/test_folder/file_win"]
+          "10M",
+          "10000",
+          "120",
+          "u:/asapo/test_folder/file_win"]
       }
 
       artifact {
@@ -57,9 +58,10 @@ job "asapo-test" {
         command = "local/filegen_linux"
         args = [
           "1",
-          "1M",
-          "10",
-          "/tmp/asapo/test_in/test_folder/file_lin_"]
+          "10M",
+          "10000",
+          "120",
+          "/tmp/asapo/test_in/test_folder/file_lin"]
       }
 
       artifact {
@@ -100,13 +102,13 @@ job "asapo-test" {
           "30000"]
       }
 
-      resources {
-        cpu = 5000
-        memory = 128
-        network {
-          mbits = 10000
-        }
-      }
+#      resources {
+#        cpu = 5000
+#        memory = 128
+#        network {
+#          mbits = 10000
+#        }
+#      }
 
       artifact {
         source = "http://nims.desy.de/extra/asapo/getnext_broker"
@@ -144,13 +146,13 @@ job "asapo-test" {
           "yzgAcLmijSLWIm8dBiGNCbc0i42u5HSm-zR6FRqo__Y=",
           "30000"]
       }
-      resources {
-        cpu = 5000
-        memory = 128
-        network {
-          mbits = 10000
-        }
-      }
+#      resources {
+#        cpu = 5000
+#        memory = 128
+#        network {
+#          mbits = 10000
+#        }
+#      }
 
       artifact {
         source = "http://nims.desy.de/extra/asapo/getnext_broker"
diff --git a/tests/manual/tests_via_nomad/asapo-test_filemon_producer_toreceiver.nomad b/tests/manual/tests_via_nomad/asapo-test_filemon_producer_toreceiver.nomad
index eb22e67a00db405f26d60bfba1a36980dafbc028..fcde0f3442f59396c0bd793f89dec6ac922f8d1d 100644
--- a/tests/manual/tests_via_nomad/asapo-test_filemon_producer_toreceiver.nomad
+++ b/tests/manual/tests_via_nomad/asapo-test_filemon_producer_toreceiver.nomad
@@ -36,7 +36,7 @@ job "asapo-filemon-producer" {
  "Mode":"tcp",
  "NThreads":8,
  "LogLevel":"debug",
- "RootMonitoredFolder":"c:\\tmp\\asapo\\test_in",
+ "RootMonitoredFolder":"u:\\asapo",
  "MonitoredSubFolders":["test_folder"],
  "IgnoreExtentions":["tmp"],
  "RemoveAfterSend":true