diff --git a/doc/index.html b/doc/index.html
index 5fda05d9384b4dda5b7cb6c90282f4debfadf69a..0c1c611bddc4cb82766936642e15a3eddf2f231b 100644
--- a/doc/index.html
+++ b/doc/index.html
@@ -88,10 +88,10 @@
 		<li><a href="66-stop.html"><tt>66-stop</tt></a></li>
 	</ul>
 	
-	<h3> Inner tools </h3>
+	<h3> execline tools </h3>
 	
 	<ul>
-		<li><a href="66-execl.html"><tt>66-execl</tt></a></li>
+		<li><a href="execl-cmdline.html"><tt>execl-cmdline</tt></a></li>
 	</ul>
 
 <h2> Why is 66 necessary? </h2>
diff --git a/package/deps.mak b/package/deps.mak
index 1f48e1bbf89f34cab94069e64c66f14a1f648deb..7c42587d3fbe735c17e809b66c8653d8eea8f203 100644
--- a/package/deps.mak
+++ b/package/deps.mak
@@ -9,13 +9,13 @@ src/66/66-all.o src/66/66-all.lo: src/66/66-all.c src/include/66/config.h src/in
 src/66/66-dbctl.o src/66/66-dbctl.lo: src/66/66-dbctl.c src/include/66/constants.h src/include/66/db.h src/include/66/enum.h src/include/66/tree.h src/include/66/utils.h
 src/66/66-disable.o src/66/66-disable.lo: src/66/66-disable.c src/include/66/backup.h src/include/66/constants.h src/include/66/db.h src/include/66/enum.h src/include/66/tree.h src/include/66/utils.h
 src/66/66-enable.o src/66/66-enable.lo: src/66/66-enable.c src/include/66/backup.h src/include/66/constants.h src/include/66/db.h src/include/66/enum.h src/include/66/parser.h src/include/66/svc.h src/include/66/tree.h src/include/66/utils.h
-src/66/66-execl.o src/66/66-execl.lo: src/66/66-execl.c
 src/66/66-init.o src/66/66-init.lo: src/66/66-init.c src/include/66/backup.h src/include/66/constants.h src/include/66/db.h src/include/66/tree.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/utils.h
 src/66/66-start.o src/66/66-start.lo: src/66/66-start.c src/include/66/backup.h src/include/66/config.h src/include/66/constants.h src/include/66/db.h src/include/66/enum.h src/include/66/svc.h src/include/66/tree.h src/include/66/utils.h
 src/66/66-stop.o src/66/66-stop.lo: src/66/66-stop.c src/include/66/backup.h src/include/66/config.h src/include/66/constants.h src/include/66/db.h src/include/66/enum.h src/include/66/svc.h src/include/66/tree.h src/include/66/utils.h
 src/66/66-svctl.o src/66/66-svctl.lo: src/66/66-svctl.c src/include/66/constants.h src/include/66/tree.h src/include/66/utils.h
 src/66/66-tree.o src/66/66-tree.lo: src/66/66-tree.c src/include/66/config.h src/include/66/constants.h src/include/66/db.h src/include/66/tree.h src/include/66/utils.h
+src/66/execl-cmdline.o src/66/execl-cmdline.lo: src/66/execl-cmdline.c
 src/lib66/backup_cmd_switcher.o src/lib66/backup_cmd_switcher.lo: src/lib66/backup_cmd_switcher.c src/include/66/constants.h src/include/66/enum.h src/include/66/utils.h
 src/lib66/backup_make_new.o src/lib66/backup_make_new.lo: src/lib66/backup_make_new.c src/include/66/constants.h src/include/66/db.h src/include/66/enum.h src/include/66/tree.h src/include/66/utils.h
 src/lib66/backup_realpath_sym.o src/lib66/backup_realpath_sym.lo: src/lib66/backup_realpath_sym.c src/include/66/constants.h src/include/66/enum.h src/include/66/utils.h
