diff --git a/CellFrame/python-cellframe.c b/CellFrame/python-cellframe.c
index 78217fe04fa6af54b2115f55b424e1d531a30df2..0d2666ff44dc3f6ee7d4206e040ed465d9c290fa 100644
--- a/CellFrame/python-cellframe.c
+++ b/CellFrame/python-cellframe.c
@@ -41,7 +41,7 @@ BOOL WINAPI consoleHandler(DWORD dwType){
 void sigfunc(int sig){
     if (sig == SIGINT){
         log_it(L_NOTICE, "Handler Ctrl+C");
-        dap_server_loop_stop();
+        dap_events_stop_all();
         deinit_modules();
     }
 }
diff --git a/modules/dap-sdk/net/core/include/libdap-server-core-python.h b/modules/dap-sdk/net/core/include/libdap-server-core-python.h
index a6d44efd29083b667ced411937b21422bd93cc8b..bb14b5b6296e7e34a51ae743bd07f54f61f6829b 100644
--- a/modules/dap-sdk/net/core/include/libdap-server-core-python.h
+++ b/modules/dap-sdk/net/core/include/libdap-server-core-python.h
@@ -1,8 +1,8 @@
+#pragma once
 #define PY_SSIZE_T_CLEAN
 #include "Python.h"
 #include "dap_server_python.h"
 #include "dap_server.h"
-#include "dap_client_remote.h"
 #include "dap_events.h"
 #include "dap_common.h"
 #include "dap_events_python.h"
@@ -24,7 +24,6 @@ PyObject *dap_server_core_loop(PyObject *self, PyObject *args);
 PyObject *dap_server_core_listen(PyObject *self, PyObject *args);
 
 static PyMethodDef ServerCorePythonMethods[] = {
-        {"loop", dap_server_core_loop, METH_VARARGS | METH_STATIC, ""},
         {"listen", dap_server_core_listen, METH_VARARGS | METH_STATIC, ""},
         {NULL, NULL, 0, NULL}
 };
diff --git a/modules/dap-sdk/net/core/src/dap_events_python.c b/modules/dap-sdk/net/core/src/dap_events_python.c
index 3edcf3bd2282d3b3c043d122b0bc0e774f581396..31223e46eb7c9c30959ed0cc5a089b34d845d2ee 100644
--- a/modules/dap-sdk/net/core/src/dap_events_python.c
+++ b/modules/dap-sdk/net/core/src/dap_events_python.c
@@ -20,7 +20,7 @@ PyObject *dap_events_socket_remove_and_delete_py(PyDapEventsObject *self, PyObje
     bool preserve_inheritor = true;
     if (in_bool == Py_False)
         preserve_inheritor = false;
-    dap_events_socket_queue_remove_and_delete(((PyDapEventsSocketObject*)in_obj)->t_events_socket);
+    dap_events_socket_remove_and_delete_mt(((PyDapEventsSocketObject*)in_obj)->t_events_socket->worker,((PyDapEventsSocketObject*)in_obj)->t_events_socket);
     return PyLong_FromLong(0);
 }
 
@@ -29,7 +29,7 @@ PyObject *dap_events_socket_kill_socket_py(PyDapEventsObject *self, PyObject *ar
     if (!PyArg_ParseTuple(args, "O", &in_obj)){
         return NULL;
     }
-    dap_events_socket_kill_socket(((PyDapEventsSocketObject*)in_obj)->t_events_socket);
+    dap_events_socket_remove_and_delete_mt(((PyDapEventsSocketObject*)in_obj)->t_events_socket->worker,((PyDapEventsSocketObject*)in_obj)->t_events_socket);
     return PyLong_FromLong(0);
 }
 
diff --git a/modules/dap-sdk/net/core/src/dap_events_socket_python.c b/modules/dap-sdk/net/core/src/dap_events_socket_python.c
index 2c2badfc2a801def721e1f989a84a8f6d773b7a0..9df6185afecef6e0d08a1c262613a2691adacd20 100644
--- a/modules/dap-sdk/net/core/src/dap_events_socket_python.c
+++ b/modules/dap-sdk/net/core/src/dap_events_socket_python.c
@@ -6,7 +6,7 @@ PyObject *dap_events_socket_create_after_py(PyDapEventsSocketObject *self){
     if (self->t_events_socket == NULL){
         return NULL;
     }
-    dap_events_socket_create_after(self->t_events_socket);
+    dap_worker_add_events_socket_auto(self->t_events_socket);
     return  PyLong_FromLong(0);
 }
 
@@ -19,7 +19,7 @@ PyObject *dap_events_socket_find_py(PyDapEventsSocketObject *self, PyObject *arg
     if (!PyArg_ParseTuple(args, "i|O", &socket, &in_object)){
         return NULL;
     }
-    self->t_events_socket = dap_events_socket_find(socket, ((PyDapEventsObject*)in_object)->t_events);
+    self->t_events_socket = dap_events_socket_find_unsafe(socket, ((PyDapEventsObject*)in_object)->t_events);
     return  PyLong_FromLong(0);
 }
 PyObject *dap_events_socket_set_readable_py(PyDapEventsSocketObject *self, PyObject *args){
@@ -33,7 +33,7 @@ PyObject *dap_events_socket_set_readable_py(PyDapEventsSocketObject *self, PyObj
     bool is_ready = true;
     if (l_is_ready == Py_False)
         is_ready = false;
-    dap_events_socket_set_readable(self->t_events_socket, is_ready);
+    dap_events_socket_set_readable_unsafe(self->t_events_socket, is_ready);
     return  PyLong_FromLong(0);
 }
 PyObject *dap_events_socket_set_writable_py(PyDapEventsSocketObject *self, PyObject *args){
@@ -47,7 +47,7 @@ PyObject *dap_events_socket_set_writable_py(PyDapEventsSocketObject *self, PyObj
     bool is_ready = true;
     if (l_is_ready == Py_False)
         is_ready = false;
-    dap_events_socket_set_writable(self->t_events_socket, is_ready);
+    dap_events_socket_set_writable_unsafe(self->t_events_socket, is_ready);
     return  PyLong_FromLong(0);
 }
 
@@ -61,7 +61,7 @@ PyObject *dap_events_socket_write_py(PyDapEventsSocketObject *self, PyObject *ar
         return NULL;
     }
     char *in_v_bytes = PyBytes_AsString((PyObject*)in_bytes);
-    size_t res_size = dap_events_socket_write(self->t_events_socket,
+    size_t res_size = dap_events_socket_write_unsafe(self->t_events_socket,
                                               in_v_bytes, in_size);
     return Py_BuildValue("n", res_size);
 }
@@ -78,7 +78,7 @@ PyObject *dap_events_socket_write_f_py(PyDapEventsSocketObject *self, PyObject *
     if (!PyArg_VaParse(args, format, ap)){
         return NULL;
     }
-    size_t res_size = dap_events_socket_write_f(self->t_events_socket, format, ap);
+    size_t res_size = dap_events_socket_write_f_unsafe(self->t_events_socket, format, ap);
     return Py_BuildValue("n", res_size);
 }
 PyObject *dap_events_socket_read_py(PyDapEventsSocketObject *self, PyObject *args){
@@ -90,7 +90,7 @@ PyObject *dap_events_socket_read_py(PyDapEventsSocketObject *self, PyObject *arg
         return NULL;
     }
     void *res = DAP_NEW_SIZE(void*, in_size);
-    size_t res_size = dap_events_socket_read(self->t_events_socket, res, in_size);
+    size_t res_size = dap_events_socket_pop_from_buf_in(self->t_events_socket, res, in_size);
     PyBytesObject *res_obj = (PyBytesObject*)PyBytes_FromString(res);
     return  Py_BuildValue("nS", res_size, res_obj);
 }
@@ -106,7 +106,7 @@ PyObject *dap_events_socket_delete_py(PyDapEventsSocketObject *self, PyObject *a
     bool boolean = true;
     if (in_bool == Py_False)
         boolean = false;
-    dap_events_socket_delete(self->t_events_socket, boolean);
+    dap_events_socket_remove_and_delete_mt(self->t_events_socket->worker, self->t_events_socket);
     return  PyLong_FromLong(0);
 }
 
diff --git a/modules/dap-sdk/net/core/src/libdap-server-core-python.c b/modules/dap-sdk/net/core/src/libdap-server-core-python.c
index e38c6e6226bd10513e75e86ad0ef8f41a699e5f4..bb2825f69641cfde697f069601fcd0f95bfd1ab7 100644
--- a/modules/dap-sdk/net/core/src/libdap-server-core-python.c
+++ b/modules/dap-sdk/net/core/src/libdap-server-core-python.c
@@ -3,41 +3,30 @@
 #define LOG_TAG "libdap-server-core-python"
 
 int dap_server_core_init(uint32_t l_thread_cnt, size_t conn_t){
-    int result = dap_server_init(l_thread_cnt);
+    int result = dap_server_init();
     if ( result != 0 ) {
        log_it( L_CRITICAL, "Can't init socket server module" );
     }
     dap_events_init(l_thread_cnt, conn_t);
-    dap_client_remote_init();
     return result;
 }
 
 void dap_server_core_deinit(void){
-    dap_client_remote_deinit();
     dap_server_deinit();
     dap_events_deinit();
 }
 
-PyObject *dap_server_core_loop(PyObject *self, PyObject *args){
-    PyObject *obj_server;
-    if (!PyArg_ParseTuple(args, "O", &obj_server)){
-        return NULL;
-    }
-    int32_t result = dap_server_loop(((PyDapServerObject*)obj_server)->t_server);
-    log_it( result ? L_CRITICAL : L_NOTICE, "Server loop stopped with return code %d", ((PyDapServerObject*)obj_server)->t_server );
-    return PyLong_FromLong(result);
-}
-
 PyObject *dap_server_core_listen(PyObject *self, PyObject *args){
     const char *addr;
     uint16_t port;
     uint16_t type;
-    if (!PyArg_ParseTuple(args, "s|H|H", &addr, &port, &type)){
+    PyObject *events;
+    if (!PyArg_ParseTuple(args, "O|s|H|H", &events, &addr, &port, &type)){
         return NULL;
     }
     if (type > 1)
         return  NULL;
     PyObject *obj = _PyObject_New(&dapServer_dapServerType);
-    ((PyDapServerObject*)obj)->t_server = dap_server_listen(addr, port, type);
+    ((PyDapServerObject*)obj)->t_server = dap_server_new(((PyDapEventsObject*)events)->t_events, addr, port, type);
     return Py_BuildValue("O", obj);
 }
diff --git a/setup.py b/setup.py
index d2f13f46d40464bfe11ee31506a6566a8f868aa0..e2893f37aca57ae7e48e3819c780a40bc9d8e4ae 100755
--- a/setup.py
+++ b/setup.py
@@ -70,7 +70,7 @@ class CMakeBuild(build_ext):
 
 setup(
     name="CellFrame",
-    version="0.9-post15",
+    version="0.10-post1",
     description="CellFrame SDK",
     author='Demlabs (2007-2020)',
     license="GNU GPLv3",