diff --git a/src/66/66-boot.c b/src/66/66-boot.c
index 1e40f5fce82354d2eb228160b333d107c9ca11e6..1f73d7acdcc39ab3bf8cee8fbd91d562a138b646 100644
--- a/src/66/66-boot.c
+++ b/src/66/66-boot.c
@@ -19,21 +19,21 @@
 #include <errno.h>
 #include <sys/stat.h>
 #include <sys/mount.h>
+#include <sys/reboot.h>
 
 #include <oblibs/error2.h>
 #include <oblibs/files.h>
 #include <oblibs/string.h>
 #include <oblibs/obgetopt.h>
+#include <oblibs/environ.h>
+#include <oblibs/sastr.h>
 
 #include <skalibs/buffer.h>
 #include <skalibs/djbunix.h>
-#include <skalibs/diuint32.h>
-#include <skalibs/genalloc.h>
 #include <skalibs/stralloc.h>
 #include <skalibs/types.h>
 
 #include <66/config.h>
-#include <66/environ.h>
 #include <66/constants.h>
 
 unsigned int VERBOSITY = 1 ;
@@ -68,7 +68,7 @@ static void sulogin(char const *msg,char const *arg)
 	fd_close(0) ;
 	if (dup2(fdin,0) == -1) strerr_diefu1x(111,"duplicate stdin -- you are on your own") ;
 	fd_close(fdin) ;	
-	if (*msg) strerr_warnwu2sys(msg,arg) ;
+	if (*msg) strerr_warnwu2x(msg,arg) ;
 	pid = child_spawn0(newarg[0],newarg,genv) ;
 	if (waitpid_nointr(pid,&wstat, 0) < 0)
 			strerr_diefu1sys(111,"wait for sulogin -- you are on your own") ;
@@ -101,10 +101,9 @@ static void parse_conf(void)
 	static char const *valid[] = 
 	{ "VERBOSITY", "PATH", "LIVE", "TREE", "RCINIT", "UMASK", "RESCAN", 0 } ;
 	int r ;
-	unsigned int i = 0, j = 0 ;
+	unsigned int j = 0 ;
 	stralloc src = STRALLOC_ZERO ;
-	stralloc saconf = STRALLOC_ZERO ;
-	genalloc gaconf = GENALLOC_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) ;
@@ -114,51 +113,44 @@ static void parse_conf(void)
 	size_t filesize=file_get_size(confile) ;
 	r = openreadfileclose(confile,&src,filesize) ;
 	if(!r) sulogin("open configuration file: ",confile) ; 
-	if (!stralloc_0(&src)) sulogin("append stralloc configuration file","") ;
+	if (!stralloc_0(&src)) sulogin("append stralloc of file: ",confile) ;
 	