@@ -64,8 +64,6 @@ src/lib66/tree_switch_tobackup.o src/lib66/tree_switch_tobackup.lo: src/lib66/tr
 66-disable: src/66/66-disable.o ${LIB66} -loblibs -lskarnet 
 66-enable: EXTRA_LIBS :=
 66-enable: src/66/66-enable.o ${LIB66} -loblibs -lskarnet -lexecline -ls6
-66-execl: EXTRA_LIBS :=
-66-execl: src/66/66-execl.o -loblibs -lskarnet
 66-init: EXTRA_LIBS :=
 66-init: src/66/66-init.o ${LIB66} -loblibs -ls6 -lskarnet
 66-scandir: EXTRA_LIBS :=
@@ -78,6 +76,8 @@ src/lib66/tree_switch_tobackup.o src/lib66/tree_switch_tobackup.lo: src/lib66/tr
 66-svctl: src/66/66-svctl.o ${LIB66} -loblibs -ls6 -lskarnet
 66-tree: EXTRA_LIBS :=
 66-tree: src/66/66-tree.o ${LIB66} -loblibs -lskarnet
+execl-cmdline: EXTRA_LIBS :=
+execl-cmdline: src/66/execl-cmdline.o -lexecline -loblibs -lskarnet
 ifeq ($(strip $(STATIC_LIBS_ARE_PIC)),)
 lib66.a.xyzzy: src/lib66/backup_cmd_switcher.o src/lib66/backup_make_new.o src/lib66/backup_realpath_sym.o src/lib66/db_cmd_master.o src/lib66/db_compile.o src/lib66/db_find_compiled_state.o src/lib66/db_get_permissions.o src/lib66/db_ok.o src/lib66/db_switch_to.o src/lib66/db_update.o src/lib66/dir_cmpndel.o src/lib66/find_sv_src.o src/lib66/get_enum.o src/lib66/get_uidgid.o src/lib66/get_userhome.o src/lib66/parser.o src/lib66/parser_utils.o src/lib66/parser_write.o src/lib66/resolve.o src/lib66/scandir_ok.o src/lib66/scandir_send_signal.o src/lib66/set_livedir.o src/lib66/set_livescan.o src/lib66/set_livetree.o src/lib66/set_ownerhome.o src/lib66/set_ownersysdir.o src/lib66/sv_alltype_zero.o src/lib66/svc_switch_to.o src/lib66/tree_cmd_state.o src/lib66/tree_cmd_switcher.o src/lib66/tree_copy.o src/lib66/tree_find_current.o src/lib66/tree_from_current.o src/lib66/tree_get_permissions.o src/lib66/tree_make_backup.o src/lib66/tree_sethome.o src/lib66/tree_switch_current.o src/lib66/tree_switch_tobackup.o
 else
diff --git a/package/modes b/package/modes
index 485cbdbf6591e59cd0cf9a92addd0fb0e17afc7b..63252212f4b74caae2c0bd876425afd71289260b 100644
--- a/package/modes
+++ b/package/modes
@@ -1,11 +1,11 @@
-66-scandir	0755
-66-init		0755
-66-tree		0755
-66-dbctl	0755
-66-enable	0755
-66-disable	0755
-66-start	0755
-66-stop		0755
-66-svctl	0755
-66-all		0755
-66-execl	0755
+66-scandir		0755
+66-init			0755
+66-tree			0755
+66-dbctl		0755
+66-enable		0755
+66-disable		0755
+66-start		0755
+66-stop			0755
+66-svctl		0755
+66-all			0755
+execl-cmdline	0755
diff --git a/package/targets.mak b/package/targets.mak
index e28837d0040c2a021ce6bff0e7a581022d8de2c7..2a7bbacba32d038d18bae4705fd3dd65797cdf63 100644
--- a/package/targets.mak
+++ b/package/targets.mak
@@ -9,6 +9,6 @@ BIN_TARGETS := \
 66-stop \
 66-svctl \
 66-all \
