diff --git a/include/dap_events_socket_python.h b/include/dap_events_socket_python.h
index d396864814acac780047c805aa40e65e44c7e01c..9795e7e3ecfc91ada1213b1004df6cd09ca9574d 100644
--- a/include/dap_events_socket_python.h
+++ b/include/dap_events_socket_python.h
@@ -14,55 +14,83 @@ typedef struct PyDapEventsSocket{
     dap_events_socket_t *t_events_socket;
 }PyDapEventsSocketObject;
 
+PyObject *dap_events_socket_create_after_py(PyDapEventsSocketObject *self);//dap_events_socket_t * a_es);
+
+//PyObject *dap_events_socket_wrap_no_add_py(PyObject *self, PyObject *args);//struct dap_events * a_events,
+                                           // int s, dap_events_socket_callbacks_t * a_callbacks); // Create new client and add it to the list
+
+
+PyObject *dap_events_socket_find_py(PyDapEventsSocketObject *self, PyObject *args);//int sock, struct dap_events * sh); // Find client by socket
+//PyObject *dap_events_socket_is_ready_to_read_py(PyDapEventsSocketObject *self);//dap_events_socket_t * sc);
+//PyObject *dap_events_socket_is_ready_to_write_py(PyDapEventsSocketObject *self);//dap_events_socket_t * sc);
+PyObject *dap_events_socket_set_readable_py(PyDapEventsSocketObject *self, PyObject *args);//dap_events_socket_t * sc,bool is_ready);
+PyObject *dap_events_socket_set_writable_py(PyDapEventsSocketObject *self, PyObject *args);//dap_events_socket_t * sc,bool is_ready);
+
+PyObject *dap_events_socket_write_py(PyDapEventsSocketObject *self, PyObject *args);//dap_events_socket_t *sc, const void * data, size_t data_size);
+PyObject *dap_events_socket_write_f_py(PyDapEventsSocketObject *self, PyObject *args);//dap_events_socket_t *sc, const char * format,...);
+PyObject *dap_events_socket_read_py(PyDapEventsSocketObject *self, PyObject *args);//dap_events_socket_t *sc, void * data, size_t data_size);
+
+PyObject *dap_events_socket_delete_py(PyDapEventsSocketObject *self, PyObject *args);//dap_events_socket_t *sc,bool preserve_inheritor); // Removes the client from the list
+
+PyObject *dap_events_socket_shrink_buf_in_py(PyDapEventsSocketObject *self, PyObject *args);//dap_events_socket_t * cl, size_t shrink_size);
+
+static PyMethodDef PyDapEventsObjectSocket_methods[] = {
+    {"createAfter", (PyCFunction)dap_events_socket_create_after_py, METH_NOARGS, ""},
+    {"find", (PyCFunction)dap_events_socket_find_py, METH_VARARGS, ""},
+//    {"isReadyToRead", (PyCFunction)dap_events_socket_is_ready_to_read_py, METH_NOARGS, ""},
+//    {"isReadyToWrite", (PyCFunction)dap_events_socket_is_ready_to_write_py, METH_NOARGS, ""},
+    {"setReadable", (PyCFunction)dap_events_socket_set_readable_py, METH_VARARGS, ""},
+    {"setWritable", (PyCFunction)dap_events_socket_set_writable_py, METH_VARARGS, ""},
+    {"write", (PyCFunction)dap_events_socket_write_py, METH_VARARGS, ""},
+    {"writeF", (PyCFunction)dap_events_socket_write_f_py, METH_VARARGS, ""},
+    {"read", (PyCFunction)dap_events_socket_read_py, METH_VARARGS, ""},
+    {"delete", (PyCFunction)dap_events_socket_delete_py, METH_VARARGS, ""},
+    {"shringBufIn", (PyCFunction)dap_events_socket_shrink_buf_in_py, METH_VARARGS, ""},
+    {NULL, NULL, 0, NULL}  /* Sentinel */
+};
+
 static PyTypeObject dapEventsSocket_dapEventsSocketType = {
     PyVarObject_HEAD_INIT(NULL, 0)
     "libDapServerCore.DapEventsSocket",             /* tp_name */
-    sizeof(PyDapEventsSocketObject), /* tp_basicsize */
+    sizeof(PyDapEventsSocketObject),             /* tp_basicsize */
     0,                         /* tp_itemsize */
-    0,                         /* tp_dealloc */
+    0,//(destructor)Noddy_dealloc, /* tp_dealloc */
     0,                         /* tp_print */
     0,                         /* tp_getattr */
     0,                         /* tp_setattr */
-    0,                         /* tp_compare */
+    0,                         /* tp_reserved */
     0,                         /* tp_repr */
     0,                         /* tp_as_number */
     0,                         /* tp_as_sequence */
     0,                         /* tp_as_mapping */
-    0,                         /* tp_hash */
+    0,                         /* tp_hash  */
     0,                         /* tp_call */
     0,                         /* tp_str */
     0,                         /* tp_getattro */
     0,                         /* tp_setattro */
     0,                         /* tp_as_buffer */
-    Py_TPFLAGS_DEFAULT,        /* tp_flags */
+    Py_TPFLAGS_DEFAULT |
+        Py_TPFLAGS_BASETYPE,   /* tp_flags */
     "DapEventsSocket objects",           /* tp_doc */
+    0,		               /* tp_traverse */
+    0,		               /* tp_clear */
+    0,		               /* tp_richcompare */
+    0,		               /* tp_weaklistoffset */
+    0,		               /* tp_iter */
+    0,		               /* tp_iternext */
+    PyDapEventsObjectSocket_methods,             /* tp_methods */
+    0,                         /* tp_members */
+    0,                         /* tp_getset */
+    0,                         /* tp_base */
+    0,                         /* tp_dict */
+    0,                         /* tp_descr_get */
+    0,                         /* tp_descr_set */
+    0,                         /* tp_dictoffset */
+    0,//(initproc)PyDapEventsObject_init,//(initproc)Noddy_init,      /* tp_init */
+    0,                         /* tp_alloc */
+    PyType_GenericNew,//PyDapEventsObject_new,//Noddy_new,                 /* tp_new */
 };
 
