diff --git a/src/lib66/parse/deps-lib/deps b/src/lib66/parse/deps-lib/deps
index d802130c9d84ab86857c4abbd1788e37f7c0f525..0313af57d79c8f2a9d1c3a112f57a061cabbdfdd 100644
--- a/src/lib66/parse/deps-lib/deps
+++ b/src/lib66/parse/deps-lib/deps
@@ -3,6 +3,7 @@ parse_clean_list.o
 parse_clean_quotes.o
 parse_clean_runas.o
 parse_compute_list.o
+parse_compute_resolve.o
 parse_contents.o
 parse_dependencies.o
 parse_error.o
diff --git a/src/lib66/parse/parse_compute_list.c b/src/lib66/parse/parse_compute_list.c
index b85f0a1dd83a01f09d7968aefe47eb8a58b500ce..ad6c21575e3427efb672f7161dfcb2eb6c073cd0 100644
--- a/src/lib66/parse/parse_compute_list.c
+++ b/src/lib66/parse/parse_compute_list.c
@@ -27,14 +27,15 @@
 #include <66/service.h>
 
 /**
- * @opts -> 1 : build list of optional deps
+ * @opts -> 1 : build list removing commented optional deps
  * */
 int parse_compute_list(resolve_wrapper_t_ref wres, stralloc *sa, uint32_t *res, uint8_t opts)
 {
     int r, found = 0 ;
     size_t len = sa->len, pos = 0 ;
-    char t[len + 1] ;
-    char f[len + 1] ;
+    size_t nelement = sastr_nelement(sa) ;
+    char t[len + nelement + 2] ;
+    char f[len + nelement + 2] ;
 
     memset(f, 0, len) ;
     memset(t, 0, len) ;
diff --git a/src/lib66/parse/parse_dependencies.c b/src/lib66/parse/parse_dependencies.c
index 84265424f72a78d50309cec12dda946233a43eb9..df4740fab5e75889935655a9473dc3eda67df0b2 100644
--- a/src/lib66/parse/parse_dependencies.c
+++ b/src/lib66/parse/parse_dependencies.c
@@ -44,7 +44,7 @@ int parse_dependencies(resolve_service_t *res, resolve_service_t *ares, unsigned
             goto freed ;
         }
 
-        char t[sa.len] ;
+        char t[sa.len + 1] ;
 
         sastr_to_char(t, &sa) ;
 
@@ -53,8 +53,8 @@ int parse_dependencies(resolve_service_t *res, resolve_service_t *ares, unsigned
         for (; pos < len ; pos += strlen(t + pos) + 1) {
 
             sa.len = 0 ;
-            char name[strlen(t + pos)] ;
-            char ainsta[strlen(t + pos)] ;
+            char name[strlen(t + pos) + 1] ;
+            char ainsta[strlen(t + pos) + 1] ;
             int insta = -1 ;
 
             log_trace("parse dependencies: ", t + pos, " of service: ", res->sa.s + res->name) ;
diff --git a/src/lib66/parse/parse_split_from_section.c b/src/lib66/parse/parse_split_from_section.c
index f1ac67b6993ad3904278ff017ee85ee4e06846eb..18c5b34ccccc61ddab27afd78e48ce3832625eb5 100644
--- a/src/lib66/parse/parse_split_from_section.c
+++ b/src/lib66/parse/parse_split_from_section.c
@@ -21,6 +21,7 @@
 #include <oblibs/mill.h>
 
 #include <skalibs/stralloc.h>
+#include <skalibs/types.h> //UINT_FMT
 
 #include <66/parser.h>
 #include <66/resolve.h>
@@ -44,7 +45,7 @@ int parse_split_from_section(resolve_service_t *res, stralloc *secname, char *st
 {
     log_flow() ;
 
-    int e = 0, r = 0, found = 0, skip = 0 ;
+    int e = 0, r = 0, found = 0 ;
 
     key_all_t const *list = total_list ;
     stralloc sakey = STRALLOC_ZERO ;
@@ -52,7 +53,7 @@ int parse_split_from_section(resolve_service_t *res, stralloc *secname, char *st
     // cpos -> current, ipos -> idx pos, tpos -> temporary pos, end -> end the parse process
     size_t len = strlen(str), cpos = 0, ipos = 0, tpos = 0, end = 0 ;
     char tline[len + 1] ;
-    char store[len + 1] ;
+    char store[len + UINT_FMT + 1] ; // +6 be paranoid
     char *line ;
 
     // find the name of the current section
@@ -85,7 +86,6 @@ int parse_split_from_section(resolve_service_t *res, stralloc *secname, char *st
 
     while(cpos < len) {
 
-        skip = 0 ;
         ipos = 0 ;
         tpos = 0 ;
         end = 0 ;
diff --git a/src/lib66/parse/parse_store_environ.c b/src/lib66/parse/parse_store_environ.c
index 2f4d644faf9948ef2138084732a5319c8f456ed0..588b4c49b16a43be19d819c1a37a199936bf755a 100644
--- a/src/lib66/parse/parse_store_environ.c
+++ b/src/lib66/parse/parse_store_environ.c
@@ -25,8 +25,6 @@
 #include <66/utils.h>
 #include <66/environ.h>
 
-#include <stdio.h>
-
 int parse_store_environ(resolve_service_t *res, char *store, int idsec, int idkey)
 {
     int e = 0 ;
diff --git a/src/lib66/parse/parse_store_logger.c b/src/lib66/parse/parse_store_logger.c
index 9dad2be5d8db592e815c14267d103b5b2be27138..3a4449722a23c89123ee516f3fbc1a4770e23f02 100644
--- a/src/lib66/parse/parse_store_logger.c
+++ b/src/lib66/parse/parse_store_logger.c
@@ -47,6 +47,8 @@ int parse_store_logger(resolve_service_t *res, char *store, int idsec, int idkey
 
         case KEY_LOGGER_SHEBANG:
 
+             log_1_warn("deprecated key @shebang -- define your complete shebang directly inside your @execute key field") ;
+
             if (!parse_store_start_stop(res, store, idsec, KEY_STARTSTOP_SHEBANG))
                 goto err ;
 
@@ -97,6 +99,9 @@ int parse_store_logger(resolve_service_t *res, char *store, int idsec, int idkey
             if (!uint320_scan(store, &res->logger.maxsize))
                 parse_error_return(0, 3, idsec, idkey) ;
 
+            if (res->logger.maxsize < 4096 || res->logger.maxsize > 268435455)
+                parse_error_return(0, 0, idsec, idkey) ;
+
             break ;
 
         case KEY_LOGGER_TIMESTP:
diff --git a/src/lib66/parse/parse_store_main.c b/src/lib66/parse/parse_store_main.c
index 29331239ae8def71230140b9eaf0edc249974570..075d794becbd2d38cac59fa4559977db7f0d7961 100644
--- a/src/lib66/parse/parse_store_main.c
+++ b/src/lib66/parse/parse_store_main.c
@@ -73,6 +73,10 @@ int parse_store_main(resolve_service_t *res, char *store, int idsec, int idkey)
 
         case KEY_MAIN_TYPE:
 
+            if (res->name)
+                /** already passed through here */
+                break ;
+
             if (!parse_clean_line(store))
                 parse_error_return(0, 8, idsec, idkey) ;
 
@@ -108,6 +112,9 @@ int parse_store_main(resolve_service_t *res, char *store, int idsec, int idkey)
             if (!uint320_scan(store, &res->maxdeath))
                 parse_error_return(0, 3, idsec, idkey) ;
 
+            if (res->maxdeath > 4096)
+                parse_error_return(0, 0, idsec, idkey) ;
+
             break ;
 
         case KEY_MAIN_FLAGS:
@@ -278,6 +285,12 @@ int parse_store_main(resolve_service_t *res, char *store, int idsec, int idkey)
 
                     if (pos == (size_t)p) {
 
+                        if (!owner)
+                            /** avoid field e.g root root where originaly
+                             * we want e.g. user root. The term user will be
+                             * root at getpwuid() call */
+                            continue ;
+
                         struct passwd *pw = getpwuid(owner);
                         if (!pw) {