-	r = env_split(&gaconf,&saconf,&src) ;
-	if (!r) sulogin("parse configuration file: ",confile) ;
-
-	for (;i < genalloc_len(diuint32,&gaconf) ; i++)
+	for (char const *const *p = valid;*p;p++,j++)
 	{
-		char *key = saconf.s + genalloc_s(diuint32,&gaconf)[i].left ;
-		char *val = saconf.s + genalloc_s(diuint32,&gaconf)[i].right ;
-		j = 0 ;
-		for (char const *const *p = valid;*p;p++,j++)
+		if (!stralloc_copy(&val,&src)) sulogin("copy stralloc of file: ",confile) ;
+		if (!environ_get_val_of_key(&val,*p)) continue ;
+		sastr_clean_element(&val) ;
+		if (!val.len) strerr_warnwu3x("get value of: ",*p," -- keeps the default") ;
+		
+		switch (j)
 		{
-			if (!strcmp(*p,key))
-			{
-				switch (j)
-				{
-					case 0: if (!uint0_scan(val, &VERBOSITY)) sulogin("invalid VERBOSITY value: ","") ; 
-							break ;
-					case 1: memcpy(tpath,val,strlen(val)) ;
-							tpath[strlen(val)] = 0 ;
-							path = tpath ;
-							break ;
-					case 2: memcpy(tlive,val,strlen(val)) ;
-							tlive[strlen(val)] = 0 ;
-							live = tlive ;
-							if (live[0] != '/') sulogin ("LIVE must be an absolute path","") ; 
-							break ;
-					case 3: memcpy(ttree,val,strlen(val)) ;
-							ttree[strlen(val)] = 0 ;
-							tree = ttree ;
-							break ;
-					case 4: memcpy(trcinit,val,strlen(val)) ;
-							trcinit[strlen(val)] = 0 ;
-							rcinit = trcinit ;
-							if (rcinit[0] != '/') sulogin ("RCINIT must be an absolute path","") ; 
-							break ;
-					case 5: if (!uint0_oscan(val, &mask)) sulogin("invalid MASK value","") ; break ;
-					case 6: if (!uint0_scan(val, &rescan)) sulogin("invalid RESCAN value","") ; break ;
-					default: break ;
-				}
-			}
+			case 0: if (!uint0_scan(val.s, &VERBOSITY)) sulogin("parse VERBOSITY value: ",val.s) ; 
+					break ;
+			case 1: memcpy(tpath,val.s,val.len) ;
+					tpath[val.len] = 0 ;
+					path = tpath ;
+					break ;
+			case 2: memcpy(tlive,val.s,val.len) ;
+					tlive[val.len] = 0 ;
+					live = tlive ;
+					if (live[0] != '/') sulogin ("LIVE must be an absolute path: ",val.s) ; 
+					break ;
+			case 3: memcpy(ttree,val.s,val.len) ;
+					ttree[val.len] = 0 ;
+					tree = ttree ;
+					break ;
+			case 4: memcpy(trcinit,val.s,val.len) ;
+					trcinit[val.len] = 0 ;
+					rcinit = trcinit ;
+					if (rcinit[0] != '/') sulogin ("RCINIT must be an absolute path: ",val.s) ; 
+					break ;
+			case 5: if (!uint0_oscan(val.s, &mask)) sulogin("invalid MASK value: ",val.s) ; break ;
+			case 6: if (!uint0_scan(val.s, &rescan)) sulogin("invalid RESCAN value: ",val.s) ; break ;
+			default: break ;
 		}
+		
 	}
-	genalloc_free(diuint32,&gaconf) ;
-	stralloc_free(&saconf) ;
+	stralloc_free(&val) ;
 	stralloc_free(&src) ;
 }
 
@@ -330,8 +322,10 @@ int main(int argc, char const *const *argv,char const *const *envp)
 		make_cmdline(SS_EXTBINPREFIX "66-init",t,3,"initiate earlier service of tree: ",tree,envp) ;	
 	}
 	
-	if (envdir)
-		if (!env_get_from_src(&envmodifs,envdir)) sulogin("get environment from: ",envdir) ;
+	if (envdir) {
+		int e = environ_get_envfile(&envmodifs,envdir) ;
+		if (e <= 0){ environ_get_envfile_error(e,envdir) ; sulogin("","") ; }
+	}
 	
 	{
 		strerr_warni3x("Starts boot logger at: ",live,"/log/0") ;
@@ -360,6 +354,7 @@ int main(int argc, char const *const *argv,char const *const *envp)
 		pid = fork() ;
 		if (pid == -1) sulogin("fork: ",rcinit) ;
 		if (!pid) run_stage2(newenvp, 2, envmodifs.s,envmodifs.len) ;
+		if (reboot(RB_DISABLE_CAD) == -1) sulogin("trap ctrl-alt-del","") ;
 		if (fd_copy(2, 1) == -1) sulogin("copy stderr to stdout","") ;
 		fd_close(fdin) ;
 		xpathexec_r(newargv, newenvp, 2, envmodifs.s, envmodifs.len) ;
diff --git a/src/66/66-scandir.c b/src/66/66-scandir.c
index 390f8ec034eea0abe333f06c246fd315b5fd62cb..5db01545bfee9e542034c20f840caf61f9384755 100644
--- a/src/66/66-scandir.c
+++ b/src/66/66-scandir.c
@@ -25,6 +25,7 @@
 #include <oblibs/types.h>
 #include <oblibs/files.h>
 #include <oblibs/string.h>
+#include <oblibs/environ.h>
 
 #include <skalibs/buffer.h>
 #include <skalibs/stralloc.h>
@@ -549,7 +550,7 @@ int main(int argc, char const *const *argv, char const *const *envp)
 		if (envdir.s[0] != '/')
 			strerr_dief3x(110,"environment: ",envdir.s," must be an absolute path") ;
 		
-		if (!build_env(envdir.s,envp,newenv,TMPENV)) strerr_diefu2x(111,"build environment with: ",envdir.s) ;
+		if (!environ_get_envfile_n_merge(envdir.s,envp,newenv,TMPENV)) strerr_diefu2x(111,"build environment with: ",envdir.s) ;
 		genv = newenv ;
 	}
 	else genv = envp ;
