diff --git a/include/libdap-app-cli-python.h b/include/libdap-app-cli-python.h
index 0f843e0df08b09c3360333d06b64ff53f483e6e8..4d555157448a59161e86dc3b0a67523c433c6e88 100644
--- a/include/libdap-app-cli-python.h
+++ b/include/libdap-app-cli-python.h
@@ -4,6 +4,7 @@
 #include <Python.h>
 #include "dap_common.h"
 #include "dap_app_cli.h"
+#include "dap_strfuncs.h"
 
 
 typedef struct PyAppCli{
diff --git a/src/libdap-app-cli-python.c b/src/libdap-app-cli-python.c
index d400e9ff5f324f7072a77123ea7c03bf62531c7f..c4643ada50aa424b2a28e9fcda6fb705fef7095b 100644
--- a/src/libdap-app-cli-python.c
+++ b/src/libdap-app-cli-python.c
@@ -12,28 +12,32 @@
 PyObject* dap_app_cli_main_py(PyObject *self, PyObject *args)
 {
     (void) self;
-    char *l_app_name = NULL;
+    char *l_app_name    = NULL;
     char *l_socket_path = NULL;
-    int l_argc = 0;
-    char ** l_argv = NULL;
-    PyObject* l_args_py = NULL;
-    if (!PyArg_ParseTuple(args, "ssO", &l_app_name,&l_socket_path, &l_args_py))
-            return NULL;
+    int l_argc          = 0;
+    char **l_argv       = NULL;
+    PyObject *l_argv_py = NULL;
 
-    Py_ssize_t l_args_py_size = PyList_Size(l_args_py);
-    if (l_args_py_size > 1){
-        l_argc = (int)l_args_py_size;
-        l_argv = DAP_NEW_SIZE(char*, l_argc);
-        PyObject *l_obj_from_list = NULL;
-        for (int i = 0; i < l_argc; i++){
-            l_obj_from_list = PyList_GetItem(l_args_py, i);
-            if (PyUnicode_Check(l_obj_from_list)){
-                l_argv[i] = (char*)PyUnicode_AsUTF8(PyList_GetItem(l_args_py, i));
-            }
-            Py_XDECREF(l_obj_from_list);
+    PyObject *l_from_list_obj   = NULL;
+    PyObject *l_value_obj       = NULL;
+    if (!PyArg_ParseTuple(args, "ssO", &l_app_name, &l_socket_path, & l_argv_py))
+        return NULL;
+    Py_ssize_t l_argv_size_py = PyList_Size(l_argv_py);
+    l_argc = (int)l_argv_size_py;
+    if (l_argv_size_py > 1){
+        l_argv = PyMem_Calloc((size_t)l_argv_size_py, sizeof(char**));
+        for (Py_ssize_t i=0; i < l_argv_size_py; i++){
+            l_from_list_obj = PyList_GetItem(l_argv_py, i);
+            l_value_obj = PyList_GetItem(l_argv_py, i);
+            l_argv[i] = dap_strdup(PyUnicode_AsUTF8(l_value_obj));
         }
-        return PyLong_FromLong((long)dap_app_cli_main(l_app_name, l_socket_path, l_argc, l_argv));
-        DAP_FREE(l_argv);
-    }else
+        int res = dap_app_cli_main(l_app_name, l_socket_path, l_argc, l_argv);
+        for (Py_ssize_t i=0; i < l_argv_size_py; i++){
+            DAP_FREE(l_argv[i]);
+        }
+        PyMem_Free(l_argv);
+        return PyLong_FromLong(res);
+    }
+    else
         return PyLong_FromLong(-1024);
 }