diff --git a/include/wrapping_dap_chain_datum_tx.h b/include/wrapping_dap_chain_datum_tx.h
index 595e5cb2014460a339ecefa96e99f0c7cf22da87..4991798eb2d39b716231306ad6ae0f6b19da2937 100644
--- a/include/wrapping_dap_chain_datum_tx.h
+++ b/include/wrapping_dap_chain_datum_tx.h
@@ -6,6 +6,7 @@
 #include "libdap_crypto_key_python.h"
 #include "dap_chain_datum_tx_out_cond.h"
 #include "wrapping_dap_hash.h"
+#include "dap_chain_datum_tx_items.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -158,18 +159,14 @@ PyObject *dap_chain_datum_tx_add_out_cond_item_py(PyObject *self, PyObject *args
 PyObject *dap_chain_datum_tx_add_sign_item_py(PyObject *self, PyObject *args);
 PyObject *dap_chain_datum_tx_verify_sign_py(PyObject *self, PyObject *args);
 
-static dap_chain_datum_tx_t **PyListToDapChainDatumTxArray(PyObject *a_in_obj);
-static PyObject* DapChainDatumTxArrayToPyList(dap_chain_datum_tx_t** datum_txs);
-
-
 static PyMethodDef PyDapChainDatumTxObjectMethods[] ={
     {"getSize", (PyCFunction)dap_chain_datum_tx_get_size_py, METH_VARARGS, ""},
-    {"addItem", (PyCFunction)dap_chain_datum_tx_add_item_py, METH_VARARGS | METH_STATIC, ""},
-    {"addInItem", (PyCFunction)dap_chain_datum_tx_add_in_item_py, METH_VARARGS | METH_STATIC, ""},
-    {"addInCondItem", (PyCFunction)dap_chain_datum_tx_add_in_cond_item_py, METH_VARARGS | METH_STATIC, ""},
-    {"addOutItem", (PyCFunction)dap_chain_datum_tx_add_out_item_py, METH_VARARGS | METH_STATIC, ""},
-    {"addOutCond", (PyCFunction)dap_chain_datum_tx_add_out_cond_item_py, METH_VARARGS | METH_STATIC, ""},
-    {"addSignItem", (PyCFunction)dap_chain_datum_tx_add_sign_item_py, METH_VARARGS | METH_STATIC, ""},
+    {"addItem", (PyCFunction)dap_chain_datum_tx_add_item_py, METH_VARARGS, ""},
+    {"addInItem", (PyCFunction)dap_chain_datum_tx_add_in_item_py, METH_VARARGS, ""},
+    {"addInCondItem", (PyCFunction)dap_chain_datum_tx_add_in_cond_item_py, METH_VARARGS, ""},
+    {"addOutItem", (PyCFunction)dap_chain_datum_tx_add_out_item_py, METH_VARARGS, ""},
+    {"addOutCond", (PyCFunction)dap_chain_datum_tx_add_out_cond_item_py, METH_VARARGS, ""},
+    {"addSignItem", (PyCFunction)dap_chain_datum_tx_add_sign_item_py, METH_VARARGS, ""},
     {"verifySign", (PyCFunction)dap_chain_datum_tx_verify_sign_py, METH_VARARGS, ""},
     {NULL, NULL, 0, NULL}
 };
@@ -265,9 +262,6 @@ static PyTypeObject DapChainTxOutCond_DapChainTxOutCondObjectType = {
     PyType_GenericNew,                              /* tp_new */
 };
 
-dap_chain_tx_out_cond_t **PyListToDapChainTxOutCond(PyObject *list);
-PyObject *DapChainTxOutCondObjectToPyList(dap_chain_tx_out_cond_t **out_cond);
-
 /* -------------------------------------- */
 
 #ifdef __cplusplus