diff --git a/src/66/66-shutdownd.c b/src/66/66-shutdownd.c
index 49b7a155ed74af3b1a80ee5d8fb34aa087500848..b35cc5f0dc35b260a3feecbc7654f341d5e9d5dc 100644
--- a/src/66/66-shutdownd.c
+++ b/src/66/66-shutdownd.c
@@ -26,6 +26,8 @@
 #include <stdio.h>
 #include <sys/wait.h>
 
+#include <oblibs/environ.h>
+
 #include <skalibs/posixplz.h>
 #include <skalibs/uint32.h>
 #include <skalibs/types.h>
@@ -40,7 +42,6 @@
 #include <skalibs/djbunix.h>
 #include <skalibs/iopause.h>
 #include <skalibs/skamisc.h>
-#include <skalibs/diuint32.h>
 
 #include <execline/config.h>
 
@@ -48,7 +49,6 @@
 
 #include <66/config.h>
 #include <66/constants.h>
-#include <66/environ.h>
 
 #define STAGE4_FILE "stage4"
 #define DOTPREFIX ".66-shutdownd:"
@@ -107,29 +107,16 @@ ssize_t file_get_size(const char* filename)
 static void parse_conf(char const *confile,char *rcshut,size_t filesize)
 {
 	int r ;
-	unsigned int i = 0 ;
 	stralloc src = STRALLOC_ZERO ;
-	stralloc saconf = STRALLOC_ZERO ;
-	genalloc gaconf = GENALLOC_ZERO ;
 	r = openreadfileclose(confile,&src,filesize) ;
 	if(!r) strerr_diefu2sys(111,"open configuration file: ",confile) ; 
 	if (!stralloc_0(&src)) strerr_diefu1sys(111,"append stralloc configuration file") ;
 	
-	r = env_split(&gaconf,&saconf,&src) ;
-	if (!r) strerr_diefu2sys(111,"parse configuration file: ",confile) ;
-	
-	for (;i < genalloc_len(diuint32,&gaconf) ; i++)
+	if (environ_get_val_of_key(&src,"RCSHUTDOWN"))
 	{
-		char *key = saconf.s + genalloc_s(diuint32,&gaconf)[i].left ;
-		char *val = saconf.s + genalloc_s(diuint32,&gaconf)[i].right ;
-		if (!strcmp(key,"RCSHUTDOWN"))
-		{
-			memcpy(rcshut,val,strlen(val)) ;
-			rcshut[strlen(val)] = 0 ;
-		}
+		memcpy(rcshut,src.s,src.len) ;
+		rcshut[src.len] = 0 ;
 	}
-	genalloc_free(diuint32,&gaconf) ;
-	stralloc_free(&saconf) ;
 	stralloc_free(&src) ;
 }
 
diff --git a/src/extra-tools/deps-exe/execl-envfile b/src/extra-tools/deps-exe/execl-envfile
index 77b1d97fdc3b7efce73a9a3efb7a8691bb92c0ea..e25e157e5b437887daf1cd5a5675f86440db6e37 100644
--- a/src/extra-tools/deps-exe/execl-envfile
+++ b/src/extra-tools/deps-exe/execl-envfile
@@ -1,5 +1,6 @@
 ${LIB66}
--lexecline
+${LIBEXECLINE}
 -loblibs
+-lexecline
 -lskarnet
-${LIBEXECLINE}
+
diff --git a/src/extra-tools/deps-exe/execl-subuidgid b/src/extra-tools/deps-exe/execl-subuidgid
index 77b1d97fdc3b7efce73a9a3efb7a8691bb92c0ea..84a128c2c444222aa2d2803ee5682450abb82aa8 100644
--- a/src/extra-tools/deps-exe/execl-subuidgid
+++ b/src/extra-tools/deps-exe/execl-subuidgid
@@ -1,5 +1,5 @@
 ${LIB66}
--lexecline
 -loblibs
+-lexecline
 -lskarnet
 ${LIBEXECLINE}