-66-execl
+execl-cmdline
 
 LIB_DEFS := 66=66
diff --git a/src/66/66-execl.c b/src/66/66-execl.c
deleted file mode 100644
index 5d73de565963fa8642d1f726e4ca5f7266419dc8..0000000000000000000000000000000000000000
--- a/src/66/66-execl.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/* 
- * 66-execl.c
- * 
- * Copyright (c) 2018 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/string.h>
-#include <oblibs/stralist.h>
-#include <oblibs/error2.h>
-
-#include <skalibs/genalloc.h>
-#include <skalibs/djbunix.h>
-#include <skalibs/stralloc.h>
-
-
-int main(int argc, char const *const *argv, char const *const *envp)
-{
-
-	int r ;
-	PROG = "66-execl" ;
-	genalloc ga = GENALLOC_ZERO ; 
-	if (argc < 2) strerr_diefu1x(111,"missing arguments") ;
-	argc-- ; argv++ ;	
-	for (int i = 0 ;i < argc;i++,argv++)
-	{
-		r = clean_val(&ga,*argv) ;
-		if (!r) strerr_diefu2x(111,"clean_val: ",*argv) ;
-	}
-	
-	unsigned int m = genalloc_len(stralist,&ga) ;
-	char const *newarg[m+1] ;
-	unsigned int n = 0 ;
-	for (unsigned int i =0; i < genalloc_len(stralist,&ga); i++)
-		newarg[n++] = gaistr(&ga,i) ;
-	
-	newarg[n] = 0 ;
-			
-	xpathexec_run(newarg[0],newarg,envp) ;
-}
diff --git a/src/66/deps-exe/66-execl b/src/66/deps-exe/execl-cmdline
similarity index 63%
rename from src/66/deps-exe/66-execl
rename to src/66/deps-exe/execl-cmdline
index d24233ce5bfe994938345010c182fd45c2a1c1e9..c6b27401245136c5d4e0f2b82c6d623381aefe8b 100644
--- a/src/66/deps-exe/66-execl
+++ b/src/66/deps-exe/execl-cmdline
@@ -1,2 +1,3 @@
+-lexecline
 -loblibs
 -lskarnet
diff --git a/src/66/execl-cmdline.c b/src/66/execl-cmdline.c
new file mode 100644
index 0000000000000000000000000000000000000000..46f649796b1570283b19b3a7d8553cf19297a3f9
--- /dev/null
+++ b/src/66/execl-cmdline.c
@@ -0,0 +1,51 @@
+/* 
+ * execl-cmdline.c
+ * 
+ * Copyright (c) 2018 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 <skalibs/stralloc.h>
+#include <skalibs/strerr2.h>
+#include <skalibs/env.h>
+
+#include <execline/execline.h>
+
+int main(int argc, char const **argv, char const *const *envp)
+{
+
+	int r, argc1 ;
+
+	PROG = "66-execl" ;
+
+	stralloc modifs = STRALLOC_ZERO ;
+	
+	r =  0 ;
+	
+	argc1 = el_semicolon(++argv) ;
+	if (argc1 >= --argc) strerr_dief1x(100, "unterminated block") ;
+	
+	char const **newargv = argv ;
+	for (int i = 0;i<argc1;i++, newargv++)
+	{	
+		if (!*newargv[0])
+			continue ;
+		
+		stralloc_cats(&modifs,*newargv) ;
+		stralloc_0(&modifs) ;
+		r++;
+	}
+	
+	char const *newarg[r + 1] ;
+    if (!env_make(newarg, r, modifs.s, modifs.len)) strerr_diefu1sys(111, "env_make") ;
+    newarg[r] = 0 ;
+	
+	el_execsequence(newarg, argv+argc1+1, envp) ;
+}