-
-PyObject *dap_events_socket_init_py(); //  Init clients module
-PyObject *dap_events_socket_deinit_py(); // Deinit clients module
-
-PyObject *dap_events_socket_create_after_py(PyObject *self, PyObject *args);//dap_events_socket_t * a_es);
-
-//PyObject *dap_events_socket_wrap_no_add_py(PyObject *self, PyObject *args);//struct dap_events * a_events,
-                                           // int s, dap_events_socket_callbacks_t * a_callbacks); // Create new client and add it to the list
-
-
-PyObject *dap_events_socket_find_py(PyObject *self, PyObject *args);//int sock, struct dap_events * sh); // Find client by socket
-
-PyObject *dap_events_socket_is_ready_to_read_py(PyObject *self, PyObject *args);//dap_events_socket_t * sc);
-PyObject *dap_events_socket_is_ready_to_write_py(PyObject *self, PyObject *args);//dap_events_socket_t * sc);
-PyObject *dap_events_socket_set_readable_py(PyObject *self, PyObject *args);//dap_events_socket_t * sc,bool is_ready);
-PyObject *dap_events_socket_set_writable_py(PyObject *self, PyObject *args);//dap_events_socket_t * sc,bool is_ready);
-
-PyObject *dap_events_socket_write_py(PyObject *self, PyObject *args);//dap_events_socket_t *sc, const void * data, size_t data_size);
-PyObject *dap_events_socket_write_f_py(PyObject *self, PyObject *args);//dap_events_socket_t *sc, const char * format,...);
-PyObject *dap_events_socket_read_py(PyObject *self, PyObject *args);//dap_events_socket_t *sc, void * data, size_t data_size);
-
-PyObject *dap_events_socket_delete_py(PyObject *self, PyObject *args);//dap_events_socket_t *sc,bool preserve_inheritor); // Removes the client from the list
-
-PyObject *dap_events_socket_shrink_buf_in_py(PyObject *self, PyObject *args);//dap_events_socket_t * cl, size_t shrink_size);
-
 #ifdef __cplusplus
 }
 #endif