diff --git a/src/extra-tools/execl-envfile.c b/src/extra-tools/execl-envfile.c
index 7b66925fb87cf438e18bd316481de58fabbcaa89..682f6d9b8b0d20426cc21d04aeba071d6cb66ee5 100644
--- a/src/extra-tools/execl-envfile.c
+++ b/src/extra-tools/execl-envfile.c
@@ -21,28 +21,20 @@
 #include <oblibs/stralist.h>
 #include <oblibs/error2.h>
 #include <oblibs/types.h>
-#include <oblibs/obgetopt.h>
 #include <oblibs/directory.h>
 #include <oblibs/files.h>
+#include <oblibs/environ.h>
+#include <oblibs/sastr.h>
 
 #include <skalibs/bytestr.h>
 #include <skalibs/stralloc.h>
-#include <skalibs/genalloc.h>
 #include <skalibs/env.h>
 #include <skalibs/djbunix.h>
-#include <skalibs/diuint32.h>
 #include <skalibs/env.h>
 #include <skalibs/sgetopt.h>
 
 #include <execline/execline.h>
 
-#include <66/parser.h>
-#include <66/environ.h>
-#include <66/constants.h>
-
-static stralloc SAENV = STRALLOC_ZERO ;
-static genalloc GAENV = GENALLOC_ZERO ; //diuint32, pos in senv
-
 #define USAGE "execl-envfile [ -h help ] [ -l ] src prog"
 
 static inline void info_help (void)
@@ -60,43 +52,36 @@ static inline void info_help (void)
     strerr_diefu1sys(111, "write to stdout") ;
 }
 
