diff --git a/package/deps.mak b/package/deps.mak
index 9f74043058df541331b232bf23301c09b271c95d..57133d1f1608928995315d9067a5e6df7613d161 100644
--- a/package/deps.mak
+++ b/package/deps.mak
@@ -16,28 +16,15 @@ src/include/66/svc.h: src/include/66/graph.h src/include/66/service.h src/includ
 src/include/66/tree.h: src/include/66/resolve.h src/include/66/ssexec.h
 src/include/66/utils.h: src/include/66/service.h src/include/66/ssexec.h
 src/include/66/write.h: src/include/66/service.h
-src/66/66-all.o src/66/66-all.lo: src/66/66-all.c src/include/66/ssexec.h
 src/66/66-boot.o src/66/66-boot.lo: src/66/66-boot.c src/include/66/config.h src/include/66/constants.h
-src/66/66-disable.o src/66/66-disable.lo: src/66/66-disable.c src/include/66/ssexec.h
-src/66/66-enable.o src/66/66-enable.lo: src/66/66-enable.c src/include/66/ssexec.h
-src/66/66-env.o src/66/66-env.lo: src/66/66-env.c src/include/66/ssexec.h
+src/66/66.o src/66/66.lo: src/66/66.c src/include/66/sanitize.h src/include/66/ssexec.h src/include/66/tree.h src/include/66/utils.h
 src/66/66-fdholder-filler.o src/66/66-fdholder-filler.lo: src/66/66-fdholder-filler.c src/include/66/constants.h
 src/66/66-hpr.o src/66/66-hpr.lo: src/66/66-hpr.c src/include/66/config.h src/include/66/hpr.h
-src/66/66-init.o src/66/66-init.lo: src/66/66-init.c src/include/66/ssexec.h
-src/66/66-inresolve.o src/66/66-inresolve.lo: src/66/66-inresolve.c src/include/66/config.h src/include/66/constants.h src/include/66/info.h src/include/66/resolve.h src/include/66/service.h src/include/66/state.h src/include/66/tree.h src/include/66/utils.h
-src/66/66-inservice.o src/66/66-inservice.lo: src/66/66-inservice.c src/include/66/config.h src/include/66/constants.h src/include/66/enum.h src/include/66/environ.h src/include/66/graph.h src/include/66/info.h src/include/66/resolve.h src/include/66/service.h src/include/66/state.h src/include/66/tree.h src/include/66/utils.h
-src/66/66-instate.o src/66/66-instate.lo: src/66/66-instate.c src/include/66/config.h src/include/66/constants.h src/include/66/info.h src/include/66/resolve.h src/include/66/state.h src/include/66/utils.h
-src/66/66-intree.o src/66/66-intree.lo: src/66/66-intree.c src/include/66/constants.h src/include/66/enum.h src/include/66/graph.h src/include/66/info.h src/include/66/resolve.h src/include/66/service.h src/include/66/tree.h src/include/66/utils.h
 src/66/66-oneshot.o src/66/66-oneshot.lo: src/66/66-oneshot.c src/include/66/constants.h src/include/66/resolve.h src/include/66/service.h
-src/66/66-parse.o src/66/66-parse.lo: src/66/66-parse.c src/include/66/ssexec.h
 src/66/66-scanctl.o src/66/66-scanctl.lo: src/66/66-scanctl.c src/include/66/svc.h src/include/66/utils.h
 src/66/66-scandir.o src/66/66-scandir.lo: src/66/66-scandir.c src/include/66/config.h src/include/66/constants.h src/include/66/enum.h src/include/66/svc.h src/include/66/utils.h
 src/66/66-shutdown.o src/66/66-shutdown.lo: src/66/66-shutdown.c src/include/66/config.h src/include/66/hpr.h
 src/66/66-shutdownd.o src/66/66-shutdownd.lo: src/66/66-shutdownd.c src/include/66/config.h src/include/66/constants.h
-src/66/66-start.o src/66/66-start.lo: src/66/66-start.c src/include/66/ssexec.h
-src/66/66-stop.o src/66/66-stop.lo: src/66/66-stop.c src/include/66/ssexec.h
-src/66/66-svctl.o src/66/66-svctl.lo: src/66/66-svctl.c src/include/66/ssexec.h
-src/66/66-tree.o src/66/66-tree.lo: src/66/66-tree.c src/include/66/ssexec.h
 src/extra-tools/66-echo.o src/extra-tools/66-echo.lo: src/extra-tools/66-echo.c
 src/extra-tools/66-nuke.o src/extra-tools/66-nuke.lo: src/extra-tools/66-nuke.c
 src/extra-tools/66-umountall.o src/extra-tools/66-umountall.lo: src/extra-tools/66-umountall.c src/include/66/config.h
@@ -53,22 +40,30 @@ src/lib66/environ/env_make_symlink.o src/lib66/environ/env_make_symlink.lo: src/
 src/lib66/environ/env_prepare_for_write.o src/lib66/environ/env_prepare_for_write.lo: src/lib66/environ/env_prepare_for_write.c src/include/66/constants.h src/include/66/environ.h src/include/66/parser.h src/include/66/service.h
 src/lib66/environ/env_resolve_conf.o src/lib66/environ/env_resolve_conf.lo: src/lib66/environ/env_resolve_conf.c src/include/66/constants.h src/include/66/environ.h src/include/66/utils.h
 src/lib66/exec/ssexec_all.o src/lib66/exec/ssexec_all.lo: src/lib66/exec/ssexec_all.c src/include/66/constants.h src/include/66/graph.h src/include/66/ssexec.h src/include/66/svc.h src/include/66/tree.h src/include/66/utils.h
+src/lib66/exec/ssexec_boot.o src/lib66/exec/ssexec_boot.lo: src/lib66/exec/ssexec_boot.c src/include/66/config.h src/include/66/constants.h
 src/lib66/exec/ssexec_disable.o src/lib66/exec/ssexec_disable.lo: src/lib66/exec/ssexec_disable.c src/include/66/constants.h src/include/66/graph.h src/include/66/resolve.h src/include/66/service.h src/include/66/state.h src/include/66/svc.h src/include/66/tree.h src/include/66/utils.h
 src/lib66/exec/ssexec_enable.o src/lib66/exec/ssexec_enable.lo: src/lib66/exec/ssexec_enable.c src/include/66/constants.h src/include/66/environ.h src/include/66/parser.h src/include/66/resolve.h src/include/66/service.h src/include/66/ssexec.h src/include/66/svc.h src/include/66/tree.h src/include/66/utils.h
 src/lib66/exec/ssexec_env.o src/lib66/exec/ssexec_env.lo: src/lib66/exec/ssexec_env.c src/include/66/config.h src/include/66/constants.h src/include/66/environ.h src/include/66/resolve.h src/include/66/ssexec.h src/include/66/state.h src/include/66/utils.h src/include/66/write.h
 src/lib66/exec/ssexec_free.o src/lib66/exec/ssexec_free.lo: src/lib66/exec/ssexec_free.c src/include/66/ssexec.h
 src/lib66/exec/ssexec_help.o src/lib66/exec/ssexec_help.lo: src/lib66/exec/ssexec_help.c src/include/66/ssexec.h
-src/lib66/exec/ssexec_init.o src/lib66/exec/ssexec_init.lo: src/lib66/exec/ssexec_init.c src/include/66/constants.h src/include/66/resolve.h src/include/66/sanitize.h src/include/66/ssexec.h src/include/66/state.h src/include/66/svc.h src/include/66/tree.h src/include/66/utils.h
+src/lib66/exec/ssexec_init.o src/lib66/exec/ssexec_init.lo: src/lib66/exec/ssexec_init.c src/include/66/config.h src/include/66/constants.h src/include/66/graph.h src/include/66/sanitize.h src/include/66/service.h src/include/66/ssexec.h src/include/66/state.h src/include/66/svc.h src/include/66/tree.h
+src/lib66/exec/ssexec_inresolve.o src/lib66/exec/ssexec_inresolve.lo: src/lib66/exec/ssexec_inresolve.c src/include/66/config.h src/include/66/constants.h src/include/66/info.h src/include/66/resolve.h src/include/66/service.h src/include/66/ssexec.h src/include/66/state.h src/include/66/tree.h src/include/66/utils.h
+src/lib66/exec/ssexec_inservice.o src/lib66/exec/ssexec_inservice.lo: src/lib66/exec/ssexec_inservice.c src/include/66/config.h src/include/66/constants.h src/include/66/enum.h src/include/66/environ.h src/include/66/graph.h src/include/66/info.h src/include/66/resolve.h src/include/66/service.h src/include/66/ssexec.h src/include/66/state.h src/include/66/tree.h src/include/66/utils.h
+src/lib66/exec/ssexec_instate.o src/lib66/exec/ssexec_instate.lo: src/lib66/exec/ssexec_instate.c src/include/66/config.h src/include/66/constants.h src/include/66/info.h src/include/66/resolve.h src/include/66/ssexec.h src/include/66/state.h src/include/66/utils.h
+src/lib66/exec/ssexec_intree.o src/lib66/exec/ssexec_intree.lo: src/lib66/exec/ssexec_intree.c src/include/66/constants.h src/include/66/enum.h src/include/66/graph.h src/include/66/info.h src/include/66/resolve.h src/include/66/service.h src/include/66/ssexec.h src/include/66/tree.h src/include/66/utils.h
 src/lib66/exec/ssexec_main.o src/lib66/exec/ssexec_main.lo: src/lib66/exec/ssexec_main.c src/include/66/constants.h src/include/66/ssexec.h src/include/66/tree.h src/include/66/utils.h
 src/lib66/exec/ssexec_parse.o src/lib66/exec/ssexec_parse.lo: src/lib66/exec/ssexec_parse.c src/include/66/parser.h src/include/66/ssexec.h src/include/66/utils.h
+src/lib66/exec/ssexec_reconfigure.o src/lib66/exec/ssexec_reconfigure.lo: src/lib66/exec/ssexec_reconfigure.c src/include/66/config.h src/include/66/graph.h src/include/66/sanitize.h src/include/66/service.h src/include/66/ssexec.h src/include/66/state.h src/include/66/svc.h
+src/lib66/exec/ssexec_reload.o src/lib66/exec/ssexec_reload.lo: src/lib66/exec/ssexec_reload.c src/include/66/config.h src/include/66/graph.h src/include/66/sanitize.h src/include/66/service.h src/include/66/ssexec.h src/include/66/state.h src/include/66/svc.h
+src/lib66/exec/ssexec_restart.o src/lib66/exec/ssexec_restart.lo: src/lib66/exec/ssexec_restart.c src/include/66/config.h src/include/66/graph.h src/include/66/sanitize.h src/include/66/service.h src/include/66/ssexec.h src/include/66/state.h src/include/66/svc.h
 src/lib66/exec/ssexec_start.o src/lib66/exec/ssexec_start.lo: src/lib66/exec/ssexec_start.c src/include/66/config.h src/include/66/graph.h src/include/66/sanitize.h src/include/66/service.h src/include/66/ssexec.h src/include/66/state.h src/include/66/svc.h
-src/lib66/exec/ssexec_stop.o src/lib66/exec/ssexec_stop.lo: src/lib66/exec/ssexec_stop.c src/include/66/constants.h src/include/66/graph.h src/include/66/resolve.h src/include/66/service.h src/include/66/ssexec.h src/include/66/state.h src/include/66/svc.h src/include/66/utils.h
+src/lib66/exec/ssexec_stop.o src/lib66/exec/ssexec_stop.lo: src/lib66/exec/ssexec_stop.c src/include/66/config.h src/include/66/graph.h src/include/66/service.h src/include/66/ssexec.h src/include/66/state.h src/include/66/svc.h
 src/lib66/exec/ssexec_svctl.o src/lib66/exec/ssexec_svctl.lo: src/lib66/exec/ssexec_svctl.c src/include/66/constants.h src/include/66/enum.h src/include/66/graph.h src/include/66/resolve.h src/include/66/service.h src/include/66/ssexec.h src/include/66/state.h src/include/66/svc.h src/include/66/utils.h
 src/lib66/exec/ssexec_tree.o src/lib66/exec/ssexec_tree.lo: src/lib66/exec/ssexec_tree.c src/include/66/config.h src/include/66/constants.h src/include/66/enum.h src/include/66/graph.h src/include/66/resolve.h src/include/66/sanitize.h src/include/66/service.h src/include/66/state.h src/include/66/tree.h src/include/66/utils.h
 src/lib66/graph/graph_build_g.o src/lib66/graph/graph_build_g.lo: src/lib66/graph/graph_build_g.c src/include/66/graph.h src/include/66/resolve.h src/include/66/service.h src/include/66/ssexec.h
-src/lib66/graph/graph_build_service.o src/lib66/graph/graph_build_service.lo: src/lib66/graph/graph_build_service.c src/include/66/constants.h src/include/66/graph.h src/include/66/service.h src/include/66/state.h
 src/lib66/graph/graph_build_service_bytree.o src/lib66/graph/graph_build_service_bytree.lo: src/lib66/graph/graph_build_service_bytree.c src/include/66/constants.h src/include/66/enum.h src/include/66/graph.h src/include/66/resolve.h src/include/66/service.h src/include/66/state.h
 src/lib66/graph/graph_build_service_bytree_from_src.o src/lib66/graph/graph_build_service_bytree_from_src.lo: src/lib66/graph/graph_build_service_bytree_from_src.c src/include/66/constants.h src/include/66/enum.h src/include/66/graph.h src/include/66/resolve.h src/include/66/service.h
+src/lib66/graph/graph_build_service.o src/lib66/graph/graph_build_service.lo: src/lib66/graph/graph_build_service.c src/include/66/constants.h src/include/66/graph.h src/include/66/service.h src/include/66/state.h
 src/lib66/graph/graph_build_service_from_list.o src/lib66/graph/graph_build_service_from_list.lo: src/lib66/graph/graph_build_service_from_list.c src/include/66/config.h src/include/66/constants.h src/include/66/graph.h src/include/66/resolve.h src/include/66/service.h src/include/66/state.h
 src/lib66/graph/graph_build_tree.o src/lib66/graph/graph_build_tree.lo: src/lib66/graph/graph_build_tree.c src/include/66/constants.h src/include/66/graph.h src/include/66/resolve.h src/include/66/tree.h
 src/lib66/graph/graph_compute_dependencies.o src/lib66/graph/graph_compute_dependencies.lo: src/lib66/graph/graph_compute_dependencies.c
@@ -131,7 +126,7 @@ src/lib66/resolve/resolve_set_struct.o src/lib66/resolve/resolve_set_struct.lo:
 src/lib66/resolve/resolve_write.o src/lib66/resolve/resolve_write.lo: src/lib66/resolve/resolve_write.c src/include/66/constants.h src/include/66/resolve.h
 src/lib66/resolve/resolve_write_cdb.o src/lib66/resolve/resolve_write_cdb.lo: src/lib66/resolve/resolve_write_cdb.c src/include/66/resolve.h src/include/66/service.h src/include/66/tree.h
 src/lib66/resolve/resolve_write_g.o src/lib66/resolve/resolve_write_g.lo: src/lib66/resolve/resolve_write_g.c src/include/66/constants.h src/include/66/resolve.h
-src/lib66/sanitize/sanitize_fdholder.o src/lib66/sanitize/sanitize_fdholder.lo: src/lib66/sanitize/sanitize_fdholder.c src/include/66/constants.h src/include/66/service.h src/include/66/state.h
+src/lib66/sanitize/sanitize_fdholder.o src/lib66/sanitize/sanitize_fdholder.lo: src/lib66/sanitize/sanitize_fdholder.c src/include/66/constants.h src/include/66/enum.h src/include/66/service.h src/include/66/state.h
 src/lib66/sanitize/sanitize_init.o src/lib66/sanitize/sanitize_init.lo: src/lib66/sanitize/sanitize_init.c src/include/66/constants.h src/include/66/enum.h src/include/66/resolve.h src/include/66/sanitize.h src/include/66/ssexec.h src/include/66/state.h src/include/66/svc.h src/include/66/utils.h
 src/lib66/sanitize/sanitize_livestate.o src/lib66/sanitize/sanitize_livestate.lo: src/lib66/sanitize/sanitize_livestate.c src/include/66/constants.h src/include/66/sanitize.h src/include/66/service.h src/include/66/state.h src/include/66/utils.h
 src/lib66/sanitize/sanitize_scandir.o src/lib66/sanitize/sanitize_scandir.lo: src/lib66/sanitize/sanitize_scandir.c src/include/66/constants.h src/include/66/enum.h src/include/66/sanitize.h src/include/66/service.h src/include/66/state.h src/include/66/svc.h
@@ -176,7 +171,8 @@ src/lib66/state/state_write.o src/lib66/state/state_write.lo: src/lib66/state/st
 src/lib66/svc/svc_scandir_ok.o src/lib66/svc/svc_scandir_ok.lo: src/lib66/svc/svc_scandir_ok.c src/include/66/svc.h
 src/lib66/svc/svc_scandir_send.o src/lib66/svc/svc_scandir_send.lo: src/lib66/svc/svc_scandir_send.c src/include/66/svc.h
 src/lib66/svc/svc_send.o src/lib66/svc/svc_send.lo: src/lib66/svc/svc_send.c src/include/66/resolve.h src/include/66/ssexec.h src/include/66/svc.h
-src/lib66/svc/svc_unsupervise.o src/lib66/svc/svc_unsupervise.lo: src/lib66/svc/svc_unsupervise.c src/include/66/graph.h src/include/66/sanitize.h src/include/66/state.h src/include/66/svc.h
+src/lib66/svc/svc_send_wait.o src/lib66/svc/svc_send_wait.lo: src/lib66/svc/svc_send_wait.c src/include/66/resolve.h src/include/66/ssexec.h src/include/66/svc.h
+src/lib66/svc/svc_unsupervise.o src/lib66/svc/svc_unsupervise.lo: src/lib66/svc/svc_unsupervise.c src/include/66/enum.h src/include/66/graph.h src/include/66/sanitize.h src/include/66/state.h src/include/66/svc.h
 src/lib66/tree/tree_find_current.o src/lib66/tree/tree_find_current.lo: src/lib66/tree/tree_find_current.c src/include/66/constants.h src/include/66/resolve.h src/include/66/tree.h
 src/lib66/tree/tree_get_permissions.o src/lib66/tree/tree_get_permissions.lo: src/lib66/tree/tree_get_permissions.c src/include/66/constants.h src/include/66/utils.h
 src/lib66/tree/tree_iscurrent.o src/lib66/tree/tree_iscurrent.lo: src/lib66/tree/tree_iscurrent.c src/include/66/constants.h src/include/66/resolve.h src/include/66/tree.h
@@ -230,36 +226,16 @@ src/lib66/write/write_logger.o src/lib66/write/write_logger.lo: src/lib66/write/
 src/lib66/write/write_oneshot.o src/lib66/write/write_oneshot.lo: src/lib66/write/write_oneshot.c src/include/66/service.h src/include/66/write.h
 src/lib66/write/write_service.o src/lib66/write/write_service.lo: src/lib66/write/write_service.c src/include/66/constants.h src/include/66/enum.h src/include/66/resolve.h src/include/66/service.h src/include/66/write.h
 src/lib66/write/write_uint.o src/lib66/write/write_uint.lo: src/lib66/write/write_uint.c
-66-all: EXTRA_LIBS := -ls6 -loblibs -lskarnet
-66-all: src/66/66-all.o ${LIB66}
+66: EXTRA_LIBS := -ls6 -loblibs -lskarnet
+66: src/66/66.o ${LIB66}
 66-boot: EXTRA_LIBS := -ls6 -loblibs -lskarnet ${SPAWN_LIB}
 66-boot: src/66/66-boot.o ${LIB66}
-66-disable: EXTRA_LIBS := -ls6 -loblibs -lskarnet
-66-disable: src/66/66-disable.o ${LIB66} 
-66-enable: EXTRA_LIBS := -ls6 -loblibs -lskarnet
-66-enable: src/66/66-enable.o ${LIB66}
-66-env: EXTRA_LIBS := -ls6 -loblibs -lskarnet
-66-env: src/66/66-env.o ${LIB66}  
 66-fdholder-filler: EXTRA_LIBS := -ls6 -loblibs -lskarnet
 66-fdholder-filler: src/66/66-fdholder-filler.o ${LIB66}  
 66-hpr: EXTRA_LIBS := -loblibs -lskarnet ${SYSCLOCK_LIB} ${SOCKET_LIB}
 66-hpr: src/66/66-hpr.o ${LIB66} ${LIBUTMPS} 
-66-info: EXTRA_LIBS := -ls6 -loblibs -lskarnet
-66-info: src/66/66-info.o ${LIB66}
-66-init: EXTRA_LIBS := -ls6 -loblibs -lskarnet
-66-init: src/66/66-init.o ${LIB66}
-66-inresolve: EXTRA_LIBS := -loblibs -lskarnet
-66-inresolve: src/66/66-inresolve.o ${LIB66}
-66-inservice: EXTRA_LIBS := -ls6 -loblibs -lskarnet ${SPAWN_LIB}
-66-inservice: src/66/66-inservice.o ${LIB66}
-66-instate: EXTRA_LIBS := -loblibs -lskarnet
-66-instate: src/66/66-instate.o ${LIB66}
-66-intree: EXTRA_LIBS := -ls6 -loblibs -lskarnet
-66-intree: src/66/66-intree.o ${LIB66}
 66-oneshot: EXTRA_LIBS := -loblibs -lskarnet
 66-oneshot: src/66/66-oneshot.o ${LIB66}
-66-parse: EXTRA_LIBS := -ls6 -loblibs -lskarnet
-66-parse: src/66/66-parse.o ${LIB66}
 66-scanctl: EXTRA_LIBS := -ls6 -loblibs -lskarnet
 66-scanctl: src/66/66-scanctl.o ${LIB66}
 66-scandir: EXTRA_LIBS := -ls6 -loblibs -lskarnet
@@ -268,14 +244,6 @@ src/lib66/write/write_uint.o src/lib66/write/write_uint.lo: src/lib66/write/writ
 66-shutdown: src/66/66-shutdown.o ${LIB66} ${LIBUTMPS}
 66-shutdownd: EXTRA_LIBS := -ls6 -loblibs -lskarnet ${SYSCLOCK_LIB} ${SOCKET_LIB}
 66-shutdownd: src/66/66-shutdownd.o ${LIB66} ${LIBUTMPS}
-66-start: EXTRA_LIBS := -ls6 -loblibs -lskarnet
-66-start: src/66/66-start.o ${LIB66}
-66-stop: EXTRA_LIBS := -ls6 -loblibs -lskarnet
-66-stop: src/66/66-stop.o ${LIB66}
-66-svctl: EXTRA_LIBS := -ls6 -loblibs -lskarnet ${SYSCLOCK_LIB}
-66-svctl: src/66/66-svctl.o ${LIB66}
-66-tree: EXTRA_LIBS := -ls6 -loblibs -lskarnet ${SPAWN_LIB}
-66-tree: src/66/66-tree.o ${LIB66}
 66-echo: EXTRA_LIBS := -loblibs -lskarnet
 66-echo: src/extra-tools/66-echo.o 
 66-nuke: EXTRA_LIBS := -loblibs -lskarnet
@@ -285,9 +253,9 @@ src/lib66/write/write_uint.o src/lib66/write/write_uint.lo: src/lib66/write/writ
 execl-envfile: EXTRA_LIBS := -loblibs -lexecline -lskarnet
 execl-envfile: src/extra-tools/execl-envfile.o ${LIBEXECLINE} 
 ifeq ($(strip $(STATIC_LIBS_ARE_PIC)),)