diff --git a/include/libdap-server-core-python.h b/include/libdap-server-core-python.h
index 2cfd51e1a521ef8cb78b98d72daa49700a7888ae..047549eaf13d1d165ae58b497a8b6c7eedaf4b64 100644
--- a/include/libdap-server-core-python.h
+++ b/include/libdap-server-core-python.h
@@ -53,20 +53,6 @@ static PyMethodDef DapServerCorePythonMethods[] = {
         {"deinit", dap_server_core_deinit, METH_NOARGS, "Deinitialization of the DAP (Deus Applicaions Prototypes) server core library"},
         {"loop", dap_server_core_loop, METH_VARARGS, ""},
         {"listen", dap_server_core_listen, METH_VARARGS, ""},
-        /* Events Socket */
-        {"eventsSocketInit", dap_events_socket_init_py, METH_NOARGS, ""},
-        {"eventsSocketDeinit", dap_events_socket_deinit_py, METH_NOARGS, ""},
-        {"eventsSocketCreateAfter", dap_events_socket_create_after_py, METH_VARARGS, ""},
-        {"eventsSocketFind", dap_events_socket_find_py, METH_VARARGS, ""},
-        {"eventsSocketIsReadyToRead", dap_events_socket_is_ready_to_read_py, METH_VARARGS, ""},
-        {"eventsSocketIsReadyToWrite", dap_events_socket_is_ready_to_write_py, METH_VARARGS, ""},
-        {"eventsSocketSetReadable", dap_events_socket_set_readable_py, METH_VARARGS, ""},
-        {"eventsSocketSetWritable", dap_events_socket_set_writable_py, METH_VARARGS, ""},
-        {"eventsSocketWrite", dap_events_socket_write_py, METH_VARARGS, ""},
-        {"eventsSocketWriteF", dap_events_socket_write_f_py, METH_VARARGS, ""},
-        {"eventsSocketRead", dap_events_socket_read_py, METH_VARARGS, ""},
-        {"eventsSocketDelete", dap_events_socket_delete_py, METH_VARARGS, ""},
-        {"eventsSocketShrinkBufIn", dap_events_socket_shrink_buf_in_py, METH_VARARGS, ""},
         {NULL, NULL, 0, NULL}
 };
 
diff --git a/src/dap_events_socket_python.c b/src/dap_events_socket_python.c
index fcb4d3f5b9b0768ed3a847bd487a3612cae86296..f44de06fa7743ef046dcefc29373117d277f7f4b 100644
--- a/src/dap_events_socket_python.c
+++ b/src/dap_events_socket_python.c
@@ -1,20 +1,10 @@
 #include "dap_events_socket_python.h"
 
