diff --git a/include/dap_events_python.h b/include/dap_events_python.h
index 80af2082791f15355b8d2d6ca2f7fa8c410516a9..88a5214a171b88499b80d2a0f901220869d06a98 100644
--- a/include/dap_events_python.h
+++ b/include/dap_events_python.h
@@ -14,43 +14,73 @@ typedef struct PyDapEvents{
     dap_events_t *t_events;
 }PyDapEventsObject;
 
+void PyDapEventsObject_dealloc(PyDapEventsObject *eventsObject);
+
+PyObject *PyDapEventsObject_new(PyTypeObject *type_object, PyObject *args, PyObject *kwds);
+
+PyObject *dap_events_init_py(PyObject *self, PyObject *args); //uint32_t a_threads_count, size_t conn_t ); // Init server module
+PyObject *dap_events_deinit_py(); // Deinit server module
+
+//PyObject *dap_events_new_py();
+//PyObject *dap_events_delete_py(PyObject *self, PyObject *args); //dap_events_t * sh );
+//void dap_events_socket_remove_and_delete( dap_events_socket_t* a_es );
+PyObject *dap_events_socket_remove_and_delete_py(PyDapEventsObject *self, PyObject *args); //dap_events_socket_t* a_es, bool preserve_inheritor );
+
+PyObject *dap_events_kill_socket_py(PyDapEventsObject *self, PyObject *args); //dap_events_socket_t *a_es );
+
+PyObject *dap_events_start_py(PyDapEventsObject *self); //dap_events_t *sh );
+PyObject *dap_events_wait_py(PyDapEventsObject *self); //dap_events_t *sh );
+
+static PyMethodDef PyDapEventsObject_methods[] = {
+    {"start", (PyCFunction)dap_events_start_py, METH_NOARGS, ""},
+    {"wait", (PyCFunction)dap_events_wait_py, METH_NOARGS, ""},
+    {"killSocket", (PyCFunction)dap_events_kill_socket_py, METH_VARARGS, ""},
+    {"removeAndDeleteSocket", (PyCFunction)dap_events_socket_remove_and_delete_py, METH_VARARGS, ""},
+    {NULL, NULL, 0, NULL}  /* Sentinel */
+};
+
 static PyTypeObject dapEvents_dapEventsType = {
     PyVarObject_HEAD_INIT(NULL, 0)
     "libDapServerCore.DapEvents",             /* tp_name */
-    sizeof(PyDapEventsObject), /* tp_basicsize */
+    sizeof(PyDapEventsObject),             /* tp_basicsize */
     0,                         /* tp_itemsize */
-    0,                         /* tp_dealloc */
+    (destructor)PyDapEventsObject_dealloc,//(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 */
     "DapEvents objects",           /* tp_doc */
+    0,		               /* tp_traverse */
+    0,		               /* tp_clear */
+    0,		               /* tp_richcompare */
+    0,		               /* tp_weaklistoffset */
+    0,		               /* tp_iter */
+    0,		               /* tp_iternext */
+    PyDapEventsObject_methods,//Noddy_methods,             /* tp_methods */
+    0,//Noddy_members,             /* tp_members */
+    0,//Noddy_getseters,           /* 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 */
+    PyDapEventsObject_new,//Noddy_new,                 /* tp_new */
 };
 
-PyObject *dap_events_init_py(PyObject *self, PyObject *args); //uint32_t a_threads_count, size_t conn_t ); // Init server module
-PyObject *dap_events_deinit_py(); // Deinit server module
-
-PyObject *dap_events_new_py();
-PyObject *dap_events_delete_py(PyObject *self, PyObject *args); //dap_events_t * sh );
-//void dap_events_socket_remove_and_delete( dap_events_socket_t* a_es );
-PyObject *dap_events_socket_remove_and_delete_py(PyObject *self, PyObject *args); //dap_events_socket_t* a_es, bool preserve_inheritor );
-
-PyObject *dap_events_kill_socket_py(PyObject *self, PyObject *args); //dap_events_socket_t *a_es );
-
-PyObject *dap_events_start_py(PyObject *self, PyObject *args); //dap_events_t *sh );
-PyObject *dap_events_wait_py(PyObject *self, PyObject *args); //dap_events_t *sh );
-
 #ifdef __cplusplus
 }
 #endif
diff --git a/include/libdap-server-core-python.h b/include/libdap-server-core-python.h
index c96f4d27241826f987dbaab5b0e4d19e25ac38c7..2cfd51e1a521ef8cb78b98d72daa49700a7888ae 100644
--- a/include/libdap-server-core-python.h
+++ b/include/libdap-server-core-python.h
@@ -53,15 +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, ""},
-        /* Wrapping Events */
-        {"eventsInit", dap_events_init_py, METH_VARARGS, ""},
-        {"eventsDeinit", dap_events_deinit_py, METH_NOARGS, ""},
-        {"eventsNew", dap_events_new_py, METH_NOARGS, ""},
-        {"eventsDellete", dap_events_delete_py, METH_VARARGS, ""},
-        {"eventsStart", dap_events_start_py, METH_VARARGS, ""},
-        {"eventsWait", dap_events_wait_py, METH_VARARGS, ""},
-        {"eventsSocketRemoveAndDelete", dap_events_socket_remove_and_delete_py, METH_VARARGS, ""},
-        {"eventsKillSocket", dap_events_kill_socket_py, METH_VARARGS, ""},
         /* Events Socket */
         {"eventsSocketInit", dap_events_socket_init_py, METH_NOARGS, ""},
         {"eventsSocketDeinit", dap_events_socket_deinit_py, METH_NOARGS, ""},