-int loop_stra(stralloc *sa,char const *search)
+void clean_n_unexport(stralloc *modifs, stralloc *dst, stralloc *src)
 {
-	size_t i = 0, len = sa->len ;
-	for (;i < len; i += strlen(sa->s + i) + 1)
-		if (!strcmp(sa->s+i,search)) return 1 ;
-	
-	return 0 ;
+	if (!environ_clean_envfile(modifs,src)) strerr_diefu2sys(111,"prepare modified environment of: ",src->s) ;		
+	if (!sastr_split_string_in_nline(modifs)) strerr_diefu2sys(111,"build environment line of: ",src->s) ; ;
+	if (!stralloc_cats(dst,src->s)) exitstralloc("clean_n_unexport") ;
 }
 
 int main (int argc, char const *const *argv, char const *const *envp)
 {
-	int r, i, unexport  ;
-	int insist = 1 ;
-	size_t pathlen ;
-	char const *path = 0 ;
-	char const *file = 0 ;
-	char tpath[MAXENV + 1] ;
-	char tfile[MAXENV+1] ;
+	int r = 0, unexport = 0, insist = 1, nfile = 0, nvar = 0 ;
+	size_t pos = 0, pathlen = 0 ;
+	char const *path = 0, *file = 0 ;
+	char tpath[MAXENV + 1], tfile[MAXENV+1] ;
 	stralloc src = STRALLOC_ZERO ;
 	stralloc modifs = STRALLOC_ZERO ;
 	stralloc dst = STRALLOC_ZERO ;
-	genalloc toparse = GENALLOC_ZERO ; //stralist
+	stralloc toparse = STRALLOC_ZERO ; 
+	stralloc key = STRALLOC_ZERO ; 
+	stralloc val = STRALLOC_ZERO ; 
 	
 	exlsn_t info = EXLSN_ZERO ;
-	
-	r = i = unexport = 0 ;
-	insist = 1 ;
-	
+		
 	PROG = "execl-envfile" ;
 	{
 		subgetopt_t l = SUBGETOPT_ZERO ;
 
 		for (;;)
 		{
-			int opt = subgetopt_r(argc,argv, ">hlf:", &l) ;
+			int opt = subgetopt_r(argc,argv, "hlf:", &l) ;
 			if (opt == -1) break ;
-			if (opt == -2) strerr_dief1x(110,"options must be set first") ;
 			switch (opt)
 			{
 				case 'h' : 	info_help(); return 0 ;
@@ -107,7 +92,6 @@ int main (int argc, char const *const *argv, char const *const *envp)
 		}
 		argc -= l.ind ; argv += l.ind ;
 	}
-	
 	if (argc < 2) exitusage(USAGE) ;
 	
 	path = *argv ;
@@ -123,11 +107,11 @@ int main (int argc, char const *const *argv, char const *const *envp)
 	else
 	{
 		r = scan_mode(path,S_IFREG) ;
-		if (!r) strerr_diefu2sys(111,"find: ",path) ;
+		if (!r && insist) strerr_diefu2sys(111,"find: ",path) ;
 		if (r < 0)
 		{
 			r = scan_mode(path,S_IFDIR) ;
-			if (!r) strerr_diefu2sys(111,"find: ",path) ;
+			if (!r && insist) strerr_diefu2sys(111,"find: ",path) ;
 			if (r < 0) strerr_dief2x(111,"invalid format of: ", path) ;
 			if (path[0] == '.')
 			{
@@ -152,16 +136,15 @@ int main (int argc, char const *const *argv, char const *const *envp)
 		}
 	}
 	
-	r = dir_get(&toparse,path,"",S_IFREG) ;
+	r = sastr_dir_get(&toparse,path,"",S_IFREG) ;
 	if (!r && insist) strerr_diefu2sys(111,"get file from: ",path) ;
-	else if ((!r && !insist) || !genalloc_len(stralist,&toparse))
+	else if ((!r && !insist) || !toparse.len)
 	{
 		xpathexec_run(argv[0],argv,envp) ;
 	}
-	
 	if (file)
 	{
-		r = stra_findidx(&toparse,file) ;
+		ssize_t	r = sastr_cmp(&toparse,file) ;
 		if (r < 0) 
 		{
 			if (insist) strerr_diefu2x(111,"find: ",file) ;
@@ -170,27 +153,23 @@ int main (int argc, char const *const *argv, char const *const *envp)
 				xpathexec_run(argv[0],argv,envp) ;
 			}
 		}
-		
 		if (!file_readputsa(&src,path,file)) strerr_diefu4sys(111,"read file: ",path,"/",file) ;
-		if (!env_parsenclean(&modifs,&src)) strerr_diefu4x(111,"parse and clean environment of: ",path,"/",file)  ;
-		if (!env_split(&GAENV,&SAENV,&src)) strerr_diefu4x(111,"split environment of: ",path,"/",file) ;
-		if (genalloc_len(diuint32,&GAENV) > MAXVAR) strerr_dief4x(111,"to many variables in file: ",path,"/",file) ;
+		clean_n_unexport(&modifs,&dst,&src) ;
 	}
 	else
 	{
-		for (i = 0 ; i < genalloc_len(stralist,&toparse) ; i++)
+		for (;pos < toparse.len; pos += strlen(toparse.s + pos) + 1)
 		{
+			nfile++;
 			src.len = 0 ;
-			size_t n = genalloc_len(diuint32,&GAENV) + MAXVAR ;
-			if (i > MAXFILE) strerr_dief2x(111,"to many file to parse in: ",path) ;
-			if (!file_readputsa(&src,path,gaistr(&toparse,i))) strerr_diefu4sys(111,"read file: ",path,"/",gaistr(&toparse,i)) ;
-			if (!env_parsenclean(&modifs,&src)) strerr_diefu4x(111,"parse and clean environment of: ",path,"/",gaistr(&toparse,i)) ;
-			if (!env_split(&GAENV,&SAENV,&src)) strerr_diefu4x(111,"split environment of: ",path,"/",gaistr(&toparse,i)) ;
-			if (genalloc_len(diuint32,&GAENV) > n) strerr_dief4x(111,"to many variables in file: ",path,"/",gaistr(&toparse,i)) ;
+			if (nfile > MAXFILE) strerr_dief2x(111,"to many file to parse in: ",path) ;
+			if (!file_readputsa(&src,path,toparse.s+pos)) strerr_diefu4sys(111,"read file: ",path,"/",toparse.s+pos) ;
+			clean_n_unexport(&modifs,&dst,&src) ;
+			nvar = environ_get_num_of_line(&src) ;
+			if (nvar == -1) strerr_diefu4sys(111,"get number of line of:",path,"/",toparse.s+pos) ;
+			if (nvar > MAXVAR) strerr_dief4x(111,"to many variables in file: ",path,"/",toparse.s+pos) ;
 		}
 	}
-
-	genalloc_deepfree(stralist,&toparse,stra_free) ;
 	stralloc_free(&src) ;
 	
 	/** be able to freed the stralloc before existing */
@@ -203,35 +182,45 @@ int main (int argc, char const *const *argv, char const *const *envp)
 	char const *newenv[n + 1] ;
 	if (!env_merge (newenv, n ,envp,env_len(envp),tmp, modifs.len)) strerr_diefu1sys(111,"build environment") ;
 	
-	for (i = 0 ; i < genalloc_len(diuint32,&GAENV) ; i++)
-	{
-			unexport = 0 ;
-			int key = genalloc_s(diuint32,&GAENV)[i].left ;
-			int val = genalloc_s(diuint32,&GAENV)[i].right ;
-			if ((SAENV.s+val)[0] == SS_VAR_UNEXPORT)
-			{
-				val++ ;
-				unexport = 1 ;
-			}
-			if(!loop_stra(&info.vars,SAENV.s + key))
-				if (!env_substitute(SAENV.s + key,SAENV.s + val,&info,newenv,unexport)) 
-					strerr_diefu4x(111,"substitute value of: ",SAENV.s + key," by: ",SAENV.s + val) ;
+	if (!sastr_split_string_in_nline(&dst)) strerr_diefu1x(111,"split line") ;
+	pos = 0 ;
+	while (pos < dst.len)
+	{		
+		unexport = 0 ;
+		key.len = val.len = 0 ;
+		if (!stralloc_copy(&key,&dst) ||
+		!stralloc_copy(&val,&dst)) retstralloc(111,"main") ;
+		
+		if (!environ_get_key_nclean(&key,&pos)) strerr_diefu2x(111,"get key from line: ",key.s) ;
+		pos-- ;// retrieve the '=' character
+		if (!environ_get_val(&val,&pos)) strerr_diefu2x(111,"get value from line: ",val.s) ;
+
+		char *uval = val.s ;
+		if (val.s[0] == VAR_UNEXPORT)
+		{
+			uval = val.s+1 ;
+			unexport = 1 ;
+		}
+		if(sastr_cmp(&info.vars,key.s) == -1)
+			if (!environ_substitute(key.s,uval,&info,newenv,unexport)) 
+				strerr_diefu4x(111,"substitute value of: ",key.s," by: ",uval) ;
 	}
-	genalloc_free(diuint32,&GAENV) ;
-	stralloc_free(&SAENV) ;
+	stralloc_free(&key) ;
+	stralloc_free(&val) ;
+	stralloc_free(&dst) ;
+	stralloc_free(&modifs) ;
 	
-	modifs.len = 0 ;
 	if (!env_string (&modifs, argv, (unsigned int) argc)) strerr_diefu1x(111,"make environment string") ;
-	
 	r = el_substitute (&dst, modifs.s, modifs.len, info.vars.s, info.values.s,
 		genalloc_s (elsubst_t const, &info.data),genalloc_len (elsubst_t const, &info.data)) ;
 	if (r < 0) strerr_diefu1sys(111,"el_substitute") ;
 	else if (!r) _exit(0) ;
-	
+
 	stralloc_free(&modifs) ;
-	
+
 	char const *v[r + 1] ;
 	if (!env_make (v, r ,dst.s, dst.len)) strerr_diefu1sys(111,"make environment") ;
 	v[r] = 0 ;
+	
 	pathexec_r (v, newenv, env_len(newenv),info.modifs.s,info.modifs.len) ;
 }
diff --git a/src/extra-tools/execl-subuidgid.c b/src/extra-tools/execl-subuidgid.c
index 8eb60e834be597c43808b637e23e2956041daedc..259c1ea9b939397b0dc2cd23f7de30767a640664 100644
--- a/src/extra-tools/execl-subuidgid.c
+++ b/src/extra-tools/execl-subuidgid.c
@@ -15,7 +15,9 @@
 #include <unistd.h>
 #include <sys/types.h>
 #include <stdio.h>
+
 #include <oblibs/error2.h>
+#include <oblibs/environ.h>
 
 #include <skalibs/types.h>
 #include <skalibs/buffer.h>
@@ -83,8 +85,8 @@ int main (int argc, char const **argv, char const *const *envp)
 	cuid[uid_fmt(cuid,uid)] = 0 ;
 	cgid[gid_fmt(cgid,gid)] = 0 ;
 	
-	if (!env_addkv("UID",cuid,&info)) strerr_diefu1sys(111,"set UID") ;
-	if (!env_addkv("GID",cgid,&info)) strerr_diefu1sys(111,"set GID") ;
+	if (!environ_add_key_val("UID",cuid,&info)) strerr_diefu1sys(111,"set UID") ;
+	if (!environ_add_key_val("GID",cgid,&info)) strerr_diefu1sys(111,"set GID") ;
 	
 	if (!env_string(&sa,argv,(unsigned int) argc)) strerr_diefu1sys(111,"environment string") ;