-PyObject *dap_events_socket_init_py(){
-    int result = dap_events_socket_init();
-    return  PyLong_FromLong(result);
-}
-PyObject *dap_events_socket_deinit_py(){
-    dap_events_socket_deinit();
-    return  PyLong_FromLong(0);
-}
-
-PyObject *dap_events_socket_create_after_py(PyObject *self, PyObject *args){
-    PyObject *in_object;
-    if(!PyArg_ParseTuple(args, "O", &in_object)){
+PyObject *dap_events_socket_create_after_py(PyDapEventsSocketObject *self){
+    if (self->t_events_socket == NULL){
         return NULL;
     }
-    dap_events_socket_create_after(((PyDapEventsSocketObject*)in_object)->t_events_socket);
+    dap_events_socket_create_after(self->t_events_socket);
     return  PyLong_FromLong(0);
 }
 
@@ -23,123 +13,130 @@ PyObject *dap_events_socket_create_after_py(PyObject *self, PyObject *args){
 //}
 
 
-PyObject *dap_events_socket_find_py(PyObject *self, PyObject *args){
+PyObject *dap_events_socket_find_py(PyDapEventsSocketObject *self, PyObject *args){
+    if (self->t_events_socket != NULL){
+        return NULL;
+    }
     int socket;
     PyObject *in_object;
     if (!PyArg_ParseTuple(args, "i|O", &socket, &in_object)){
         return NULL;
     }
-    dap_events_socket_t *events_socket = dap_events_socket_find(socket, ((PyDapEventsObject*)in_object)->t_events);
-    PyObject *l_events_socket = _PyObject_New(&dapEventsSocket_dapEventsSocketType);
-    ((PyDapEventsSocketObject*)l_events_socket)->t_events_socket = events_socket;
-    return Py_BuildValue("O", l_events_socket);
+    self->t_events_socket = dap_events_socket_find(socket, ((PyDapEventsObject*)in_object)->t_events);
+    return  PyLong_FromLong(0);
 }
 
-PyObject *dap_events_socket_is_ready_to_read_py(PyObject *self, PyObject *args){
-    PyObject *in_obj;
-    if (!PyArg_ParseTuple(args, "O", &in_obj)){
-        return NULL;
-    }
-//    bool result = dap_events_socket_is_ready_to_read(((PyDapEventsSocketObject*)in_obj)->t_events_socket);
+//PyObject *dap_events_socket_is_ready_to_read_py(PyDapEventsSocketObject *self){
+//    bool result = dap_events_socket_is_ready_to_read(self->t_events_socket);
 //    if (result)
 //        return Py_BuildValue("O", Py_True);
 //    else
-        return Py_BuildValue("O", Py_False);
-}
-PyObject *dap_events_socket_is_ready_to_write_py(PyObject *self, PyObject *args){
-    PyObject *in_obj;
-    if (!PyArg_ParseTuple(args, "O", &in_obj)){
-        return NULL;
-    }
-    //bool result = dap_events_socket_is_ready_to_write(((PyDapEventsSocketObject*)in_obj)->t_events_socket);
-    //if (result)
+//        return Py_BuildValue("O", Py_False);
+//}
+//PyObject *dap_events_socket_is_ready_to_write_py(PyDapEventsSocketObject *self){
+//    bool result = dap_events_socket_is_ready_to_write(self->t_events_socket);
+//    if (result)
 //        return Py_BuildValue("O", Py_True);
 //    else
-        return Py_BuildValue("O", Py_False);
-}
-PyObject *dap_events_socket_set_readable_py(PyObject *self, PyObject *args){
-    PyObject *in_obj;
+//        return Py_BuildValue("O", Py_False);
+//}
+PyObject *dap_events_socket_set_readable_py(PyDapEventsSocketObject *self, PyObject *args){
+    if (self->t_events_socket == NULL){
+        return NULL;
+    }
     PyObject *l_is_ready;
-    if (!PyArg_ParseTuple(args, "O", &in_obj, &l_is_ready)){
+    if (!PyArg_ParseTuple(args, "O",  &l_is_ready)){
         return NULL;
     }
     bool is_ready = true;
     if (l_is_ready == Py_False)
         is_ready = false;
-    dap_events_socket_set_readable(((PyDapEventsSocketObject*)in_obj)->t_events_socket, is_ready);
+    dap_events_socket_set_readable(self->t_events_socket, is_ready);
     return  PyLong_FromLong(0);
 }
-PyObject *dap_events_socket_set_writable_py(PyObject *self, PyObject *args){
-    PyObject *in_obj;
+PyObject *dap_events_socket_set_writable_py(PyDapEventsSocketObject *self, PyObject *args){
+    if (self->t_events_socket == NULL){
+        return NULL;
+    }
     PyObject *l_is_ready;
-    if (!PyArg_ParseTuple(args, "O", &in_obj, &l_is_ready)){
+    if (!PyArg_ParseTuple(args, "O", &l_is_ready)){
         return NULL;
     }
     bool is_ready = true;
     if (l_is_ready == Py_False)
         is_ready = false;
-    dap_events_socket_set_writable(((PyDapEventsSocketObject*)in_obj)->t_events_socket, is_ready);
+    dap_events_socket_set_writable(self->t_events_socket, is_ready);
     return  PyLong_FromLong(0);
 }
 
-PyObject *dap_events_socket_write_py(PyObject *self, PyObject *args){
-    PyObject *in_obj;
+PyObject *dap_events_socket_write_py(PyDapEventsSocketObject *self, PyObject *args){
+    if (self->t_events_socket == NULL){
+        return NULL;
+    }
     PyBytesObject *in_bytes;
     size_t in_size;
-    if (!PyArg_ParseTuple(args, "O|S|n", &in_obj, &in_bytes, &in_size)){
+    if (!PyArg_ParseTuple(args, "S|n", &in_bytes, &in_size)){
         return NULL;
     }
     char *in_v_bytes = PyBytes_AsString((PyObject*)in_bytes);
-    size_t res_size = dap_events_socket_write(((PyDapEventsSocketObject*)in_obj)->t_events_socket,
+    size_t res_size = dap_events_socket_write(self->t_events_socket,
                                               in_v_bytes, in_size);
     return Py_BuildValue("n", res_size);
 }
-PyObject *dap_events_socket_write_f_py(PyObject *self, PyObject *args){
-    PyObject *in_object;
+PyObject *dap_events_socket_write_f_py(PyDapEventsSocketObject *self, PyObject *args){
+    if (self->t_events_socket == NULL){
+        return NULL;
+    }
     const char *format;
     PyTupleObject *pto;
-    if (!PyArg_ParseTuple(args, "O|s|O", &in_object, &format, &pto)){
+    if (!PyArg_ParseTuple(args, "s|O", &format, &pto)){
         return  NULL;
     }
     va_list ap;
     if (!PyArg_VaParse(args, format, ap)){
         return NULL;
     }
-    size_t res_size = dap_events_socket_write_f(((PyDapEventsSocketObject*)in_object)->t_events_socket, format, ap);
+    size_t res_size = dap_events_socket_write_f(self->t_events_socket, format, ap);
     return Py_BuildValue("n", res_size);
 }
-PyObject *dap_events_socket_read_py(PyObject *self, PyObject *args){
-    PyObject *in_object;
+PyObject *dap_events_socket_read_py(PyDapEventsSocketObject *self, PyObject *args){
+    if (self->t_events_socket == NULL){
+        return NULL;
+    }
     size_t in_size;
-    if (!PyArg_ParseTuple(args, "O|S|n", &in_object, &in_size)){
+    if (!PyArg_ParseTuple(args, "n", &in_size)){
         return NULL;
     }
     void *res = DAP_NEW_SIZE(void*, in_size);
-    size_t res_size = dap_events_socket_read(((PyDapEventsSocketObject*)in_object)->t_events_socket, res, in_size);
+    size_t res_size = dap_events_socket_read(self->t_events_socket, res, in_size);
     PyBytesObject *res_obj = (PyBytesObject*)PyBytes_FromString(res);
     return  Py_BuildValue("nS", res_size, res_obj);
 }
 
-PyObject *dap_events_socket_delete_py(PyObject *self, PyObject *args){
-    PyObject *in_object;
+PyObject *dap_events_socket_delete_py(PyDapEventsSocketObject *self, PyObject *args){
+    if (self->t_events_socket == NULL){
+        return NULL;
+    }
     PyObject *in_bool;
-    if (!PyArg_ParseTuple(args, "O|O", &in_object, &in_bool)){
+    if (!PyArg_ParseTuple(args, "O", &in_bool)){
         return NULL;
     }
     bool boolean = true;
     if (in_bool == Py_False)
         boolean = false;
-    dap_events_socket_delete(((PyDapEventsSocketObject*)in_object)->t_events_socket, boolean);
+    dap_events_socket_delete(self->t_events_socket, boolean);
     return  PyLong_FromLong(0);
 }
 
-PyObject *dap_events_socket_shrink_buf_in_py(PyObject *self, PyObject *args){
-    PyObject *in_object;
+PyObject *dap_events_socket_shrink_buf_in_py(PyDapEventsSocketObject *self, PyObject *args){
+    if (self->t_events_socket == NULL){
+        return NULL;
+    }
     size_t in_size;
-    if(!PyArg_ParseTuple(args, "O|n", &in_object, &in_size)){
+    if(!PyArg_ParseTuple(args, "n", &in_size)){
         return NULL;
     }
-    dap_events_socket_shrink_buf_in(((PyDapEventsSocketObject*)in_object)->t_events_socket, in_size);
+    dap_events_socket_shrink_buf_in(self->t_events_socket, in_size);
     return  PyLong_FromLong(0);
 }
 
diff --git a/src/libdap-server-core-python.c b/src/libdap-server-core-python.c
index 547e158db66b07fd49053a7546872088f81249cd..ab2bf51bc7a2fce231cd213f8208a5d5fca63c86 100644
--- a/src/libdap-server-core-python.c
+++ b/src/libdap-server-core-python.c
@@ -58,6 +58,7 @@ PyMODINIT_FUNC PyInit_libDapServerCore(void){
     PyObject *module = PyModule_Create(&dapservercorepythonmodule);
 
     PyModule_AddObject(module, "DapEvents", (PyObject*)&dapEvents_dapEventsType);
+    PyModule_AddObject(module, "DapEventsSocket", (PyObject*)&dapEventsSocket_dapEventsSocketType);
 
     return module;
 }