diff --git a/src/dap_events_python.c b/src/dap_events_python.c
index 726120f0477bec82e16db69b2cd4e16ac933706b..a1f8a56c730084f10d9a841f0e468c583763f33b 100644
--- a/src/dap_events_python.c
+++ b/src/dap_events_python.c
@@ -14,22 +14,19 @@ PyObject *dap_events_deinit_py(void){
     return PyLong_FromLong(0);
 }
 
-PyObject *dap_events_new_py(void){
-    PyObject *new_dap_events_obj = _PyObject_New(&dapEvents_dapEventsType);
-    ((PyDapEventsObject*)new_dap_events_obj)->t_events = dap_events_new();
-    return Py_BuildValue("O", new_dap_events_obj);
+PyObject *PyDapEventsObject_new(PyTypeObject *type_object, PyObject *args, PyObject *kwds){
+    PyDapEventsObject *new_EO = (PyDapEventsObject*)PyType_GenericNew(type_object, args, kwds);
+    new_EO->t_events = dap_events_new();
+    return (PyObject *)new_EO;
 }
-PyObject *dap_events_delete_py(PyObject *self, PyObject *args){
-    PyObject *in_obj;
-    if (PyArg_ParseTuple(args, "O", &in_obj)){
-        return NULL;
-    }
-    dap_events_delete(((PyDapEventsObject*)in_obj)->t_events);
-    PyObject_Del(in_obj);
-    return PyLong_FromLong(0);
+
+void PyDapEventsObject_dealloc(PyDapEventsObject *eventsObject){
+    dap_events_delete(eventsObject->t_events);
+    Py_TYPE(eventsObject)->tp_free((PyObject*)eventsObject);
 }
+
 //void dap_events_socket_remove_and_delete( dap_events_socket_t* a_es );
-PyObject *dap_events_socket_remove_and_delete_py(PyObject *self, PyObject *args){
+PyObject *dap_events_socket_remove_and_delete_py(PyDapEventsObject *self, PyObject *args){
     PyObject *in_obj;
     PyObject *in_bool;
     if (!PyArg_ParseTuple(args, "O|O", &in_obj, &in_bool)){
@@ -42,7 +39,7 @@ PyObject *dap_events_socket_remove_and_delete_py(PyObject *self, PyObject *args)
     return PyLong_FromLong(0);
 }
 
-PyObject *dap_events_kill_socket_py(PyObject *self, PyObject *args){
+PyObject *dap_events_kill_socket_py(PyDapEventsObject *self, PyObject *args){
     PyObject *in_obj;
     if (!PyArg_ParseTuple(args, "O", &in_obj)){
         return NULL;
@@ -51,19 +48,11 @@ PyObject *dap_events_kill_socket_py(PyObject *self, PyObject *args){
     return PyLong_FromLong(0);
 }
 
-PyObject *dap_events_start_py(PyObject *self, PyObject *args){
-    PyObject *in_object;
-    if (!PyArg_ParseTuple(args, "O", &in_object)){
-        return NULL;
-    }
-    int32_t result = dap_events_start(((PyDapEventsObject*)in_object)->t_events);
+PyObject *dap_events_start_py(PyDapEventsObject *self){
+    int32_t result = dap_events_start(self->t_events);
     return PyLong_FromLong(result);
 }
-PyObject *dap_events_wait_py(PyObject *self, PyObject *args){
-    PyObject *in_object;
-    if (!PyArg_ParseTuple(args, "O", &in_object)){
-        return NULL;
-    }
-    int32_t result = dap_events_wait(((PyDapEventsObject*)in_object)->t_events);
+PyObject *dap_events_wait_py(PyDapEventsObject *self){
+    int32_t result = dap_events_wait(self->t_events);
     return PyLong_FromLong(result);
 }
diff --git a/src/libdap-server-core-python.c b/src/libdap-server-core-python.c
index aedf19336960866e8a23a672d992419de6ade679..547e158db66b07fd49053a7546872088f81249cd 100644
--- a/src/libdap-server-core-python.c
+++ b/src/libdap-server-core-python.c
@@ -49,12 +49,17 @@ static PyObject *dap_server_core_listen(PyObject *self, PyObject *args){
 
 PyMODINIT_FUNC PyInit_libDapServerCore(void){
     dapServer_dapServerType.tp_new = PyType_GenericNew;
-    dapEvents_dapEventsType.tp_new = PyType_GenericNew;
+    //dapEvents_dapEventsType.tp_new = PyType_GenericNew;
     dapEventsSocket_dapEventsSocketType.tp_new = PyType_GenericNew;
     if (PyType_Ready(&dapServer_dapServerType) < 0 || PyType_Ready(&dapEvents_dapEventsType) < 0
             || PyType_Ready(&dapEventsSocket_dapEventsSocketType) < 0)
             return NULL;
-    return PyModule_Create(&dapservercorepythonmodule);
+
+    PyObject *module = PyModule_Create(&dapservercorepythonmodule);
+
+    PyModule_AddObject(module, "DapEvents", (PyObject*)&dapEvents_dapEventsType);
+
+    return module;
 }
 
 int main(int argc, char **argv) {