-lib66.a.xyzzy: src/lib66/enum/enum.o src/lib66/environ/env_append_version.o src/lib66/environ/env_check_version.o src/lib66/environ/env_clean_with_comment.o src/lib66/environ/env_compute.o src/lib66/environ/env_find_current_version.o src/lib66/environ/env_import_version_file.o src/lib66/environ/env_make_symlink.o src/lib66/environ/env_prepare_for_write.o src/lib66/environ/env_resolve_conf.o src/lib66/exec/ssexec_all.o src/lib66/exec/ssexec_disable.o src/lib66/exec/ssexec_enable.o src/lib66/exec/ssexec_env.o src/lib66/exec/ssexec_free.o src/lib66/exec/ssexec_help.o src/lib66/exec/ssexec_init.o src/lib66/exec/ssexec_main.o src/lib66/exec/ssexec_parse.o src/lib66/exec/ssexec_start.o src/lib66/exec/ssexec_stop.o src/lib66/exec/ssexec_svctl.o src/lib66/exec/ssexec_tree.o src/lib66/graph/graph_build_service.o src/lib66/graph/graph_build_service_bytree.o src/lib66/graph/graph_build_service_bytree_from_src.o src/lib66/graph/graph_build_service_from_list.o src/lib66/graph/graph_build_tree.o src/lib66/graph/graph_compute_dependencies.o src/lib66/graph/graph_remove_deps.o src/lib66/info/info_display_field_name.o src/lib66/info/info_display_list.o src/lib66/info/info_display_nline.o src/lib66/info/info_field_align.o src/lib66/info/info_getcols_fd.o src/lib66/info/info_graph_display.o src/lib66/info/info_graph_display_service.o src/lib66/info/info_graph_display_tree.o src/lib66/info/info_graph_init.o src/lib66/info/info_length_from_wchar.o src/lib66/info/info_walk.o src/lib66/instance/instance_check.o src/lib66/instance/instance_create.o src/lib66/instance/instance_splitname.o src/lib66/parse/parse_clean_line.o src/lib66/parse/parse_clean_list.o src/lib66/parse/parse_clean_quotes.o src/lib66/parse/parse_clean_runas.o src/lib66/parse/parse_compute_list.o src/lib66/parse/parse_compute_resolve.o src/lib66/parse/parse_contents.o src/lib66/parse/parse_dependencies.o src/lib66/parse/parse_error.o src/lib66/parse/parse_frontend.o src/lib66/parse/parse_line_g.o src/lib66/parse/parse_mandatory.o src/lib66/parse/parse_module.o src/lib66/parse/parse_parentheses.o src/lib66/parse/parse_section.o src/lib66/parse/parse_service.o src/lib66/parse/parse_split_from_section.o src/lib66/parse/parse_store_environ.o src/lib66/parse/parse_store_g.o src/lib66/parse/parse_store_logger.o src/lib66/parse/parse_store_main.o src/lib66/parse/parse_store_regex.o src/lib66/parse/parse_store_start_stop.o src/lib66/resolve/resolve_add_cdb.o src/lib66/resolve/resolve_add_cdb_uint.o src/lib66/resolve/resolve_add_string.o src/lib66/resolve/resolve_check.o src/lib66/resolve/resolve_check_g.o src/lib66/resolve/resolve_find_cdb.o src/lib66/resolve/resolve_free.o src/lib66/resolve/resolve_get_field_tosa.o src/lib66/resolve/resolve_get_field_tosa_g.o src/lib66/resolve/resolve_init.o src/lib66/resolve/resolve_modify_field.o src/lib66/resolve/resolve_modify_field_g.o src/lib66/resolve/resolve_read.o src/lib66/resolve/resolve_read_cdb.o src/lib66/resolve/resolve_read_g.o src/lib66/resolve/resolve_remove.o src/lib66/resolve/resolve_remove_g.o src/lib66/resolve/resolve_set_struct.o src/lib66/resolve/resolve_write.o src/lib66/resolve/resolve_write_cdb.o src/lib66/resolve/resolve_write_g.o src/lib66/sanitize/sanitize_fdholder.o src/lib66/sanitize/sanitize_init.o src/lib66/sanitize/sanitize_livestate.o src/lib66/sanitize/sanitize_scandir.o src/lib66/sanitize/sanitize_source.o src/lib66/sanitize/sanitize_system.o src/lib66/service/service_cmp_basedir.o src/lib66/service/service_endof_dir.o src/lib66/service/service_frontend_path.o src/lib66/service/service_frontend_src.o src/lib66/service/service_graph_build.o src/lib66/service/service_graph_collect.o src/lib66/service/service_graph_g.o src/lib66/service/service_is_g.o src/lib66/service/service_resolve_array_free.o src/lib66/service/service_resolve_array_search.o src/lib66/service/service_resolve_copy.o src/lib66/service/service_resolve_get_field_tosa.o src/lib66/service/service_resolve_master_copy.o src/lib66/service/service_resolve_master_create.o src/lib66/service/service_resolve_master_get_field_tosa.o src/lib66/service/service_resolve_master_modify_field.o src/lib66/service/service_resolve_master_read_cdb.o src/lib66/service/service_resolve_master_write.o src/lib66/service/service_resolve_master_write_cdb.o src/lib66/service/service_resolve_modify_field.o src/lib66/service/service_resolve_read_cdb.o src/lib66/service/service_resolve_sort_bytype.o src/lib66/service/service_resolve_write.o src/lib66/service/service_resolve_write_cdb.o src/lib66/shutdown/hpr_shutdown.o src/lib66/shutdown/hpr_wall.o src/lib66/state/state_check.o src/lib66/state/state_get_flags.o src/lib66/state/state_messenger.o src/lib66/state/state_pack.o src/lib66/state/state_read.o src/lib66/state/state_rmfile.o src/lib66/state/state_set_flag.o src/lib66/state/state_unpack.o src/lib66/state/state_write.o src/lib66/svc/svc_scandir_ok.o src/lib66/svc/svc_scandir_send.o src/lib66/svc/svc_send.o src/lib66/svc/svc_unsupervise.o src/lib66/tree/tree_find_current.o src/lib66/tree/tree_get_permissions.o src/lib66/tree/tree_iscurrent.o src/lib66/tree/tree_isenabled.o src/lib66/tree/tree_isinitialized.o src/lib66/tree/tree_isvalid.o src/lib66/tree/tree_ongroups.o src/lib66/tree/tree_resolve_copy.o src/lib66/tree/tree_resolve_get_field_tosa.o src/lib66/tree/tree_resolve_master_copy.o src/lib66/tree/tree_resolve_master_create.o src/lib66/tree/tree_resolve_master_get_field_tosa.o src/lib66/tree/tree_resolve_master_modify_field.o src/lib66/tree/tree_resolve_master_read_cdb.o src/lib66/tree/tree_resolve_master_write_cdb.o src/lib66/tree/tree_resolve_modify_field.o src/lib66/tree/tree_resolve_read_cdb.o src/lib66/tree/tree_resolve_write_cdb.o src/lib66/tree/tree_seed_file_isvalid.o src/lib66/tree/tree_seed_free.o src/lib66/tree/tree_seed_get_group_permissions.o src/lib66/tree/tree_seed_get_key.o src/lib66/tree/tree_seed_isvalid.o src/lib66/tree/tree_seed_parse_file.o src/lib66/tree/tree_seed_resolve_path.o src/lib66/tree/tree_seed_setseed.o src/lib66/tree/tree_sethome.o src/lib66/tree/tree_setname.o src/lib66/tree/tree_switch_current.o src/lib66/utils/get_userhome.o src/lib66/utils/module_in_cmdline.o src/lib66/utils/module_path.o src/lib66/utils/module_search_service.o src/lib66/utils/name_isvalid.o src/lib66/utils/read_svfile.o src/lib66/utils/set_livedir.o src/lib66/utils/set_livescan.o src/lib66/utils/set_livestate.o src/lib66/utils/set_ownerhome.o src/lib66/utils/set_ownersysdir.o src/lib66/utils/yourgid.o src/lib66/utils/youruid.o src/lib66/write/write_classic.o src/lib66/write/write_common.o src/lib66/write/write_environ.o src/lib66/write/write_execute_scripts.o src/lib66/write/write_logger.o src/lib66/write/write_oneshot.o src/lib66/write/write_service.o src/lib66/write/write_uint.o
+lib66.a.xyzzy: src/lib66/enum/enum.o src/lib66/environ/env_append_version.o src/lib66/environ/env_check_version.o src/lib66/environ/env_clean_with_comment.o src/lib66/environ/env_compute.o src/lib66/environ/env_find_current_version.o src/lib66/environ/env_import_version_file.o src/lib66/environ/env_make_symlink.o src/lib66/environ/env_prepare_for_write.o src/lib66/environ/env_resolve_conf.o src/lib66/exec/ssexec_all.o src/lib66/exec/ssexec_boot.o src/lib66/exec/ssexec_reconfigure.o src/lib66/exec/ssexec_reload.o src/lib66/exec/ssexec_restart.o src/lib66/exec/ssexec_disable.o src/lib66/exec/ssexec_enable.o src/lib66/exec/ssexec_env.o src/lib66/exec/ssexec_free.o src/lib66/exec/ssexec_help.o src/lib66/exec/ssexec_init.o src/lib66/exec/ssexec_inresolve.o src/lib66/exec/ssexec_inservice.o src/lib66/exec/ssexec_instate.o src/lib66/exec/ssexec_intree.o src/lib66/exec/ssexec_parse.o src/lib66/exec/ssexec_start.o src/lib66/exec/ssexec_stop.o src/lib66/exec/ssexec_svctl.o src/lib66/exec/ssexec_tree.o src/lib66/graph/graph_build_service.o src/lib66/graph/graph_build_service_bytree.o src/lib66/graph/graph_build_service_bytree_from_src.o src/lib66/graph/graph_build_service_from_list.o src/lib66/graph/graph_build_tree.o src/lib66/graph/graph_compute_dependencies.o src/lib66/graph/graph_remove_deps.o src/lib66/info/info_display_field_name.o src/lib66/info/info_display_list.o src/lib66/info/info_display_nline.o src/lib66/info/info_field_align.o src/lib66/info/info_getcols_fd.o src/lib66/info/info_graph_display.o src/lib66/info/info_graph_display_service.o src/lib66/info/info_graph_display_tree.o src/lib66/info/info_graph_init.o src/lib66/info/info_length_from_wchar.o src/lib66/info/info_walk.o src/lib66/instance/instance_check.o src/lib66/instance/instance_create.o src/lib66/instance/instance_splitname.o src/lib66/parse/parse_clean_line.o src/lib66/parse/parse_clean_list.o src/lib66/parse/parse_clean_quotes.o src/lib66/parse/parse_clean_runas.o src/lib66/parse/parse_compute_list.o src/lib66/parse/parse_compute_resolve.o src/lib66/parse/parse_contents.o src/lib66/parse/parse_dependencies.o src/lib66/parse/parse_error.o src/lib66/parse/parse_frontend.o src/lib66/parse/parse_line_g.o src/lib66/parse/parse_mandatory.o src/lib66/parse/parse_module.o src/lib66/parse/parse_parentheses.o src/lib66/parse/parse_section.o src/lib66/parse/parse_service.o src/lib66/parse/parse_split_from_section.o src/lib66/parse/parse_store_environ.o src/lib66/parse/parse_store_g.o src/lib66/parse/parse_store_logger.o src/lib66/parse/parse_store_main.o src/lib66/parse/parse_store_regex.o src/lib66/parse/parse_store_start_stop.o src/lib66/resolve/resolve_add_cdb.o src/lib66/resolve/resolve_add_cdb_uint.o src/lib66/resolve/resolve_add_string.o src/lib66/resolve/resolve_check.o src/lib66/resolve/resolve_check_g.o src/lib66/resolve/resolve_find_cdb.o src/lib66/resolve/resolve_free.o src/lib66/resolve/resolve_get_field_tosa.o src/lib66/resolve/resolve_get_field_tosa_g.o src/lib66/resolve/resolve_init.o src/lib66/resolve/resolve_modify_field.o src/lib66/resolve/resolve_modify_field_g.o src/lib66/resolve/resolve_read.o src/lib66/resolve/resolve_read_cdb.o src/lib66/resolve/resolve_read_g.o src/lib66/resolve/resolve_remove.o src/lib66/resolve/resolve_remove_g.o src/lib66/resolve/resolve_set_struct.o src/lib66/resolve/resolve_write.o src/lib66/resolve/resolve_write_cdb.o src/lib66/resolve/resolve_write_g.o src/lib66/sanitize/sanitize_fdholder.o src/lib66/sanitize/sanitize_init.o src/lib66/sanitize/sanitize_livestate.o src/lib66/sanitize/sanitize_scandir.o src/lib66/sanitize/sanitize_source.o src/lib66/sanitize/sanitize_system.o src/lib66/service/service_cmp_basedir.o src/lib66/service/service_endof_dir.o src/lib66/service/service_frontend_path.o src/lib66/service/service_frontend_src.o src/lib66/service/service_graph_build.o src/lib66/service/service_graph_collect.o src/lib66/service/service_graph_g.o src/lib66/service/service_is_g.o src/lib66/service/service_resolve_array_free.o src/lib66/service/service_resolve_array_search.o src/lib66/service/service_resolve_copy.o src/lib66/service/service_resolve_get_field_tosa.o src/lib66/service/service_resolve_master_copy.o src/lib66/service/service_resolve_master_create.o src/lib66/service/service_resolve_master_get_field_tosa.o src/lib66/service/service_resolve_master_modify_field.o src/lib66/service/service_resolve_master_read_cdb.o src/lib66/service/service_resolve_master_write.o src/lib66/service/service_resolve_master_write_cdb.o src/lib66/service/service_resolve_modify_field.o src/lib66/service/service_resolve_read_cdb.o src/lib66/service/service_resolve_sort_bytype.o src/lib66/service/service_resolve_write.o src/lib66/service/service_resolve_write_cdb.o src/lib66/shutdown/hpr_shutdown.o src/lib66/shutdown/hpr_wall.o src/lib66/state/state_check.o src/lib66/state/state_get_flags.o src/lib66/state/state_messenger.o src/lib66/state/state_pack.o src/lib66/state/state_read.o src/lib66/state/state_rmfile.o src/lib66/state/state_set_flag.o src/lib66/state/state_unpack.o src/lib66/state/state_write.o src/lib66/svc/svc_scandir_ok.o src/lib66/svc/svc_scandir_send.o src/lib66/svc/svc_send.o src/lib66/svc/svc_send_wait.o src/lib66/svc/svc_unsupervise.o src/lib66/tree/tree_find_current.o src/lib66/tree/tree_get_permissions.o src/lib66/tree/tree_iscurrent.o src/lib66/tree/tree_isenabled.o src/lib66/tree/tree_isinitialized.o src/lib66/tree/tree_isvalid.o src/lib66/tree/tree_ongroups.o src/lib66/tree/tree_resolve_copy.o src/lib66/tree/tree_resolve_get_field_tosa.o src/lib66/tree/tree_resolve_master_copy.o src/lib66/tree/tree_resolve_master_create.o src/lib66/tree/tree_resolve_master_get_field_tosa.o src/lib66/tree/tree_resolve_master_modify_field.o src/lib66/tree/tree_resolve_master_read_cdb.o src/lib66/tree/tree_resolve_master_write_cdb.o src/lib66/tree/tree_resolve_modify_field.o src/lib66/tree/tree_resolve_read_cdb.o src/lib66/tree/tree_resolve_write_cdb.o src/lib66/tree/tree_seed_file_isvalid.o src/lib66/tree/tree_seed_free.o src/lib66/tree/tree_seed_get_group_permissions.o src/lib66/tree/tree_seed_get_key.o src/lib66/tree/tree_seed_isvalid.o src/lib66/tree/tree_seed_parse_file.o src/lib66/tree/tree_seed_resolve_path.o src/lib66/tree/tree_seed_setseed.o src/lib66/tree/tree_sethome.o src/lib66/tree/tree_setname.o src/lib66/tree/tree_switch_current.o src/lib66/utils/get_userhome.o src/lib66/utils/module_in_cmdline.o src/lib66/utils/module_path.o src/lib66/utils/module_search_service.o src/lib66/utils/name_isvalid.o src/lib66/utils/read_svfile.o src/lib66/utils/set_livedir.o src/lib66/utils/set_livescan.o src/lib66/utils/set_livestate.o src/lib66/utils/set_ownerhome.o src/lib66/utils/set_ownersysdir.o src/lib66/utils/yourgid.o src/lib66/utils/youruid.o src/lib66/write/write_classic.o src/lib66/write/write_common.o src/lib66/write/write_environ.o src/lib66/write/write_execute_scripts.o src/lib66/write/write_logger.o src/lib66/write/write_oneshot.o src/lib66/write/write_service.o src/lib66/write/write_uint.o
 else
-lib66.a.xyzzy: src/lib66/enum/enum.lo src/lib66/environ/env_append_version.lo src/lib66/environ/env_check_version.lo src/lib66/environ/env_clean_with_comment.lo src/lib66/environ/env_compute.lo src/lib66/environ/env_find_current_version.lo src/lib66/environ/env_import_version_file.lo src/lib66/environ/env_make_symlink.lo src/lib66/environ/env_prepare_for_write.lo src/lib66/environ/env_resolve_conf.lo src/lib66/exec/ssexec_all.lo src/lib66/exec/ssexec_disable.lo src/lib66/exec/ssexec_enable.lo src/lib66/exec/ssexec_env.lo src/lib66/exec/ssexec_free.lo src/lib66/exec/ssexec_help.lo src/lib66/exec/ssexec_init.lo src/lib66/exec/ssexec_main.lo src/lib66/exec/ssexec_parse.lo src/lib66/exec/ssexec_start.lo src/lib66/exec/ssexec_stop.lo src/lib66/exec/ssexec_svctl.lo src/lib66/exec/ssexec_tree.lo src/lib66/graph/graph_build_service.lo src/lib66/graph/graph_build_service_bytree.lo src/lib66/graph/graph_build_service_bytree_from_src.lo src/lib66/graph/graph_build_service_from_list.lo src/lib66/graph/graph_build_tree.lo src/lib66/graph/graph_compute_dependencies.lo src/lib66/graph/graph_remove_deps.lo src/lib66/info/info_display_field_name.lo src/lib66/info/info_display_list.lo src/lib66/info/info_display_nline.lo src/lib66/info/info_field_align.lo src/lib66/info/info_getcols_fd.lo src/lib66/info/info_graph_display.lo src/lib66/info/info_graph_display_service.lo src/lib66/info/info_graph_display_tree.lo src/lib66/info/info_graph_init.lo src/lib66/info/info_length_from_wchar.lo src/lib66/info/info_walk.lo src/lib66/instance/instance_check.lo src/lib66/instance/instance_create.lo src/lib66/instance/instance_splitname.lo src/lib66/parse/parse_clean_line.lo src/lib66/parse/parse_clean_list.lo src/lib66/parse/parse_clean_quotes.lo src/lib66/parse/parse_clean_runas.lo src/lib66/parse/parse_compute_list.lo src/lib66/parse/parse_compute_resolve.lo src/lib66/parse/parse_contents.lo src/lib66/parse/parse_dependencies.lo src/lib66/parse/parse_error.lo src/lib66/parse/parse_frontend.lo src/lib66/parse/parse_line_g.lo src/lib66/parse/parse_mandatory.lo src/lib66/parse/parse_module.lo src/lib66/parse/parse_parentheses.lo src/lib66/parse/parse_section.lo src/lib66/parse/parse_service.lo src/lib66/parse/parse_split_from_section.lo src/lib66/parse/parse_store_environ.lo src/lib66/parse/parse_store_g.lo src/lib66/parse/parse_store_logger.lo src/lib66/parse/parse_store_main.lo src/lib66/parse/parse_store_regex.lo src/lib66/parse/parse_store_start_stop.lo src/lib66/resolve/resolve_add_cdb.lo src/lib66/resolve/resolve_add_cdb_uint.lo src/lib66/resolve/resolve_add_string.lo src/lib66/resolve/resolve_check.lo src/lib66/resolve/resolve_check_g.lo src/lib66/resolve/resolve_find_cdb.lo src/lib66/resolve/resolve_free.lo src/lib66/resolve/resolve_get_field_tosa.lo src/lib66/resolve/resolve_get_field_tosa_g.lo src/lib66/resolve/resolve_init.lo src/lib66/resolve/resolve_modify_field.lo src/lib66/resolve/resolve_modify_field_g.lo src/lib66/resolve/resolve_read.lo src/lib66/resolve/resolve_read_cdb.lo src/lib66/resolve/resolve_read_g.lo src/lib66/resolve/resolve_remove.lo src/lib66/resolve/resolve_remove_g.lo src/lib66/resolve/resolve_set_struct.lo src/lib66/resolve/resolve_write.lo src/lib66/resolve/resolve_write_cdb.lo src/lib66/resolve/resolve_write_g.lo src/lib66/sanitize/sanitize_fdholder.lo src/lib66/sanitize/sanitize_init.lo src/lib66/sanitize/sanitize_livestate.lo src/lib66/sanitize/sanitize_scandir.lo src/lib66/sanitize/sanitize_source.lo src/lib66/sanitize/sanitize_system.lo src/lib66/service/service_cmp_basedir.lo src/lib66/service/service_endof_dir.lo src/lib66/service/service_frontend_path.lo src/lib66/service/service_frontend_src.lo src/lib66/service/service_graph_build.lo src/lib66/service/service_graph_collect.lo src/lib66/service/service_graph_g.lo src/lib66/service/service_is_g.lo src/lib66/service/service_resolve_array_free.lo src/lib66/service/service_resolve_array_search.lo src/lib66/service/service_resolve_copy.lo src/lib66/service/service_resolve_get_field_tosa.lo src/lib66/service/service_resolve_master_copy.lo src/lib66/service/service_resolve_master_create.lo src/lib66/service/service_resolve_master_get_field_tosa.lo src/lib66/service/service_resolve_master_modify_field.lo src/lib66/service/service_resolve_master_read_cdb.lo src/lib66/service/service_resolve_master_write.lo src/lib66/service/service_resolve_master_write_cdb.lo src/lib66/service/service_resolve_modify_field.lo src/lib66/service/service_resolve_read_cdb.lo src/lib66/service/service_resolve_sort_bytype.lo src/lib66/service/service_resolve_write.lo src/lib66/service/service_resolve_write_cdb.lo src/lib66/shutdown/hpr_shutdown.lo src/lib66/shutdown/hpr_wall.lo src/lib66/state/state_check.lo src/lib66/state/state_get_flags.lo src/lib66/state/state_messenger.lo src/lib66/state/state_pack.lo src/lib66/state/state_read.lo src/lib66/state/state_rmfile.lo src/lib66/state/state_set_flag.lo src/lib66/state/state_unpack.lo src/lib66/state/state_write.lo src/lib66/svc/svc_scandir_ok.lo src/lib66/svc/svc_scandir_send.lo src/lib66/svc/svc_send.lo src/lib66/svc/svc_unsupervise.lo src/lib66/tree/tree_find_current.lo src/lib66/tree/tree_get_permissions.lo src/lib66/tree/tree_iscurrent.lo src/lib66/tree/tree_isenabled.lo src/lib66/tree/tree_isinitialized.lo src/lib66/tree/tree_isvalid.lo src/lib66/tree/tree_ongroups.lo src/lib66/tree/tree_resolve_copy.lo src/lib66/tree/tree_resolve_get_field_tosa.lo src/lib66/tree/tree_resolve_master_copy.lo src/lib66/tree/tree_resolve_master_create.lo src/lib66/tree/tree_resolve_master_get_field_tosa.lo src/lib66/tree/tree_resolve_master_modify_field.lo src/lib66/tree/tree_resolve_master_read_cdb.lo src/lib66/tree/tree_resolve_master_write_cdb.lo src/lib66/tree/tree_resolve_modify_field.lo src/lib66/tree/tree_resolve_read_cdb.lo src/lib66/tree/tree_resolve_write_cdb.lo src/lib66/tree/tree_seed_file_isvalid.lo src/lib66/tree/tree_seed_free.lo src/lib66/tree/tree_seed_get_group_permissions.lo src/lib66/tree/tree_seed_get_key.lo src/lib66/tree/tree_seed_isvalid.lo src/lib66/tree/tree_seed_parse_file.lo src/lib66/tree/tree_seed_resolve_path.lo src/lib66/tree/tree_seed_setseed.lo src/lib66/tree/tree_sethome.lo src/lib66/tree/tree_setname.lo src/lib66/tree/tree_switch_current.lo src/lib66/utils/get_userhome.lo src/lib66/utils/module_in_cmdline.lo src/lib66/utils/module_path.lo src/lib66/utils/module_search_service.lo src/lib66/utils/name_isvalid.lo src/lib66/utils/read_svfile.lo src/lib66/utils/set_livedir.lo src/lib66/utils/set_livescan.lo src/lib66/utils/set_livestate.lo src/lib66/utils/set_ownerhome.lo src/lib66/utils/set_ownersysdir.lo src/lib66/utils/yourgid.lo src/lib66/utils/youruid.lo src/lib66/write/write_classic.lo src/lib66/write/write_common.lo src/lib66/write/write_environ.lo src/lib66/write/write_execute_scripts.lo src/lib66/write/write_logger.lo src/lib66/write/write_oneshot.lo src/lib66/write/write_service.lo src/lib66/write/write_uint.lo
+lib66.a.xyzzy: src/lib66/enum/enum.lo src/lib66/environ/env_append_version.lo src/lib66/environ/env_check_version.lo src/lib66/environ/env_clean_with_comment.lo src/lib66/environ/env_compute.lo src/lib66/environ/env_find_current_version.lo src/lib66/environ/env_import_version_file.lo src/lib66/environ/env_make_symlink.lo src/lib66/environ/env_prepare_for_write.lo src/lib66/environ/env_resolve_conf.lo src/lib66/exec/ssexec_all.lo src/lib66/exec/ssexec_boot.lo src/lib66/exec/ssexec_reconfigure.lo src/lib66/exec/ssexec_reload.lo src/lib66/exec/ssexec_restart.lo src/lib66/exec/ssexec_disable.lo src/lib66/exec/ssexec_enable.lo src/lib66/exec/ssexec_env.lo src/lib66/exec/ssexec_free.lo src/lib66/exec/ssexec_help.lo src/lib66/exec/ssexec_init.lo src/lib66/exec/ssexec_inresolve.lo src/lib66/exec/ssexec_inservice.lo src/lib66/exec/ssexec_instate.lo src/lib66/exec/ssexec_intree.lo src/lib66/exec/ssexec_parse.lo src/lib66/exec/ssexec_start.lo src/lib66/exec/ssexec_stop.lo src/lib66/exec/ssexec_svctl.lo src/lib66/exec/ssexec_tree.lo src/lib66/graph/graph_build_service.lo src/lib66/graph/graph_build_service_bytree.lo src/lib66/graph/graph_build_service_bytree_from_src.lo src/lib66/graph/graph_build_service_from_list.lo src/lib66/graph/graph_build_tree.lo src/lib66/graph/graph_compute_dependencies.lo src/lib66/graph/graph_remove_deps.lo src/lib66/info/info_display_field_name.lo src/lib66/info/info_display_list.lo src/lib66/info/info_display_nline.lo src/lib66/info/info_field_align.lo src/lib66/info/info_getcols_fd.lo src/lib66/info/info_graph_display.lo src/lib66/info/info_graph_display_service.lo src/lib66/info/info_graph_display_tree.lo src/lib66/info/info_graph_init.lo src/lib66/info/info_length_from_wchar.lo src/lib66/info/info_walk.lo src/lib66/instance/instance_check.lo src/lib66/instance/instance_create.lo src/lib66/instance/instance_splitname.lo src/lib66/parse/parse_clean_line.lo src/lib66/parse/parse_clean_list.lo src/lib66/parse/parse_clean_quotes.lo src/lib66/parse/parse_clean_runas.lo src/lib66/parse/parse_compute_list.lo src/lib66/parse/parse_compute_resolve.lo src/lib66/parse/parse_contents.lo src/lib66/parse/parse_dependencies.lo src/lib66/parse/parse_error.lo src/lib66/parse/parse_frontend.lo src/lib66/parse/parse_line_g.lo src/lib66/parse/parse_mandatory.lo src/lib66/parse/parse_module.lo src/lib66/parse/parse_parentheses.lo src/lib66/parse/parse_section.lo src/lib66/parse/parse_service.lo src/lib66/parse/parse_split_from_section.lo src/lib66/parse/parse_store_environ.lo src/lib66/parse/parse_store_g.lo src/lib66/parse/parse_store_logger.lo src/lib66/parse/parse_store_main.lo src/lib66/parse/parse_store_regex.lo src/lib66/parse/parse_store_start_stop.lo src/lib66/resolve/resolve_add_cdb.lo src/lib66/resolve/resolve_add_cdb_uint.lo src/lib66/resolve/resolve_add_string.lo src/lib66/resolve/resolve_check.lo src/lib66/resolve/resolve_check_g.lo src/lib66/resolve/resolve_find_cdb.lo src/lib66/resolve/resolve_free.lo src/lib66/resolve/resolve_get_field_tosa.lo src/lib66/resolve/resolve_get_field_tosa_g.lo src/lib66/resolve/resolve_init.lo src/lib66/resolve/resolve_modify_field.lo src/lib66/resolve/resolve_modify_field_g.lo src/lib66/resolve/resolve_read.lo src/lib66/resolve/resolve_read_cdb.lo src/lib66/resolve/resolve_read_g.lo src/lib66/resolve/resolve_remove.lo src/lib66/resolve/resolve_remove_g.lo src/lib66/resolve/resolve_set_struct.lo src/lib66/resolve/resolve_write.lo src/lib66/resolve/resolve_write_cdb.lo src/lib66/resolve/resolve_write_g.lo src/lib66/sanitize/sanitize_fdholder.lo src/lib66/sanitize/sanitize_init.lo src/lib66/sanitize/sanitize_livestate.lo src/lib66/sanitize/sanitize_scandir.lo src/lib66/sanitize/sanitize_source.lo src/lib66/sanitize/sanitize_system.lo src/lib66/service/service_cmp_basedir.lo src/lib66/service/service_endof_dir.lo src/lib66/service/service_frontend_path.lo src/lib66/service/service_frontend_src.lo src/lib66/service/service_graph_build.lo src/lib66/service/service_graph_collect.lo src/lib66/service/service_graph_g.lo src/lib66/service/service_is_g.lo src/lib66/service/service_resolve_array_free.lo src/lib66/service/service_resolve_array_search.lo src/lib66/service/service_resolve_copy.lo src/lib66/service/service_resolve_get_field_tosa.lo src/lib66/service/service_resolve_master_copy.lo src/lib66/service/service_resolve_master_create.lo src/lib66/service/service_resolve_master_get_field_tosa.lo src/lib66/service/service_resolve_master_modify_field.lo src/lib66/service/service_resolve_master_read_cdb.lo src/lib66/service/service_resolve_master_write.lo src/lib66/service/service_resolve_master_write_cdb.lo src/lib66/service/service_resolve_modify_field.lo src/lib66/service/service_resolve_read_cdb.lo src/lib66/service/service_resolve_sort_bytype.lo src/lib66/service/service_resolve_write.lo src/lib66/service/service_resolve_write_cdb.lo src/lib66/shutdown/hpr_shutdown.lo src/lib66/shutdown/hpr_wall.lo src/lib66/state/state_check.lo src/lib66/state/state_get_flags.lo src/lib66/state/state_messenger.lo src/lib66/state/state_pack.lo src/lib66/state/state_read.lo src/lib66/state/state_rmfile.lo src/lib66/state/state_set_flag.lo src/lib66/state/state_unpack.lo src/lib66/state/state_write.lo src/lib66/svc/svc_scandir_ok.lo src/lib66/svc/svc_scandir_send.lo src/lib66/svc/svc_send.lo src/lib66/svc/svc_send_wait.lo src/lib66/svc/svc_unsupervise.lo src/lib66/tree/tree_find_current.lo src/lib66/tree/tree_get_permissions.lo src/lib66/tree/tree_iscurrent.lo src/lib66/tree/tree_isenabled.lo src/lib66/tree/tree_isinitialized.lo src/lib66/tree/tree_isvalid.lo src/lib66/tree/tree_ongroups.lo src/lib66/tree/tree_resolve_copy.lo src/lib66/tree/tree_resolve_get_field_tosa.lo src/lib66/tree/tree_resolve_master_copy.lo src/lib66/tree/tree_resolve_master_create.lo src/lib66/tree/tree_resolve_master_get_field_tosa.lo src/lib66/tree/tree_resolve_master_modify_field.lo src/lib66/tree/tree_resolve_master_read_cdb.lo src/lib66/tree/tree_resolve_master_write_cdb.lo src/lib66/tree/tree_resolve_modify_field.lo src/lib66/tree/tree_resolve_read_cdb.lo src/lib66/tree/tree_resolve_write_cdb.lo src/lib66/tree/tree_seed_file_isvalid.lo src/lib66/tree/tree_seed_free.lo src/lib66/tree/tree_seed_get_group_permissions.lo src/lib66/tree/tree_seed_get_key.lo src/lib66/tree/tree_seed_isvalid.lo src/lib66/tree/tree_seed_parse_file.lo src/lib66/tree/tree_seed_resolve_path.lo src/lib66/tree/tree_seed_setseed.lo src/lib66/tree/tree_sethome.lo src/lib66/tree/tree_setname.lo src/lib66/tree/tree_switch_current.lo src/lib66/utils/get_userhome.lo src/lib66/utils/module_in_cmdline.lo src/lib66/utils/module_path.lo src/lib66/utils/module_search_service.lo src/lib66/utils/name_isvalid.lo src/lib66/utils/read_svfile.lo src/lib66/utils/set_livedir.lo src/lib66/utils/set_livescan.lo src/lib66/utils/set_livestate.lo src/lib66/utils/set_ownerhome.lo src/lib66/utils/set_ownersysdir.lo src/lib66/utils/yourgid.lo src/lib66/utils/youruid.lo src/lib66/write/write_classic.lo src/lib66/write/write_common.lo src/lib66/write/write_environ.lo src/lib66/write/write_execute_scripts.lo src/lib66/write/write_logger.lo src/lib66/write/write_oneshot.lo src/lib66/write/write_service.lo src/lib66/write/write_uint.lo
 endif
 lib66.so.xyzzy: EXTRA_LIBS := -loblibs -lskarnet -ls6 -lexecline
