diff --git a/src/lib66/exec/ssexec_remove.c b/src/lib66/exec/ssexec_remove.c
index a359aac11ab98106d088eb20ed89efe4f88a2d70..d84de2cebf24b4d55b7156ca1286c1ad4ff897d4 100644
--- a/src/lib66/exec/ssexec_remove.c
+++ b/src/lib66/exec/ssexec_remove.c
@@ -58,7 +58,7 @@ static void remove_deps(resolve_service_t *res, resolve_service_t *ares, unsigne
     resolve_wrapper_t_ref wres = 0 ;
     _init_stack_(stk, strlen(res->sa.s + res->dependencies.requiredby)) ;
 
-    if (!stack_convert_string_g(&stk, res->sa.s + res->dependencies.requiredby))
+    if (!stack_clean_string_g(&stk, res->sa.s + res->dependencies.requiredby))
         log_dieu(LOG_EXIT_SYS, "convert string") ;
 
     FOREACH_STK(&stk, pos) {
@@ -276,7 +276,7 @@ int ssexec_remove(int argc, char const *const *argv, ssexec_t *info)
                 resolve_wrapper_t_ref mwres = resolve_set_struct(DATA_SERVICE, &mres) ;
                 _init_stack_(stk, strlen(ares[pos].sa.s + ares[pos].dependencies.contents)) ;
 
-                if (!stack_convert_string_g(&stk, ares[pos].sa.s + ares[pos].dependencies.contents))
+                if (!stack_clean_string_g(&stk, c->res.sa.s + c->res.dependencies.contents))
                     log_dieu(LOG_EXIT_SYS, "convert string") ;
 
                 FOREACH_STK(&stk, pos) {
diff --git a/src/lib66/parse/parse_db_migrate.c b/src/lib66/parse/parse_db_migrate.c
index a505c8d2c2eef40517e3b850c08f88044d1457a4..a38b686fd626414b069ff8e2086c395ee265d98e 100644
--- a/src/lib66/parse/parse_db_migrate.c
+++ b/src/lib66/parse/parse_db_migrate.c
@@ -37,14 +37,14 @@ static void service_db_tree(resolve_service_t *old, resolve_service_t *new, ssex
     {
         _init_stack_(sold, olen + 1) ;
 
-        if (!stack_convert_string_g(&sold, ocontents))
+        if (!stack_clean_string_g(&sold, ocontents))
             log_dieusys(LOG_EXIT_SYS, "convert string") ;
 
         {
             size_t nlen = strlen(ncontents) ;
             _init_stack_(snew, nlen + 1) ;
 
-            if (!stack_convert_string_g(&snew, ncontents))
+            if (!stack_clean_string_g(&snew, ncontents))
                 log_dieusys(LOG_EXIT_SYS, "convert string") ;
 
             FOREACH_STK(&sold, pos) {
diff --git a/src/lib66/parse/parse_rename_interdependences.c b/src/lib66/parse/parse_rename_interdependences.c
index f5ae12b206a32b864bf0ddbde7707259fde68c90..a150b8cedbf986c975a243378988710c60353d51 100644
--- a/src/lib66/parse/parse_rename_interdependences.c
+++ b/src/lib66/parse/parse_rename_interdependences.c
@@ -73,7 +73,7 @@ static void parse_prefix_name(unsigned int idx, resolve_service_t *ares, unsigne
         size_t depslen = strlen(ares[idx].sa.s + ares[idx].dependencies.depends) ;
         _init_stack_(stk, depslen + 1) ;
 
-        if (!stack_convert_string(&stk, ares[idx].sa.s + ares[idx].dependencies.depends, depslen))
+        if (!stack_clean_string(&stk, res->sa.s + res->dependencies.depends, depslen))
             log_dieusys(LOG_EXIT_SYS, "convert string to stack") ;
 
         size_t len = (mlen + 1 + SS_MAX_TREENAME + 2) * ares[idx].dependencies.ndepends ;
@@ -92,7 +92,7 @@ static void parse_prefix_name(unsigned int idx, resolve_service_t *ares, unsigne
         size_t depslen = strlen(ares[idx].sa.s + ares[idx].dependencies.requiredby) ;
         _init_stack_(stk, depslen + 1) ;
 
-        if (!stack_convert_string(&stk, ares[idx].sa.s + ares[idx].dependencies.requiredby, depslen))
+        if (!stack_clean_string(&stk, res->sa.s + res->dependencies.requiredby, depslen))
             log_dieusys(LOG_EXIT_SYS, "convert string to stack") ;
 
         size_t len = (mlen + 1 + SS_MAX_TREENAME + 2) * ares[idx].dependencies.nrequiredby ;
@@ -153,4 +153,4 @@ void parse_rename_interdependences(resolve_service_t *res, char const *prefix, r
     stralloc_free(&sa) ;
     free(wres) ;
     free(awres) ;
-}
\ No newline at end of file
+}
diff --git a/src/lib66/service/service_db_migrate.c b/src/lib66/service/service_db_migrate.c
index b8dec605593286562f952b1aff6fd3cd4c989e3a..73b5d2270605d39ddac751c968372c4ea2f7f829 100644
--- a/src/lib66/service/service_db_migrate.c
+++ b/src/lib66/service/service_db_migrate.c
@@ -35,7 +35,7 @@ void service_db_migrate(resolve_service_t *old, resolve_service_t *new, char con
         size_t pos = 0, olen = strlen(old->sa.s + *ofield) ;
         _init_stack_(sold, olen + 1) ;
 
-        if (!stack_convert_string(&sold, old->sa.s + *ofield, olen))
+        if (!stack_clean_string(&sold, old->sa.s + *ofield, olen))
             log_dieusys(LOG_EXIT_SYS, "convert string") ;
 
         {
@@ -47,7 +47,7 @@ void service_db_migrate(resolve_service_t *old, resolve_service_t *new, char con
 
             /** new module configuration depends field may be empty.*/
             if (clen)
-                if (!stack_convert_string(&snew, new->sa.s + *nfield, clen))
+                if (!stack_clean_string(&snew, new->sa.s + *nfield, clen))
                     log_dieusys(LOG_EXIT_SYS, "convert string") ;
 
             /** check if the service was deactivated.*/
@@ -72,7 +72,7 @@ void service_db_migrate(resolve_service_t *old, resolve_service_t *new, char con
                         size_t len = strlen(dres.sa.s + *dfield) ;
                         _init_stack_(stk, len + 1) ;
 
-                        if (!stack_convert_string(&stk, dres.sa.s + *dfield, len))
+                        if (!stack_clean_string(&stk, dres.sa.s + *dfield, len))
                             log_dieusys(LOG_EXIT_SYS, "convert string to stack") ;
 
                         /** remove the module name to the depends field of the old service dependency*/
diff --git a/src/lib66/service/service_enable_disable.c b/src/lib66/service/service_enable_disable.c
index 578692e84e61497effbda073e0eaaa1c11d3de7a..94ab869558a8d267b43a9ed1a7a3a87ee49d01f6 100644
--- a/src/lib66/service/service_enable_disable.c
+++ b/src/lib66/service/service_enable_disable.c
@@ -113,14 +113,14 @@ void service_enable_disable(graph_t *g, unsigned int idx, resolve_service_t *are
             if (res->dependencies.ncontents) {
 
                 size_t pos = 0 ;
-                stralloc sa = STRALLOC_ZERO ;
+                _init_stack_(stk, strlen(res->sa.s + res->dependencies.contents)) ;
 
-                if (!sastr_clean_string(&sa, res->sa.s + res->dependencies.contents))
+                if (!stack_clean_string_g(&stk, res->sa.s + res->dependencies.contents))
                     log_dieu(LOG_EXIT_SYS, "clean string") ;
 
-                FOREACH_SASTR(&sa, pos) {
+                FOREACH_STK(&stk, pos) {
 
-                    char *name = sa.s + pos ;
+                    char *name = stk.s + pos ;
                     int aresid = service_resolve_array_search(ares, areslen, name) ;
                     if (aresid < 0)
                         log_die(LOG_EXIT_USER, "service: ", name, " not available -- did you parse it?") ;
@@ -145,8 +145,6 @@ void service_enable_disable(graph_t *g, unsigned int idx, resolve_service_t *are
                         log_info(!action ? "Disabled" : "Enabled"," successfully service: ", ares[aresid].sa.s + ares[aresid].name) ;
                     }
                 }
-
-                stralloc_free(&sa) ;
             }
         }
 
diff --git a/src/lib66/service/service_graph_build.c b/src/lib66/service/service_graph_build.c
index 1630b9ab033311d574a10095b8f453207186bb94..09f2dc0ecec6ae9566e8ea52ef349deccc71602b 100644
--- a/src/lib66/service/service_graph_build.c
+++ b/src/lib66/service/service_graph_build.c
@@ -32,7 +32,7 @@ static void issupervised(char *store, resolve_service_t *ares, unsigned int ares
     _init_stack_(stk, len) ;
     memset(store, 0, len * sizeof(char)) ;
 
-    if (!stack_convert_string(&stk, str, len))
+    if (!stack_clean_string(&stk, str, len))
         log_dieu(LOG_EXIT_SYS, "clean string") ;
 
     FOREACH_STK(&stk, pos) {
diff --git a/src/lib66/service/service_graph_collect.c b/src/lib66/service/service_graph_collect.c
index d976a4191eaa73114309a8af1bd4ec8dcbe5f58e..b885e84c0db986730ca714bf2ee4a431e7cde670 100644
--- a/src/lib66/service/service_graph_collect.c
+++ b/src/lib66/service/service_graph_collect.c
@@ -128,7 +128,8 @@ void service_graph_collect(graph_t *g, char const *slist, size_t slen, resolve_s
 
                     size_t len = strlen(res.sa.s + res.dependencies.depends) ;
                     _init_stack_(stk, len + 1) ;
-                    if (!stack_convert_string(&stk, res.sa.s + res.dependencies.depends, len))
+
+                    if (!stack_clean_string(&stk, res.sa.s + res.dependencies.depends, len))
                         log_dieusys(LOG_EXIT_SYS, "clean string") ;
 
                     service_graph_collect(g, stk.s, stk.len, ares, areslen, info, flag) ;
@@ -139,7 +140,8 @@ void service_graph_collect(graph_t *g, char const *slist, size_t slen, resolve_s
 
                     size_t len = strlen(res.sa.s + res.dependencies.requiredby) ;
                     _init_stack_(stk, len + 1) ;
-                    if (!stack_convert_string(&stk, res.sa.s + res.dependencies.requiredby, len))
+
+                    if (!stack_clean_string(&stk, res.sa.s + res.dependencies.requiredby, len))
                         log_dieusys(LOG_EXIT_SYS, "clean string") ;
 
                     service_graph_collect(g, stk.s, stk.len, ares, areslen, info, flag) ;
diff --git a/src/lib66/svc/svc_compute_ns.c b/src/lib66/svc/svc_compute_ns.c
index f4b4a22cd936a7e719f6b59d92bcafd75cddc7e6..266d3e3cfff8c3bd2022ff3609e713486f7012fe 100644
--- a/src/lib66/svc/svc_compute_ns.c
+++ b/src/lib66/svc/svc_compute_ns.c
@@ -58,7 +58,7 @@ int svc_compute_ns(resolve_service_t *sares, unsigned int sareslen, unsigned int
 
     if (sares[saresid].dependencies.ncontents) {
 
-        if (!stack_convert_string_g(&stk, sares[saresid].sa.s + sares[saresid].dependencies.contents))
+        if (!stack_clean_string_g(&stk, res->sa.s + res->dependencies.contents))
             log_dieu(LOG_EXIT_SYS, "clean string") ;
 
     } else {
diff --git a/src/lib66/svc/svc_unsupervise.c b/src/lib66/svc/svc_unsupervise.c
index 64896514bf79c7ae2145d3b111abc26388aaa51e..9533ae1ae64a2eed3cb201accd3572c94ba7ecfa 100644
--- a/src/lib66/svc/svc_unsupervise.c
+++ b/src/lib66/svc/svc_unsupervise.c
@@ -13,7 +13,7 @@
  */
 
 #include <oblibs/log.h>
-#include <oblibs/sastr.h>
+#include <oblibs/stack.h>
 
 #include <66/state.h>
 #include <66/sanitize.h>
@@ -75,10 +75,12 @@ void svc_unsupervise(unsigned int *alist, unsigned int alen, graph_t *g, resolve
 
             sa.len = 0, bpos = 0 ;
 
-            if (!sastr_clean_string(&sa, ares[aresid].sa.s + ares[aresid].dependencies.contents))
+            _init_stack_(stk, strlen(hash->res.sa.s + hash->res.dependencies.contents)) ;
+
+            if (!stack_clean_string_g(&stk, hash->res.sa.s + hash->res.dependencies.contents))
                 log_dieusys(LOG_EXIT_SYS, "clean string") ;
 
-            FOREACH_SASTR(&sa, bpos) {
+            FOREACH_STK(&stk, bpos) {
 
                 int aresid = service_resolve_array_search(ares, areslen, sa.s + bpos) ;
                 if (aresid < 0)
diff --git a/src/lib66/tree/tree_service_add.c b/src/lib66/tree/tree_service_add.c
index d8293209507da8a05318a97b9951a740e4bb4eae..5afb1b83ff8a4c72e1291c3c2cb675b14da32760 100644
--- a/src/lib66/tree/tree_service_add.c
+++ b/src/lib66/tree/tree_service_add.c
@@ -52,7 +52,7 @@ void tree_service_add(char const *treename, char const *service, ssexec_t *info)
 
     if (tres.ncontents) {
 
-        if (!stack_convert_string(&stk, tres.sa.s + tres.contents, strlen(tres.sa.s + tres.contents)))
+        if (!stack_clean_string_g(&stk, tres.sa.s + tres.contents))
             log_dieusys(LOG_EXIT_SYS, "convert string to stack") ;
 
         if (stack_retrieve_element(&stk, service) < 0)
@@ -78,7 +78,7 @@ void tree_service_add(char const *treename, char const *service, ssexec_t *info)
         log_dieu(LOG_EXIT_SYS, "convert stack to string") ;
 
     if (!resolve_modify_field(wres, E_RESOLVE_TREE_CONTENTS, stk.s))
-        log_dieusys(LOG_EXIT_SYS, "modify resolve file of: ", treename) ;
+        log_dieusys(LOG_EXIT_SYS, "modify resolve file of tree: ", treename) ;
 
     if (!resolve_write_g(wres, info->base.s, treename))
         log_dieusys(LOG_EXIT_SYS, "write resolve file of tree: ", treename) ;
diff --git a/src/lib66/tree/tree_service_remove.c b/src/lib66/tree/tree_service_remove.c
index fd31801fee3a8ad0bf521738a921653ead5b1dfe..209f4b1bc8f974d65d1eafa23eb6962e4873393b 100644
--- a/src/lib66/tree/tree_service_remove.c
+++ b/src/lib66/tree/tree_service_remove.c
@@ -34,7 +34,7 @@ void tree_service_remove(char const *base, char const *treename, char const *ser
         size_t clen = strlen(tres.sa.s + tres.contents) ;
         _init_stack_(stk, clen + 1) ;
 
-        if (!stack_convert_string(&stk, tres.sa.s + tres.contents, clen))
+        if (!stack_clean_string(&stk, tres.sa.s + tres.contents, clen))
             log_dieusys(LOG_EXIT_SYS, "convert string to stack") ;
 
         if (!stack_remove_element_g(&stk, service))