diff --git a/CMakeLists.txt b/CMakeLists.txt
index 58b498aa7a469b5dd4e8cc6324c074a8f69f576f..2285e204fa4a3a56877f8b4857266d59723c070b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -3,6 +3,7 @@ project(ASAPO)
 set(CMAKE_CXX_STANDARD 11)
 IF(WIN32)
     set(CMAKE_CXX_FLAGS_DEBUG "/MTd")
+    add_definitions(-DWIN32)
 ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "GNU")
     SET( CMAKE_EXE_LINKER_FLAGS  "${CMAKE_EXE_LINKER_FLAGS} -static-libgcc -static-libstdc++")
     set(CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS} -Wall")
diff --git a/CMakeModules/prepare_asapo.cmake b/CMakeModules/prepare_asapo.cmake
index d80e80166b14586db3f86fce3540bac8200b310b..53580a80b0f90d9b3c3546efab2ec5a460216922 100644
--- a/CMakeModules/prepare_asapo.cmake
+++ b/CMakeModules/prepare_asapo.cmake
@@ -4,10 +4,14 @@ function(prepare_asapo)
     get_target_property(DISCOVERY_FULLPATH asapo-discovery EXENAME)
     get_target_property(BROKER_FULLPATH asapo-broker EXENAME)
     set(WORK_DIR ${CMAKE_CURRENT_BINARY_DIR})
+    if (WIN32)
+        configure_file(${CMAKE_SOURCE_DIR}/tests/automatic/settings/receiver.json.tpl.win receiver.json.tpl COPYONLY)
+    else()
+        configure_file(${CMAKE_SOURCE_DIR}/tests/automatic/settings/receiver.json.tpl.lin receiver.json.tpl COPYONLY)
+    endif()
     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}/config/nomad/broker.nmd.in  broker.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)
     configure_file(${CMAKE_SOURCE_DIR}/tests/automatic/settings/broker_settings.json.tpl broker.json.tpl COPYONLY)
 endfunction()