-lib66.so.xyzzy: src/lib66/enum/enum.lo src/lib66/environ/env_append_version.lo src/lib66/environ/env_check_version.lo src/lib66/environ/env_clean_with_comment.lo src/lib66/environ/env_compute.lo src/lib66/environ/env_find_current_version.lo src/lib66/environ/env_import_version_file.lo src/lib66/environ/env_make_symlink.lo src/lib66/environ/env_prepare_for_write.lo src/lib66/environ/env_resolve_conf.lo src/lib66/exec/ssexec_all.lo src/lib66/exec/ssexec_disable.lo src/lib66/exec/ssexec_enable.lo src/lib66/exec/ssexec_env.lo src/lib66/exec/ssexec_free.lo src/lib66/exec/ssexec_help.lo src/lib66/exec/ssexec_init.lo src/lib66/exec/ssexec_main.lo src/lib66/exec/ssexec_parse.lo src/lib66/exec/ssexec_start.lo src/lib66/exec/ssexec_stop.lo src/lib66/exec/ssexec_svctl.lo src/lib66/exec/ssexec_tree.lo src/lib66/graph/graph_build_service.lo src/lib66/graph/graph_build_service_bytree.lo src/lib66/graph/graph_build_service_bytree_from_src.lo src/lib66/graph/graph_build_service_from_list.lo src/lib66/graph/graph_build_tree.lo src/lib66/graph/graph_compute_dependencies.lo src/lib66/graph/graph_remove_deps.lo src/lib66/info/info_display_field_name.lo src/lib66/info/info_display_list.lo src/lib66/info/info_display_nline.lo src/lib66/info/info_field_align.lo src/lib66/info/info_getcols_fd.lo src/lib66/info/info_graph_display.lo src/lib66/info/info_graph_display_service.lo src/lib66/info/info_graph_display_tree.lo src/lib66/info/info_graph_init.lo src/lib66/info/info_length_from_wchar.lo src/lib66/info/info_walk.lo src/lib66/instance/instance_check.lo src/lib66/instance/instance_create.lo src/lib66/instance/instance_splitname.lo src/lib66/parse/parse_clean_line.lo src/lib66/parse/parse_clean_list.lo src/lib66/parse/parse_clean_quotes.lo src/lib66/parse/parse_clean_runas.lo src/lib66/parse/parse_compute_list.lo src/lib66/parse/parse_compute_resolve.lo src/lib66/parse/parse_contents.lo src/lib66/parse/parse_dependencies.lo src/lib66/parse/parse_error.lo src/lib66/parse/parse_frontend.lo src/lib66/parse/parse_line_g.lo src/lib66/parse/parse_mandatory.lo src/lib66/parse/parse_module.lo src/lib66/parse/parse_parentheses.lo src/lib66/parse/parse_section.lo src/lib66/parse/parse_service.lo src/lib66/parse/parse_split_from_section.lo src/lib66/parse/parse_store_environ.lo src/lib66/parse/parse_store_g.lo src/lib66/parse/parse_store_logger.lo src/lib66/parse/parse_store_main.lo src/lib66/parse/parse_store_regex.lo src/lib66/parse/parse_store_start_stop.lo src/lib66/resolve/resolve_add_cdb.lo src/lib66/resolve/resolve_add_cdb_uint.lo src/lib66/resolve/resolve_add_string.lo src/lib66/resolve/resolve_check.lo src/lib66/resolve/resolve_check_g.lo src/lib66/resolve/resolve_find_cdb.lo src/lib66/resolve/resolve_free.lo src/lib66/resolve/resolve_get_field_tosa.lo src/lib66/resolve/resolve_get_field_tosa_g.lo src/lib66/resolve/resolve_init.lo src/lib66/resolve/resolve_modify_field.lo src/lib66/resolve/resolve_modify_field_g.lo src/lib66/resolve/resolve_read.lo src/lib66/resolve/resolve_read_cdb.lo src/lib66/resolve/resolve_read_g.lo src/lib66/resolve/resolve_remove.lo src/lib66/resolve/resolve_remove_g.lo src/lib66/resolve/resolve_set_struct.lo src/lib66/resolve/resolve_write.lo src/lib66/resolve/resolve_write_cdb.lo src/lib66/resolve/resolve_write_g.lo src/lib66/sanitize/sanitize_fdholder.lo src/lib66/sanitize/sanitize_init.lo src/lib66/sanitize/sanitize_livestate.lo src/lib66/sanitize/sanitize_scandir.lo src/lib66/sanitize/sanitize_source.lo src/lib66/sanitize/sanitize_system.lo src/lib66/service/service_cmp_basedir.lo src/lib66/service/service_endof_dir.lo src/lib66/service/service_frontend_path.lo src/lib66/service/service_frontend_src.lo src/lib66/service/service_graph_build.lo src/lib66/service/service_graph_collect.lo src/lib66/service/service_graph_g.lo src/lib66/service/service_is_g.lo src/lib66/service/service_resolve_array_free.lo src/lib66/service/service_resolve_array_search.lo src/lib66/service/service_resolve_copy.lo src/lib66/service/service_resolve_get_field_tosa.lo src/lib66/service/service_resolve_master_copy.lo src/lib66/service/service_resolve_master_create.lo src/lib66/service/service_resolve_master_get_field_tosa.lo src/lib66/service/service_resolve_master_modify_field.lo src/lib66/service/service_resolve_master_read_cdb.lo src/lib66/service/service_resolve_master_write.lo src/lib66/service/service_resolve_master_write_cdb.lo src/lib66/service/service_resolve_modify_field.lo src/lib66/service/service_resolve_read_cdb.lo src/lib66/service/service_resolve_sort_bytype.lo src/lib66/service/service_resolve_write.lo src/lib66/service/service_resolve_write_cdb.lo src/lib66/shutdown/hpr_shutdown.lo src/lib66/shutdown/hpr_wall.lo src/lib66/state/state_check.lo src/lib66/state/state_get_flags.lo src/lib66/state/state_messenger.lo src/lib66/state/state_pack.lo src/lib66/state/state_read.lo src/lib66/state/state_rmfile.lo src/lib66/state/state_set_flag.lo src/lib66/state/state_unpack.lo src/lib66/state/state_write.lo src/lib66/svc/svc_scandir_ok.lo src/lib66/svc/svc_scandir_send.lo src/lib66/svc/svc_send.lo src/lib66/svc/svc_unsupervise.lo src/lib66/tree/tree_find_current.lo src/lib66/tree/tree_get_permissions.lo src/lib66/tree/tree_iscurrent.lo src/lib66/tree/tree_isenabled.lo src/lib66/tree/tree_isinitialized.lo src/lib66/tree/tree_isvalid.lo src/lib66/tree/tree_ongroups.lo src/lib66/tree/tree_resolve_copy.lo src/lib66/tree/tree_resolve_get_field_tosa.lo src/lib66/tree/tree_resolve_master_copy.lo src/lib66/tree/tree_resolve_master_create.lo src/lib66/tree/tree_resolve_master_get_field_tosa.lo src/lib66/tree/tree_resolve_master_modify_field.lo src/lib66/tree/tree_resolve_master_read_cdb.lo src/lib66/tree/tree_resolve_master_write_cdb.lo src/lib66/tree/tree_resolve_modify_field.lo src/lib66/tree/tree_resolve_read_cdb.lo src/lib66/tree/tree_resolve_write_cdb.lo src/lib66/tree/tree_seed_file_isvalid.lo src/lib66/tree/tree_seed_free.lo src/lib66/tree/tree_seed_get_group_permissions.lo src/lib66/tree/tree_seed_get_key.lo src/lib66/tree/tree_seed_isvalid.lo src/lib66/tree/tree_seed_parse_file.lo src/lib66/tree/tree_seed_resolve_path.lo src/lib66/tree/tree_seed_setseed.lo src/lib66/tree/tree_sethome.lo src/lib66/tree/tree_setname.lo src/lib66/tree/tree_switch_current.lo src/lib66/utils/get_userhome.lo src/lib66/utils/module_in_cmdline.lo src/lib66/utils/module_path.lo src/lib66/utils/module_search_service.lo src/lib66/utils/name_isvalid.lo src/lib66/utils/read_svfile.lo src/lib66/utils/set_livedir.lo src/lib66/utils/set_livescan.lo src/lib66/utils/set_livestate.lo src/lib66/utils/set_ownerhome.lo src/lib66/utils/set_ownersysdir.lo src/lib66/utils/yourgid.lo src/lib66/utils/youruid.lo src/lib66/write/write_classic.lo src/lib66/write/write_common.lo src/lib66/write/write_environ.lo src/lib66/write/write_execute_scripts.lo src/lib66/write/write_logger.lo src/lib66/write/write_oneshot.lo src/lib66/write/write_service.lo src/lib66/write/write_uint.lo
+lib66.so.xyzzy: src/lib66/enum/enum.lo src/lib66/environ/env_append_version.lo src/lib66/environ/env_check_version.lo src/lib66/environ/env_clean_with_comment.lo src/lib66/environ/env_compute.lo src/lib66/environ/env_find_current_version.lo src/lib66/environ/env_import_version_file.lo src/lib66/environ/env_make_symlink.lo src/lib66/environ/env_prepare_for_write.lo src/lib66/environ/env_resolve_conf.lo src/lib66/exec/ssexec_all.lo src/lib66/exec/ssexec_boot.lo src/lib66/exec/ssexec_reconfigure.lo src/lib66/exec/ssexec_reload.lo src/lib66/exec/ssexec_restart.lo src/lib66/exec/ssexec_disable.lo src/lib66/exec/ssexec_enable.lo src/lib66/exec/ssexec_env.lo src/lib66/exec/ssexec_free.lo src/lib66/exec/ssexec_help.lo src/lib66/exec/ssexec_init.lo src/lib66/exec/ssexec_inresolve.lo src/lib66/exec/ssexec_inservice.lo src/lib66/exec/ssexec_instate.lo src/lib66/exec/ssexec_intree.lo src/lib66/exec/ssexec_parse.lo src/lib66/exec/ssexec_start.lo src/lib66/exec/ssexec_stop.lo src/lib66/exec/ssexec_svctl.lo src/lib66/exec/ssexec_tree.lo src/lib66/graph/graph_build_service.lo src/lib66/graph/graph_build_service_bytree.lo src/lib66/graph/graph_build_service_bytree_from_src.lo src/lib66/graph/graph_build_service_from_list.lo src/lib66/graph/graph_build_tree.lo src/lib66/graph/graph_compute_dependencies.lo src/lib66/graph/graph_remove_deps.lo src/lib66/info/info_display_field_name.lo src/lib66/info/info_display_list.lo src/lib66/info/info_display_nline.lo src/lib66/info/info_field_align.lo src/lib66/info/info_getcols_fd.lo src/lib66/info/info_graph_display.lo src/lib66/info/info_graph_display_service.lo src/lib66/info/info_graph_display_tree.lo src/lib66/info/info_graph_init.lo src/lib66/info/info_length_from_wchar.lo src/lib66/info/info_walk.lo src/lib66/instance/instance_check.lo src/lib66/instance/instance_create.lo src/lib66/instance/instance_splitname.lo src/lib66/parse/parse_clean_line.lo src/lib66/parse/parse_clean_list.lo src/lib66/parse/parse_clean_quotes.lo src/lib66/parse/parse_clean_runas.lo src/lib66/parse/parse_compute_list.lo src/lib66/parse/parse_compute_resolve.lo src/lib66/parse/parse_contents.lo src/lib66/parse/parse_dependencies.lo src/lib66/parse/parse_error.lo src/lib66/parse/parse_frontend.lo src/lib66/parse/parse_line_g.lo src/lib66/parse/parse_mandatory.lo src/lib66/parse/parse_module.lo src/lib66/parse/parse_parentheses.lo src/lib66/parse/parse_section.lo src/lib66/parse/parse_service.lo src/lib66/parse/parse_split_from_section.lo src/lib66/parse/parse_store_environ.lo src/lib66/parse/parse_store_g.lo src/lib66/parse/parse_store_logger.lo src/lib66/parse/parse_store_main.lo src/lib66/parse/parse_store_regex.lo src/lib66/parse/parse_store_start_stop.lo src/lib66/resolve/resolve_add_cdb.lo src/lib66/resolve/resolve_add_cdb_uint.lo src/lib66/resolve/resolve_add_string.lo src/lib66/resolve/resolve_check.lo src/lib66/resolve/resolve_check_g.lo src/lib66/resolve/resolve_find_cdb.lo src/lib66/resolve/resolve_free.lo src/lib66/resolve/resolve_get_field_tosa.lo src/lib66/resolve/resolve_get_field_tosa_g.lo src/lib66/resolve/resolve_init.lo src/lib66/resolve/resolve_modify_field.lo src/lib66/resolve/resolve_modify_field_g.lo src/lib66/resolve/resolve_read.lo src/lib66/resolve/resolve_read_cdb.lo src/lib66/resolve/resolve_read_g.lo src/lib66/resolve/resolve_remove.lo src/lib66/resolve/resolve_remove_g.lo src/lib66/resolve/resolve_set_struct.lo src/lib66/resolve/resolve_write.lo src/lib66/resolve/resolve_write_cdb.lo src/lib66/resolve/resolve_write_g.lo src/lib66/sanitize/sanitize_fdholder.lo src/lib66/sanitize/sanitize_init.lo src/lib66/sanitize/sanitize_livestate.lo src/lib66/sanitize/sanitize_scandir.lo src/lib66/sanitize/sanitize_source.lo src/lib66/sanitize/sanitize_system.lo src/lib66/service/service_cmp_basedir.lo src/lib66/service/service_endof_dir.lo src/lib66/service/service_frontend_path.lo src/lib66/service/service_frontend_src.lo src/lib66/service/service_graph_build.lo src/lib66/service/service_graph_collect.lo src/lib66/service/service_graph_g.lo src/lib66/service/service_is_g.lo src/lib66/service/service_resolve_array_free.lo src/lib66/service/service_resolve_array_search.lo src/lib66/service/service_resolve_copy.lo src/lib66/service/service_resolve_get_field_tosa.lo src/lib66/service/service_resolve_master_copy.lo src/lib66/service/service_resolve_master_create.lo src/lib66/service/service_resolve_master_get_field_tosa.lo src/lib66/service/service_resolve_master_modify_field.lo src/lib66/service/service_resolve_master_read_cdb.lo src/lib66/service/service_resolve_master_write.lo src/lib66/service/service_resolve_master_write_cdb.lo src/lib66/service/service_resolve_modify_field.lo src/lib66/service/service_resolve_read_cdb.lo src/lib66/service/service_resolve_sort_bytype.lo src/lib66/service/service_resolve_write.lo src/lib66/service/service_resolve_write_cdb.lo src/lib66/shutdown/hpr_shutdown.lo src/lib66/shutdown/hpr_wall.lo src/lib66/state/state_check.lo src/lib66/state/state_get_flags.lo src/lib66/state/state_messenger.lo src/lib66/state/state_pack.lo src/lib66/state/state_read.lo src/lib66/state/state_rmfile.lo src/lib66/state/state_set_flag.lo src/lib66/state/state_unpack.lo src/lib66/state/state_write.lo src/lib66/svc/svc_scandir_ok.lo src/lib66/svc/svc_scandir_send.lo src/lib66/svc/svc_send.lo src/lib66/svc/svc_send_wait.lo src/lib66/svc/svc_unsupervise.lo src/lib66/tree/tree_find_current.lo src/lib66/tree/tree_get_permissions.lo src/lib66/tree/tree_iscurrent.lo src/lib66/tree/tree_isenabled.lo src/lib66/tree/tree_isinitialized.lo src/lib66/tree/tree_isvalid.lo src/lib66/tree/tree_ongroups.lo src/lib66/tree/tree_resolve_copy.lo src/lib66/tree/tree_resolve_get_field_tosa.lo src/lib66/tree/tree_resolve_master_copy.lo src/lib66/tree/tree_resolve_master_create.lo src/lib66/tree/tree_resolve_master_get_field_tosa.lo src/lib66/tree/tree_resolve_master_modify_field.lo src/lib66/tree/tree_resolve_master_read_cdb.lo src/lib66/tree/tree_resolve_master_write_cdb.lo src/lib66/tree/tree_resolve_modify_field.lo src/lib66/tree/tree_resolve_read_cdb.lo src/lib66/tree/tree_resolve_write_cdb.lo src/lib66/tree/tree_seed_file_isvalid.lo src/lib66/tree/tree_seed_free.lo src/lib66/tree/tree_seed_get_group_permissions.lo src/lib66/tree/tree_seed_get_key.lo src/lib66/tree/tree_seed_isvalid.lo src/lib66/tree/tree_seed_parse_file.lo src/lib66/tree/tree_seed_resolve_path.lo src/lib66/tree/tree_seed_setseed.lo src/lib66/tree/tree_sethome.lo src/lib66/tree/tree_setname.lo src/lib66/tree/tree_switch_current.lo src/lib66/utils/get_userhome.lo src/lib66/utils/module_in_cmdline.lo src/lib66/utils/module_path.lo src/lib66/utils/module_search_service.lo src/lib66/utils/name_isvalid.lo src/lib66/utils/read_svfile.lo src/lib66/utils/set_livedir.lo src/lib66/utils/set_livescan.lo src/lib66/utils/set_livestate.lo src/lib66/utils/set_ownerhome.lo src/lib66/utils/set_ownersysdir.lo src/lib66/utils/yourgid.lo src/lib66/utils/youruid.lo src/lib66/write/write_classic.lo src/lib66/write/write_common.lo src/lib66/write/write_environ.lo src/lib66/write/write_execute_scripts.lo src/lib66/write/write_logger.lo src/lib66/write/write_oneshot.lo src/lib66/write/write_service.lo src/lib66/write/write_uint.lo
diff --git a/package/modes b/package/modes
index 021267b7a4e2e22a3451af9a27056dbf2f94d2f9..5e81cba8de5034c40f7c49543de4fb0c5763adfc 100644
--- a/package/modes
+++ b/package/modes
@@ -1,20 +1,4 @@
-66-scandir          0755
-66-scanctl          0755
-66-init             0755
-66-tree             0755
-66-enable           0755
-66-disable          0755
-66-parse            0755
-66-start            0755
-66-stop             0755
-66-svctl            0755
-66-all              0755
-66-intree           0755
-66-inresolve        0755
-66-inservice        0755
-66-instate          0755
-66-env              0755
-66-boot             0755
+66                  0755
 66-shutdown         0755
 66-shutdownd        0755
 66-hpr              0755
