diff --git a/README.md b/README.md
index 6ce92cb59f5b0aa55b949a53cfc89f4256d2c6c2..26e8f8c69417475f42c3bbdd073f6974bdf63f9b 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@
  
  **Library:** Common library which get shared between the producer and receiver 
  
- - /producer/producer-api
+ - /producer/asapo-producer
  
  **Library:** ProducerImpl library which can send data to the receiver
  
diff --git a/config/bamboo/bamboo.java b/config/bamboo/bamboo.java
index df6225a699647e503c535ab50eebe12f4081c1b6..15b2429c6d6eff80c1b087108019bb97c7a42212 100644
--- a/config/bamboo/bamboo.java
+++ b/config/bamboo/bamboo.java
@@ -77,7 +77,7 @@ public class PlanSpec {
                                 new Artifact()
                                     .name("Coverage-Producer")
                                     .copyPattern("**/*")
-                                    .location("build/coverage-producer-api"),
+                                    .location("build/coverage-asapo-producer"),
                                 new Artifact()
                                     .name("Coverage-Worker")
                                     .copyPattern("**/*")
diff --git a/examples/pipeline/in_to_out/CMakeLists.txt b/examples/pipeline/in_to_out/CMakeLists.txt
index a7bfa9e71110407b87868d1c4fa6b9ef00737001..d8579506c2829c7de64668d58d2f4ed90b8bbf78 100644
--- a/examples/pipeline/in_to_out/CMakeLists.txt
+++ b/examples/pipeline/in_to_out/CMakeLists.txt
@@ -2,7 +2,7 @@ set(TARGET_NAME pipeline_inout)
 set(SOURCE_FILES in_to_out.cpp)
 
 add_executable(${TARGET_NAME} ${SOURCE_FILES})
-target_link_libraries(${TARGET_NAME} asapo-worker producer-api)
+target_link_libraries(${TARGET_NAME} asapo-worker asapo-producer)
 
 #use expression generator to get rid of VS adding Debug/Release folders
 set_target_properties(${TARGET_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY
diff --git a/examples/producer/dummy-data-producer/CMakeLists.txt b/examples/producer/dummy-data-producer/CMakeLists.txt
index 5fda57ae7724433dc92a24b6be41bdffd7ea40c5..c0d81a32feddddae4b489f7cc4d29dde76c8520b 100644
--- a/examples/producer/dummy-data-producer/CMakeLists.txt
+++ b/examples/producer/dummy-data-producer/CMakeLists.txt
@@ -10,7 +10,7 @@ target_include_directories(${TARGET_NAME} PUBLIC include ${CMAKE_SOURCE_DIR}/com
 GET_PROPERTY(ASAPO_COMMON_IO_LIBRARIES GLOBAL PROPERTY ASAPO_COMMON_IO_LIBRARIES)
 target_link_libraries(${TARGET_NAME} ${ASAPO_COMMON_IO_LIBRARIES})
 
-target_link_libraries(${TARGET_NAME} producer-api)
+target_link_libraries(${TARGET_NAME} asapo-producer)
 set_target_properties(${TARGET_NAME} PROPERTIES LINKER_LANGUAGE CXX)
 
 set_target_properties(${TARGET_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY
diff --git a/examples/producer/dummy-data-producer/CMakeLists_separate.in b/examples/producer/dummy-data-producer/CMakeLists_separate.in
index f0b390f039dd5aefe673005ce6ef99138a70e84f..a8bdf46152595c9f346657cb0a5f58c3710ab901 100644
--- a/examples/producer/dummy-data-producer/CMakeLists_separate.in
+++ b/examples/producer/dummy-data-producer/CMakeLists_separate.in
@@ -18,4 +18,4 @@ link_directories(@CMAKE_INSTALL_PREFIX@/lib)
 
 add_executable(${TARGET_NAME} ${SOURCE_FILES})
 target_include_directories(${TARGET_NAME} PUBLIC @CMAKE_INSTALL_PREFIX@/include)
-target_link_libraries(${TARGET_NAME} producer-api ${CMAKE_THREAD_LIBS_INIT})
+target_link_libraries(${TARGET_NAME} asapo-producer ${CMAKE_THREAD_LIBS_INIT})
diff --git a/producer/CMakeLists.txt b/producer/CMakeLists.txt
index 5f5aaa9376bad919676e820b96326befdee9f67d..62ecdca0cdcb1fa34c4619e5b93da4377ad2159e 100644
--- a/producer/CMakeLists.txt
+++ b/producer/CMakeLists.txt
@@ -1,2 +1,4 @@
-add_subdirectory(api)
+add_subdirectory(api/cpp)
+add_subdirectory(api/python)
+
 add_subdirectory(event_monitor_producer)
diff --git a/producer/api/README.md b/producer/api/README.md
deleted file mode 100644
index 50ff42695f7c92e07c6e4a92b88367fb834e41e7..0000000000000000000000000000000000000000
--- a/producer/api/README.md
+++ /dev/null
@@ -1,22 +0,0 @@
-# cpp-producer
-
-This is the producer implementation in c++
-
-## Building this project
-
-### Requirements
-
-#### System
- - Linux Kernel >= 4
-
-#### Build Dependencies
- - cmake4
-
-##### Optional
- - astyle
- - doxygen
-
-### How to build
-
- - TODO
-
diff --git a/producer/api/CMakeLists.txt b/producer/api/cpp/CMakeLists.txt
similarity index 97%
rename from producer/api/CMakeLists.txt
rename to producer/api/cpp/CMakeLists.txt
index 86d882adc937048a3898eaa5d893e5704414ad32..896c05265d55a5b9c9cea5fbfc75fc877d8716d0 100644
--- a/producer/api/CMakeLists.txt
+++ b/producer/api/cpp/CMakeLists.txt
@@ -1,4 +1,4 @@
-set(TARGET_NAME producer-api)
+set(TARGET_NAME asapo-producer)
 set(SOURCE_FILES
         src/producer.cpp
         src/producer_impl.cpp
diff --git a/producer/api/include/asapo_producer.h b/producer/api/cpp/include/asapo_producer.h
similarity index 100%
rename from producer/api/include/asapo_producer.h
rename to producer/api/cpp/include/asapo_producer.h
diff --git a/producer/api/include/producer/common.h b/producer/api/cpp/include/producer/common.h
similarity index 100%
rename from producer/api/include/producer/common.h
rename to producer/api/cpp/include/producer/common.h
diff --git a/producer/api/include/producer/producer.h b/producer/api/cpp/include/producer/producer.h
similarity index 100%
rename from producer/api/include/producer/producer.h
rename to producer/api/cpp/include/producer/producer.h
diff --git a/producer/api/include/producer/producer_error.h b/producer/api/cpp/include/producer/producer_error.h
similarity index 100%
rename from producer/api/include/producer/producer_error.h
rename to producer/api/cpp/include/producer/producer_error.h
diff --git a/producer/api/src/producer.cpp b/producer/api/cpp/src/producer.cpp
similarity index 79%
rename from producer/api/src/producer.cpp
rename to producer/api/cpp/src/producer.cpp
index bc308be85e6b19b4600ad58490927df0534c4aba..c219c7ca7d041a71fd158e8a46951ca2e7fe8f40 100644
--- a/producer/api/src/producer.cpp
+++ b/producer/api/cpp/src/producer.cpp
@@ -3,8 +3,9 @@
 
 std::unique_ptr<asapo::Producer> asapo::Producer::Create(const std::string& endpoint, uint8_t n_processing_threads,
         asapo::RequestHandlerType type, SourceCredentials source_cred, Error* err) {
-    if (n_processing_threads > kMaxProcessingThreads) {
-        *err = TextError("Too many processing threads: " + std::to_string(n_processing_threads));
+
+    if (n_processing_threads > kMaxProcessingThreads || n_processing_threads == 0) {
+        *err = TextError("Set number of processing threads > 0 and <= " + std::to_string(kMaxProcessingThreads));
         return nullptr;
     }
 
diff --git a/producer/api/src/producer_impl.cpp b/producer/api/cpp/src/producer_impl.cpp
similarity index 100%
rename from producer/api/src/producer_impl.cpp
rename to producer/api/cpp/src/producer_impl.cpp
diff --git a/producer/api/src/producer_impl.h b/producer/api/cpp/src/producer_impl.h
similarity index 100%
rename from producer/api/src/producer_impl.h
rename to producer/api/cpp/src/producer_impl.h
diff --git a/producer/api/src/producer_logger.cpp b/producer/api/cpp/src/producer_logger.cpp
similarity index 100%
rename from producer/api/src/producer_logger.cpp
rename to producer/api/cpp/src/producer_logger.cpp
diff --git a/producer/api/src/producer_logger.h b/producer/api/cpp/src/producer_logger.h
similarity index 100%
rename from producer/api/src/producer_logger.h
rename to producer/api/cpp/src/producer_logger.h
diff --git a/producer/api/src/producer_request.cpp b/producer/api/cpp/src/producer_request.cpp
similarity index 100%
rename from producer/api/src/producer_request.cpp
rename to producer/api/cpp/src/producer_request.cpp
diff --git a/producer/api/src/producer_request.h b/producer/api/cpp/src/producer_request.h
similarity index 100%
rename from producer/api/src/producer_request.h
rename to producer/api/cpp/src/producer_request.h
diff --git a/producer/api/src/producer_request_handler_factory.h b/producer/api/cpp/src/producer_request_handler_factory.h
similarity index 100%
rename from producer/api/src/producer_request_handler_factory.h
rename to producer/api/cpp/src/producer_request_handler_factory.h
diff --git a/producer/api/src/receiver_data_server_request_handler_factory.cpp b/producer/api/cpp/src/receiver_data_server_request_handler_factory.cpp
similarity index 100%
rename from producer/api/src/receiver_data_server_request_handler_factory.cpp
rename to producer/api/cpp/src/receiver_data_server_request_handler_factory.cpp
diff --git a/producer/api/src/receiver_discovery_service.cpp b/producer/api/cpp/src/receiver_discovery_service.cpp
similarity index 100%
rename from producer/api/src/receiver_discovery_service.cpp
rename to producer/api/cpp/src/receiver_discovery_service.cpp
diff --git a/producer/api/src/receiver_discovery_service.h b/producer/api/cpp/src/receiver_discovery_service.h
similarity index 100%
rename from producer/api/src/receiver_discovery_service.h
rename to producer/api/cpp/src/receiver_discovery_service.h
diff --git a/producer/api/src/request_handler_filesystem.cpp b/producer/api/cpp/src/request_handler_filesystem.cpp
similarity index 100%
rename from producer/api/src/request_handler_filesystem.cpp
rename to producer/api/cpp/src/request_handler_filesystem.cpp
diff --git a/producer/api/src/request_handler_filesystem.h b/producer/api/cpp/src/request_handler_filesystem.h
similarity index 100%
rename from producer/api/src/request_handler_filesystem.h
rename to producer/api/cpp/src/request_handler_filesystem.h
diff --git a/producer/api/src/request_handler_tcp.cpp b/producer/api/cpp/src/request_handler_tcp.cpp
similarity index 100%
rename from producer/api/src/request_handler_tcp.cpp
rename to producer/api/cpp/src/request_handler_tcp.cpp
diff --git a/producer/api/src/request_handler_tcp.h b/producer/api/cpp/src/request_handler_tcp.h
similarity index 100%
rename from producer/api/src/request_handler_tcp.h
rename to producer/api/cpp/src/request_handler_tcp.h
diff --git a/producer/api/unittests/mocking.h b/producer/api/cpp/unittests/mocking.h
similarity index 100%
rename from producer/api/unittests/mocking.h
rename to producer/api/cpp/unittests/mocking.h
diff --git a/producer/api/unittests/test_producer.cpp b/producer/api/cpp/unittests/test_producer.cpp
similarity index 87%
rename from producer/api/unittests/test_producer.cpp
rename to producer/api/cpp/unittests/test_producer.cpp
index 134691656eaf3ae95ea79cafe0bc8edfaf5b7c78..11359b693c1c0cbbd24a15abd58367272ad4d410 100644
--- a/producer/api/unittests/test_producer.cpp
+++ b/producer/api/cpp/unittests/test_producer.cpp
@@ -49,6 +49,16 @@ TEST(CreateProducer, TooManyThreads) {
     ASSERT_THAT(err, Ne(nullptr));
 }
 
+
+TEST(CreateProducer, ZeroThreads) {
+    asapo::Error err;
+    std::unique_ptr<asapo::Producer> producer = asapo::Producer::Create("", 0,
+                                                                        asapo::RequestHandlerType::kTcp, SourceCredentials{"bt", "", ""}, &err);
+    ASSERT_THAT(producer, Eq(nullptr));
+    ASSERT_THAT(err, Ne(nullptr));
+}
+
+
 TEST(Producer, SimpleWorkflowWihoutConnection) {
     asapo::Error err;
     std::unique_ptr<asapo::Producer> producer = asapo::Producer::Create("hello", 5, asapo::RequestHandlerType::kTcp,
diff --git a/producer/api/unittests/test_producer_impl.cpp b/producer/api/cpp/unittests/test_producer_impl.cpp
similarity index 100%
rename from producer/api/unittests/test_producer_impl.cpp
rename to producer/api/cpp/unittests/test_producer_impl.cpp
diff --git a/producer/api/unittests/test_producer_request.cpp b/producer/api/cpp/unittests/test_producer_request.cpp
similarity index 100%
rename from producer/api/unittests/test_producer_request.cpp
rename to producer/api/cpp/unittests/test_producer_request.cpp
diff --git a/producer/api/unittests/test_receiver_discovery_service.cpp b/producer/api/cpp/unittests/test_receiver_discovery_service.cpp
similarity index 100%
rename from producer/api/unittests/test_receiver_discovery_service.cpp
rename to producer/api/cpp/unittests/test_receiver_discovery_service.cpp
diff --git a/producer/api/unittests/test_request_handler_factory.cpp b/producer/api/cpp/unittests/test_request_handler_factory.cpp
similarity index 100%
rename from producer/api/unittests/test_request_handler_factory.cpp
rename to producer/api/cpp/unittests/test_request_handler_factory.cpp
diff --git a/producer/api/unittests/test_request_handler_filesystem.cpp b/producer/api/cpp/unittests/test_request_handler_filesystem.cpp
similarity index 100%
rename from producer/api/unittests/test_request_handler_filesystem.cpp
rename to producer/api/cpp/unittests/test_request_handler_filesystem.cpp
diff --git a/producer/api/unittests/test_request_handler_tcp.cpp b/producer/api/cpp/unittests/test_request_handler_tcp.cpp
similarity index 100%
rename from producer/api/unittests/test_request_handler_tcp.cpp
rename to producer/api/cpp/unittests/test_request_handler_tcp.cpp
diff --git a/producer/api/python/CMakeLists.txt b/producer/api/python/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..1d8e591578c56ceb8ef01ea4ba33be373fcdac9d
--- /dev/null
+++ b/producer/api/python/CMakeLists.txt
@@ -0,0 +1,17 @@
+
+if (UNIX)
+    include(CMakeLists_Linux.cmake)
+    set (suf "so")
+ELSEIF(CMAKE_BUILD_TYPE STREQUAL "Release")
+    set (suf "pyd")
+    include(CMakeLists_Windows.cmake)
+ENDIF()
+
+install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/ DESTINATION lib/python/
+        FILES_MATCHING PATTERN "*.${suf}"
+        PATTERN "build" EXCLUDE
+        PATTERN "source_dist_linux" EXCLUDE
+        PATTERN "binary_dist_windows" EXCLUDE
+        PATTERN "CMakeFiles" EXCLUDE
+        )
+
diff --git a/producer/api/python/CMakeLists_Linux.cmake b/producer/api/python/CMakeLists_Linux.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..f01baa6ecffa9cc89f7a0c9e2794b0095d9830b9
--- /dev/null
+++ b/producer/api/python/CMakeLists_Linux.cmake
@@ -0,0 +1,27 @@
+if ((CMAKE_BUILD_TYPE STREQUAL "Debug") AND (CMAKE_C_COMPILER_ID STREQUAL "GNU"))
+    set (EXTRA_COMPILE_ARGS "['--std=c++11']")
+    set (EXTRA_LINK_ARGS "['--coverage','-fprofile-arcs','-ftest-coverage','-static-libgcc','-static-libstdc++']")
+ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "GNU")
+    set (EXTRA_COMPILE_ARGS "['--std=c++11']")
+    set (EXTRA_LINK_ARGS "['-static-libgcc','-static-libstdc++']")
+else()
+    set (EXTRA_COMPILE_ARGS "['-std=c++11']")
+    set (EXTRA_LINK_ARGS "[]")
+ENDIF()
+
+get_property(ASAPO_PRODUCER_LIB TARGET asapo-producer PROPERTY LOCATION)
+
+set (ASAPO_PRODUCER_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../cpp/include)
+
+configure_files(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} @ONLY)
+
+ADD_CUSTOM_TARGET(python-lib2-producer ALL
+        COMMAND python setup.py build_ext --inplace)
+
+ADD_CUSTOM_TARGET(python-lib3-producer ALL
+        COMMAND python3 setup.py build_ext --inplace)
+
+ADD_DEPENDENCIES(python-lib2-producer asapo-producer)
+ADD_DEPENDENCIES(python-lib3-producer asapo-producer)
+
+add_subdirectory(source_dist_linux)
diff --git a/producer/api/python/CMakeLists_Windows.cmake b/producer/api/python/CMakeLists_Windows.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..95dd07a0d50e82f00ad77ed2c878895fd49aa933
--- /dev/null
+++ b/producer/api/python/CMakeLists_Windows.cmake
@@ -0,0 +1,30 @@
+configure_files(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} @ONLY)
+
+find_package (Python3 REQUIRED COMPONENTS Development)
+find_package (Numpy REQUIRED)
+message ("   Python libaries:" ${Python3_LIBRARIES})
+message ("   Python includes:" ${Python3_INCLUDE_DIRS})
+message ("   Numpy:" ${PYTHON_NUMPY_INCLUDE_DIR})
+
+
+add_custom_command(OUTPUT asapo_worker.cpp
+        COMMAND ${Python3_EXECUTABLE} cythonize.py
+        DEPENDS asapo-producer)
+
+
+set(TARGET_NAME asapo_worker)
+
+set(SOURCE_FILES
+        asapo_worker.cpp)
+
+add_library(${TARGET_NAME} SHARED ${SOURCE_FILES})
+set_target_properties(${TARGET_NAME} PROPERTIES SUFFIX ".pyd")
+set_target_properties(${TARGET_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY
+        ${CMAKE_CURRENT_BINARY_DIR}$<$<CONFIG:Debug>:>
+        )
+
+target_link_libraries(${TARGET_NAME}  asapo-producer ${Python3_LIBRARIES})
+target_include_directories(${TARGET_NAME} PUBLIC include  ${Python3_INCLUDE_DIRS} ${PYTHON_NUMPY_INCLUDE_DIR})
+
+
+add_subdirectory(binary_dist_windows)
diff --git a/producer/api/python/asapo_producer.pxd b/producer/api/python/asapo_producer.pxd
new file mode 100644
index 0000000000000000000000000000000000000000..a35d824a1290d563dd42f1787addf8d4b6ca820f
--- /dev/null
+++ b/producer/api/python/asapo_producer.pxd
@@ -0,0 +1,39 @@
+from libcpp.memory cimport unique_ptr
+from libcpp.string cimport string
+from libcpp.vector cimport vector
+from libcpp cimport bool
+
+ctypedef unsigned char uint8_t
+ctypedef unsigned long uint64_t
+
+cdef extern from "asapo_producer.h" namespace "asapo":
+  cppclass Error:
+    pass
+
+
+cdef extern from "asapo_wrappers.h" namespace "asapo":
+  cdef string GetErrorString(Error* err)
+
+
+cdef extern from "asapo_producer.h" namespace "asapo":
+  cppclass FileData:
+    unique_ptr[uint8_t[]] release()
+
+
+cdef extern from "asapo_producer.h" namespace "asapo":
+  cppclass RequestHandlerType:
+    pass
+  cdef RequestHandlerType RequestHandlerType_Tcp "asapo::RequestHandlerType::kTcp"
+
+
+
+cdef extern from "asapo_producer.h" namespace "asapo":
+  struct  SourceCredentials:
+    string beamtime_id
+    string stream
+    string user_token
+
+cdef extern from "asapo_producer.h" namespace "asapo":
+    cdef cppclass Producer:
+        @staticmethod
+        unique_ptr[Producer] Create(string endpoint,uint8_t nthreads,RequestHandlerType type, SourceCredentials source,Error* error)
diff --git a/producer/api/python/asapo_producer.pyx.in b/producer/api/python/asapo_producer.pyx.in
new file mode 100644
index 0000000000000000000000000000000000000000..ca839ce1218d0575e4200d0f522494c424c956f0
--- /dev/null
+++ b/producer/api/python/asapo_producer.pyx.in
@@ -0,0 +1,51 @@
+#distutils: language=c++
+
+cimport asapo_producer
+import numpy as np
+cimport numpy as np
+import json
+from cpython.version cimport PY_MAJOR_VERSION
+from libcpp.memory cimport unique_ptr
+
+np.import_array()
+
+cdef extern from "numpy/ndarraytypes.h":
+    void PyArray_ENABLEFLAGS(np.ndarray arr, int flags)
+
+cdef str _str(b):
+    if PY_MAJOR_VERSION < 3:
+        return b
+    return b.decode("utf-8")
+
+cdef bytes _bytes(s):
+    if type(s) is bytes:
+        return s
+
+    elif isinstance(s, unicode):
+        return (<unicode>s).encode('utf-8')
+
+    else:
+        raise TypeError("Could not convert to unicode.")
+
+cdef class PyProducer:
+    cdef unique_ptr[Producer] c_producer
+    @staticmethod
+    def create_producer(endpoint,beamtime_id,stream,token,nthreads):
+        pyProd = PyProducer()
+        cdef Error err
+        cdef SourceCredentials source
+        source.beamtime_id = beamtime_id
+        source.user_token = token
+        source.stream = stream
+        pyProd.c_producer = Producer.Create(endpoint,nthreads,RequestHandlerType_Tcp,source,&err)
+        cdef err_str = GetErrorString(&err)
+        if err_str.strip():
+            return None,err_str
+        else:
+            return pyProd,None
+
+def create_producer(endpoint,beamtime_id,stream,token,nthreads):
+    return PyProducer.create_producer(_bytes(endpoint),_bytes(beamtime_id),_bytes(stream),_bytes(token),nthreads)
+
+
+__version__ = "@ASAPO_VERSION_PYTHON@"
diff --git a/producer/api/python/asapo_wrappers.h b/producer/api/python/asapo_wrappers.h
new file mode 100644
index 0000000000000000000000000000000000000000..c59b8d8c7e0de1e7dd84dd7d36a0e52f09d8badc
--- /dev/null
+++ b/producer/api/python/asapo_wrappers.h
@@ -0,0 +1,16 @@
+#ifndef ASAPO_ASAPO_WRAPPERS_H
+#define ASAPO_ASAPO_WRAPPERS_H
+
+namespace asapo {
+
+inline std::string GetErrorString(asapo::Error* err) {
+    if (*err) {
+        return (*err)->Explain();
+    }
+    return "";
+}
+
+}
+
+
+#endif //ASAPO_ASAPO_WRAPPERS_H
diff --git a/producer/api/python/binary_dist_windows/CMakeLists.txt b/producer/api/python/binary_dist_windows/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..ac46814f2f72398700d58ad9f3758dfe857fbb00
--- /dev/null
+++ b/producer/api/python/binary_dist_windows/CMakeLists.txt
@@ -0,0 +1,16 @@
+configure_file(setup.py.in setup.py @ONLY)
+
+ADD_CUSTOM_TARGET(windows-bdist ALL
+        COMMAND ${Python3_EXECUTABLE} setup.py bdist_wheel
+        )
+
+
+ADD_CUSTOM_TARGET(copy_python_bdist ALL
+        COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/asapo_worker
+        COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:asapo_worker> ${CMAKE_CURRENT_BINARY_DIR}/asapo_worker/
+        )
+
+
+ADD_DEPENDENCIES(copy_python_bdist asapo_worker)
+
+ADD_DEPENDENCIES(windows-bdist copy_python_bdist)
diff --git a/producer/api/python/binary_dist_windows/setup.py.in b/producer/api/python/binary_dist_windows/setup.py.in
new file mode 100644
index 0000000000000000000000000000000000000000..cc896317e695130123fc6862fe575147698422fe
--- /dev/null
+++ b/producer/api/python/binary_dist_windows/setup.py.in
@@ -0,0 +1,12 @@
+import setuptools
+
+setuptools.setup(
+      name ="asapo_worker",
+      version = "@ASAPO_VERSION_PYTHON@",
+      install_requires=['numpy'],
+      include_package_data=True,
+      packages=['asapo_worker'],
+      package_data={
+        'asapo_worker': ['asapo_worker.pyd'],
+      },
+)
diff --git a/producer/api/python/cythonize.py b/producer/api/python/cythonize.py
new file mode 100644
index 0000000000000000000000000000000000000000..0e517258f5a04540b5b0814c5c42d67224ba47b2
--- /dev/null
+++ b/producer/api/python/cythonize.py
@@ -0,0 +1,3 @@
+from Cython.Build import cythonize
+
+cythonize(["asapo_producer.pyx"])
diff --git a/producer/api/python/setup.py.in b/producer/api/python/setup.py.in
new file mode 100644
index 0000000000000000000000000000000000000000..b4ae7777e7977d6970f580afce553dc677c734a1
--- /dev/null
+++ b/producer/api/python/setup.py.in
@@ -0,0 +1,19 @@
+from distutils.core import setup
+from distutils.core import Extension
+
+from Cython.Build import cythonize
+
+import numpy
+
+module = Extension("asapo_producer", ["asapo_producer.pyx"],
+                       extra_objects=['@ASAPO_PRODUCER_LIB@',
+                                      '@CURL_LIBRARIES@'],
+                       include_dirs=["@ASAPO_CXX_COMMON_INCLUDE_DIR@","@ASAPO_PRODUCER_INCLUDE_DIR@",numpy.get_include()],
+                       extra_compile_args=@EXTRA_COMPILE_ARGS@,
+                       extra_link_args=@EXTRA_LINK_ARGS@,
+                       language="c++",
+         )
+
+ext_modules = cythonize([module])
+
+setup(ext_modules = ext_modules)
diff --git a/producer/api/python/source_dist_linux/CMakeLists.txt b/producer/api/python/source_dist_linux/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..48fe09828008db7dde6c425146f05ff5e1aa6c2f
--- /dev/null
+++ b/producer/api/python/source_dist_linux/CMakeLists.txt
@@ -0,0 +1,26 @@
+configure_file(setup.py.in setup.py @ONLY)
+configure_file(MANIFEST.in MANIFEST.in @ONLY)
+
+
+ADD_CUSTOM_TARGET(python-dist ALL
+        COMMAND python setup.py sdist
+        )
+
+#get_property(ASAPO_WORKER_LIB TARGET asapo-worker PROPERTY LOCATION)
+
+ADD_CUSTOM_TARGET(copy_python_dist ALL
+        COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/../asapo_wrappers.h ${CMAKE_CURRENT_BINARY_DIR}/.
+        COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/../asapo_worker.cpp ${CMAKE_CURRENT_BINARY_DIR}/.
+        COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/worker/api/cpp/include ${CMAKE_CURRENT_BINARY_DIR}/include
+        COMMAND ${CMAKE_COMMAND} -E copy_directory ${ASAPO_CXX_COMMON_INCLUDE_DIR}/common ${CMAKE_CURRENT_BINARY_DIR}/include/common
+        COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_CURRENT_BINARY_DIR}/include/common/version.h.in
+        COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/lib
+        COMMAND ${CMAKE_COMMAND} -E copy ${CURL_LIBRARIES} ${CMAKE_CURRENT_BINARY_DIR}/lib
+        COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:asapo-worker> ${CMAKE_CURRENT_BINARY_DIR}/lib
+
+        )
+
+
+ADD_DEPENDENCIES(copy_python_dist python-lib3)
+
+ADD_DEPENDENCIES(python-dist copy_python_dist)
diff --git a/producer/api/python/source_dist_linux/MANIFEST.in b/producer/api/python/source_dist_linux/MANIFEST.in
new file mode 100644
index 0000000000000000000000000000000000000000..89f5fc054d677ca4bf03336ebe88e52fd516445d
--- /dev/null
+++ b/producer/api/python/source_dist_linux/MANIFEST.in
@@ -0,0 +1,3 @@
+include asapo_wrappers.h
+recursive-include include *
+recursive-include lib *
\ No newline at end of file
diff --git a/producer/api/python/source_dist_linux/setup.py.in b/producer/api/python/source_dist_linux/setup.py.in
new file mode 100644
index 0000000000000000000000000000000000000000..9fc10832c37b1d560b4071a09e54dbdb7f98764b
--- /dev/null
+++ b/producer/api/python/source_dist_linux/setup.py.in
@@ -0,0 +1,22 @@
+from distutils.core import setup
+from distutils.core import Extension
+import numpy
+
+ext_modules = [
+    Extension("asapo_worker", ["asapo_worker.cpp"],
+              extra_objects=['lib/libasapo-worker.a'],
+					   libraries = ['curl'],
+                       include_dirs=["include/common","include",numpy.get_include()],
+                       extra_compile_args=@EXTRA_COMPILE_ARGS@,
+                       extra_link_args=@EXTRA_LINK_ARGS@,
+                       language="c++")
+]
+
+setup(
+      name ="asapo_worker",
+      ext_modules = ext_modules,
+      version = "@ASAPO_VERSION_PYTHON@",
+      setup_requires=["numpy"],
+      install_requires=["numpy"],
+      platforms=["aaa"]
+      )
diff --git a/producer/event_monitor_producer/CMakeLists.txt b/producer/event_monitor_producer/CMakeLists.txt
index cebdbdb98a1791deb97476b9d0d3e59fb8e11da7..9eea80923ba94b96191a314a82380a09721561a3 100644
--- a/producer/event_monitor_producer/CMakeLists.txt
+++ b/producer/event_monitor_producer/CMakeLists.txt
@@ -31,7 +31,7 @@ target_include_directories(${TARGET_NAME} PUBLIC include ${CMAKE_SOURCE_DIR}/com
 GET_PROPERTY(ASAPO_COMMON_IO_LIBRARIES GLOBAL PROPERTY ASAPO_COMMON_IO_LIBRARIES)
 target_link_libraries(${TARGET_NAME} ${ASAPO_COMMON_IO_LIBRARIES})
 
-target_link_libraries(${TARGET_NAME} producer-api)
+target_link_libraries(${TARGET_NAME} asapo-producer)
 
 ################################
 # Executable
diff --git a/tests/automatic/producer/beamtime_metadata/CMakeLists.txt b/tests/automatic/producer/beamtime_metadata/CMakeLists.txt
index fd4455816b963963ec8902e11b741e25fed23084..a8733d4cee0fd74d21fd0b0322ec5b69a84a1f4d 100644
--- a/tests/automatic/producer/beamtime_metadata/CMakeLists.txt
+++ b/tests/automatic/producer/beamtime_metadata/CMakeLists.txt
@@ -8,7 +8,7 @@ target_include_directories(${TARGET_NAME} PUBLIC include ${CMAKE_SOURCE_DIR}/com
 
 #Add all necessary common libraries
 #GET_PROPERTY(ASAPO_COMMON_IO_LIBRARIES GLOBAL PROPERTY ASAPO_COMMON_IO_LIBRARIES)
-target_link_libraries(${TARGET_NAME} ${ASAPO_COMMON_IO_LIBRARIES} producer-api)
+target_link_libraries(${TARGET_NAME} ${ASAPO_COMMON_IO_LIBRARIES} asapo-producer)
 
 
 #set_target_properties(${TARGET_NAME} PROPERTIES LINKER_LANGUAGE CXX)
diff --git a/tests/manual/python_tests/producer/run.sh b/tests/manual/python_tests/producer/run.sh
new file mode 100755
index 0000000000000000000000000000000000000000..52c6aec889735e9d99d2377834ac5767ac08c5a2
--- /dev/null
+++ b/tests/manual/python_tests/producer/run.sh
@@ -0,0 +1,4 @@
+#!/usr/bin/env bash
+export PYTHONPATH=/home/yakubov/projects/asapo/cmake-build-debug/producer/api/python:${PYTHONPATH}
+
+python test.py
diff --git a/tests/manual/python_tests/producer/test.py b/tests/manual/python_tests/producer/test.py
new file mode 100644
index 0000000000000000000000000000000000000000..a1c1abd58c6879678675745d48ab30dea3bde884
--- /dev/null
+++ b/tests/manual/python_tests/producer/test.py
@@ -0,0 +1,20 @@
+from __future__ import print_function
+
+import asapo_producer
+import sys
+import json
+import time
+
+endpoint = "psana002:8400"
+beamtime = "asapo_test1"
+stream = "stream"
+token = ""
+nthreads = 1
+
+producer, err = asapo_producer.create_producer(endpoint,beamtime, stream, token, nthreads)
+
+if err is not None:
+    print(err)
+else:
+    print(producer)
+
diff --git a/worker/api/python/binary_dist_windows/CMakeLists.txt b/worker/api/python/binary_dist_windows/CMakeLists.txt
index ac46814f2f72398700d58ad9f3758dfe857fbb00..de6a95e2c4affeb545309d6c98aeb57e5b0c64e7 100644
--- a/worker/api/python/binary_dist_windows/CMakeLists.txt
+++ b/worker/api/python/binary_dist_windows/CMakeLists.txt
@@ -1,16 +1,16 @@
 configure_file(setup.py.in setup.py @ONLY)
 
-ADD_CUSTOM_TARGET(windows-bdist ALL
+ADD_CUSTOM_TARGET(windows-bdist-producer ALL
         COMMAND ${Python3_EXECUTABLE} setup.py bdist_wheel
         )
 
 
-ADD_CUSTOM_TARGET(copy_python_bdist ALL
-        COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/asapo_worker
-        COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:asapo_worker> ${CMAKE_CURRENT_BINARY_DIR}/asapo_worker/
+ADD_CUSTOM_TARGET(copy_python_bdist_producer ALL
+        COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/asapo_producer
+        COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:asapo_producer> ${CMAKE_CURRENT_BINARY_DIR}/asapo_producer/
         )
 
 
-ADD_DEPENDENCIES(copy_python_bdist asapo_worker)
+ADD_DEPENDENCIES(copy_python_bdist_producer asapo_producer)
 
-ADD_DEPENDENCIES(windows-bdist copy_python_bdist)
+ADD_DEPENDENCIES(windows-bdist-producer copy_python_bdist_producer)
diff --git a/worker/api/python/source_dist_linux/CMakeLists.txt b/worker/api/python/source_dist_linux/CMakeLists.txt
index 48fe09828008db7dde6c425146f05ff5e1aa6c2f..83b420eee6ae7d6d8a23706f8d24f63a7626b9d3 100644
--- a/worker/api/python/source_dist_linux/CMakeLists.txt
+++ b/worker/api/python/source_dist_linux/CMakeLists.txt
@@ -2,13 +2,13 @@ configure_file(setup.py.in setup.py @ONLY)
 configure_file(MANIFEST.in MANIFEST.in @ONLY)
 
 
-ADD_CUSTOM_TARGET(python-dist ALL
+ADD_CUSTOM_TARGET(python-dist-producer ALL
         COMMAND python setup.py sdist
         )
 
 #get_property(ASAPO_WORKER_LIB TARGET asapo-worker PROPERTY LOCATION)
 
-ADD_CUSTOM_TARGET(copy_python_dist ALL
+ADD_CUSTOM_TARGET(copy_python_dist_producer ALL
         COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/../asapo_wrappers.h ${CMAKE_CURRENT_BINARY_DIR}/.
         COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/../asapo_worker.cpp ${CMAKE_CURRENT_BINARY_DIR}/.
         COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/worker/api/cpp/include ${CMAKE_CURRENT_BINARY_DIR}/include
@@ -21,6 +21,6 @@ ADD_CUSTOM_TARGET(copy_python_dist ALL
         )
 
 
-ADD_DEPENDENCIES(copy_python_dist python-lib3)
+ADD_DEPENDENCIES(copy_python_dist_producer python-lib3-producer)
 
-ADD_DEPENDENCIES(python-dist copy_python_dist)
+ADD_DEPENDENCIES(python-dist-producer copy_python_dist_producer)