diff --git a/common/cpp/include/preprocessor/definitions.h b/common/cpp/include/preprocessor/definitions.h
index 0e1571e4b9800d152b4665cbe422653c182083f5..385ffd37242d3b209a7f95cc0a7404c0d7cd4fe9 100644
--- a/common/cpp/include/preprocessor/definitions.h
+++ b/common/cpp/include/preprocessor/definitions.h
@@ -9,7 +9,7 @@
 
 namespace  asapo {
 const char kPathSeparator =
-#ifdef _WIN32
+#ifdef WIN32
     '\\';
 #else
     '/';
diff --git a/common/cpp/unittests/json_parser/test_json_parser.cpp b/common/cpp/unittests/json_parser/test_json_parser.cpp
index e884cb43c4563e3fe7fa4ca12bf73dce8b156581..863e56516d44a30e58b5055ce232666c7d6be695 100644
--- a/common/cpp/unittests/json_parser/test_json_parser.cpp
+++ b/common/cpp/unittests/json_parser/test_json_parser.cpp
@@ -30,7 +30,7 @@ using asapo::IO;
 namespace {
 
 TEST(ParseString, SimpleConvertToJson) {
-    std::string json = R"({"_id":2,"foo":"foo","bar":1,"flag":true})";
+    std::string json = R"({"_id":2,"foo":"foo:\\1","bar":1,"flag":true})";
 
     JsonStringParser parser{json};
 
@@ -49,7 +49,7 @@ TEST(ParseString, SimpleConvertToJson) {
 
 
     ASSERT_THAT(id, Eq(2));
-    ASSERT_THAT(foo, Eq("foo"));
+    ASSERT_THAT(foo, Eq("foo:\\1"));
     ASSERT_THAT(bar, Eq(1));
     ASSERT_THAT(flag, true);
 
diff --git a/examples/producer/dummy-data-producer/check_windows.bat b/examples/producer/dummy-data-producer/check_windows.bat
index 95652e449db3fa550ce10cac2b8040f74a4b54e0..86ee30f77c6db2812d159c0b0af601c569f09b02 100644
--- a/examples/producer/dummy-data-producer/check_windows.bat
+++ b/examples/producer/dummy-data-producer/check_windows.bat
@@ -1,4 +1,4 @@
-"%1" 0.0.0.0 1 1 2>&1 | findstr "not valid" || goto :error
+"%1" 0.0.0.0 1 1 1 1 2>&1 | findstr "not successfully" || goto :error
 goto :clean
 
 :error
diff --git a/examples/producer/dummy-data-producer/dummy_data_producer.cpp b/examples/producer/dummy-data-producer/dummy_data_producer.cpp
index 976a049eaf9f6a802560231b39bfc7037ec22289..3917685a1d0c715c6c4d40ce4519bb56c1420450 100644
--- a/examples/producer/dummy-data-producer/dummy_data_producer.cpp
+++ b/examples/producer/dummy-data-producer/dummy_data_producer.cpp
@@ -83,7 +83,7 @@ int main (int argc, char* argv[]) {
         producer = asapo::Producer::Create(receiver_address, nthreads, asapo::RequestHandlerType::kFilesystem, &err);
     }
     producer->EnableLocalLog(true);
-    producer->SetLogLevel(asapo::LogLevel::Info);
+    producer->SetLogLevel(asapo::LogLevel::Debug);
     std::this_thread::sleep_for(std::chrono::milliseconds(1000));
 
 
@@ -101,6 +101,9 @@ int main (int argc, char* argv[]) {
         return EXIT_FAILURE;
     }
 
+    uint64_t elapsed_ms = 0;
+    uint64_t timeout_sec = 30;
+
     while (true) {
         mutex.lock();
         if (nfiles <= 0) {
@@ -108,6 +111,12 @@ int main (int argc, char* argv[]) {
             break;
         }
         mutex.unlock();
+        std::this_thread::sleep_for(std::chrono::milliseconds(100));
+        elapsed_ms += 100;
+        if (elapsed_ms > timeout_sec * 1000) {
+            std::cerr << "Exit on timeout " << std::endl;
+            return EXIT_FAILURE;
+        }
     }
 
     high_resolution_clock::time_point t2 = high_resolution_clock::now();
diff --git a/tests/automatic/full_chain/simple_chain/check_linux.sh b/tests/automatic/full_chain/simple_chain/check_linux.sh
index caccc35860051df4a22617ff19c9cb3dd3c30ded..f384a4b70254a617746823ea3c5f84e69ed619de 100644
--- a/tests/automatic/full_chain/simple_chain/check_linux.sh
+++ b/tests/automatic/full_chain/simple_chain/check_linux.sh
@@ -8,7 +8,7 @@ broker_database_name=test_run
 monitor_database_name=db_test
 broker_address=127.0.0.1:5005
 
-receiver_folder=/tmp/asapo/recevier/files
+receiver_folder=/tmp/asapo/receiver/files
 
 Cleanup() {
     echo cleanup
diff --git a/tests/automatic/full_chain/simple_chain/check_windows.bat b/tests/automatic/full_chain/simple_chain/check_windows.bat
index 7f936e4de9815001a6b57038a982362d1217a389..bd7115b3858e0283c548d108f8143d80e17f7c2c 100644
--- a/tests/automatic/full_chain/simple_chain/check_windows.bat
+++ b/tests/automatic/full_chain/simple_chain/check_windows.bat
@@ -1,14 +1,14 @@
 SET mongo_exe="c:\Program Files\MongoDB\Server\3.6\bin\mongo.exe"
-set broker_database_name="test_run"
-SET receiver_folder="c:\tmp\asapo\recevier\files"
+set broker_database_name=test_run
+SET receiver_folder="c:\tmp\asapo\receiver\files"
 
-echo db.%broker_database_name%.insert({dummy:1})" | %mongo_exe% %broker_database_name%
+echo db.%broker_database_name%.insert({dummy:1}) | %mongo_exe% %broker_database_name%
 
 c:\opt\consul\nomad run receiver.nmd
 c:\opt\consul\nomad run discovery.nmd
 c:\opt\consul\nomad run broker.nmd
 
-ping 1.0.0.0 -n 1 -w 100 > nul
+ping 1.0.0.0 -n 10 -w 100 > nul
 
 REM producer
 mkdir %receiver_folder%
diff --git a/tests/automatic/producer_receiver/check_monitoring/check_linux.sh b/tests/automatic/producer_receiver/check_monitoring/check_linux.sh
index 8634b548543094b9927e18aa475ffd699c74df24..817e76757865684c21985e90c262eb2a056a2b33 100644
--- a/tests/automatic/producer_receiver/check_monitoring/check_linux.sh
+++ b/tests/automatic/producer_receiver/check_monitoring/check_linux.sh
@@ -2,7 +2,7 @@
 
 database_name=db_test
 mongo_database_name=test_run
-receiver_folder=/tmp/asapo/recevier/files
+receiver_folder=/tmp/asapo/receiver/files
 set -e
 
 trap Cleanup EXIT
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 814ae5f5bcfdd4e5fb2a06974f813243592321b8..d904c84f601fb0dee70caedc51fe94f5b0ae091f 100644
--- a/tests/automatic/producer_receiver/transfer_single_file/check_linux.sh
+++ b/tests/automatic/producer_receiver/transfer_single_file/check_linux.sh
@@ -6,7 +6,7 @@ trap Cleanup EXIT
 
 database_name=db_test
 mongo_database_name=test_run
-receiver_folder=/tmp/asapo/recevier/files
+receiver_folder=/tmp/asapo/receiver/files
 
 Cleanup() {
 	echo cleanup
diff --git a/tests/automatic/producer_receiver/transfer_single_file/check_windows.bat b/tests/automatic/producer_receiver/transfer_single_file/check_windows.bat
index d6e8a0a4cba2bc06d73f6f762f1ec58bda1ee0c8..e27b681baad8df7505914fc2e6bf4a62d44686d9 100644
--- a/tests/automatic/producer_receiver/transfer_single_file/check_windows.bat
+++ b/tests/automatic/producer_receiver/transfer_single_file/check_windows.bat
@@ -1,6 +1,6 @@
 SET mongo_exe="c:\Program Files\MongoDB\Server\3.6\bin\mongo.exe"
 SET database_name=test_run
-SET receiver_folder="c:\tmp\asapo\recevier\files"
+SET receiver_folder="c:\tmp\asapo\receiver\files"
 
 echo db.%database_name%.insert({dummy:1})" | %mongo_exe% %database_name%
 
diff --git a/tests/automatic/settings/receiver.json.tpl b/tests/automatic/settings/receiver.json.tpl.lin
similarity index 86%
rename from tests/automatic/settings/receiver.json.tpl
rename to tests/automatic/settings/receiver.json.tpl.lin
index 8b62c2d3037b743587ff038cdf159794ee9704a7..8d98fd1abee361de21a2b4de1d87bd2fa20f277b 100644
--- a/tests/automatic/settings/receiver.json.tpl
+++ b/tests/automatic/settings/receiver.json.tpl.lin
@@ -8,5 +8,5 @@
   "WriteToDisk":true,
   "WriteToDb":true,
   "LogLevel" : "debug",
-  "RootFolder" : "/tmp/asapo/recevier/files"
+  "RootFolder" : "/tmp/asapo/receiver/files"
 }
diff --git a/tests/automatic/settings/receiver.json.tpl.win b/tests/automatic/settings/receiver.json.tpl.win
new file mode 100644
index 0000000000000000000000000000000000000000..d4cb5e03853d46bdce0e0fcb19dd7eb016c2ce28
--- /dev/null
+++ b/tests/automatic/settings/receiver.json.tpl.win
@@ -0,0 +1,12 @@
+{
+  "MonitorDbAddress":"localhost:8086",
+  "MonitorDbName": "db_test",
+  "BrokerDbAddress":"localhost:27017",
+  "BrokerDbName": "test_run",
+  "ListenPort": {{ env "NOMAD_PORT_recv" }},
+  "Tag": "{{ env "NOMAD_ADDR_recv" }}",
+  "WriteToDisk":true,
+  "WriteToDb":true,
+  "LogLevel" : "debug",
+  "RootFolder" : "c:\\tmp\\asapo\\receiver\\files"
+}