diff --git a/package/targets.mak b/package/targets.mak
index 0b50c65d2668304687bfd6a0675028b3a511238a..a279c2a41aeb6751a5cf60d0aa28e268c1dfa86d 100644
--- a/package/targets.mak
+++ b/package/targets.mak
@@ -1,21 +1,5 @@
 BIN_TARGETS := \
-66-scandir \
-66-scanctl \
-66-init \
-66-tree \
-66-enable \
-66-disable \
-66-parse \
-66-start \
-66-stop \
-66-svctl \
-66-all \
-66-intree \
-66-inresolve \
-66-inservice \
-66-instate \
-66-env \
-66-boot \
+66 \
 66-shutdown \
 66-shutdownd \
 66-hpr \
diff --git a/src/66/66-all.c b/src/66/66-all.c
deleted file mode 100644
index 24828dbc6688cd65d18bef5e5c7ca429253b078e..0000000000000000000000000000000000000000
--- a/src/66/66-all.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * 66-all.c
- *
- * Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org>
- *
- * All rights reserved.
- *
- * This file is part of Obarun. It is subject to the license terms in
- * the LICENSE file found in the top-level directory of this
- * distribution.
- * This file may not be copied, modified, propagated, or distributed
- * except according to the terms contained in the LICENSE file./
- */
-
-#include <oblibs/log.h>
-
-#include <66/ssexec.h>
-
-int main(int argc, char const *const *argv,char const *const *envp)
-{
-    PROG = "66-all" ;
-
-    ssexec_t info = SSEXEC_ZERO ;
-
-    info.prog = PROG ;
-    info.help = help_all ;
-    info.usage = usage_all ;
-
-    /** 66-all supports to not define a default tree to start/stop,
-     * but ssexec_main do not support it. The tree_sethome() function
-     * will complain if a current tree is not define.
-     * So, ask to not set it. */
-
-    info.skip_opt_tree = 1 ;
-
-    return ssexec_main(argc,argv,envp,&ssexec_all,&info) ;
-}
diff --git a/src/66/66-disable.c b/src/66/66-disable.c
deleted file mode 100644
index d5d50c9e9b0f8b2d146fb89edf69ed81b611efc4..0000000000000000000000000000000000000000
--- a/src/66/66-disable.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * 66-disable.c
- *
- * Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org>
- *
- * All rights reserved.
- *
- * This file is part of Obarun. It is subject to the license terms in
- * the LICENSE file found in the top-level directory of this
- * distribution.
- * This file may not be copied, modified, propagated, or distributed
- * except according to the terms contained in the LICENSE file./
- */
-
-#include <oblibs/log.h>
-
-#include <66/ssexec.h>
-
-int main(int argc, char const *const *argv,char const *const *envp)
-{
-    PROG = "66-disable" ;
-
-    ssexec_t info = SSEXEC_ZERO ;
-
-    info.prog = PROG ;
-    info.help = help_disable ;
-    info.usage = usage_disable ;
-
-    return ssexec_main(argc,argv,envp,&ssexec_disable,&info) ;
-}
-
-
diff --git a/src/66/66-enable.c b/src/66/66-enable.c
deleted file mode 100644
index cf2d00731218f5b62b2990e63a503d0428f4212b..0000000000000000000000000000000000000000
--- a/src/66/66-enable.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * 66-enable.c
- *
- * Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org>
- *
- * All rights reserved.
- *
- * This file is part of Obarun. It is subject to the license terms in
- * the LICENSE file found in the top-level directory of this
- * distribution.
- * This file may not be copied, modified, propagated, or distributed
- * except according to the terms contained in the LICENSE file./
- */
-
-#include <oblibs/log.h>
-
-#include <66/ssexec.h>
-
-int main(int argc, char const *const *argv,char const *const *envp)
-{
-    PROG = "66-enable" ;
-
-    ssexec_t info = SSEXEC_ZERO ;
-
-    info.prog = PROG ;
-    info.help = help_enable ;
-    info.usage = usage_enable ;
-
-    /** The tree can be define by the frontend service file
-     * with the field @intree. So, avoid to crash at call of
-     * the tree_sethome() function. */
-    info.skip_opt_tree = 1 ;
-
-    return ssexec_main(argc,argv,envp,&ssexec_enable,&info) ;
-}
-
-
diff --git a/src/66/66-env.c b/src/66/66-env.c
deleted file mode 100644
index c37a79400b167cf9ec2a307cd003c722cfad052f..0000000000000000000000000000000000000000
--- a/src/66/66-env.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * 66-env.c
- *
- * Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org>
- *
- * All rights reserved.
- *
- * This file is part of Obarun. It is subject to the license terms in
- * the LICENSE file found in the top-level directory of this
- * distribution.
- * This file may not be copied, modified, propagated, or distributed
- * except according to the terms contained in the LICENSE file./
- */
-
-#include <oblibs/log.h>
-
-#include <66/ssexec.h>
-
-int main(int argc, char const *const *argv,char const *const *envp)
-{
-    PROG = "66-env" ;
-
-    ssexec_t info = SSEXEC_ZERO ;
-
-    info.prog = PROG ;
-    info.help = help_env ;
-    info.usage = usage_env ;
-
-    return ssexec_main(argc,argv,envp,&ssexec_env,&info) ;
-}
-
-
diff --git a/src/66/66-init.c b/src/66/66-init.c
deleted file mode 100644
index 5d81b16fb2504a519949c9acf2b6068c1e7c29a0..0000000000000000000000000000000000000000
--- a/src/66/66-init.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * 66-init.c
- *
- * Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org>
- *
- * All rights reserved.
- *
- * This file is part of Obarun. It is subject to the license terms in
- * the LICENSE file found in the top-level directory of this
- * distribution.
- * This file may not be copied, modified, propagated, or distributed
- * except according to the terms contained in the LICENSE file./
- */
-
-#include <oblibs/log.h>
-
-#include <66/ssexec.h>
-
-int main(int argc, char const *const *argv,char const *const *envp)
-{
-    PROG = "66-init" ;
-
-    ssexec_t info = SSEXEC_ZERO ;
-
-    info.prog = PROG ;
-    info.help = help_init ;
-    info.usage = usage_init ;
-
-    return ssexec_main(argc,argv,envp,&ssexec_init,&info) ;
-}
-
-
diff --git a/src/66/66-parse.c b/src/66/66-parse.c
deleted file mode 100644
index 2fd55ae2e3c3a9d8d6fd3d24b0fc42c29a7502f7..0000000000000000000000000000000000000000
--- a/src/66/66-parse.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * 66-parse.c
- *
- * Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org>
- *
- * All rights reserved.
- *
- * This file is part of Obarun. It is subject to the license terms in
- * the LICENSE file found in the top-level directory of this
- * distribution.
- * This file may not be copied, modified, propagated, or distributed
- * except according to the terms contained in the LICENSE file./
- */
-
-#include <oblibs/log.h>
-
-#include <66/ssexec.h>
-
-int main(int argc, char const *const *argv,char const *const *envp)
-{
-    PROG = "66-parse" ;
-
-    ssexec_t info = SSEXEC_ZERO ;
-
-    info.prog = PROG ;
-    info.help = help_parse ;
-    info.usage = usage_parse ;
-
-    info.skip_opt_tree = 1 ;
-
-    return ssexec_main(argc, argv, envp, &ssexec_parse, &info) ;
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/66/66-start.c b/src/66/66-start.c
deleted file mode 100644
index 66b8f073ca1b383f604e52da41ed967017b35c0d..0000000000000000000000000000000000000000
--- a/src/66/66-start.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * 66-start.c
- *
- * Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org>
- *
- * All rights reserved.
- *
- * This file is part of Obarun. It is subject to the license terms in
- * the LICENSE file found in the top-level directory of this
- * distribution.
- * This file may not be copied, modified, propagated, or distributed
- * except according to the terms contained in the LICENSE file./
- */
-
-#include <oblibs/log.h>
-
-#include <66/ssexec.h>
-
-int main(int argc, char const *const *argv,char const *const *envp)
-{
-    PROG = "66-start" ;
-
-    ssexec_t info = SSEXEC_ZERO ;
-
-    info.prog = PROG ;
-    info.help = help_start ;
-    info.usage = usage_start ;
-
-    return ssexec_main(argc,argv,envp,&ssexec_start,&info) ;
-}
-
-
diff --git a/src/66/66-stop.c b/src/66/66-stop.c
deleted file mode 100644
index ff391e8f00df339145731c1ab387324b09ff9038..0000000000000000000000000000000000000000
--- a/src/66/66-stop.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * 66-stop.c
- *
- * Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org>
- *
- * All rights reserved.
- *
- * This file is part of Obarun. It is subject to the license terms in
- * the LICENSE file found in the top-level directory of this
- * distribution.
- * This file may not be copied, modified, propagated, or distributed
- * except according to the terms contained in the LICENSE file./
- */
-
-#include <oblibs/log.h>
-
-#include <66/ssexec.h>
-
-int main(int argc, char const *const *argv,char const *const *envp)
-{
-    PROG = "66-stop" ;
-
-    ssexec_t info = SSEXEC_ZERO ;
-
-    info.prog = PROG ;
-    info.help = help_stop ;
-    info.usage = usage_stop ;
-
-    return ssexec_main(argc,argv,envp,&ssexec_stop,&info) ;
-}
-
-
diff --git a/src/66/66-svctl.c b/src/66/66-svctl.c
deleted file mode 100644
index 17e128199e9ede396960ca0be959f43a3dbbbca6..0000000000000000000000000000000000000000
--- a/src/66/66-svctl.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * 66-svctl.c
- *
- * Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org>
- *
- * All rights reserved.
- *
- * This file is part of Obarun. It is subject to the license terms in
- * the LICENSE file found in the top-level directory of this
- * distribution.
- * This file may not be copied, modified, propagated, or distributed
- * except according to the terms contained in the LICENSE file./
- */
-
-#include <oblibs/log.h>
-
-#include <66/ssexec.h>
-
-int main(int argc, char const *const *argv,char const *const *envp)
-{
-    PROG = "66-svctl" ;
-
-    ssexec_t info = SSEXEC_ZERO ;
-
-    info.prog = PROG ;
-    info.help = help_svctl ;
-    info.usage = usage_svctl ;
-
-    return ssexec_main(argc,argv,envp,&ssexec_svctl,&info) ;
-}
-
-
diff --git a/src/66/66-tree.c b/src/66/66-tree.c
deleted file mode 100644
index 4b7d9867dd2f39f9546e7f10d8ada122491c0a08..0000000000000000000000000000000000000000
--- a/src/66/66-tree.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * 66-tree.c
- *
- * Copyright (c) 2018-2021-2019 Eric Vidal <eric@obarun.org>
- *
- * All rights reserved.
- *
- * This file is part of Obarun. It is subject to the license terms in
- * the LICENSE file found in the top-level directory of this
- * distribution.
- * This file may not be copied, modified, propagated, or distributed
- * except according to the terms contained in the LICENSE file./
- */
-
-#include <oblibs/log.h>
-
-#include <66/ssexec.h>
-
-int main(int argc, char const *const *argv,char const *const *envp)
-{
-    PROG = "66-tree" ;
-
-    ssexec_t info = SSEXEC_ZERO ;
-
-    info.prog = PROG ;
-    info.help = help_tree ;
-    info.usage = usage_tree ;
-
-    info.skip_opt_tree = 1 ;
-
-    return ssexec_main(argc,argv,envp,&ssexec_tree,&info) ;
-}
diff --git a/src/66/66.c b/src/66/66.c
new file mode 100644
index 0000000000000000000000000000000000000000..aba41001959f73e2853eb066ca17371ce3ee4c6d
--- /dev/null
+++ b/src/66/66.c
@@ -0,0 +1,521 @@
+/*
+ * 66.c
+ *
+ * Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org>
+ *
+ * All rights reserved.
+ *
+ * This file is part of Obarun. It is subject to the license terms in
+ * the LICENSE file found in the top-level directory of this
+ * distribution.
+ * This file may not be copied, modified, propagated, or distributed
+ * except according to the terms contained in the LICENSE file./
+ */
+
+#include <string.h>
+#include <unistd.h>//getuid, isatty
+
+#include <oblibs/log.h>
+#include <oblibs/string.h>
+
+#include <skalibs/sgetopt.h>
+#include <skalibs/types.h>
+
+#include <66/ssexec.h>
+#include <66/utils.h>
+#include <66/sanitize.h>
+#include <66/tree.h>
+
+static inline void info_help (char const *help,char const *usage)
+{
+    log_flow() ;
+
+    DEFAULT_MSG = 0 ;
+
+    log_info(usage,"\n", help) ;
+}
+
+void set_treeinfo(ssexec_t *info)
+{
+    log_flow() ;
+
+    int r = tree_sethome(info) ;
+    if (r == -3)
+        log_dieu(LOG_EXIT_USER, "find the current tree. You must use the -t options") ;
+    if (r == -2)
+        log_dieu(LOG_EXIT_USER, "set the tree name") ;
+    if (r == -1)
+        log_dieu(LOG_EXIT_USER, "parse seed file") ;
+    if (!r)
+        log_dieusys(LOG_EXIT_SYS, "find tree: ", info->treename.s) ;
+
+    if (!tree_get_permissions(info->tree.s, info->owner))
+        log_die(LOG_EXIT_USER,"You're not allowed to use the tree: ",info->tree.s) ;
+
+    info->treeallow = 1 ;
+}
+
+static void set_info(ssexec_t *info)
+{
+    log_flow() ;
+
+    int r ;
+
+    if (!info->skip_opt_tree)
+        set_treeinfo(info) ;
+
+    r = set_livedir(&info->live) ;
+    if (!r)
+        log_die_nomem("stralloc") ;
+    if(r < 0)
+        log_die(LOG_EXIT_SYS, "live: ", info->live.s, " must be an absolute path") ;
+
+    if (!stralloc_copy(&info->scandir, &info->live))
+        log_die_nomem("stralloc") ;
+
+    r = set_livescan(&info->scandir, info->owner) ;
+    if (!r)
+        log_die_nomem("stralloc") ;
+    if(r < 0)
+        log_die(LOG_EXIT_SYS, "scandir: ", info->scandir.s, " must be an absolute path") ;
+}
+
+int main(int argc, char const *const *argv)
+{
+
+    if (!argv[1]) {
+        PROG = "66" ;
+        log_usage(usage_66) ;
+    }
+
+    int r, n = 0, i = 0 ;
+    /** 30 options should be large enough */
+    char opts[30] ;
+    char const *main = "hv:l:t:T:z" ;
+    char str[UINT_FMT] ;
+    char const *nargv[argc + 1] ;
+
+    ssexec_t info = SSEXEC_ZERO ;
+    ssexec_func_t_ref func = 0 ;
+    log_color = &log_color_disable ;
+
+    info.owner = getuid() ;
+    info.ownerlen = uid_fmt(info.ownerstr, info.owner) ;
+    info.ownerstr[info.ownerlen] = 0 ;
+
+    if (!set_ownersysdir(&info.base, info.owner))
+        log_dieusys(LOG_EXIT_SYS, "set owner directory") ;
+
+
+    if (!strcmp(argv[1], "boot")) {
+
+        PROG = "boot" ;
+        nargv[n++] = PROG ;
+        info.prog = PROG ;
+        info.help = help_boot ;
+        info.usage = usage_boot ;
+        func = &ssexec_boot ;
+
+        //sanitize_system(&info) ;
+
+        auto_strings(opts, main, OPTS_BOOT) ;
+
+    } else if (!strcmp(argv[1], "enable")) {
+
+        PROG = "enable" ;
+        nargv[n++] = PROG ;
+        info.prog = PROG ;
+        info.help = help_enable ;
+        info.usage = usage_enable ;
+        func = &ssexec_enable ;
+
+        sanitize_system(&info) ;
+
+        auto_strings(opts, main, OPTS_ENABLE) ;
+
+    } else if (!strcmp(argv[1], "disable")) {
+
+        PROG = "disable" ;
+        nargv[n++] = PROG ;
+        info.prog = PROG ;
+        info.help = help_disable ;
+        info.usage = usage_disable ;
+        func = &ssexec_disable ;
+
+        sanitize_system(&info) ;
+
+        auto_strings(opts, main, OPTS_DISABLE) ;
+
+    } else if (!strcmp(argv[1], "start")) {
+
+        PROG = "start" ;
+        nargv[n++] = PROG ;
+        info.prog = PROG ;
+        info.help = help_start ;
+        info.usage = usage_start ;
+        func = &ssexec_start ;
+
+        sanitize_system(&info) ;
+
+        auto_strings(opts, main, OPTS_START) ;
+
+    } else if (!strcmp(argv[1], "stop")) {
+
+        PROG = "stop" ;
+        nargv[n++] = PROG ;
+        info.prog = PROG ;
+        info.help = help_stop ;
+        info.usage = usage_stop ;
+        func = &ssexec_stop ;
+
+        sanitize_system(&info) ;
+
+        auto_strings(opts, main, OPTS_STOP) ;
+
+    } else if (!strcmp(argv[1], "stop")) {
+
+        PROG = "stop" ;
+        nargv[n++] = PROG ;
+        info.prog = PROG ;
+        info.help = help_stop ;
+        info.usage = usage_stop ;
+        func = &ssexec_stop ;
+
+        sanitize_system(&info) ;
+
+        auto_strings(opts, main, OPTS_STOP) ;
+
+    } else if (!strcmp(argv[1], "all")) {
+
+        PROG = "all" ;
+        nargv[n++] = PROG ;
+        info.prog = PROG ;
+        info.help = help_all ;
+        info.usage = usage_all ;
+        func = &ssexec_all ;
+
+        sanitize_system(&info) ;
+
+        auto_strings(opts, main, OPTS_ALL) ;
+
+    } else if (!strcmp(argv[1], "env")) {
+
+        PROG = "env" ;
+        nargv[n++] = PROG ;
+        info.prog = PROG ;
+        info.help = help_env ;
+        info.usage = usage_env ;
+        func = &ssexec_env ;
+
+        sanitize_system(&info) ;
+
+        auto_strings(opts, main, OPTS_ENV) ;
+
+    } else if (!strcmp(argv[1], "init")) {
+
+        PROG = "init" ;
+        nargv[n++] = PROG ;
+        info.prog = PROG ;
+        info.help = help_init ;
+        info.usage = usage_init ;
+        func = &ssexec_init ;
+
+        sanitize_system(&info) ;
+
+        auto_strings(opts, main, OPTS_INIT) ;
+
+    } else if (!strcmp(argv[1], "parse")) {
+
+        PROG = "parse" ;
+        nargv[n++] = PROG ;
+        info.prog = PROG ;
+        info.help = help_parse ;
+        info.usage = usage_parse ;
+        func = &ssexec_parse ;
+
+        sanitize_system(&info) ;
+
+        auto_strings(opts, main, OPTS_PARSE) ;
+
+    } else if (!strcmp(argv[1], "reconfigure")) {
+
+        PROG = "reconfigure" ;
+        nargv[n++] = PROG ;
+        info.prog = PROG ;
+        info.help = help_reconfigure ;
+        info.usage = usage_reconfigure ;
+        func = &ssexec_reconfigure ;
+
+        sanitize_system(&info) ;
+
+        auto_strings(opts, main, OPTS_SUBSTART) ;
+
+    } else if (!strcmp(argv[1], "reload")) {
+
+        PROG = "reload" ;
+        nargv[n++] = PROG ;
+        info.prog = PROG ;
+        info.help = help_reload ;
+        info.usage = usage_reload ;
+        func = &ssexec_reload ;
+
+        sanitize_system(&info) ;
+
+        auto_strings(opts, main, OPTS_SUBSTART) ;
+
+    } else if (!strcmp(argv[1], "restart")) {
+
+        PROG = "restart" ;
+        nargv[n++] = PROG ;
+        info.prog = PROG ;
+        info.help = help_restart ;
+        info.usage = usage_restart ;
+        func = &ssexec_restart ;
+
+        sanitize_system(&info) ;
+
+        auto_strings(opts, main, OPTS_SUBSTART) ;
+
+    } else if (!strcmp(argv[1], "unsupervise")) {
+
+        PROG = "stop" ;
+        nargv[n++] = PROG ;
+        nargv[n++] = "-u" ;
+        info.prog = PROG ;
+        info.help = help_stop ;
+        info.usage = usage_stop ;
+        func = &ssexec_stop ;
+
+        sanitize_system(&info) ;
+
+        auto_strings(opts, main, OPTS_STOP) ;
+
+    } else if (!strcmp(argv[1], "svctl")) {
+
+        PROG = "svctl" ;
+        nargv[n++] = PROG ;
+        info.prog = PROG ;
+        info.help = help_svctl ;
+        info.usage = usage_svctl ;
+        func = &ssexec_svctl ;
+
+        sanitize_system(&info) ;
+
+        auto_strings(opts, main, OPTS_SVCTL) ;
+
+    } else if (!strcmp(argv[1], "tree")) {
+
+        PROG = "tree" ;
+        nargv[n++] = PROG ;
+        info.prog = PROG ;
+        info.help = help_tree ;
+        info.usage = usage_tree ;
+        func = &ssexec_tree ;
+
+        sanitize_system(&info) ;
+
+        auto_strings(opts, main, OPTS_TREE) ;
+
+    } else if (!strcmp(argv[1], "inresolve")) {
+
+        PROG = "inresolve" ;
+        nargv[n++] = PROG ;
+        info.prog = PROG ;
+        info.help = help_inresolve ;
+        info.usage = usage_inresolve ;
+        func = &ssexec_inresolve ;
+
+        sanitize_system(&info) ;
+
+        auto_strings(opts, main, OPTS_INRESOLVE) ;
+
+    } else if (!strcmp(argv[1], "instate")) {
+
+        PROG = "instate" ;
+        nargv[n++] = PROG ;
+        info.prog = PROG ;
+        info.help = help_instate ;
+        info.usage = usage_instate ;
+        func = &ssexec_instate ;
+
+        sanitize_system(&info) ;
+
+        auto_strings(opts, main, OPTS_INSTATE) ;
+
+    } else if (!strcmp(argv[1], "intree")) {
+
+        PROG = "intree" ;
+        nargv[n++] = PROG ;
+        info.prog = PROG ;
+        info.help = help_intree ;
+        info.usage = usage_intree ;
+        func = &ssexec_intree ;
+
+        sanitize_system(&info) ;
+
+        auto_strings(opts, main, OPTS_INTREE) ;
+
+    } else if (!strcmp(argv[1], "inservice")) {
+
+        PROG = "inservice" ;
+        nargv[n++] = PROG ;
+        info.prog = PROG ;
+        info.help = help_inservice ;
+        info.usage = usage_inservice ;
+        func = &ssexec_inservice ;
+
+        sanitize_system(&info) ;
+
+        auto_strings(opts, main, OPTS_INSERVICE) ;
+
+    } else if (!strcmp(argv[1], "scanctl")) {
+
+        PROG = "scanctl" ;
+        nargv[n++] = PROG ;
+        info.prog = PROG ;
+        info.help = help_scanctl ;
+        info.usage = usage_scanctl ;
+        func = &ssexec_scanctl ;
+
+        //sanitize_system(&info) ;
+
+        auto_strings(opts, main, OPTS_SCANCTL) ;
+
+    } else if (!strcmp(argv[1], "scandir")) {
+
+        PROG = "scandir" ;
+        nargv[n++] = PROG ;
+        info.prog = PROG ;
+        info.help = help_scandir ;
+        info.usage = usage_scandir ;
+        func = &ssexec_scandir ;
+
+        //sanitize_system(&info) ;
+
+        auto_strings(opts, main, OPTS_SCANDIR) ;
+
+    } else {
+
+        log_usage(usage_66) ;
+    }
+
+    argc-- ;
+    argv++ ;
+
+    {
+        subgetopt l = SUBGETOPT_ZERO ;
+
+        int f = 0 ;
+        for (;;)
+        {
+            int opt = subgetopt_r(argc, argv, opts, &l) ;
+
+            if (opt == -1) break ;
+            switch (opt)
+            {
+                case 'h' :
+
+                    info_help(info.help, info.usage) ;
+                    return 0 ;
+
+                case 'v' :
+
+                    if (!uint0_scan(l.arg, &VERBOSITY))
+                        log_usage(info.usage) ;
+                    info.opt_verbo = 1 ;
+                    break ;
+
+                case 'l' :
+
+                    str[uint_fmt(str, SS_MAX_PATH)] = 0 ;
+
+                    if (strlen(l.arg) > SS_MAX_PATH)
+                        log_die(LOG_EXIT_USER, "live path is too long -- it can not exceed ", str) ;
+
+                    if (!auto_stra(&info.live, l.arg))
+                        log_die_nomem("stralloc") ;
+
+                    info.opt_live = 1 ;
+                    break ;
+
+                case 't' :
+
+                    str[uint_fmt(str, SS_MAX_TREENAME)] = 0 ;
+
+                    if (strlen(l.arg) > SS_MAX_TREENAME)
+                        log_die(LOG_EXIT_USER, "tree name is too long -- it can not exceed ", str) ;
+
+                    if (!auto_stra(&info.treename, l.arg))
+                        log_die_nomem("stralloc") ;
+
+                    info.opt_tree = 1 ;
+                    info.skip_opt_tree = 0 ;
+                    break ;
+
+                case 'T' :
+
+                    if (!uint0_scan(l.arg, &info.timeout))
+                        log_usage(info.usage) ;
+                    info.opt_timeout = 1 ;
+                    break ;
+
+                case 'z' :
+
+                    log_color = !isatty(1) ? &log_color_disable : &log_color_enable ;
+                    info.opt_color = 1 ;
+                    break ;
+
+                default :
+
+                    for (i = 0 ; i < n ; i++) {
+
+                        if (!argv[l.ind])
+                            log_usage(info.usage) ;
+
+                        if (l.arg) {
+
+                            if (!strcmp(nargv[i],argv[l.ind - 2]) || !strcmp(nargv[i],l.arg))
+                                f = 1 ;
+
+                        } else {
+
+                            if (!strcmp(nargv[i],argv[l.ind]))
+                                f = 1 ;
+                        }
+                    }
+
+                    if (!f) {
+
+                        if (l.arg) {
+                            // distinction between e.g -enano and -e nano
+                            if (argv[l.ind - 1][0] != '-')
+                                nargv[n++] = argv[l.ind - 2] ;
+
+                            nargv[n++] = argv[l.ind - 1] ;
+
+                        } else {
+
+                            nargv[n++] = argv[l.ind] ;
+                        }
+                    }
+                    f = 0 ;
+                    break ;
+            }
+        }
+        argc -= l.ind ; argv += l.ind ;
+    }
+
+    set_info(&info) ;
+
+    for (i = 0 ; i < argc ; i++ , argv++)
+        nargv[n++] = *argv ;
+
+    nargv[n] = 0 ;
+
+    r = (*func)(n, nargv, &info) ;
+
+    ssexec_free(&info) ;
+
+    return r ;
+
+}
diff --git a/src/66/deps-exe/66-all b/src/66/deps-exe/66
similarity index 100%
rename from src/66/deps-exe/66-all
rename to src/66/deps-exe/66
diff --git a/src/66/deps-exe/66-boot b/src/66/deps-exe/66-boot
deleted file mode 100644
index bc799f3349039873f5dba6b56a175016ea63b5b0..0000000000000000000000000000000000000000
--- a/src/66/deps-exe/66-boot
+++ /dev/null
@@ -1,5 +0,0 @@
-${LIB66}
--ls6
--loblibs
--lskarnet
-${SPAWN_LIB}
diff --git a/src/66/deps-exe/66-disable b/src/66/deps-exe/66-disable
deleted file mode 100644
index 390fc3b50a19ade5209e13428a74ea3806b77192..0000000000000000000000000000000000000000
--- a/src/66/deps-exe/66-disable
+++ /dev/null
@@ -1,5 +0,0 @@
-${LIB66}
--ls6
--loblibs
--lskarnet
-
diff --git a/src/66/deps-exe/66-enable b/src/66/deps-exe/66-enable
deleted file mode 100644
index 306db624e775967d5f8dee9157a531ba4d44f70b..0000000000000000000000000000000000000000
--- a/src/66/deps-exe/66-enable
+++ /dev/null
@@ -1,4 +0,0 @@
-${LIB66}
--ls6
--loblibs
--lskarnet
diff --git a/src/66/deps-exe/66-env b/src/66/deps-exe/66-env
deleted file mode 100644
index 70626b64cf11b084481656bb85292f5b63f01300..0000000000000000000000000000000000000000
--- a/src/66/deps-exe/66-env
+++ /dev/null
@@ -1,6 +0,0 @@
-${LIB66}
--ls6
--loblibs
--lskarnet
-
-
diff --git a/src/66/deps-exe/66-info b/src/66/deps-exe/66-info
deleted file mode 100644
index 306db624e775967d5f8dee9157a531ba4d44f70b..0000000000000000000000000000000000000000
--- a/src/66/deps-exe/66-info
+++ /dev/null
@@ -1,4 +0,0 @@
-${LIB66}
--ls6
--loblibs
--lskarnet
diff --git a/src/66/deps-exe/66-init b/src/66/deps-exe/66-init
deleted file mode 100644
index 306db624e775967d5f8dee9157a531ba4d44f70b..0000000000000000000000000000000000000000
--- a/src/66/deps-exe/66-init
+++ /dev/null
@@ -1,4 +0,0 @@
-${LIB66}
--ls6
--loblibs
--lskarnet
diff --git a/src/66/deps-exe/66-inresolve b/src/66/deps-exe/66-inresolve
deleted file mode 100644
index 9c58365fcec451152a7b10b51a36af3a3612a3fa..0000000000000000000000000000000000000000
--- a/src/66/deps-exe/66-inresolve
+++ /dev/null
@@ -1,3 +0,0 @@
-${LIB66}
--loblibs
--lskarnet
diff --git a/src/66/deps-exe/66-inservice b/src/66/deps-exe/66-inservice
deleted file mode 100644
index bc799f3349039873f5dba6b56a175016ea63b5b0..0000000000000000000000000000000000000000
--- a/src/66/deps-exe/66-inservice
+++ /dev/null
@@ -1,5 +0,0 @@
-${LIB66}
--ls6
--loblibs
--lskarnet
-${SPAWN_LIB}
diff --git a/src/66/deps-exe/66-instate b/src/66/deps-exe/66-instate
deleted file mode 100644
index 9c58365fcec451152a7b10b51a36af3a3612a3fa..0000000000000000000000000000000000000000
--- a/src/66/deps-exe/66-instate
+++ /dev/null
@@ -1,3 +0,0 @@
-${LIB66}
--loblibs
--lskarnet
diff --git a/src/66/deps-exe/66-intree b/src/66/deps-exe/66-intree
deleted file mode 100644
index 306db624e775967d5f8dee9157a531ba4d44f70b..0000000000000000000000000000000000000000
--- a/src/66/deps-exe/66-intree
+++ /dev/null
@@ -1,4 +0,0 @@
-${LIB66}
--ls6
--loblibs
--lskarnet
diff --git a/src/66/deps-exe/66-parse b/src/66/deps-exe/66-parse
deleted file mode 100644
index 306db624e775967d5f8dee9157a531ba4d44f70b..0000000000000000000000000000000000000000
--- a/src/66/deps-exe/66-parse
+++ /dev/null
@@ -1,4 +0,0 @@
-${LIB66}
--ls6
--loblibs
--lskarnet
diff --git a/src/66/deps-exe/66-start b/src/66/deps-exe/66-start
deleted file mode 100644
index 306db624e775967d5f8dee9157a531ba4d44f70b..0000000000000000000000000000000000000000
--- a/src/66/deps-exe/66-start
+++ /dev/null
@@ -1,4 +0,0 @@
-${LIB66}
--ls6
--loblibs
--lskarnet
diff --git a/src/66/deps-exe/66-stop b/src/66/deps-exe/66-stop
deleted file mode 100644
index 306db624e775967d5f8dee9157a531ba4d44f70b..0000000000000000000000000000000000000000
--- a/src/66/deps-exe/66-stop
+++ /dev/null
@@ -1,4 +0,0 @@
-${LIB66}
--ls6
--loblibs
--lskarnet
diff --git a/src/66/deps-exe/66-svctl b/src/66/deps-exe/66-svctl
deleted file mode 100644
index ec930b0468a1ecc85f4399db401081861a34663b..0000000000000000000000000000000000000000
--- a/src/66/deps-exe/66-svctl
+++ /dev/null
@@ -1,5 +0,0 @@
-${LIB66}
--ls6
--loblibs
--lskarnet
-${SYSCLOCK_LIB}
diff --git a/src/66/deps-exe/66-tree b/src/66/deps-exe/66-tree
deleted file mode 100644
index bc799f3349039873f5dba6b56a175016ea63b5b0..0000000000000000000000000000000000000000
--- a/src/66/deps-exe/66-tree
+++ /dev/null
@@ -1,5 +0,0 @@
-${LIB66}
--ls6
--loblibs
--lskarnet
-${SPAWN_LIB}
diff --git a/src/include/66/ssexec.h b/src/include/66/ssexec.h
index 666c3e578201e3281fb5b94250c99a1fff170df1..350bc8677d44fe542a04d30b340df227943515a4 100644
--- a/src/include/66/ssexec.h
+++ b/src/include/66/ssexec.h
@@ -111,6 +111,16 @@ extern ssexec_func_t ssexec_svctl ;
 extern ssexec_func_t ssexec_env ;
 extern ssexec_func_t ssexec_all ;
 extern ssexec_func_t ssexec_tree ;
+extern ssexec_func_t ssexec_reconfigure ;
+extern ssexec_func_t ssexec_reload ;
+extern ssexec_func_t ssexec_restart ;
+extern ssexec_func_t ssexec_inresolve ;
+extern ssexec_func_t ssexec_instate ;
+extern ssexec_func_t ssexec_intree ;
+extern ssexec_func_t ssexec_inservice ;
+extern ssexec_func_t ssexec_boot ;
+extern ssexec_func_t ssexec_scanctl ;
+extern ssexec_func_t ssexec_scandir ;
 
 extern char const *usage_parse ;
 extern char const *help_parse ;
@@ -132,18 +142,43 @@ extern char const *usage_all ;
 extern char const *help_all ;
 extern char const *usage_tree ;
 extern char const *help_tree ;
-
+extern char const *usage_reconfigure ;
+extern char const *help_reconfigure ;
+extern char const *usage_reload ;
+extern char const *help_reload ;
+extern char const *usage_restart ;
+extern char const *help_restart ;
+extern char const *usage_unsupervise ;
+extern char const *help_unsupervise ;
+extern char const *usage_inresolve ;
+extern char const *help_inresolve ;
+extern char const *usage_instate ;
+extern char const *help_instate ;
+extern char const *usage_intree ;
+extern char const *help_intree ;
+extern char const *usage_inservice ;
+extern char const *help_inservice ;
+extern char const *usage_boot ;
+extern char const *help_boot ;
+extern char const *usage_scanctl ;
+extern char const *help_scanctl ;
+extern char const *usage_scandir ;
+extern char const *help_scandir ;
+extern char const *usage_66 ;
+
+#define OPTS_SUBSTART "P"
+#define OPTS_SUBSTART_LEN (sizeof OPTS_SUBSTART - 1)
 #define OPTS_PARSE "fFcmCI"
 #define OPTS_PARSE_LEN (sizeof OPTS_PARSE - 1)
-#define OPTS_INIT "o:"
+#define OPTS_INIT ""
 #define OPTS_INIT_LEN (sizeof OPTS_INIT - 1)
 #define OPTS_ENABLE "fFSI"
 #define OPTS_ENABLE_LEN (sizeof OPTS_ENABLE - 1)
 #define OPTS_DISABLE "SFR"
 #define OPTS_DISABLE_LEN (sizeof OPTS_DISABLE - 1)
-#define OPTS_START "rR"
+#define OPTS_START "P"
 #define OPTS_START_LEN (sizeof OPTS_START - 1)
-#define OPTS_STOP "uXK"
+#define OPTS_STOP "P"
 #define OPTS_STOP_LEN (sizeof OPTS_STOP - 1)
 #define OPTS_SVCTL "abqhkti12pcyroduxOw:P"
 #define OPTS_SVCTL_LEN (sizeof OPTS_SVCTL - 1)
@@ -153,9 +188,21 @@ extern char const *help_tree ;
 #define OPTS_ALL_LEN (sizeof OPTS_ALL - 1)
 #define OPTS_TREE "na:d:cS:EDRC:o:"
 #define OPTS_TREE_LEN (sizeof OPTS_TREE - 1)
+#define OPTS_INRESOLVE ""
+#define OPTS_INRESOLVE_LEN (sizeof OPTS_INRESOLVE - 1)
+#define OPTS_INSTATE ""
+#define OPTS_INSTATE_LEN (sizeof OPTS_INSTATE - 1)
+#define OPTS_INTREE "no:grd:l:"
+#define OPTS_INTREE_LEN (sizeof OPTS_INTREE - 1)
+#define OPTS_INSERVICE "no:grd:t:p:"
+#define OPTS_INSERVICE_LEN (sizeof OPTS_INSERVICE - 1)
+#define OPTS_BOOT "ms:e:d:b:l:"
+#define OPTS_BOOT_LEN (sizeof OPTS_BOOT - 1)
+#define OPTS_SCANCTL "o:d:t:e:"
+#define OPTS_SCANCTL_LEN (sizeof OPTS_SCANCTL - 1)
+#define OPTS_SCANDIR "bl:s:o:L:cB"
+#define OPTS_SCANDIR_LEN (sizeof OPTS_SCANDIR - 1)
+
 
-extern int ssexec_main(int argc, char const *const *argv, char const *const *envp,ssexec_func_t *func,ssexec_t *info) ;
-extern void ssexec_set_info(ssexec_t *info) ;
-extern int ssexec_set_treeinfo(ssexec_t *info) ;
 
 #endif
diff --git a/src/lib66/exec/deps-lib/deps b/src/lib66/exec/deps-lib/deps
index ca1bded6332b7ea3707f595c4bb53b2f4cec20c7..10580b4f8e98e1f7141a610470500e1b5f266c29 100644
--- a/src/lib66/exec/deps-lib/deps
+++ b/src/lib66/exec/deps-lib/deps
@@ -1,12 +1,21 @@
 ssexec_all.o
+ssexec_boot.o
 ssexec_disable.o
 ssexec_enable.o
 ssexec_env.o
 ssexec_free.o
 ssexec_help.o
 ssexec_init.o
-ssexec_main.o
+ssexec_inresolve.o
+ssexec_inservice.o
+ssexec_instate.o
+ssexec_intree.o
 ssexec_parse.o
+ssexec_reconfigure.o
+ssexec_reload.o
+ssexec_restart.o
+ssexec_scanctl.o
+ssexec_scandir.o
 ssexec_start.o
 ssexec_stop.o
 ssexec_svctl.o
diff --git a/src/66/66-boot.c b/src/lib66/exec/ssexec_boot.c
similarity index 78%
rename from src/66/66-boot.c
rename to src/lib66/exec/ssexec_boot.c
index 3d97fd0e2cf5ee8f9719c83225f275fd42e4db0c..d25a330689f67bab2934014f4dd2727940b8f00e 100644
--- a/src/66/66-boot.c
+++ b/src/lib66/exec/ssexec_boot.c
@@ -1,5 +1,5 @@
 /*
- * 66-boot.c
+ * ssexec_boot.c
  *
  * Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org>
  *
@@ -29,10 +29,10 @@
 #include <oblibs/log.h>
 #include <oblibs/files.h>
 #include <oblibs/string.h>
-#include <oblibs/obgetopt.h>
 #include <oblibs/environ.h>
 #include <oblibs/sastr.h>
 
+#include <skalibs/sgetopt.h>
 #include <skalibs/djbunix.h>
 #include <skalibs/stralloc.h>
 #include <skalibs/types.h>
@@ -40,6 +40,7 @@
 
 #include <66/config.h>
 #include <66/constants.h>
+#include <66/ssexec.h>
 
 static mode_t mask = SS_BOOT_UMASK ;
 static unsigned int rescan = SS_BOOT_RESCAN ;
@@ -57,22 +58,19 @@ static char const *envdir = 0 ;
 static char const *fifo = 0 ;
 static char const *log_user = SS_LOGGER_RUNNER ;
 static char const *cver = 0 ;
-static char tpath[MAXENV + 1] ;
-static char trcinit[MAXENV + 1] ;
-static char trcinit_container[MAXENV + 1] ;
-static char tlive[MAXENV + 1] ;
-static char ttree[MAXENV + 1] ;
-static char confile[MAXENV + 1] ;
+static char tpath[SS_MAX_PATH_LEN + 1] ;
+static char trcinit[SS_MAX_PATH_LEN + 1] ;
+static char trcinit_container[SS_MAX_PATH_LEN + 1] ;
+static char tlive[SS_MAX_PATH_LEN + 1] ;
+static char ttree[SS_MAX_PATH_LEN + 1] ;
+static char confile[SS_MAX_PATH_LEN + 1 + SS_BOOT_CONF_LEN + 1] ;
 static char const *const *genv = 0 ;
 static int fdin ;
-static char const *proc_cmdline="/proc/cmdline" ;
 static stralloc sacmdline = STRALLOC_ZERO ;
 static int notifpipe[2] ;
 
 #define MAXBUF 1024*64*2
 
-#define USAGE "66-boot [ -h ] [ -z ] [ -m ] [ -s skel ] [ -l log_user ] [ -e environment ] [ -d dev ] [ -b banner ]"
-
 static void sulogin(char const *msg,char const *arg)
 {
     static char const *const newarg[2] = { SS_EXTBINPREFIX "sulogin" , 0 } ;
@@ -84,81 +82,13 @@ static void sulogin(char const *msg,char const *arg)
     if (*msg) log_warnu(msg,arg) ;
     pid = child_spawn0(newarg[0],newarg,genv) ;
     if (waitpid_nointr(pid,&wstat, 0) < 0)
-            log_dieusys(LOG_EXIT_SYS,"wait for sulogin -- you are on your own") ;
+        log_dieusys(LOG_EXIT_SYS,"wait for sulogin -- you are on your own") ;
     fdin=dup(0) ;
     if (fdin == -1) log_dieu(LOG_EXIT_SYS,"duplicate stdin -- you are on your own") ;
     close(0) ;
     if (open("/dev/null",O_WRONLY)) log_dieu(LOG_EXIT_SYS,"open /dev/null -- you are on your own") ;
 }
 
-static inline void info_help (void)
-{
-    DEFAULT_MSG = 0 ;
-
-    static char const *help =
-"\n"
-"options :\n"
-"   -h: print this help\n"
-"   -z: use color\n"
-"   -m: mount parent live directory\n"
-"   -s: skeleton directory\n"
-"   -l: run catch-all logger as log_user user\n"
-"   -e: environment directory or file\n"
-"   -d: dev directory\n"
-"   -b: banner to display\n"
-;
-
-    log_info(USAGE,"\n",help) ;
-}
-
-static int read_line(stralloc *dst, char const *line)
-{
-    log_flow() ;
-
-    char b[MAXBUF] ;
-    int fd ;
-    unsigned int n = 0, m = MAXBUF ;
-
-    fd = open(line, O_RDONLY) ;
-    if (fd == -1) return 0 ;
-
-    for(;;)
-    {
-        ssize_t r = read(fd,b+n,m-n);
-        if (r == -1)
-        {
-            if (errno == EINTR) continue ;
-            break ;
-        }
-        n += r ;
-        // buffer is full
-        if (n == m)
-        {
-            --n ;
-            break ;
-        }
-        // end of file
-        if (r == 0) break ;
-    }
-    close(fd) ;
-
-    if(n)
-    {
-        int i = n ;
-        // remove trailing zeroes
-        while (i && b[i-1] == '\0') --i ;
-        while (i--)
-            if (b[i] == '\n' || b[i] == '\0') b[i] = ' ' ;
-
-        if (b[n-1] == ' ') b[n-1] = '\0' ;
-    }
-    b[n] = '\0';
-
-    if (!stralloc_cats(dst,b) ||
-        !stralloc_0(dst)) sulogin("close stralloc",dst->s) ;
-    return n ;
-}
-
 static int get_value(stralloc *val,char const *key)
 {
     if (!environ_get_val_of_key(val,key)) return 0 ;
@@ -204,51 +134,46 @@ static void parse_conf(void)
     int r ;
     unsigned int j = 0 ;
     uint8_t empty = 0 ;
+    size_t filesize = 0 ;
     char u[UINT_FMT] ;
+    char *gvalue = 0 ;
     stralloc src = STRALLOC_ZERO ;
-    stralloc cmdline = STRALLOC_ZERO ;
     stralloc val = STRALLOC_ZERO ;
-    if (skel[0] != '/') sulogin("skeleton directory must be an aboslute path: ",skel) ;
-    size_t skelen = strlen(skel) ;
-    memcpy(confile,skel,skelen) ;
-    confile[skelen] = '/' ;
-    memcpy(confile + skelen + 1, SS_BOOT_CONF, SS_BOOT_CONF_LEN) ;
-    confile[skelen + 1 + SS_BOOT_CONF_LEN] = 0 ;
-    size_t filesize=file_get_size(confile) ;
+
+    if (skel[0] != '/')
+        sulogin("skeleton directory must be an aboslute path: ",skel) ;
+
+    auto_strings(confile, skel, "/", SS_BOOT_CONF) ;
+
+    filesize = file_get_size(confile) ;
     /** skeleton file */
-    r = openreadfileclose(confile,&src,filesize) ;
-    if(!r) sulogin("open configuration file: ",confile) ;
-    if (!stralloc_0(&src)) sulogin("append stralloc of file: ",confile) ;
-
-    /** /proc/cmdline */
-    if (!read_line(&cmdline,proc_cmdline)) {
-        /** we don't want to die here */
-        log_warnu("read: ",proc_cmdline) ;
-    }
-    else if (!sastr_split_element_in_nline(&cmdline)) {
-        log_warnu("split: ",proc_cmdline) ;
-        cmdline.len = 0 ;
-    }
-    for (char const *const *p = valid;*p;p++,j++)
+    r = openreadfileclose(confile, &src, filesize) ;
+    if(!r)
+        sulogin("open configuration file: ",confile) ;
+    if (!stralloc_0(&src))
+        sulogin("append stralloc of file: ",confile) ;
+
+    for (char const *const *p = valid; *p; p++, j++)
     {
         empty = 0 ;
-        /** try first to read from /proc/cmdline.
+        /** try first to read from kernel environment.
          * If the key is not found, try to read the skeleton file.
          * Finally keep the default value if we cannot get a correct
          * key=value pair */
-        if (cmdline.len > 0) {
-            if (!stralloc_copy(&val,&cmdline)) sulogin("copy stralloc of file: ",proc_cmdline) ;
+        gvalue = getenv(*p) ;
+        if (gvalue) {
 
-        }
-        else if (!stralloc_copy(&val,&src)) sulogin("copy stralloc of file: ",confile) ;
+            if (!auto_stra(&val, *p, "=", gvalue))
+                sulogin("copy value of key: ", *p) ;
+
+        } else {
+
+            if (!stralloc_copy(&val, &src))
+                sulogin("copy stralloc of file: ",confile) ;
+
+            if (!get_value(&val,*p))
+                empty = 1 ;
 
-        if (!get_value(&val,*p))
-        {
-            if (cmdline.len > 0) {
-                if (!stralloc_copy(&val,&src)) sulogin("copy stralloc of file: ",confile) ;
-                if (!get_value(&val,*p)) empty = 1 ;
-            }
-            else empty = 1 ;
         }
 
         switch (j)
@@ -368,7 +293,6 @@ static void parse_conf(void)
     if (!sastr_split_string_in_nline(&sacmdline)) sulogin("split string: ",sacmdline.s) ;
 
     stralloc_free(&val) ;
-    stralloc_free(&cmdline) ;
     stralloc_free(&src) ;
 }
 
@@ -475,33 +399,35 @@ static inline void run_stage2 (char const *const *envp, size_t envlen, char cons
     xmexec_fm(newargv, envp, envlen, t, tlen) ;
 }
 
-static inline void run_cmdline(char const *const *newargv, char const *const *envp, char const *msg,char const *arg)
+static inline void make_cmdline(char const *prog,char const **add,int len,char const *msg,char const *arg,char const *const *envp)
 {
     log_flow() ;
 
     pid_t pid ;
     int wstat ;
-    pid = child_spawn0(newargv[0],newargv,envp) ;
-    if (waitpid_nointr(pid,&wstat, 0) < 0)
-        sulogin("wait for: ",newargv[0]) ;
-    if (wstat) sulogin(msg,arg) ;
-}
-
-static inline void make_cmdline(char const *prog,char const **add,int len,char const *msg,char const *arg,char const *const *envp)
-{
-    log_flow() ;
-
-    int m = 6 + len, i = 0, n = 0 ;
+    int m = 7 + len, i = 0, n = 0 ;
     char const *newargv[m] ;
+
+    newargv[n++] = "66" ;
     newargv[n++] = prog ;
     newargv[n++] = "-v" ;
     newargv[n++] = cver ;
     newargv[n++] = "-l" ;
     newargv[n++] = live ;
+
     for (;i<len;i++)
         newargv[n++] = add[i] ;
+
     newargv[n] = 0 ;
-    run_cmdline(newargv,envp,msg,arg) ;
+
+    pid = child_spawn0(newargv[0], newargv, envp) ;
+
+    if (waitpid_nointr(pid, &wstat, 0) < 0)
+        sulogin("wait for: ", newargv[0]) ;
+
+    if (wstat)
+        sulogin(msg, arg) ;
+
 }
 
 static void cad(void)
@@ -515,7 +441,7 @@ static void cad(void)
     int fd ;
     fd = open("/dev/tty0", O_RDONLY | O_NOCTTY) ;
     if (fd < 0) {
-        log_warnusys("open /dev/", "tty0 (kbrequest will not be handled)") ;
+        log_warnusys("open /dev/tty0 (kbrequest will not be handled)") ;
     }
     else {
 
@@ -532,7 +458,7 @@ static void cad(void)
 
 }
 
-int main(int argc, char const *const *argv,char const *const *envp)
+int ssexec_boot(int argc, char const *const *argv, ssexec_t *info)
 {
     VERBOSITY = 0 ;
     unsigned int r , tmpfs = 0, opened = 0 ;
@@ -541,30 +467,25 @@ int main(int argc, char const *const *argv,char const *const *envp)
     char verbo[UINT_FMT] ;
     cver = verbo ;
     stralloc envmodifs = STRALLOC_ZERO ;
-    genv = envp ;
+    genv = (char const *const *)environ ;
 
-    log_color = &log_color_disable ;
-
-    PROG = "66-boot" ;
     {
         subgetopt l = SUBGETOPT_ZERO ;
 
         for (;;)
         {
-            int opt = getopt_args(argc,argv, ">hzms:e:d:b:l:", &l) ;
+            int opt = subgetopt_r(argc, argv, OPTS_BOOT, &l) ;
             if (opt == -1) break ;
-            if (opt == -2) sulogin("options must be set first","") ;
+
             switch (opt)
             {
-                case 'h' : info_help(); return 0 ;
-                case 'z' : log_color = !isatty(1) ? &log_color_disable : &log_color_enable ; break ;
                 case 'm' : tmpfs = 1 ; break ;
                 case 's' : skel = l.arg ; break ;
                 case 'e' : envdir = l.arg ; break ;
                 case 'd' : slashdev = l.arg ; break ;
                 case 'b' : banner = l.arg ; break ;
                 case 'l' : log_user = l.arg ; break ;
-                default :  log_usage(USAGE) ;
+                default :  log_usage(usage_boot) ;
             }
         }
         argc -= l.ind ; argv += l.ind ;
@@ -684,13 +605,14 @@ int main(int argc, char const *const *argv,char const *const *envp)
         t[m++] = log_user ;
         t[m++] = "create" ;
         log_info("Create live scandir at: ",live) ;
-        make_cmdline(SS_EXTBINPREFIX "66-scandir",t,nargc,"create live scandir at: ",live,envp) ;
+
+        make_cmdline("scandir", t, nargc, "create live scandir at: ", live, genv) ;
     }
     /** initiate earlier service */
     {
-        char const *t[] = { "-t",tree,"classic" } ;
+        char const *t[] = { tree } ;
         log_info("Initiate earlier service of tree: ",tree) ;
-        make_cmdline(SS_EXTBINPREFIX "66-init",t,3,"initiate earlier service of tree: ",tree,envp) ;
+        make_cmdline("init", t, 1, "initiate earlier service of tree: ", tree, genv) ;
     }
 
     if (envdir) {
@@ -716,8 +638,9 @@ int main(int argc, char const *const *argv,char const *const *envp)
         char fmtfd[2 + UINT_FMT] = "-" ;
 
         size_t m = 0 ;
-        static char const *newargv[7] ;
-        newargv[m++] = SS_EXTBINPREFIX "66-scanctl" ;
+        static char const *newargv[8] ;
+        newargv[m++] = "66" ;
+        newargv[m++] = "scanctl" ;
         newargv[m++] = "-v0" ;
         if (!catch_log)
             newargv[m++] = fmtfd ;
diff --git a/src/lib66/exec/ssexec_help.c b/src/lib66/exec/ssexec_help.c
index 8ad754b0a44c4f241f7bf4ede1aeacbb4a92f44f..048534e684e58936f6c3c867681d4e00effb4877 100644
--- a/src/lib66/exec/ssexec_help.c
+++ b/src/lib66/exec/ssexec_help.c
@@ -14,43 +14,40 @@
 
 #include <66/ssexec.h>
 
-char const *usage_enable = "66-enable [ -h ] [ -z ] [ -v verbosity ] [ - l live ] [ -t tree ] [ -f|F ] [ -I ] [ -S ] service(s)" ;
+char const *usage_parse = "66 parse [ -h ] [ -z ] [ -v verbosity ] [ -t tree ] [ -f|F ] [ -I ] service" ;
 
-char const *help_enable =
+char const *help_parse =
 "\n"
-"options :\n"
+"options:\n"
 "   -h: print this help\n"
 "   -z: use color\n"
 "   -v: increase/decrease verbosity\n"
-"   -l: live directory\n"
-"   -t: name of the tree to use\n"
-"   -f: force to overwrite the service(s)\n"
-"   -F: force to overwrite the service(s) and its dependencies\n"
+"   -f: force to overwrite existing destination\n"
+"   -F: also force to overwrite its dependencies\n"
 "   -I: do not import modified configuration files from previous version\n"
-"   -S: enable and start the service\n"
 ;
 
-char const *usage_dbctl = "66-dbctl [ -h ] [ -z ] [ -v verbosity ] [ -T timeout ] [ -l live ] [ -t tree ] [ -u | d | r ] service(s)" ;
+char const *usage_enable = "66 enable [ -h ] [ -z ] [ -v verbosity ] [ - l live ] [ -t tree ] [ -f|F ] [ -I ] [ -S ] service(s)" ;
 
-char const *help_dbctl =
+char const *help_enable =
 "\n"
-"options :\n"
+"options:\n"
 "   -h: print this help\n"
 "   -z: use color\n"
 "   -v: increase/decrease verbosity\n"
-"   -T: timeout\n"
 "   -l: live directory\n"
-"   -t: tree to use\n"
-"   -u: bring up service in database of tree\n"
-"   -d: bring down service in database of tree\n"
-"   -r: reload service\n"
+"   -t: name of the tree to use\n"
+"   -f: force to overwrite the service(s)\n"
+"   -F: force to overwrite the service(s) and its dependencies\n"
+"   -I: do not import modified configuration files from previous version\n"
+"   -S: enable and start the service\n"
 ;
 
-char const *usage_disable = "66-disable [ -h ] [ -z ] [ -v verbosity ] [ - l live ] [ -t tree ] [ -S ] [ -F ] [ -R ] service(s)" ;
+char const *usage_disable = "66 disable [ -h ] [ -z ] [ -v verbosity ] [ - l live ] [ -t tree ] [ -S ] [ -F ] [ -R ] service(s)" ;
 
 char const *help_disable =
 "\n"
-"options :\n"
+"options:\n"
 "   -h: print this help\n"
 "   -z: use color\n"
 "   -v: increase/decrease verbosity\n"
@@ -61,38 +58,35 @@ char const *help_disable =
 "   -R: disable the service and remove its configuration and logger files\n"
 ;
 
-char const *usage_init = "66-init [ -h ] [ -z ] [ -v verbosity ] [ -l live ] [ -t tree ] classic|database|both" ;
+char const *usage_init = "66 init [ -h ] [ -z ] [ -v verbosity ] [ -l live ] tree" ;
 
 char const *help_init =
 "\n"
-"options :\n"
+"options:\n"
 "   -h: print this help\n"
 "   -z: use color\n"
 "   -v: increase/decrease verbosity\n"
 "   -l: live directory\n"
-"   -t: name of the tree to use\n"
 ;
 
-char const *usage_start = "66-start [ -h ] [ -z ] [ -v verbosity ] [ -l live ] [ -t tree ] [ -T timeout ] [ -r | R ] service(s)" ;
+char const *usage_start = "66 start [ -h ] [ -z ] [ -v verbosity ] [ -l live ] [ -t tree ] [ -T timeout ] service(s)" ;
 
 char const *help_start =
 "\n"
-"options :\n"
+"options:\n"
 "   -h: print this help\n"
 "   -z: use color\n"
 "   -v: increase/decrease verbosity\n"
 "   -l: live directory\n"
 "   -t: tree to use\n"
 "   -T: timeout\n"
-"   -r: reload the service(s)\n"
-"   -R: reload service(s) file(s) and the service(s) itself\n"
 ;
 
-char const *usage_stop = "66-stop [ -h ] [ -z ] [ -v verbosity ] [ -T timeout ] [ -l live ] [ -t tree ] [ -u ] [ -X ] [ -K ] service(s)" ;
+char const *usage_stop = "66 stop [ -h ] [ -z ] [ -v verbosity ] [ -T timeout ] [ -l live ] [ -t tree ] [ -u ] service(s)" ;
 
 char const *help_stop =
 "\n"
-"options :\n"
+"options:\n"
 "   -h: print this help\n"
 "   -z: use color\n"
 "   -v: increase/decrease verbosity\n"
@@ -100,34 +94,26 @@ char const *help_stop =
 "   -T: timeout\n"
 "   -t: tree to use\n"
 "   -u: unsupervise service(s)\n"
-"   -X: bring down the service(s) and kill his supervisor\n"
-"   -K: kill the service(s) and keep it down\n"
 ;
 
-char const *usage_svctl = "66-svctl [ -h ] [ -z ] [ -v verbosity ] [ -l live ] [ -t tree ] [ -T timeout ] [ -n death ] [ -u | d | r | K | X ] service(s)" ;
+char const *usage_svctl = "66 svctl [ -h ] [ -z ] [ -v verbosity ] [ -l live ] [ -t tree ] [ -T timeout ] [ -wu | -wU | -wd | -wD | -wr | -wR ] [ -abqhkti12pcyoduxOr ] service(s)" ;
 
 char const *help_svctl =
 "\n"
-"options :\n"
+"options:\n"
 "   -h: print this help\n"
 "   -z: use color\n"
 "   -v: increase/decrease verbosity\n"
 "   -l: live directory\n"
 "   -t: tree to use\n"
 "   -T: service timeout\n"
-"   -n: number of death\n"
-"   -u: bring up the service(s)\n"
-"   -d: bring down the service(s)\n"
-"   -r: reload\n"
-"   -X: bring down the service(s) and the kill his supervisor\n"
-"   -K: kill the service(s) and keep it down\n"
 ;
 
-char const *usage_env = "66-env [ -h ] [ -z ] [ -v verbosity ] [ -t tree ] [ -c version ] [ -s version ] [ -V|L ] [ -r key=value ] [ -i src,dst ] [ -e editor ] service" ;
+char const *usage_env = "66 env [ -h ] [ -z ] [ -v verbosity ] [ -t tree ] [ -c version ] [ -s version ] [ -V|L ] [ -r key=value ] [ -i src,dst ] [ -e editor ] service" ;
 
 char const *help_env =
 "\n"
-"options :\n"
+"options:\n"
 "   -h: print this help\n"
 "   -z: use color\n"
 "   -v: increase/decrease verbosity\n"
@@ -141,11 +127,11 @@ char const *help_env =
 "   -e: edit the file with editor\n"
 ;
 
-char const *usage_all = "66-all [ -h ] [ -z ] [ -v verbosity ] [ -T timeout ] [ -l live ] [ -t tree ] [ -f ] up|down|unsupervise" ;
+char const *usage_all = "66 all [ -h ] [ -z ] [ -v verbosity ] [ -T timeout ] [ -l live ] [ -t tree ] [ -f ] up|down|unsupervise" ;
 
 char const *help_all =
 "\n"
-"options :\n"
+"options:\n"
 "   -h: print this help\n"
 "   -z: use color\n"
 "   -v: increase/decrease verbosity\n"
@@ -155,11 +141,11 @@ char const *help_all =
 "   -f: fork the process\n"
 ;
 
-char const *usage_tree = "66-tree [ -h ] [ -z ] [ -v verbosity ] [ -c ] [ -o depends=:... ] [ -E|D ] [ -R ] tree" ;
+char const *usage_tree = "66 tree [ -h ] [ -z ] [ -v verbosity ] [ -c ] [ -o depends=:... ] [ -E|D ] [ -R ] tree" ;
 
 char const *help_tree =
 "\n"
-"options :\n"
+"options:\n"
 "   -h: print this help\n"
 "   -z: use color\n"
 "   -v: increase/decrease verbosity\n"
@@ -180,3 +166,208 @@ char const *help_tree =
 "   clone=: make a clone of tree\n"
 "   noseed: do not use seed file to build the tree\n"
 ;
+
+char const *usage_tree = "66 treectl [ -h ] [ -z ] [ -v verbosity ] tree" ;
+
+char const *help_treectl =
+"\n"
+"options:\n"
+"   -h: print this help\n"
+"   -z: use color\n"
+"   -v: increase/decrease verbosity\n"
+;
+
+char const *usage_reconfigure = "66 reconfigure [ -h ] [ -z ] [ -v verbosity ] [ -l live ] [ -t tree ] [ -T timeout ] [ -P ] service(s)" ;
+
+char const *help_reconfigure =
+"\n"
+"options:\n"
+"   -h: print this help\n"
+"   -z: use color\n"
+"   -v: increase/decrease verbosity\n"
+"   -l: live directory\n"
+"   -t: tree to use\n"
+"   -T: timeout\n"
+"   -P: do not propagate signal to its dependencies\n"
+;
+
+char const *usage_reload = "66 reload [ -h ] [ -z ] [ -v verbosity ] [ -l live ] [ -t tree ] [ -T timeout ] [ -P ] service(s)" ;
+
+char const *help_reload =
+"\n"
+"options:\n"
+"   -h: print this help\n"
+"   -z: use color\n"
+"   -v: increase/decrease verbosity\n"
+"   -l: live directory\n"
+"   -t: tree to use\n"
+"   -T: timeout\n"
+"   -P: do not propagate signal to its dependencies\n"
+;
+
+char const *usage_restart = "66 restart [ -h ] [ -z ] [ -v verbosity ] [ -l live ] [ -t tree ] [ -T timeout ] [ -P ] service(s)" ;
+
+char const *help_restart =
+"\n"
+"options:\n"
+"   -h: print this help\n"
+"   -z: use color\n"
+"   -v: increase/decrease verbosity\n"
+"   -l: live directory\n"
+"   -t: tree to use\n"
+"   -T: timeout\n"
+"   -P: do not propagate signal to its dependencies\n"
+;
+
+char const *usage_unsupervise = "66 unsupervise [ -h ] [ -z ] [ -v verbosity ] [ -l live ] [ -t tree ] [ -T timeout ] [ -P ] service(s)" ;
+
+char const *help_unsupervise =
+"\n"
+"options:\n"
+"   -h: print this help\n"
+"   -z: use color\n"
+"   -v: increase/decrease verbosity\n"
+"   -l: live directory\n"
+"   -t: tree to use\n"
+"   -T: timeout\n"
+"   -P: do not propagate signal to its dependencies\n"
+;
+
+char const *usage_inresolve = "66 inresolve [ -h ] [ -z ] [ -v verbosity ] [ -t tree ] tree|service name" ;
+
+char const *help_inresolve =
+"\n"
+"options:\n"
+"   -h: print this help\n"
+"   -z: use color\n"
+"   -v: increase/decrease verbosity\n"
+"   -t: only search at the specified tree\n"
+"   tree: search for tree name\n"
+"   service: search for service name\n"
+;
+
+char const *usage_instate = "66 instate [ -h ] [ -z ] [ -v verbosity ] service" ;
+
+char const *help_instate =
+"\n"
+"options:\n"
+"   -h: print this help\n"
+"   -z: use color\n"
+"   -v: increase/decrease verbosity\n"
+;
+
+char const *usage_intree = "66 intree [ -h ] [ -z ] [ -v verbosity ] [ -l live ] [ -n ] [ -o name,init,enabled,... ] [ -g ] [ -d depth ] [ -r ] tree" ;
+
+char const *help_intree =
+"\n"
+"options :\n"
+"   -h: print this help\n"
+"   -z: use color\n"
+"   -v: increase/decrease verbosity\n"
+"   -l: live directory\n"
+"   -n: do not display the names of fields\n"
+"   -o: comma separated list of field to display\n"
+"   -g: displays the contents field as graph\n"
+"   -d: limit the depth of the contents field recursion\n"
+"   -r: reverse the contents field\n"
+"\n"
+"valid fields for -o options are:\n"
+"\n"
+"   name: displays the name of the tree\n"
+"   current: displays a boolean value of the current state\n"
+"   enabled: displays a boolean value of the enable state\n"
+"   init: displays a boolean value of the initialization state\n"
+"   depends: displays the list of tree(s) started before\n"
+"   requiredby: displays the list of tree(s) started after\n"
+"   allowed: displays a list of allowed user to use the tree\n"
+"   symlinks: displays the target of tree's symlinks\n"
+"   contents: displays the contents of the tree\n"
+;
+
+char const *usage_inservice = "66 inservice [ -h ] [ -z ] [ -v verbosity ] [ -n ] [ -o name,intree,status,... ] [ -g ] [ -d depth ] [ -r ] [ -t tree ] [ -p nline ] service" ;
+
+char const *help_inservice =
+"\n"
+"options :\n"
+"   -h: print this help\n"
+"   -z: use color\n"
+"   -v: increase/decrease verbosity\n"
+"   -n: do not display the field name\n"
+"   -o: comma separated list of field to display\n"
+"   -g: displays the contents field as graph\n"
+"   -d: limit the depth of the contents field recursion\n"
+"   -r: reverse the contents field\n"
+"   -t: only search service at the specified tree\n"
+"   -p: print n last lines of the log file\n"
+"\n"
+"valid fields for -o options are:\n"
+"\n"
+"   name: displays the name\n"
+"   version: displays the version of the service\n"
+"   intree: displays the service's tree name\n"
+"   status: displays the status\n"
+"   type: displays the service type\n"
+"   description: displays the description\n"
+"   source: displays the source of the service's frontend file\n"
+"   live: displays the service's live directory\n"
+"   depends: displays the service's dependencies\n"
+"   requiredby: displays the service(s) which depends on service\n"
+"   extdepends: displays the service's external dependencies\n"
+"   optsdepends: displays the service's optional dependencies\n"
+"   start: displays the service's start script\n"
+"   stop: displays the service's stop script\n"
+"   envat: displays the source of the environment file\n"
+"   envfile: displays the contents of the environment file\n"
+"   logname: displays the logger's name\n"
+"   logdst: displays the logger's destination\n"
+"   logfile: displays the contents of the log file\n"
+;
+
+char const *usage_boot = "66 boot [ -h ] [ -z ] [ -m ] [ -s skel ] [ -l log_user ] [ -e environment ] [ -d dev ] [ -b banner ]" ;
+
+char const *help_boot =
+"\n"
+"options :\n"
+"   -h: print this help\n"
+"   -z: use color\n"
+"   -m: mount parent live directory\n"
+"   -s: skeleton directory\n"
+"   -l: run catch-all logger as log_user user\n"
+"   -e: environment directory or file\n"
+"   -d: dev directory\n"
+"   -b: banner to display\n"
+;
+
+char const *usage_scanctl = "66 scanctl [ -h ] [ -z ] [ -v verbosity ] [ -l live ] [ -d notif ] [ -t rescan ] [ -e environment ] [ -o owner ] start|stop|reload|quit|nuke|zombies or any s6-svscanctl options" ;
+
+char const *help_scanctl =
+"\n"
+"options :\n"
+"   -h: print this help\n"
+"   -z: use color\n"
+"   -v: increase/decrease verbosity\n"
+"   -l: live directory\n"
+"   -d: notify readiness on file descriptor\n"
+"   -t: rescan scandir every milliseconds\n"
+"   -e: environment directory\n"
+"   -o: handles scandir of owner\n"
+;
+
+char const *usage_scandir = "66 scandir [ -h ] [ -z ] [ -v verbosity ] [ -l live ] [ -b|B ] [ -c ] [ -L log_user ] [ -s skel ] [ -o owner ] create|remove" ;
+
+char const *help_scandir =
+"\n"
+"options :\n"
+"   -h: print this help\n"
+"   -z: use color\n"
+"   -v: increase/decrease verbosity\n"
+"   -l: live directory\n"
+"   -b: create scandir for a boot process\n"
+"   -B: create scandir for a boot process inside a container\n"
+"   -c: do not catch log\n"
+"   -L: run catch-all logger as log_user user\n"
+"   -s: skeleton directory\n"
+"   -o: handles owner scandir\n"
+;
+
+char const *usage_66 = "66 start|stop|unsupervise|enable|disable|all|init|env|parse|svctl|tree|reconfigure|reload|restart|scanctl|scandir|boot service(s)|tree" ;
diff --git a/src/66/66-inresolve.c b/src/lib66/exec/ssexec_inresolve.c
similarity index 90%
rename from src/66/66-inresolve.c
rename to src/lib66/exec/ssexec_inresolve.c
index f9729b1433d031c65e2c3a7c311e317cc06bc5fd..2e126f4fd7aad355671dfc2019ab4940dc9eb36e 100644
--- a/src/66/66-inresolve.c
+++ b/src/lib66/exec/ssexec_inresolve.c
@@ -1,5 +1,5 @@
 /*
- * 66-inresolve.c
+ * ssexec_inresolve.c
  *
  * Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org>
  *
@@ -18,7 +18,6 @@
 #include <oblibs/log.h>
 #include <oblibs/sastr.h>
 #include <oblibs/string.h>
-#include <oblibs/obgetopt.h>
 #include <oblibs/types.h>
 
 #include <skalibs/types.h>
@@ -27,6 +26,7 @@
 #include <skalibs/buffer.h>
 
 #include <66/resolve.h>
+#include <66/ssexec.h>
 #include <66/tree.h>
 #include <66/service.h>
 #include <66/info.h>
@@ -40,24 +40,6 @@
 static wchar_t const field_suffix[] = L" :" ;
 static char fields[INFO_NKEY][INFO_FIELD_MAXLEN] = {{ 0 }} ;
 
-#define USAGE "66-inresolve [ -h ] [ -z ] [ -v verbosity ] [ -t tree ] tree|service name"
-
-static inline void info_help (void)
-{
-    DEFAULT_MSG = 0 ;
-
-    static char const *help =
-"\n"
-"options :\n"
-"   -h: print this help\n"
-"   -z: use color\n"
-"   -v: increase/decrease verbosity\n"
-"   -t: only search service at the specified tree\n"
-;
-
-    log_info(USAGE,"\n",help) ;
-}
-
 static inline unsigned int lookup (char const *const *table, char const *data)
 {
     log_flow() ;
@@ -199,63 +181,24 @@ static void info_display_service_field(resolve_service_t *res)
 
 }
 
-int main(int argc, char const *const *argv)
+int ssexec_inresolve(int argc, char const *const *argv, ssexec_t *info)
 {
     int found = 0, what = 0 ;
     uint8_t master = 0 ;
 
     stralloc sa = STRALLOC_ZERO ;
     char const *svname = 0 ;
-    char const *treename = 0 ;
+    char const *treename = info->treename.s ;
     char atree[SS_MAX_TREENAME + 1] ;
 
-    log_color = &log_color_disable ;
-
-    PROG = "66-inresolve" ;
-    {
-        subgetopt l = SUBGETOPT_ZERO ;
-
-        for (;;)
-        {
-            int opt = getopt_args(argc,argv, ">hv:zt:", &l) ;
-            if (opt == -1) break ;
-            if (opt == -2) log_die(LOG_EXIT_USER,"options must be set first") ;
-            switch (opt)
-            {
-                case 'h' :
-
-                    info_help();
-                    return 0 ;
-
-                case 'v' :
-
-                    if (!uint0_scan(l.arg, &VERBOSITY))
-                        log_usage(USAGE) ;
-                    break ;
-
-                case 'z' :
-
-                    log_color = !isatty(1) ? &log_color_disable : &log_color_enable ;
-                    break ;
-
-                case 't' :
-
-                    treename = l.arg ;
-                    break ;
-
-                default :
-
-                    log_usage(USAGE) ;
-            }
-        }
-        argc -= l.ind ; argv += l.ind ;
-    }
+    argc-- ;
+    argv++ ;
 
-    if (argc < 2) log_usage(USAGE) ;
+    if (argc < 2) log_usage(usage_inresolve) ;
 
     what = parse_what(*argv) ;
     if (what == 2)
-        log_usage(USAGE) ;
+        log_usage(usage_inresolve) ;
 
     argv++;
     argc--;
diff --git a/src/66/66-inservice.c b/src/lib66/exec/ssexec_inservice.c
similarity index 84%
rename from src/66/66-inservice.c
rename to src/lib66/exec/ssexec_inservice.c
index 8a1c97e334b6b1e63f5104fc94e177c65823551b..a42e5ef4faaf7ff4b6ccb7e45a1571ed4906b822 100644
--- a/src/66/66-inservice.c
+++ b/src/lib66/exec/ssexec_inservice.c
@@ -1,5 +1,5 @@
 /*
- * 66-inservice.c
+ * ssexec_inservice.c
  *
  * Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org>
  *
@@ -46,13 +46,30 @@
 #include <66/state.h>
 #include <66/service.h>
 #include <66/graph.h>
+#include <66/config.h>
+#include <66/ssexec.h>
 
 #include <s6/supervise.h>
 
+/**
+ *
+ *
+ *
+ *
+ * a revoir, notamment les fonctions appeler comme optsdeps
+ *le tname pour le tree etc etc
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ * */
 static unsigned int REVERSE = 0 ;
 static unsigned int NOFIELD = 1 ;
 static unsigned int GRAPH = 0 ;
-static char const *const *ENVP ;
 static unsigned int nlog = 20 ;
 static stralloc src = STRALLOC_ZERO ;
 static stralloc home = STRALLOC_ZERO ;// /var/lib/66/system or ${HOME}/system
@@ -80,7 +97,7 @@ static void info_display_logname(char const *field, resolve_service_t *res) ;
 static void info_display_logdst(char const *field, resolve_service_t *res) ;
 static void info_display_logfile(char const *field, resolve_service_t *res) ;
 
-info_graph_style *STYLE = &graph_default ;
+info_graph_style *S_STYLE = &graph_default ;
 
 
 
@@ -94,8 +111,6 @@ info_graph_style *STYLE = &graph_default ;
 
 
 
-
-
 info_opts_map_t const opts_sv_table[] =
 {
     { .str = "name", .svfunc = &info_display_name, .id = 0 },
@@ -124,52 +139,6 @@ info_opts_map_t const opts_sv_table[] =
 #define checkopts(n) if (n >= MAXOPTS) log_die(LOG_EXIT_USER, "too many options")
 #define DELIM ','
 
-#define USAGE "66-inservice [ -h ] [ -z ] [ -v verbosity ] [ -n ] [ -o name,intree,status,... ] [ -g ] [ -d depth ] [ -r ] [ -t tree ] [ -p nline ] service"
-
-static inline void info_help (void)
-{
-    DEFAULT_MSG = 0 ;
-
-    static char const *help =
-"\n"
-"options :\n"
-"   -h: print this help\n"
-"   -z: use color\n"
-"   -v: increase/decrease verbosity\n"
-"   -n: do not display the field name\n"
-"   -o: comma separated list of field to display\n"
-"   -g: displays the contents field as graph\n"
-"   -d: limit the depth of the contents field recursion\n"
-"   -r: reverse the contents field\n"
-"   -t: only search service at the specified tree\n"
-"   -p: print n last lines of the log file\n"
-"\n"
-"valid fields for -o options are:\n"
-"\n"
-"   name: displays the name\n"
-"   version: displays the version of the service\n"
-"   intree: displays the service's tree name\n"
-"   status: displays the status\n"
-"   type: displays the service type\n"
-"   description: displays the description\n"
-"   source: displays the source of the service's frontend file\n"
-"   live: displays the service's live directory\n"
-"   depends: displays the service's dependencies\n"
-"   requiredby: displays the service(s) which depends on service\n"
-"   extdepends: displays the service's external dependencies\n"
-"   optsdepends: displays the service's optional dependencies\n"
-"   start: displays the service's start script\n"
-"   stop: displays the service's stop script\n"
-"   envat: displays the source of the environment file\n"
-"   envfile: displays the contents of the environment file\n"
-"   logname: displays the logger's name\n"
-"   logdst: displays the logger's destination\n"
-"   logfile: displays the contents of the log file\n"
-;
-
-    log_info(USAGE,"\n",help) ;
-}
-
 char *print_nlog(char *str, int n)
 {
     int r = 0 ;
@@ -246,9 +215,9 @@ static void info_get_status(resolve_service_t *res)
     pid_t pid ;
     ss_state_t sta = STATE_ZERO ;
     int warn_color = 0 ;
-    if (res->type == TYPE_CLASSIC || res->type == TYPE_LONGRUN)
+    if (res->type == TYPE_CLASSIC)
     {
-        r = s6_svc_ok(res->sa.s + res->runat) ;
+        r = s6_svc_ok(res->sa.s + res->live.scandir) ;
         if (r != 1)
         {
             if (!bprintf(buffer_1,"%s%s%s\n",log_color->warning,"None",log_color->off))
@@ -259,10 +228,10 @@ static void info_get_status(resolve_service_t *res)
         unsigned int m = 0 ;
 
         newargv[m++] = SS_BINPREFIX "s6-svstat" ;
-        newargv[m++] = res->sa.s + res->runat ;
+        newargv[m++] = res->sa.s + res->live.scandir ;
         newargv[m++] = 0 ;
 
-        pid = child_spawn0(newargv[0],newargv,ENVP) ;
+        pid = child_spawn0(newargv[0],newargv,(char const *const *)environ) ;
         if (waitpid_nointr(pid,&wstat, 0) < 0)
             log_dieusys(LOG_EXIT_SYS,"wait for ",newargv[0]) ;
 
@@ -271,31 +240,43 @@ static void info_get_status(resolve_service_t *res)
     }
     else
     {
-        char *ste = res->sa.s + res->state ;
+        char *ste = res->sa.s + res->path.home ;
         char *name = res->sa.s + res->name ;
         char *status = 0 ;
-        if (!state_check(ste,name))
+        if (!state_check(ste, SS_STATUS))
         {
             status = "unitialized" ;
             goto dis ;
         }
 
-        if (!state_read(&sta,ste,name))
+        if (!state_read(&sta, ste, name))
             log_dieusys(LOG_EXIT_SYS,"read state of: ",name) ;
 
-        if (sta.init) {
+        if (sta.toinit) {
             status = "unitialized" ;
         }
-        else if (!sta.state)
+        /*
+         *
+         *
+         *
+         *
+         *
+         * A revoir sta.statedir n'exist pas
+         *
+         *
+         *
+         *
+         *
+        else if (!sta.statedir)
         {
             status = "down" ;
             warn_color = 1 ;
         }
-        else if (sta.state)
+        else if (sta.statedir)
         {
             status = "up" ;
             warn_color = 2 ;
-        }
+        }*/
         dis:
         if (!bprintf(buffer_1,"%s%s%s\n",warn_color > 1 ? log_color->valid : warn_color ? log_color->error : log_color->warning,status,log_color->off))
             log_dieusys(LOG_EXIT_SYS,"write to stdout") ;
@@ -304,10 +285,16 @@ static void info_get_status(resolve_service_t *res)
 
 static void info_display_status(char const *field,resolve_service_t *res)
 {
+    ss_state_t ste = STATE_ZERO ;
+    uint32_t disen = 0 ;
 
     if (NOFIELD) info_display_field_name(field) ;
 
-    if (!bprintf(buffer_1,"%s%s%s%s",res->disen ? log_color->valid : log_color->error,res->disen ? "enabled" : "disabled",log_color->off,", "))
+    if (state_read(&ste, res->sa.s + res->path.home, res->sa.s + res->name))
+        log_dieusys(LOG_EXIT_SYS, "read state file of: ", res->sa.s + res->name) ;
+
+    disen = FLAGS_ISSET(ste.isenabled, STATE_FLAGS_TRUE) ;
+    if (!bprintf(buffer_1,"%s%s%s%s", disen ? log_color->valid : log_color->error, disen ? "enabled" : "disabled", log_color->off, ", "))
         log_dieusys(LOG_EXIT_SYS,"write to stdout") ;
 
     if (buffer_putsflush(buffer_1,"") == -1)
@@ -332,13 +319,13 @@ static void info_display_description(char const *field,resolve_service_t *res)
 static void info_display_source(char const *field,resolve_service_t *res)
 {
     if (NOFIELD) info_display_field_name(field) ;
-    info_display_string(res->sa.s + res->src) ;
+    info_display_string(res->sa.s + res->path.frontend) ;
 }
 
 static void info_display_live(char const *field,resolve_service_t *res)
 {
     if (NOFIELD) info_display_field_name(field) ;
-    info_display_string(res->sa.s + res->runat) ;
+    info_display_string(res->sa.s + res->live.scandir) ;
 }
 
 static void info_display_requiredby(char const *field, resolve_service_t *res)
@@ -346,16 +333,17 @@ static void info_display_requiredby(char const *field, resolve_service_t *res)
     size_t padding = 1 ;
     int r ;
     graph_t graph = GRAPH_ZERO ;
+    stralloc deps = STRALLOC_ZERO ;
 
     if (NOFIELD) padding = info_display_field_name(field) ;
     else { field = 0 ; padding = 0 ; }
 
-    size_t treelen = strlen(res->sa.s + res->tree) ;
+    size_t treelen = strlen(res->sa.s + res->path.tree) ;
     char solve[treelen + SS_SVDIRS_LEN + 1] ;
 
-    auto_strings(solve, res->sa.s + res->tree, SS_SVDIRS) ;
+    auto_strings(solve, res->sa.s + res->path.tree, SS_SVDIRS) ;
 
-    if (!graph_build_service_bytree(&graph, solve, 2))
+    if (!graph_build_service_bytree(&graph, solve, 2, 0))
         log_dieu(LOG_EXIT_SYS,"build the graph dependencies") ;
 
     unsigned int list[graph.mlen] ;
@@ -374,7 +362,7 @@ static void info_display_requiredby(char const *field, resolve_service_t *res)
 
         depth_t d = info_graph_init() ;
 
-        if (!info_walk(&graph, res->sa.s + res->name, res->sa.s + res->treename, &info_graph_display_service, 1, REVERSE, &d, padding, STYLE))
+        if (!info_walk(&graph, res->sa.s + res->name, res->sa.s + res->treename, &info_graph_display_service, 1, REVERSE, &d, padding, S_STYLE))
             log_dieu(LOG_EXIT_SYS,"display the requiredby list") ;
 
         goto freed ;
@@ -382,7 +370,7 @@ static void info_display_requiredby(char const *field, resolve_service_t *res)
     } else {
 
         deps.len = 0 ;
-        r = graph_matrix_get_edge_g_sorted_sa(&deps,&graph, res->sa.s + res->name, 1) ;
+        r = graph_matrix_get_edge_g_sorted_sa(&deps,&graph, res->sa.s + res->name, 1, 0) ;
         if (r == -1)
             log_dieu(LOG_EXIT_SYS, "get the requiredby list") ;
 
@@ -403,7 +391,7 @@ static void info_display_requiredby(char const *field, resolve_service_t *res)
         {
             if (!bprintf(buffer_1,"%s\n","/"))
                 log_dieusys(LOG_EXIT_SYS,"write to stdout") ;
-            if (!bprintf(buffer_1,"%*s%s%s%s%s\n",padding, "", STYLE->last, log_color->warning,"None",log_color->off))
+            if (!bprintf(buffer_1,"%*s%s%s%s%s\n",padding, "", S_STYLE->last, log_color->warning,"None",log_color->off))
                 log_dieusys(LOG_EXIT_SYS,"write to stdout") ;
         }
         else
@@ -413,6 +401,7 @@ static void info_display_requiredby(char const *field, resolve_service_t *res)
         }
     freed:
         graph_free_all(&graph) ;
+        stralloc_free(&deps) ;
 }
 
 static void info_display_deps(char const *field, resolve_service_t *res)
@@ -426,7 +415,7 @@ static void info_display_deps(char const *field, resolve_service_t *res)
     if (NOFIELD) padding = info_display_field_name(field) ;
     else { field = 0 ; padding = 0 ; }
 
-    if (!graph_build_service_bytree(&graph, res->sa.s + res->tree, 2))
+    if (!graph_build_service_bytree(&graph, res->sa.s + res->path.tree, 2, 0))
         log_dieu(LOG_EXIT_SYS,"build the graph dependencies") ;
 
     unsigned int list[graph.mlen] ;
@@ -445,14 +434,14 @@ static void info_display_deps(char const *field, resolve_service_t *res)
 
         depth_t d = info_graph_init() ;
 
-        if (!info_walk(&graph, res->sa.s + res->name, res->sa.s + res->treename, &info_graph_display_service, 0, REVERSE, &d, padding, STYLE))
+        if (!info_walk(&graph, res->sa.s + res->name, res->sa.s + res->treename, &info_graph_display_service, 0, REVERSE, &d, padding, S_STYLE))
             log_dieu(LOG_EXIT_SYS,"display the dependencies list") ;
 
         goto freed ;
     }
     else
     {
-        r = graph_matrix_get_edge_g_sorted_sa(&deps,&graph, res->sa.s + res->name, 0) ;
+        r = graph_matrix_get_edge_g_sorted_sa(&deps,&graph, res->sa.s + res->name, 0, 0) ;
         if (r == -1)
             log_dieu(LOG_EXIT_SYS, "get the dependencies list") ;
 
@@ -473,7 +462,7 @@ static void info_display_deps(char const *field, resolve_service_t *res)
             if (!bprintf(buffer_1,"%s\n","/"))
                 log_dieusys(LOG_EXIT_SYS,"write to stdout") ;
 
-            if (!bprintf(buffer_1,"%*s%s%s%s%s\n",padding, "", STYLE->last, log_color->warning,"None",log_color->off))
+            if (!bprintf(buffer_1,"%*s%s%s%s%s\n",padding, "", S_STYLE->last, log_color->warning,"None",log_color->off))
                 log_dieusys(LOG_EXIT_SYS,"write to stdout") ;
         }
         else
@@ -494,7 +483,7 @@ static void info_display_with_source_tree(stralloc *list,resolve_service_t *res)
     stralloc ntree = STRALLOC_ZERO ;
     stralloc src = STRALLOC_ZERO ;
     stralloc tmp = STRALLOC_ZERO ;
-    char const *exclude[3] = { SS_BACKUP + 1, SS_RESOLVE + 1, 0 } ;
+    char const *exclude[2] = { SS_RESOLVE + 1, 0 } ;
     char *treename = 0 ;
 
     if (!auto_stra(&src,home.s)) log_die_nomem("stralloc") ;
@@ -549,9 +538,9 @@ static void info_display_optsdeps(char const *field, resolve_service_t *res)
     if (NOFIELD) info_display_field_name(field) ;
     else field = 0 ;
 
-    if (!res->noptsdeps) goto empty ;
+    if (!res->dependencies.noptsdeps) goto empty ;
 
-    if (!sastr_clean_string(&salist,res->sa.s + res->optsdeps))
+    if (!sastr_clean_string(&salist,res->sa.s + res->dependencies.optsdeps))
         log_dieu(LOG_EXIT_SYS,"build dependencies list") ;
 
     info_display_with_source_tree(&salist,res) ;
@@ -574,6 +563,7 @@ static void info_display_optsdeps(char const *field, resolve_service_t *res)
 
 static void info_display_extdeps(char const *field, resolve_service_t *res)
 {
+    /*
     stralloc salist = STRALLOC_ZERO ;
 
     if (NOFIELD) info_display_field_name(field) ;
@@ -600,15 +590,16 @@ static void info_display_extdeps(char const *field, resolve_service_t *res)
 
     freed:
         stralloc_free(&salist) ;
+    */
 }
 
 static void info_display_start(char const *field,resolve_service_t *res)
 {
     if (NOFIELD) info_display_field_name(field) ;
     else field = 0 ;
-    if (res->exec_run)
+    if (res->execute.run.run_user)
     {
-        info_display_nline(field,res->sa.s + res->exec_run) ;
+        info_display_nline(field,res->sa.s + res->execute.run.run_user) ;
     }
     else
     {
@@ -621,9 +612,9 @@ static void info_display_stop(char const *field,resolve_service_t *res)
 {
     if (NOFIELD) info_display_field_name(field) ;
     else field = 0 ;
-    if (res->exec_finish)
+    if (res->execute.finish.run_user)
     {
-        info_display_nline(field,res->sa.s + res->exec_finish) ;
+        info_display_nline(field,res->sa.s + res->execute.finish.run_user) ;
     }
     else
     {
@@ -638,10 +629,10 @@ static void info_display_envat(char const *field,resolve_service_t *res)
     if (NOFIELD) info_display_field_name(field) ;
     stralloc salink = STRALLOC_ZERO ;
 
-    if (!res->srconf) goto empty ;
+    if (!res->environ.envdir) goto empty ;
     {
         stralloc salink = STRALLOC_ZERO ;
-        char *src = res->sa.s + res->srconf ;
+        char *src = res->sa.s + res->environ.envdir ;
 
         size_t srclen = strlen(src) ;
         char sym[srclen + SS_SYM_VERSION_LEN + 1] ;
@@ -680,9 +671,9 @@ static void info_display_envfile(char const *field,resolve_service_t *res)
     stralloc list = STRALLOC_ZERO ;
     char const *exclude[1] = { 0 } ;
 
-    if (res->srconf)
+    if (res->environ.envdir)
     {
-        char *src = res->sa.s + res->srconf ;
+        char *src = res->sa.s + res->environ.envdir ;
         size_t srclen = strlen(src), newlen ;
         char sym[srclen + SS_SYM_VERSION_LEN + 1] ;
 
@@ -773,11 +764,11 @@ static void info_display_envfile(char const *field,resolve_service_t *res)
 static void info_display_logname(char const *field,resolve_service_t *res)
 {
     if (NOFIELD) info_display_field_name(field) ;
-    if (res->type == TYPE_CLASSIC || res->type == TYPE_LONGRUN)
+    if (res->type == TYPE_CLASSIC)
     {
-        if (res->logger)
+        if (res->logger.name)
         {
-            info_display_string(res->sa.s + res->logger) ;
+            info_display_string(res->sa.s + res->logger.name) ;
         }
         else goto empty ;
     }
@@ -794,9 +785,9 @@ static void info_display_logdst(char const *field,resolve_service_t *res)
     if (NOFIELD) info_display_field_name(field) ;
     if (res->type != TYPE_BUNDLE || res->type != TYPE_MODULE)
     {
-        if (res->logger || (res->type == TYPE_ONESHOT && res->dstlog))
+        if (res->logger.name || (res->type == TYPE_ONESHOT && res->logger.destination))
         {
-            info_display_string(res->sa.s + res->dstlog) ;
+            info_display_string(res->sa.s + res->logger.destination) ;
         }
         else goto empty ;
     }
@@ -813,15 +804,15 @@ static void info_display_logfile(char const *field,resolve_service_t *res)
     if (NOFIELD) info_display_field_name(field) ;
     if (res->type != TYPE_BUNDLE || res->type != TYPE_MODULE)
     {
-        if (res->logger || (res->type == TYPE_ONESHOT && res->dstlog))
+        if (res->logger.name || (res->type == TYPE_ONESHOT && res->logger.destination))
         {
             if (nlog)
             {
                 stralloc log = STRALLOC_ZERO ;
                 /** the file current may not exist if the service was never started*/
-                size_t dstlen = strlen(res->sa.s + res->dstlog) ;
+                size_t dstlen = strlen(res->sa.s + res->logger.destination) ;
                 char scan[dstlen + 9] ;
-                memcpy(scan,res->sa.s + res->dstlog,dstlen) ;
+                memcpy(scan,res->sa.s + res->logger.destination,dstlen) ;
                 memcpy(scan + dstlen,"/current",8) ;
                 scan[dstlen + 8] = 0 ;
                 int r = scan_mode(scan,S_IFREG) ;
@@ -833,7 +824,7 @@ static void info_display_logfile(char const *field,resolve_service_t *res)
                 }
                 else
                 {
-                    if (!file_readputsa(&log,res->sa.s + res->dstlog,"current")) log_dieusys(LOG_EXIT_SYS,"read log file of: ",res->sa.s + res->name) ;
+                    if (!file_readputsa(&log,res->sa.s + res->logger.destination,"current")) log_dieusys(LOG_EXIT_SYS,"read log file of: ",res->sa.s + res->name) ;
                     /* we don't need to freed stralloc
                      * file_readputsa do it if the file is empty*/
                     if (!log.len) goto empty ;
@@ -902,7 +893,7 @@ static void info_parse_options(char const *str,int *what)
     stralloc_free(&sa) ;
 }
 
-int main(int argc, char const *const *argv, char const *const *envp)
+int ssexec_inservice(int argc, char const *const *argv, ssexec_t *info)
 {
     unsigned int legacy = 1 ;
     int found = 0 ;
@@ -915,12 +906,8 @@ int main(int argc, char const *const *argv, char const *const *envp)
     resolve_wrapper_t_ref wres = resolve_set_struct(DATA_SERVICE, &res) ;
     stralloc satree = STRALLOC_ZERO ;
 
-    log_color = &log_color_disable ;
-
     char const *svname = 0 ;
-    char const *tname = 0 ;
-
-    ENVP = envp ;
+    char atree[SS_MAX_TREENAME + 1] ;
 
     for (int i = 0 ; i < MAXOPTS ; i++)
         what[i] = -1 ;
@@ -947,34 +934,29 @@ int main(int argc, char const *const *argv, char const *const *envp)
         "Log destination",
         "Log file" } ;
 
-    PROG = "66-inservice" ;
     {
         subgetopt l = SUBGETOPT_ZERO ;
 
         for (;;)
         {
-            int opt = subgetopt_r(argc,argv, "hzv:cno:grd:t:p:", &l) ;
+            int opt = subgetopt_r(argc,argv, OPTS_INSERVICE, &l) ;
             if (opt == -1) break ;
 
             switch (opt)
             {
-                case 'h' :  info_help(); return 0 ;
-                case 'v' :  if (!uint0_scan(l.arg, &VERBOSITY)) log_usage(USAGE) ; break ;
-                case 'z' :  log_color = !isatty(1) ? &log_color_disable : &log_color_enable ; break ;
                 case 'n' :  NOFIELD = 0 ; break ;
                 case 'o' :  legacy = 0 ; info_parse_options(l.arg,what) ; break ;
                 case 'g' :  GRAPH = 1 ; break ;
                 case 'r' :  REVERSE = 1 ; break ;
-                case 'd' :  if (!uint0_scan(l.arg, &MAXDEPTH)) log_usage(USAGE) ; break ;
-                case 't' :  tname = l.arg ; break ;
-                case 'p' :  if (!uint0_scan(l.arg, &nlog)) log_usage(USAGE) ; break ;
-                default :   log_usage(USAGE) ;
+                case 'd' :  if (!uint0_scan(l.arg, &MAXDEPTH)) log_usage(usage_inservice) ; break ;
+                case 'p' :  if (!uint0_scan(l.arg, &nlog)) log_usage(usage_inservice) ; break ;
+                default :   log_usage(usage_inservice) ;
             }
         }
         argc -= l.ind ; argv += l.ind ;
     }
 
-    if (!argc) log_usage(USAGE) ;
+    if (!argc) log_usage(usage_inservice) ;
     svname = *argv ;
 
     if (legacy)
@@ -995,14 +977,21 @@ int main(int argc, char const *const *argv, char const *const *envp)
     setlocale(LC_ALL, "");
 
     if(!strcmp(nl_langinfo(CODESET), "UTF-8")) {
-        STYLE = &graph_utf8;
+        S_STYLE = &graph_utf8;
     }
     if (!set_ownersysdir(&home,owner)) log_dieusys(LOG_EXIT_SYS, "set owner directory") ;
     if (!auto_stra(&home,SS_SYSTEM,"/")) log_die_nomem("stralloc") ;
 
-    found = service_intree(&src,svname,tname) ;
+    /*
+     *
+     *
+     * sortie a revoir pour le passage vers service_is_g
+     *
+     *
+     * */
+    found = service_is_g(atree, svname, STATE_FLAGS_ISENABLED) ;
 
-    if (found == -1) log_dieu(LOG_EXIT_SYS,"resolve tree source of service: ",svname) ;
+    if (found == -1) log_dieusys(LOG_EXIT_SYS,"resolve tree source of service: ",svname) ;
     else if (!found) {
         log_info("no tree exist yet") ;
         goto freed ;
@@ -1011,7 +1000,19 @@ int main(int argc, char const *const *argv, char const *const *envp)
         log_die(LOG_EXIT_SYS,svname," is set on different tree -- please use -t options") ;
     }
     else if (found == 1) log_die(LOG_EXIT_SYS,"unknown service: ",svname) ;
-
+    /**
+     *
+     *
+     *
+     *  le src.s est vide ducon
+     *
+     * a revoir
+     *
+     *
+     *
+     *
+     *
+     * */
     if (!resolve_read(wres,src.s,svname))
         log_dieusys(LOG_EXIT_SYS,"read resolve file of: ",svname) ;
 
diff --git a/src/66/66-instate.c b/src/lib66/exec/ssexec_instate.c
similarity index 76%
rename from src/66/66-instate.c
rename to src/lib66/exec/ssexec_instate.c
index 0d5898e6b3be0dd3c19735703235e6284664f9a3..312794e9982b142211108008b1102edc6c268e05 100644
--- a/src/66/66-instate.c
+++ b/src/lib66/exec/ssexec_instate.c
@@ -1,5 +1,5 @@
 /*
- * 66-instate.c
+ * ssexec_instate.c
  *
  * Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org>
  *
@@ -27,6 +27,7 @@
 #include <skalibs/buffer.h>
 
 #include <66/resolve.h>
+#include <66/ssexec.h>
 #include <66/info.h>
 #include <66/utils.h>
 #include <66/constants.h>
@@ -83,7 +84,7 @@ static void info_display_int(char const *field,unsigned int id)
     info_display_string(field,str) ;
 }
 
-int main(int argc, char const *const *argv)
+int ssexec_instate(int argc, char const *const *argv, ssexec_t *info)
 {
     int found = 0 ;
     resolve_service_t res = RESOLVE_SERVICE_ZERO ;
@@ -94,8 +95,6 @@ int main(int argc, char const *const *argv)
     char const *ste = 0 ;
     char atree[SS_MAX_TREENAME + 1] ;
 
-    log_color = &log_color_disable ;
-
     char buf[MAXOPTS][INFO_FIELD_MAXLEN] = {
         "toinit",
         "toreload",
@@ -108,47 +107,10 @@ int main(int argc, char const *const *argv)
         "issupervised",
         "isup" } ;
 
-    PROG = "66-instate" ;
-    {
-        subgetopt l = SUBGETOPT_ZERO ;
-
-        for (;;)
-        {
-            int opt = getopt_args(argc,argv, ">hv:zt:", &l) ;
-            if (opt == -1) break ;
-            if (opt == -2) log_die(LOG_EXIT_USER,"options must be set first") ;
-            switch (opt)
-            {
-                case 'h' :
-
-                    info_help();
-                    return 0 ;
-
-                case 'v' :
-
-                        if (!uint0_scan(l.arg, &VERBOSITY))
-                            log_usage(USAGE) ;
-
-                        break ;
-
-                case 'z' :
-
-                    log_color = !isatty(1) ? &log_color_disable : &log_color_enable ;
-                    break ;
-
-                case 't' :
-
-                    log_1_warn("deprecated option -t -- ignore it") ;
-                    break ;
-
-                default :
-                    log_usage(USAGE) ;
-            }
-        }
-        argc -= l.ind ; argv += l.ind ;
-    }
+    argc-- ;
+    argv++ ;
 
-    if (!argc) log_usage(USAGE) ;
+    if (!argc) log_usage(usage_instate) ;
     svname = *argv ;
 
     if (!set_ownersysdir_stack(base, getuid()))
diff --git a/src/66/66-intree.c b/src/lib66/exec/ssexec_intree.c
similarity index 86%
rename from src/66/66-intree.c
rename to src/lib66/exec/ssexec_intree.c
index b7bbfc9cbd5d3d5b61bae5f05a6b578f352ca051..27a7911f7ba1933c9e6eb88061257ffaa60fad75 100644
--- a/src/66/66-intree.c
+++ b/src/lib66/exec/ssexec_intree.c
@@ -1,5 +1,5 @@
 /*
- * 66-intree.c
+ * ssexec_intree.c
  *
  * Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org>
  *
@@ -22,12 +22,11 @@
 
 #include <oblibs/sastr.h>
 #include <oblibs/log.h>
-#include <oblibs/obgetopt.h>
 #include <oblibs/types.h>
 #include <oblibs/string.h>
 #include <oblibs/files.h>
 
-#include <skalibs/stralloc.h>
+#include <skalibs/sgetopt.h>
 #include <skalibs/genalloc.h>
 #include <skalibs/lolstdio.h>
 #include <skalibs/bytestr.h>
@@ -40,8 +39,8 @@
 #include <66/enum.h>
 #include <66/resolve.h>
 #include <66/service.h>
-#include <66/backup.h>
 #include <66/graph.h>
+#include <66/ssexec.h>
 
 static unsigned int REVERSE = 0 ;
 static unsigned int NOFIELD = 1 ;
@@ -65,7 +64,7 @@ static void info_display_allow(char const *field,char const *treename) ;
 static void info_display_symlink(char const *field,char const *treename) ;
 static void info_display_contents(char const *field,char const *treename) ;
 static void info_display_groups(char const *field,char const *treename) ;
-info_graph_style *STYLE = &graph_default ;
+static info_graph_style *T_STYLE = &graph_default ;
 
 info_opts_map_t const opts_tree_table[] =
 {
@@ -86,41 +85,6 @@ info_opts_map_t const opts_tree_table[] =
 #define checkopts(n) if (n >= MAXOPTS) log_die(LOG_EXIT_USER, "too many options")
 #define DELIM ','
 
-#define USAGE "66-intree [ -h ] [ -z ] [ -v verbosity ] [ -l live ] [ -n ] [ -o name,init,enabled,... ] [ -g ] [ -d depth ] [ -r ] tree"
-
-static inline void info_help (void)
-{
-    DEFAULT_MSG = 0 ;
-
-    static char const *help =
-"\n"
-"options :\n"
-"   -h: print this help\n"
-"   -z: use color\n"
-"   -v: increase/decrease verbosity\n"
-"   -l: live directory\n"
-"   -n: do not display the names of fields\n"
-"   -o: comma separated list of field to display\n"
-"   -g: displays the contents field as graph\n"
-"   -d: limit the depth of the contents field recursion\n"
-"   -r: reverse the contents field\n"
-"\n"
-"valid fields for -o options are:\n"
-"\n"
-"   name: displays the name of the tree\n"
-"   current: displays a boolean value of the current state\n"
-"   enabled: displays a boolean value of the enable state\n"
-"   init: displays a boolean value of the initialization state\n"
-"   depends: displays the list of tree(s) started before\n"
-"   requiredby: displays the list of tree(s) started after\n"
-"   allowed: displays a list of allowed user to use the tree\n"
-"   symlinks: displays the target of tree's symlinks\n"
-"   contents: displays the contents of the tree\n"
-;
-
-    log_info(USAGE,"\n",help) ;
-}
-
 static void info_display_name(char const *field, char const *treename)
 {
     if (NOFIELD) info_display_field_name(field) ;
@@ -187,10 +151,9 @@ static void info_display_depends(char const *field, char const *treename)
     if (NOFIELD) padding = info_display_field_name(field) ;
     else { field = 0 ; padding = 0 ; }
 
-    if (!graph_build_g(&graph, base.s, treename, DATA_TREE, 0))
-        log_dieu(LOG_EXIT_SYS,"build the graph") ;
+    graph_build_tree(&graph, base.s) ;
 
-    r = graph_matrix_get_edge_g_sorted_sa(&sa, &graph, treename, 0) ;
+    r = graph_matrix_get_edge_g_sorted_sa(&sa, &graph, treename, 0, 0) ;
     if (r < 0)
         log_dieu(LOG_EXIT_SYS, "get the dependencies list") ;
 
@@ -203,7 +166,7 @@ static void info_display_depends(char const *field, char const *treename)
 
         depth_t d = info_graph_init() ;
 
-        if (!info_walk(&graph, treename, treename, &info_graph_display_tree, 0, REVERSE, &d, padding, STYLE))
+        if (!info_walk(&graph, treename, treename, &info_graph_display_tree, 0, REVERSE, &d, padding, T_STYLE))
             log_dieu(LOG_EXIT_SYS,"display the graph dependencies") ;
 
         goto freed ;
@@ -224,7 +187,7 @@ static void info_display_depends(char const *field, char const *treename)
             if (!bprintf(buffer_1,"%s\n","/"))
                 log_dieusys(LOG_EXIT_SYS,"write to stdout") ;
 
-            if (!bprintf(buffer_1,"%*s%s%s%s%s\n",padding, "", STYLE->last, log_color->warning,"None",log_color->off))
+            if (!bprintf(buffer_1,"%*s%s%s%s%s\n",padding, "", T_STYLE->last, log_color->warning,"None",log_color->off))
                 log_dieusys(LOG_EXIT_SYS,"write to stdout") ;
 
         } else {
@@ -248,10 +211,9 @@ static void info_display_requiredby(char const *field, char const *treename)
     if (NOFIELD) padding = info_display_field_name(field) ;
     else { field = 0 ; padding = 0 ; }
 
-    if (!graph_build_g(&graph, base.s, treename, DATA_TREE, 0))
-        log_dieu(LOG_EXIT_SYS,"build the graph") ;
+    graph_build_tree(&graph, base.s) ;
 
-    r = graph_matrix_get_edge_g_sorted_sa(&sa, &graph, treename, 1) ;
+    r = graph_matrix_get_edge_g_sorted_sa(&sa, &graph, treename, 1, 0) ;
     if (r < 0)
         log_dieu(LOG_EXIT_SYS, "get the dependencies list") ;
 
@@ -265,7 +227,7 @@ static void info_display_requiredby(char const *field, char const *treename)
 
         depth_t d = info_graph_init() ;
 
-        if (!info_walk(&graph, treename, treename, &info_graph_display_tree, 1, REVERSE, &d, padding, STYLE))
+        if (!info_walk(&graph, treename, treename, &info_graph_display_tree, 1, REVERSE, &d, padding, T_STYLE))
             log_dieu(LOG_EXIT_SYS,"display the graph dependencies") ;
 
         goto freed ;
@@ -287,7 +249,7 @@ static void info_display_requiredby(char const *field, char const *treename)
             if (!bprintf(buffer_1,"%s\n","/"))
                 log_dieusys(LOG_EXIT_SYS,"write to stdout") ;
 
-            if (!bprintf(buffer_1,"%*s%s%s%s%s\n",padding, "", STYLE->last, log_color->warning,"None",log_color->off))
+            if (!bprintf(buffer_1,"%*s%s%s%s%s\n",padding, "", T_STYLE->last, log_color->warning,"None",log_color->off))
                 log_dieusys(LOG_EXIT_SYS,"write to stdout") ;
 
         } else {
@@ -339,6 +301,7 @@ static void info_display_allow(char const *field, char const *treename)
 
 static void info_display_symlink(char const *field, char const *treename)
 {
+    /*
     if (NOFIELD) info_display_field_name(field) ;
     ssexec_t info = SSEXEC_ZERO ;
     if (!auto_stra(&info.treename,treename)) log_die_nomem("stralloc") ;
@@ -369,6 +332,7 @@ static void info_display_symlink(char const *field, char const *treename)
         log_dieusys(LOG_EXIT_SYS,"write to stdout") ;
 
     ssexec_free(&info) ;
+    */
 }
 
 static void info_display_contents(char const *field, char const *treename)
@@ -385,7 +349,7 @@ static void info_display_contents(char const *field, char const *treename)
 
     auto_strings(tmp, src.s, treename, SS_SVDIRS) ;
 
-    if (!graph_build_service_bytree(&graph, tmp, 2))
+    if (!graph_build_service_bytree(&graph, tmp, 2, 0))
         log_dieu(LOG_EXIT_SYS,"build the graph dependencies") ;
 
     if (!graph_matrix_sort_tosa(&sa, &graph))
@@ -400,7 +364,7 @@ static void info_display_contents(char const *field, char const *treename)
 
         depth_t d = info_graph_init() ;
 
-        if (!info_walk(&graph, 0, treename, &info_graph_display_service, 0, REVERSE, &d, padding, STYLE))
+        if (!info_walk(&graph, 0, treename, &info_graph_display_service, 0, REVERSE, &d, padding, T_STYLE))
             log_dieu(LOG_EXIT_SYS,"display the graph dependencies") ;
 
         goto freed ;
@@ -421,7 +385,7 @@ static void info_display_contents(char const *field, char const *treename)
             if (!bprintf(buffer_1,"%s\n","/"))
                 log_dieusys(LOG_EXIT_SYS,"write to stdout") ;
 
-            if (!bprintf(buffer_1,"%*s%s%s%s%s\n",padding, "", STYLE->last, log_color->warning,"None",log_color->off))
+            if (!bprintf(buffer_1,"%*s%s%s%s%s\n",padding, "", T_STYLE->last, log_color->warning,"None",log_color->off))
                 log_dieusys(LOG_EXIT_SYS,"write to stdout") ;
         }
         else
@@ -524,15 +488,13 @@ static void info_parse_options(char const *str,int *what)
     stralloc_free(&sa) ;
 }
 
-int main(int argc, char const *const *argv, char const *const *envp)
+int ssexec_intree(int argc, char const *const *argv, ssexec_t *info)
 {
     unsigned int legacy = 1 ;
 
     size_t pos, newlen, livelen ;
     int what[MAXOPTS] = { 0 } ;
 
-    log_color = &log_color_disable ;
-
     char const *treename = 0 ;
 
     for (int i = 0 ; i < MAXOPTS ; i++)
@@ -554,29 +516,25 @@ int main(int argc, char const *const *argv, char const *const *envp)
 
     stralloc satree = STRALLOC_ZERO ;
 
-    PROG = "66-intree" ;
     {
         subgetopt l = SUBGETOPT_ZERO ;
 
         for (;;)
         {
-            int opt = getopt_args(argc,argv, ">hzv:no:grd:l:", &l) ;
+            int opt = subgetopt_r(argc, argv, OPTS_INTREE, &l) ;
             if (opt == -1) break ;
-            if (opt == -2) log_die(LOG_EXIT_USER,"options must be set first") ;
+
             switch (opt)
             {
-                case 'h' :  info_help(); return 0 ;
-                case 'v' :  if (!uint0_scan(l.arg, &VERBOSITY)) log_usage(USAGE) ; break ;
-                case 'z' :  log_color = !isatty(1) ? &log_color_disable : &log_color_enable ; break ;
                 case 'n' :  NOFIELD = 0 ; break ;
                 case 'o' :  legacy = 0 ; info_parse_options(l.arg,what) ; break ;
                 case 'g' :  GRAPH = 1 ; break ;
                 case 'r' :  REVERSE = 1 ; break ;
-                case 'd' :  if (!uint0_scan(l.arg, &MAXDEPTH)) log_usage(USAGE) ; break ;
-                case 'l' :  if (!stralloc_cats(&live,l.arg)) log_usage(USAGE) ;
-                            if (!stralloc_0(&live)) log_usage(USAGE) ;
+                case 'd' :  if (!uint0_scan(l.arg, &MAXDEPTH)) log_usage(usage_intree) ; break ;
+                case 'l' :  if (!stralloc_cats(&live,l.arg)) log_usage(usage_intree) ;
+                            if (!stralloc_0(&live)) log_usage(usage_intree) ;
                             break ;
-                default :   log_usage(USAGE) ;
+                default :   log_usage(usage_intree) ;
             }
         }
         argc -= l.ind ; argv += l.ind ;
@@ -602,7 +560,7 @@ int main(int argc, char const *const *argv, char const *const *envp)
     setlocale(LC_ALL, "");
 
     if(!str_diff(nl_langinfo(CODESET), "UTF-8")) {
-        STYLE = &graph_utf8;
+        T_STYLE = &graph_utf8;
     }
 
     if (!set_ownersysdir(&base,OWNER)) log_dieusys(LOG_EXIT_SYS, "set owner directory") ;
@@ -634,7 +592,7 @@ int main(int argc, char const *const *argv, char const *const *envp)
     }
     else
     {
-        char const *exclude[3] = { SS_BACKUP + 1, SS_RESOLVE + 1, 0 } ;
+        char const *exclude[2] = { SS_RESOLVE + 1, 0 } ;
         if (!stralloc_0(&src)) log_die_nomem("stralloc") ;
         if (!sastr_dir_get(&satree, src.s,exclude, S_IFDIR)) log_dieusys(LOG_EXIT_SYS,"get list of tree at: ",src.s) ;
 
diff --git a/src/66/66-scanctl.c b/src/lib66/exec/ssexec_scanctl.c
similarity index 74%
rename from src/66/66-scanctl.c
rename to src/lib66/exec/ssexec_scanctl.c
index 073c3dc31e41a17e6234fff2d6f4310bd9e1a2d6..cc0d997861940f0bf5fdbf0d6ed40c4770824696 100644
--- a/src/66/66-scanctl.c
+++ b/src/lib66/exec/ssexec_scanctl.c
@@ -1,5 +1,5 @@
 /*
- * 66-scanctl.c
+ * ssexec_scanctl.c
  *
  * Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org>
  *
@@ -16,10 +16,10 @@
 #include <fcntl.h>
 
 #include <oblibs/log.h>
-#include <oblibs/obgetopt.h>
 #include <oblibs/string.h>
 #include <oblibs/environ.h>
 
+#include <skalibs/sgetopt.h>
 #include <skalibs/stralloc.h>
 #include <skalibs/types.h>
 #include <skalibs/djbunix.h>
@@ -31,31 +31,10 @@
 
 #include <66/svc.h>
 #include <66/utils.h>
+#include <66/ssexec.h>
 
 static char TMPENV[MAXENV + 1] ;
 
-#define USAGE "66-scanctl [ -h ] [ -z ] [ -v verbosity ] [ -l live ] [ -d notif ] [ -t rescan ] [ -e environment ] [ -o owner ] start|stop|reload|quit|nuke|zombies or any s6-svscanctl options"
-
-static inline void info_help (void)
-{
-    DEFAULT_MSG = 0 ;
-
-    static char const *help =
-"\n"
-"options :\n"
-"   -h: print this help\n"
-"   -z: use color\n"
-"   -v: increase/decrease verbosity\n"
-"   -l: live directory\n"
-"   -d: notify readiness on file descriptor\n"
-"   -t: rescan scandir every milliseconds\n"
-"   -e: environment directory\n"
-"   -o: handles scandir of owner\n"
-;
-
-    log_info(USAGE,"\n",help) ;
-}
-
 static inline unsigned int lookup (char const *const *table, char const *signal)
 {
     log_flow() ;
@@ -175,7 +154,7 @@ static void scandir_up(char const *scandir, unsigned int timeout, unsigned int n
     xexec_ae(newup[0], newup, envp) ;
 }
 
-int main(int argc, char const *const *argv, char const *const *envp)
+int ssexec_scanctl(int argc, char const *const *argv, ssexec_t *info)
 {
     int r ;
     uid_t owner = MYUID ;
@@ -183,53 +162,21 @@ int main(int argc, char const *const *argv, char const *const *envp)
 
     char const *newenv[MAXENV+1] ;
     char const *const *genv = 0 ;
+    char const *const *genvp = (char const *const *)environ ;
     char const *signal ;
-    char str[UINT_FMT] ;
 
     stralloc scandir = STRALLOC_ZERO ;
     stralloc envdir = STRALLOC_ZERO ;
 
-    log_color = &log_color_disable ;
-
-    PROG = "66-scanctl" ;
     {
         subgetopt l = SUBGETOPT_ZERO ;
 
-        for (;;)
-        {
-            int opt = getopt_args(argc,argv, ">hv:zl:o:d:t:e:", &l) ;
-            if (opt == -1) break ;
-            if (opt == -2) log_die(LOG_EXIT_USER,"options must be set first") ;
-            switch (opt)
-            {
-                case 'h' :
-
-                    info_help() ;
-                    return 0 ;
-
-                case 'v' :
-
-                    if (!uint0_scan(l.arg, &VERBOSITY))
-                        log_usage(USAGE) ;
-
-                    break ;
-
-                case 'z' :
-
-                    log_color = !isatty(1) ? &log_color_disable : &log_color_enable ;
-                    break ;
-
-                case 'l' :
-
-                    str[uint_fmt(str, SS_MAX_PATH)] = 0 ;
+        for (;;) {
 
-                    if (strlen(l.arg) > SS_MAX_PATH)
-                        log_die(LOG_EXIT_USER,"live path is too long -- it can not exceed ", str) ;
+            int opt = subgetopt_r(argc,argv, OPTS_SCANCTL, &l) ;
+            if (opt == -1) break ;
 
-                    if (!auto_stra(&scandir,l.arg))
-                        log_die_nomem("stralloc") ;
-
-                    break ;
+            switch (opt) {
 
                 case 'o' :
 
@@ -244,7 +191,7 @@ int main(int argc, char const *const *argv, char const *const *envp)
                 case 'd' :
 
                     if (!uint0_scan(l.arg, &notif))
-                        log_usage(USAGE) ;
+                        log_usage(usage_scanctl) ;
 
                     if (notif < 3)
                         log_die(LOG_EXIT_USER, "notification fd must be 3 or more") ;
@@ -257,7 +204,7 @@ int main(int argc, char const *const *argv, char const *const *envp)
                 case 't' :
 
                     if (!uint0_scan(l.arg, &timeout))
-                        log_usage(USAGE) ;
+                        log_usage(usage_scanctl) ;
 
                     break ;
 
@@ -270,13 +217,13 @@ int main(int argc, char const *const *argv, char const *const *envp)
 
                 default :
 
-                    log_usage(USAGE) ;
+                    log_usage(usage_scanctl) ;
             }
         }
         argc -= l.ind ; argv += l.ind ;
     }
 
-    if (argc < 1) log_usage(USAGE) ;
+    if (argc < 1) log_usage(usage_scanctl) ;
     signal = argv[0] ;
     r = set_livedir(&scandir) ;
     if (r < 0) log_die(LOG_EXIT_USER,"live: ",scandir.s," must be an absolute path") ;
@@ -294,20 +241,21 @@ int main(int argc, char const *const *argv, char const *const *envp)
         if (!environ_clean_envfile_unexport(&modifs,envdir.s))
             log_dieu(LOG_EXIT_SYS,"clean environment file of: ",envdir.s) ;
 
-        size_t envlen = env_len(envp) ;
-        size_t n = env_len(envp) + 1 + byte_count(modifs.s,modifs.len,'\0') ;
+
+        size_t envlen = env_len(genvp) ;
+        size_t n = env_len(genvp) + 1 + byte_count(modifs.s,modifs.len,'\0') ;
         size_t mlen = modifs.len ;
         memcpy(TMPENV,modifs.s,mlen) ;
         TMPENV[mlen] = 0 ;
 
-        if (!env_merge(newenv, n, envp, envlen, TMPENV, mlen))
+        if (!env_merge(newenv, n, genvp, envlen, TMPENV, mlen))
             log_dieu(LOG_EXIT_SYS,"merge environment") ;
 
         stralloc_free(&modifs) ;
 
         genv = newenv ;
     }
-    else genv = envp ;
+    else genv = genvp ;
 
     sig = parse_signal(signal) ;
 
diff --git a/src/66/66-scandir.c b/src/lib66/exec/ssexec_scandir.c
similarity index 96%
rename from src/66/66-scandir.c
rename to src/lib66/exec/ssexec_scandir.c
index 4dd6dea1e9fe44713a220caf30652a65f2fbb330..f870ac2b79100729142b9837314fdfefab039b0f 100644
--- a/src/66/66-scandir.c
+++ b/src/lib66/exec/ssexec_scandir.c
@@ -1,5 +1,5 @@
 /*
- * 66-scandir.c
+ * ssexec_scandir.c
  *
  * Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org>
  *
@@ -19,7 +19,6 @@
 #include <sys/stat.h>
 #include <stdarg.h>
 
-#include <oblibs/obgetopt.h>
 #include <oblibs/log.h>
 #include <oblibs/directory.h>
 #include <oblibs/types.h>
@@ -28,6 +27,7 @@
 #include <oblibs/environ.h>
 
 #include <skalibs/stralloc.h>
+#include <skalibs/sgetopt.h>
 #include <skalibs/djbunix.h>
 #include <skalibs/types.h>
 #include <skalibs/env.h>
@@ -39,6 +39,7 @@
 #include <execline/config.h>
 
 #include <66/config.h>
+#include <66/ssexec.h>
 #include <66/svc.h>
 #include <66/utils.h>
 #include <66/enum.h>
@@ -763,7 +764,7 @@ void sanitize_live(char const *live)
     auto_check(tmp,0755,PERM1777,AUTO_CRTE_CHW_CHM) ;
 }
 
-int main(int argc, char const *const *argv, char const *const *envp)
+int ssexec_scandir(int argc, char const *const *argv, ssexec_t *info)
 {
     int r ;
     unsigned int cmd, create, remove ;
@@ -771,41 +772,22 @@ int main(int argc, char const *const *argv, char const *const *envp)
     stralloc live = STRALLOC_ZERO ;
     stralloc scandir = STRALLOC_ZERO ;
 
-    log_color = &log_color_disable ;
-
     CONFIG_STR_LEN = compute_buf_size(SS_BINPREFIX, SS_EXTBINPREFIX, SS_EXTLIBEXECPREFIX, SS_LIBEXECPREFIX, SS_EXECLINE_SHEBANGPREFIX, 0) ;
 
     cmd = create = remove = 0 ;
 
     OWNER = MYUID ;
 
-    PROG = "66-scandir" ;
     {
         subgetopt l = SUBGETOPT_ZERO ;
 
         for (;;)
         {
-            int opt = getopt_args(argc,argv, ">hzv:bl:s:o:L:cB", &l) ;
+            int opt = subgetopt_r(argc, argv, OPTS_SCANDIR, &l) ;
             if (opt == -1) break ;
-            if (opt == -2) log_die(LOG_EXIT_USER,"options must be set first") ;
+
             switch (opt)
             {
-                case 'h' :
-
-                    info_help() ;
-                    return 0 ;
-
-                case 'z' :
-
-                    log_color = !isatty(1) ? &log_color_disable : &log_color_enable ;
-                    break ;
-
-                case 'v' :
-
-                    if (!uint0_scan(l.arg, &VERBOSITY))
-                        log_usage(USAGE) ;
-                    break ;
-
                 case 'b' :
 
                     BOOT = 1 ;
@@ -850,19 +832,19 @@ int main(int argc, char const *const *argv, char const *const *envp)
 
                 default :
 
-                    log_usage(USAGE) ;
+                    log_usage(usage_scandir) ;
             }
         }
         argc -= l.ind ; argv += l.ind ;
     }
 
     if (!argc)
-        log_usage(USAGE) ;
+        log_usage(usage_scandir) ;
 
     cmd = parse_command(argv[0]) ;
 
     if (cmd == 3) {
-        log_usage(USAGE) ;
+        log_usage(usage_scandir) ;
     } else if (!cmd) {
         create = 1 ;
     } else  {