diff --git a/src/lib66/exec/ssexec_scandir_signal.c b/src/lib66/exec/ssexec_scandir_signal.c
index e97f03242f0d0f401e69cf9689085c170369cb1c..e2bb0e47b9fdd198c07355740119a6f49257af68 100644
--- a/src/lib66/exec/ssexec_scandir_signal.c
+++ b/src/lib66/exec/ssexec_scandir_signal.c
@@ -14,6 +14,8 @@
 
 #include <string.h>
 #include <fcntl.h>
+#include <unistd.h>
+#include <sys/types.h>
 
 #include <oblibs/log.h>
 #include <oblibs/string.h>
@@ -29,6 +31,7 @@
 
 #include <66/ssexec.h>
 #include <66/svc.h>
+#include <66/utils.h>
 
 #include <s6/config.h>
 
@@ -143,8 +146,10 @@ static int send_signal(char const *scandir, char const *signal)
     return svc_scandir_send(scandir,csig) ;
 }
 
-static void scandir_up(char const *scandir, unsigned int timeout, unsigned int notif, char const *const *envp)
+static void scandir_up(char const *scandir, unsigned int timeout, unsigned int notif, char const *const *envp, ssexec_t *info)
 {
+    uid_t uid = getuid() ;
+    gid_t gid = getgid() ;
     unsigned int no = notif ? 2 : 0 ;
     char const *newup[6 + no] ;
     unsigned int m = 0 ;
@@ -164,6 +169,21 @@ static void scandir_up(char const *scandir, unsigned int timeout, unsigned int n
     newup[m++] = scandir ;
     newup[m++] = 0 ;
 
+    if (!uid && uid != info->owner) {
+        /** -o <owner> was asked. Respect it
+         * a start the s6-svscan process with the
+         * good uid and gid */
+        if (!yourgid(&gid, info->owner))
+            log_dieusys(LOG_EXIT_SYS, "get gid of: ", info->ownerstr) ;
+        if (setgid(gid) < 0)
+            log_dieusys(LOG_EXIT_SYS, "setgid for: ", info->ownerstr) ;
+        if (setuid(info->owner) < 0)
+            log_dieusys(LOG_EXIT_SYS, "setuid for: ", info->ownerstr) ;
+
+    }
+
+    ssexec_free(info) ;
+
     xexec_ae(newup[0], newup, envp) ;
 }
 
@@ -299,10 +319,8 @@ int ssexec_scandir_signal(int argc, char const *const *argv, ssexec_t *info)
         }
 
         stralloc_free(&envdir) ;
-        ssexec_free(info) ;
 
-        scandir_up(scandir, timeout, notif, genv) ;
-        return 0 ;
+        scandir_up(scandir, timeout, notif, genv, info) ;
     }
 
     r = svc_scandir_ok(info->scandir.s) ;