diff --git a/src/wrapping_dap_chain_datum_tx.c b/src/wrapping_dap_chain_datum_tx.c
index f412bf616f7f6ee44408234c6bce4ac9aa02f581..5241612dc97960223d856bc7f9c5de0bf405b7bb 100644
--- a/src/wrapping_dap_chain_datum_tx.c
+++ b/src/wrapping_dap_chain_datum_tx.c
@@ -54,69 +54,52 @@ void PyDapChainDatumTxObject_delete(PyDapChainDatumTxObject* datumTx){
 }
 
 PyObject *dap_chain_datum_tx_get_size_py(PyObject *self, PyObject *args){
+    (void)args;
     size_t size = dap_chain_datum_tx_get_size(((PyDapChainDatumTxObject*)self)->datum_tx);
     return PyLong_FromSize_t(size);
 }
 PyObject *dap_chain_datum_tx_add_item_py(PyObject *self, PyObject *args){
-    PyObject *in_obj;
-    u_int8_t *a_item;
-    if (!PyArg_ParseTuple(args, "O|b", &in_obj, &a_item))
+    uint8_t *a_item;
+    if (!PyArg_ParseTuple(args, "b", &a_item))
         return NULL;
-    dap_chain_datum_tx_t **txs = PyListToDapChainDatumTxArray(in_obj);
-    int res = dap_chain_datum_tx_add_item(txs, a_item);
-    if (res == -1){
-        return NULL;
-    } else {
-        PyObject *out = DapChainDatumTxArrayToPyList(txs);
-        return Py_BuildValue("O", out);
-    }
+    int res = dap_chain_datum_tx_add_item(&(((PyDapChainDatumTxObject*)self)->datum_tx), a_item);
+    return PyLong_FromLong(res);
 }
 PyObject *dap_chain_datum_tx_add_in_item_py(PyObject *self, PyObject *args){
-    PyObject *in_obj_datum_txs;
     PyObject *in_obj_hash_fast;
     uint32_t in_tx_out_pref_idx;
-    if (!PyArg_ParseTuple(args, "O|O|I", &in_obj_datum_txs, &in_obj_hash_fast, &in_tx_out_pref_idx))
+    if (!PyArg_ParseTuple(args, "O|I", &in_obj_hash_fast, &in_tx_out_pref_idx))
         return NULL;
-    dap_chain_datum_tx_t **a_txs = PyListToDapChainDatumTxArray(in_obj_datum_txs);
-    int res = dap_chain_datum_tx_add_in_item(a_txs, ((PyDapHashFastObject*)in_obj_hash_fast)->hash_fast,
+    int res = dap_chain_datum_tx_add_in_item(&(((PyDapChainDatumTxObject*)self)->datum_tx),
+                                             ((PyDapHashFastObject*)in_obj_hash_fast)->hash_fast,
                                              in_tx_out_pref_idx);
-    if (res == -1){
-        return NULL;
-    } else {
-        PyObject *out = DapChainDatumTxArrayToPyList(a_txs);
-        return Py_BuildValue("O", out);
-    }
+    return PyLong_FromLong(res);
 }
 
 PyObject *dap_chain_datum_tx_add_in_cond_item_py(PyObject *self, PyObject *args){
-    PyObject *in_obj_datum_txs;
     PyObject *in_chain_hash_fast;
     unsigned int in_tx_out_prev_idx;
     unsigned int in_receipt_idx;
-    if (!PyArg_ParseTuple(args, "O|O|I|I", &in_obj_datum_txs, &in_chain_hash_fast, &in_tx_out_prev_idx, &in_receipt_idx))
+    if (!PyArg_ParseTuple(args, "O|I|I", &in_chain_hash_fast, &in_tx_out_prev_idx, &in_receipt_idx))
         return NULL;
-    dap_chain_datum_tx_t **a_txs = PyListToDapChainDatumTxArray(in_obj_datum_txs);
-    int res = dap_chain_datum_tx_add_in_cond_item(a_txs, ((PyDapHashFastObject*)in_chain_hash_fast)->hash_fast, in_tx_out_prev_idx, in_receipt_idx);
+    int res = dap_chain_datum_tx_add_in_cond_item(&(((PyDapChainDatumTxObject*)self)->datum_tx),
+                                                  ((PyDapHashFastObject*)in_chain_hash_fast)->hash_fast,
+                                                  in_tx_out_prev_idx,
+                                                  in_receipt_idx);
     return PyLong_FromLong(res);
 }
 
 PyObject *dap_chain_datum_tx_add_out_item_py(PyObject *self, PyObject *args){
-    PyObject *in_obj_datum_txs;
     PyObject *in_addr;
     uint64_t value;
-    if (!PyArg_ParseTuple(args, "O|O|k", &in_obj_datum_txs, &in_addr, value))
-        return NULL;
-    dap_chain_datum_tx_t **txs = PyListToDapChainDatumTxArray(in_obj_datum_txs);
-    int res = dap_chain_datum_tx_add_out_item(txs, ((PyDapChainAddrObject*)in_addr)->addr, value);
-    if (res == -1){
+    if (!PyArg_ParseTuple(args, "O|k", &in_addr, &value))
         return NULL;
-    } else {
-        PyObject *out = DapChainDatumTxArrayToPyList(txs);
-        return Py_BuildValue("O", out);
-    }
+    int res = dap_chain_datum_tx_add_out_item(&(((PyDapChainDatumTxObject*)self)->datum_tx),
+                                              ((PyDapChainAddrObject*)in_addr)->addr,
+                                              value);
+    return PyLong_FromLong(res);
 }
 PyObject *dap_chain_datum_tx_add_out_cond_item_py(PyObject *self, PyObject *args){
-    PyObject *obj_txs;
     PyObject *obj_key;
     PyObject *obj_srv_uid;
     uint64_t value;
@@ -124,79 +107,31 @@ PyObject *dap_chain_datum_tx_add_out_cond_item_py(PyObject *self, PyObject *args
     PyObject *obj_srv_price_unit_uid;
     PyObject *obj_cond_bytes;
     Py_ssize_t cond_size;
-    if (!PyArg_ParseTuple(args, "O|O|O|k|k|O|O|n", &obj_txs, &obj_key, &obj_srv_uid, &value, &value_max_per_unit,
+    if (!PyArg_ParseTuple(args, "O|O|k|k|O|O|n", &obj_key, &obj_srv_uid, &value, &value_max_per_unit,
                           &obj_srv_price_unit_uid, &obj_cond_bytes, &cond_size))
         return NULL;
-    dap_chain_datum_tx_t **txs = PyListToDapChainDatumTxArray(obj_txs);
     void *cond = (void*)PyBytes_AsString(obj_cond_bytes);
-    int res = dap_chain_datum_tx_add_out_cond_item(txs, ((PyCryptoKeyObject*)obj_key)->key, ((PyDapChainNetSrvUIDObject*)obj_srv_uid)->net_srv_uid,
-                                                   value, value_max_per_unit, ((PyDapChainNetSrvPriceUnitUIDObject*)obj_srv_price_unit_uid)->price_unit_uid,
+    int res = dap_chain_datum_tx_add_out_cond_item(&(((PyDapChainDatumTxObject*)self)->datum_tx),
+                                                   ((PyCryptoKeyObject*)obj_key)->key,
+                                                   ((PyDapChainNetSrvUIDObject*)obj_srv_uid)->net_srv_uid,
+                                                   value, value_max_per_unit,
+                                                   ((PyDapChainNetSrvPriceUnitUIDObject*)obj_srv_price_unit_uid)->price_unit_uid,
                                                    cond, (size_t)cond_size);
-    if (res == -1){
-        return NULL;
-    } else {
-        PyObject *out = DapChainDatumTxArrayToPyList(txs);
-        return Py_BuildValue("O", out);
-    }
+    return PyLong_FromLong(res);
 }
 PyObject *dap_chain_datum_tx_add_sign_item_py(PyObject *self, PyObject *args){
-    PyObject *obj_txs;
     PyObject *obj_key;
-    if (!PyArg_ParseTuple(args, "O|O", &obj_txs, &obj_key))
+    if (!PyArg_ParseTuple(args, "O", &obj_key))
         return NULL;
-    dap_chain_datum_tx_t **txs = PyListToDapChainDatumTxArray(obj_txs);
-    int res = dap_chain_datum_tx_add_sign_item(txs, ((PyCryptoKeyObject*)obj_key)->key);
-    if (res == -1){
-        return NULL;
-    } else {
-        PyObject *out = DapChainDatumTxArrayToPyList(txs);
-        return Py_BuildValue("O", out);
-    }
-}
-PyObject *dap_chain_datum_tx_verify_sign_py(PyObject *self, PyObject *args)
-{
-    int res = dap_chain_datum_tx_verify_sign(((PyDapChainDatumTxObject*)self)->datum_tx);
+    int res = dap_chain_datum_tx_add_sign_item(&(((PyDapChainDatumTxObject*)self)->datum_tx),
+                                               ((PyCryptoKeyObject*)obj_key)->key);
     return PyLong_FromLong(res);
 }
 
-static dap_chain_datum_tx_t **PyListToDapChainDatumTxArray(PyObject *a_in_obj){
-    Py_ssize_t size = PyList_Size(a_in_obj);
-    dap_chain_datum_tx_t **txs = calloc(sizeof(dap_chain_datum_tx_t), (size_t)size);
-    for (Py_ssize_t i = 0; i < size;i++){
-        txs[i] = ((PyDapChainDatumTxObject*)PyList_GetItem(a_in_obj, i))->datum_tx;
-    }
-    return txs;
-}
-
-static PyObject* DapChainDatumTxArrayToPyList(dap_chain_datum_tx_t** datum_txs){
-    size_t len = sizeof(datum_txs) / sizeof(*datum_txs);
-    PyObject* list = PyList_New((Py_ssize_t)len);
-    for (size_t i=0; i < len; i++){
-        PyObject *obj = _PyObject_New(&DapChainDatumTx_DapChainDatumTxObjectType);
-        ((PyDapChainDatumTxObject*)obj)->datum_tx = datum_txs[i];
-        PyList_Append(list, obj);
-    }
-    return list;
-}
-
-dap_chain_tx_out_cond_t **PyListToDapChainTxOutCond(PyObject *list){
-    Py_ssize_t size = PyList_Size(list);
-    dap_chain_tx_out_cond_t **out_conds = calloc(sizeof(dap_chain_tx_out_cond_t), (size_t)size);
-    for (Py_ssize_t i=0; i < size; i++){
-        out_conds[i] = ((PyDapChainTxOutCondObject*)PyList_GetItem(list, i))->out_cond;
-    }
-    return out_conds;
-}
-
-PyObject *DapChainTxOutCondObjectToPyList(dap_chain_tx_out_cond_t **out_cond){
-    size_t len = sizeof(out_cond) / sizeof(*out_cond);
-    PyObject *list = PyList_New((Py_ssize_t)len);
-    for (size_t i=0; i< len;i++ ){
-        PyObject *obj = _PyObject_New(&DapChainTxOutCond_DapChainTxOutCondObjectType);
-        ((PyDapChainTxOutCondObject*)obj)->out_cond = out_cond[i];
-        PyList_Append(list, obj);
-    }
-    return list;
+PyObject *dap_chain_datum_tx_verify_sign_py(PyObject *self, PyObject *args){
+    (void)args;
+    int res = dap_chain_datum_tx_verify_sign(((PyDapChainDatumTxObject*)self)->datum_tx);
+    return PyLong_FromLong(res);
 }
 
 /* -------------------------------------- */