diff --git a/CMakeLists.txt b/CMakeLists.txt
index 84426e951ad268fdddbac89a61700f96d10fc8c8..84299a75a24e093527305f41c39c973e92cd7377 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -5,6 +5,7 @@ IF(WIN32)
     set(CMAKE_CXX_FLAGS_DEBUG "/MTd")
     set(CMAKE_CXX_FLAGS_RELEASE "/MT")
     add_definitions(-DWIN32)
+    add_definitions(-D_CRT_SECURE_NO_WARNINGS)
 ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "GNU")
     SET( CMAKE_EXE_LINKER_FLAGS  "${CMAKE_EXE_LINKER_FLAGS} -static-libgcc -static-libstdc++")
 #todo: added fPIC to be able to create shared libs for Python - check it does not change performance
diff --git a/common/cpp/src/system_io/system_io.cpp b/common/cpp/src/system_io/system_io.cpp
index 89c8292180b04ee82a9ab3a11906ad74aa3e79c1..7dd9819da5710221a8ce433cecb0eea6d8675e2c 100644
--- a/common/cpp/src/system_io/system_io.cpp
+++ b/common/cpp/src/system_io/system_io.cpp
@@ -72,7 +72,7 @@ std::unique_ptr<std::tuple<std::string, uint16_t>> SystemIO::SplitAddressToHostn
 uint8_t* AllocateArray(uint64_t fsize, Error* err) {
     uint8_t* data_array = nullptr;
     try {
-        data_array = new uint8_t[fsize];
+        data_array = new uint8_t[(size_t)fsize];
     } catch (...) {
         *err = ErrorTemplates::kMemoryAllocationError.Generate();
         return nullptr;
@@ -103,7 +103,7 @@ FileData SystemIO::GetDataFromFile(const std::string& fname, uint64_t* fsize, Er
         return nullptr;
     }
 
-    Read(fd, data_array, *fsize, err);
+    Read(fd, data_array, (size_t)*fsize, err);
     if (*err != nullptr) {
         (*err)->Append(fname);
         Close(fd, nullptr);
@@ -194,7 +194,7 @@ std::string SystemIO::ReadFileToString(const std::string& fname, Error* err) con
         return "";
     }
 
-    return std::string(reinterpret_cast<const char*>(data.get()), size);
+    return std::string(reinterpret_cast<const char*>(data.get()), (size_t)size);
 }
 
 std::unique_ptr<std::thread> SystemIO::NewThread(std::function<void()> function) const {
diff --git a/producer/api/src/producer_impl.cpp b/producer/api/src/producer_impl.cpp
index f86003f65e9d62a8617beb847a0cf45f576717d9..026e224f669eb30863c8c881a252a00e70ec2006 100644
--- a/producer/api/src/producer_impl.cpp
+++ b/producer/api/src/producer_impl.cpp
@@ -50,7 +50,7 @@ Error ProducerImpl::Send(const EventHeader& event_header,
                          FileData data,
                          std::string full_path,
                          RequestCallback callback) {
-    auto err = CheckProducerRequest(event_header.file_size, event_header.file_name.size());
+    auto err = CheckProducerRequest((size_t)event_header.file_size, event_header.file_name.size());
     if (err) {
         log__->Error("error checking request - " + err->Explain());
         return err;
diff --git a/producer/api/src/receiver_discovery_service.cpp b/producer/api/src/receiver_discovery_service.cpp
index ebf87761f06eaf6a75fc0e319f3305cd33826cb1..2f10a3152a80d9f53b2cf675be504a9096c23c77 100644
--- a/producer/api/src/receiver_discovery_service.cpp
+++ b/producer/api/src/receiver_discovery_service.cpp
@@ -100,7 +100,7 @@ ReceiversList ReceiverDiscoveryService::RotatedUriList(uint64_t nthread) {
     }
     ReceiversList list{uri_list_};
     lock.unlock();
-    auto shift = nthread % size;
+    auto shift = (int) nthread % size;
     std::rotate(list.begin(), list.begin() + shift, list.end());
     return list;
 }
diff --git a/producer/api/src/request_handler_filesystem.cpp b/producer/api/src/request_handler_filesystem.cpp
index dcd27a114943b303ba3e6965861f819a16b314d7..ac49aea6e39319c54f2438ceb279d21685e6b154 100644
--- a/producer/api/src/request_handler_filesystem.cpp
+++ b/producer/api/src/request_handler_filesystem.cpp
@@ -25,7 +25,7 @@ Error RequestHandlerFilesystem::ProcessRequestUnlocked(GenericRequest* request)
     }
 
     err = io__->WriteDataToFile(destination_folder_, request->header.message, (uint8_t*)producer_request->data.get(),
-                                request->header.data_size, true);
+                                (size_t)request->header.data_size, true);
     if (producer_request->callback) {
         producer_request->callback(request->header, std::move(err));
     }
diff --git a/producer/api/src/request_handler_tcp.cpp b/producer/api/src/request_handler_tcp.cpp
index e7cb40916124f5f9d45b009f702a7ed70b2fb805..5d6cb9dc9a72a6614713cd45d4cc30df868ffd82 100644
--- a/producer/api/src/request_handler_tcp.cpp
+++ b/producer/api/src/request_handler_tcp.cpp
@@ -55,7 +55,7 @@ Error RequestHandlerTcp::SendHeaderAndData(const ProducerRequest* request) {
         return io_error;
     }
 
-    io__->Send(sd_, (void*) request->data.get(), request->header.data_size, &io_error);
+    io__->Send(sd_, (void*) request->data.get(), (size_t)request->header.data_size, &io_error);
     if(io_error) {
         return io_error;
     }
diff --git a/producer/api/unittests/test_request_handler_filesystem.cpp b/producer/api/unittests/test_request_handler_filesystem.cpp
index c3f69e5a4708b50efc8515772c727c85f07a82d6..f0093d4bbab4483ac696ca8670e3eb5ce17e0237 100644
--- a/producer/api/unittests/test_request_handler_filesystem.cpp
+++ b/producer/api/unittests/test_request_handler_filesystem.cpp
@@ -90,7 +90,7 @@ MATCHER_P2(M_CheckSendDataRequest, file_id, file_size,
 }
 
 TEST_F(RequestHandlerFilesystemTests, CallBackErrorIfCannotSaveFile) {
-    EXPECT_CALL(mock_io, WriteDataToFile_t(expected_destination, expected_file_name, nullptr, expected_file_size, true))
+    EXPECT_CALL(mock_io, WriteDataToFile_t(expected_destination, expected_file_name, nullptr, (size_t)expected_file_size, true))
     .WillOnce(
         Return(
             asapo::IOErrorTemplates::kUnknownIOError.Generate().release())
@@ -105,7 +105,7 @@ TEST_F(RequestHandlerFilesystemTests, CallBackErrorIfCannotSaveFile) {
 }
 
 TEST_F(RequestHandlerFilesystemTests, WorksWithemptyCallback) {
-    EXPECT_CALL(mock_io, WriteDataToFile_t(expected_destination, expected_file_name, nullptr, expected_file_size, true))
+    EXPECT_CALL(mock_io, WriteDataToFile_t(expected_destination, expected_file_name, nullptr,(size_t) expected_file_size, true))
     .WillOnce(
         Return(nullptr)
     );
@@ -140,7 +140,7 @@ TEST_F(RequestHandlerFilesystemTests, FileRequestOK) {
             Return(nullptr)
         ));
 
-    EXPECT_CALL(mock_io, WriteDataToFile_t(expected_destination, expected_file_name, nullptr, expected_file_size, true))
+    EXPECT_CALL(mock_io, WriteDataToFile_t(expected_destination, expected_file_name, nullptr, (size_t)expected_file_size, true))
     .WillOnce(
         Return(nullptr)
     );
@@ -152,7 +152,7 @@ TEST_F(RequestHandlerFilesystemTests, FileRequestOK) {
 
 
 TEST_F(RequestHandlerFilesystemTests, TransferOK) {
-    EXPECT_CALL(mock_io, WriteDataToFile_t(expected_destination, expected_file_name, nullptr, expected_file_size, true))
+    EXPECT_CALL(mock_io, WriteDataToFile_t(expected_destination, expected_file_name, nullptr,(size_t) expected_file_size, true))
     .WillOnce(
         Return(
             nullptr)
diff --git a/producer/api/unittests/test_request_handler_tcp.cpp b/producer/api/unittests/test_request_handler_tcp.cpp
index e8e18a2a1878a7ee3c2de3ac058e17b8feb0fdd8..3583c722a223011e8ccf555262f55565d98800eb 100644
--- a/producer/api/unittests/test_request_handler_tcp.cpp
+++ b/producer/api/unittests/test_request_handler_tcp.cpp
@@ -247,7 +247,7 @@ void RequestHandlerTcpTests::ExpectFailSendHeader(bool only_once) {
 void RequestHandlerTcpTests::ExpectFailSendData(bool only_once) {
     int i = 0;
     for (auto expected_sd : expected_sds) {
-        EXPECT_CALL(mock_io, Send_t(expected_sd, nullptr, expected_file_size, _))
+        EXPECT_CALL(mock_io, Send_t(expected_sd, nullptr,(size_t) expected_file_size, _))
         .Times(1)
         .WillOnce(
             DoAll(
@@ -305,12 +305,12 @@ void RequestHandlerTcpTests::ExpectFailReceive(bool only_once) {
 
 void RequestHandlerTcpTests::ExpectOKSendData(bool only_once) {
     for (auto expected_sd : expected_sds) {
-        EXPECT_CALL(mock_io, Send_t(expected_sd, nullptr, expected_file_size, _))
+        EXPECT_CALL(mock_io, Send_t(expected_sd, nullptr,(size_t)expected_file_size, _))
         .Times(1)
         .WillOnce(
             DoAll(
                 testing::SetArgPointee<3>(nullptr),
-                Return(expected_file_size)
+                Return((size_t) expected_file_size)
             ));
         if (only_once) break;
     }
diff --git a/producer/event_monitor_producer/src/main_eventmon.cpp b/producer/event_monitor_producer/src/main_eventmon.cpp
index 4191bfbd4648f0642a825a839fdb33a93156d2ac..e780754ad5644028846b042f01991c07ade799a6 100644
--- a/producer/event_monitor_producer/src/main_eventmon.cpp
+++ b/producer/event_monitor_producer/src/main_eventmon.cpp
@@ -38,7 +38,7 @@ std::unique_ptr<Producer> CreateProducer() {
 
 
     Error err;
-    auto producer = Producer::Create(config->asapo_endpoint, config->nthreads,
+    auto producer = Producer::Create(config->asapo_endpoint,(uint8_t) config->nthreads,
                                      config->mode, config->beamtime_id, &err);
     if(err) {
         std::cerr << "cannot create producer: " << err << std::endl;
diff --git a/receiver/src/request.cpp b/receiver/src/request.cpp
index 7a857f2f633c927b6da6b84e932c55442ade3e21..9f22f81a27e61f73fb4f3dfae0c3ea2cc664c780 100644
--- a/receiver/src/request.cpp
+++ b/receiver/src/request.cpp
@@ -13,7 +13,7 @@ Request::Request(const GenericRequestHeader& header,
 Error Request::PrepareDataBuffer() {
     if (cache__ == nullptr) {
         try {
-            data_buffer_.reset(new uint8_t[request_header_.data_size]);
+            data_buffer_.reset(new uint8_t[(size_t)request_header_.data_size]);
         } catch(std::exception& e) {
             auto err = ErrorTemplates::kMemoryAllocationError.Generate();
             err->Append(e.what());
@@ -36,7 +36,7 @@ Error Request::ReceiveData() {
     if (err) {
         return err;
     }
-    io__->Receive(socket_fd_, GetData(), request_header_.data_size, &err);
+    io__->Receive(socket_fd_, GetData(),(size_t) request_header_.data_size, &err);
     if (slot_meta_) {
         cache__->UnlockSlot(slot_meta_);
     }
diff --git a/receiver/src/request_handler_file_write.cpp b/receiver/src/request_handler_file_write.cpp
index dc074ca8ca95262a4108355a7ba28f6cce7590a1..4119f4f97f537bc1993f4a3ef68ce2ad133fd9ae 100644
--- a/receiver/src/request_handler_file_write.cpp
+++ b/receiver/src/request_handler_file_write.cpp
@@ -19,7 +19,7 @@ Error RequestHandlerFileWrite::ProcessRequest(Request* request) const {
     auto root_folder = GetReceiverConfig()->root_folder + kPathSeparator
                        + request->GetBeamline() + kPathSeparator
                        + request->GetBeamtimeId();
-    auto err =  io__->WriteDataToFile(root_folder, fname, (uint8_t*)data, fsize, true);
+    auto err =  io__->WriteDataToFile(root_folder, fname, (uint8_t*)data,(size_t) fsize, true);
     if (!err) {
         log__->Debug("saved file of size " + std::to_string(fsize) + " to " + root_folder + kPathSeparator + fname);
     }
diff --git a/receiver/src/statistics.cpp b/receiver/src/statistics.cpp
index eac194d0441161e194bcd7adb77ff07c941261d1..e334213850ce9a1d2c965411d9616e39ee6c8324 100644
--- a/receiver/src/statistics.cpp
+++ b/receiver/src/statistics.cpp
@@ -39,7 +39,7 @@ uint64_t Statistics::GetTotalElapsedMs() const noexcept {
 
 
 void Statistics::SetWriteInterval(uint64_t interval_ms) {
-    write_interval_ = interval_ms;
+    write_interval_ = (size_t) interval_ms;
 }
 
 void Statistics::ResetStatistics() noexcept {
diff --git a/worker/api/cpp/src/folder_data_broker.cpp b/worker/api/cpp/src/folder_data_broker.cpp
index 8115ffaa91716464f9c4b22b7abf2bf6c7ce537d..6214c505f8e68b9216df612f152a4581f8459193 100644
--- a/worker/api/cpp/src/folder_data_broker.cpp
+++ b/worker/api/cpp/src/folder_data_broker.cpp
@@ -48,7 +48,7 @@ Error FolderDataBroker::GetFileByIndex(uint64_t nfile_to_get, FileInfo* info, Fi
         return err;
     }
 
-    *info = filelist_[nfile_to_get];
+    *info = filelist_[(size_t)nfile_to_get];
 
     if (data == nullptr) {
         return nullptr;
diff --git a/worker/api/cpp/src/tcp_client.cpp b/worker/api/cpp/src/tcp_client.cpp
index eff190999c3a87b9ef70e4aeea288ace826151b7..61ed3580cce0b70df72bc1c9341139d55a8881c4 100644
--- a/worker/api/cpp/src/tcp_client.cpp
+++ b/worker/api/cpp/src/tcp_client.cpp
@@ -68,12 +68,12 @@ Error TcpClient::ReceiveData(SocketDescriptor sd, const FileInfo* info, FileData
     Error err;
     uint8_t* data_array = nullptr;
     try {
-        data_array = new uint8_t[info->size];
+        data_array = new uint8_t[(size_t)info->size];
     } catch (...) {
         connection_pool__->ReleaseConnection(sd);
         return ErrorTemplates::kMemoryAllocationError.Generate();
     }
-    io__->Receive(sd, data_array, info->size, &err);
+    io__->Receive(sd, data_array, (size_t)info->size, &err);
     connection_pool__->ReleaseConnection(sd);
     if (!err) {
         *data = FileData{data_array};
diff --git a/worker/api/cpp/unittests/test_tcp_client.cpp b/worker/api/cpp/unittests/test_tcp_client.cpp
index 55342f0ac590fd77847e4f246d344cd1802b58ca..eab268a57fb7e6fe04fabe7d62374e28b6707129 100644
--- a/worker/api/cpp/unittests/test_tcp_client.cpp
+++ b/worker/api/cpp/unittests/test_tcp_client.cpp
@@ -128,7 +128,7 @@ class TcpClientTests : public Test {
 
     void ExpectGetData(asapo::SocketDescriptor sd, bool ok) {
 
-        EXPECT_CALL(mock_io, Receive_t(sd, _, expected_size, _))
+        EXPECT_CALL(mock_io, Receive_t(sd, _,(size_t) expected_size, _))
         .WillOnce(
             DoAll(
                 testing::SetArgPointee<3>(ok ? nullptr : asapo::IOErrorTemplates::kTimeout.Generate().release()),
diff --git a/worker/api/python/setup.py.in b/worker/api/python/setup.py.in
index 6d61825cfe2fd12b06616132409605cd204ffcfd..fce22d782e0d2364d211eeec477c307ff4a8a8c6 100644
--- a/worker/api/python/setup.py.in
+++ b/worker/api/python/setup.py.in
@@ -1,6 +1,6 @@
 from distutils.core import setup
 from distutils.core import Extension
-
+import setuptools
 from Cython.Build import cythonize
 
 import numpy
@@ -14,6 +14,14 @@ module = Extension("asapo_worker", ["asapo_worker.pyx"],
                        language="c++",
          )
 
-ext_modules = cythonize([module])
+setup(ext_modules=cythonize("asapo_worker.pyx", extra_objects=['@ASAPO_WORKER_LIB@',
+                           '@CURL_LIBRARIES@'],
+                            include_dirs=["@ASAPO_CXX_COMMON_INCLUDE_DIR@","@ASAPO_WORKER_INCLUDE_DIR@",numpy.get_include()],
+                            extra_compile_args=@EXTRA_COMPILE_ARGS@,
+                            extra_link_args=@EXTRA_LINK_ARGS@,
+                            language="c++",
+                            build_dir="build"),
+                            script_args=['build'],
+                            options={'build':{'build_lib':'.'}})
+
 
-setup(ext_modules = ext_modules)
diff --git a/worker/tools/folder_to_db/src/folder_db_importer.cpp b/worker/tools/folder_to_db/src/folder_db_importer.cpp
index 0116d8a5a79c77155965db0193479540f1e779ff..75f5263fb605696cb720f752ad1cc80537dc7eb0 100644
--- a/worker/tools/folder_to_db/src/folder_db_importer.cpp
+++ b/worker/tools/folder_to_db/src/folder_db_importer.cpp
@@ -27,7 +27,7 @@ Error FolderToDbImporter::ImportSingleFile(const std::unique_ptr<asapo::Database
 Error FolderToDbImporter::ImportFilelistChunk(const std::unique_ptr<asapo::Database>& db,
                                               const FileInfos& file_list, uint64_t begin, uint64_t end) const {
     for (auto i = begin; i < end; i++) {
-        auto err = ImportSingleFile(db, file_list[i]);
+        auto err = ImportSingleFile(db, file_list[(size_t)i]);
         if (err != nullptr) {
             return err;
         }