diff --git a/producer/api/python/asapo_producer.pyx.in b/producer/api/python/asapo_producer.pyx.in
index d1dd8229f8cf9142a59b77e3f82875068bfe9c0f..e74837c9c25f10df990476969e3c425db00bb4f2 100644
--- a/producer/api/python/asapo_producer.pyx.in
+++ b/producer/api/python/asapo_producer.pyx.in
@@ -116,6 +116,9 @@ cdef class PyProducer:
             Py_XINCREF(<PyObject*>data.base)
           else:
             Py_XINCREF(<PyObject*>data)
+        if callback != None:
+            Py_XINCREF(<PyObject*>callback)
+
         return
     cdef EventHeader create_event_header(self,int id, exposed_path,user_meta,subset,ingest_mode):
         cdef EventHeader event_header
@@ -139,6 +142,8 @@ cdef class PyProducer:
         if err:
             throw_exception(err)
         Py_XINCREF(<PyObject*>data)
+        if callback != None:
+            Py_XINCREF(<PyObject*>callback)
         return
 
     def send_data(self, id, exposed_path,data, user_meta=None,subset=None,ingest_mode = DEFAULT_INGEST_MODE,callback=None):
@@ -161,9 +166,6 @@ cdef class PyProducer:
             AsapoWrongInputError: wrong input (authorization, meta, ...)
             AsapoProducerError: actually should not happen
         """
-        if callback != None:
-            Py_XINCREF(<PyObject*>callback)
-
         if type(data) == np.ndarray or data == None:
             self.__send_np_array(id,exposed_path,data,user_meta,subset,ingest_mode,callback)
         elif type(data) == bytes:
@@ -199,6 +201,10 @@ cdef class PyProducer:
             unwrap_callback(<RequestCallbackCython>self.c_callback, <void*>self,<void*>callback if callback != None else NULL))
         if err:
             throw_exception(err)
+
+        if callback != None:
+            Py_XINCREF(<PyObject*>callback)
+
         return
     def get_requests_queue_size(self):
         return self.c_producer.get().GetRequestsQueueSize()
@@ -225,8 +231,7 @@ cdef class PyProducer:
           else:
             py_err = None
           py_callback(info,py_err)
-          if py_callback != None:
-              Py_XDECREF(<PyObject*>py_callback)
+          Py_XDECREF(<PyObject*>py_callback)
 
     cdef void c_callback(self,py_callback, GenericRequestHeader header, Error err) with gil:
         self.c_callback_python(py_callback,header,err)