diff --git a/src/include/66/svc.h b/src/include/66/svc.h
index 0c55293a266e47cbc57575cbf46eca0a2f830855..11d75484f042d95ec1ed6a14044c941120c46080 100644
--- a/src/include/66/svc.h
+++ b/src/include/66/svc.h
@@ -55,7 +55,7 @@ extern int svc_compute_ns(resolve_service_t *res, uint8_t what, ssexec_t *info,
 extern int svc_scandir_ok (char const *dir) ;
 extern int svc_scandir_send(char const *scandir,char const *signal) ;
 extern int svc_send_wait(char const *const *list, unsigned int nservice, char **sig, unsigned int siglen, ssexec_t *info) ;
-extern void svc_unsupervise(unsigned int *alist, unsigned int alen, graph_t *g, resolve_service_t *ares, unsigned int areslen) ;
+extern void svc_unsupervise(unsigned int *alist, unsigned int alen, graph_t *g, resolve_service_t *ares, unsigned int areslen, ssexec_t *info) ;
 extern void svc_send_fdholder(char const *socket, char const *signal) ;
 
 #endif
diff --git a/src/lib66/svc/svc_unsupervise.c b/src/lib66/svc/svc_unsupervise.c
index b9da67ffbce97311e88af1983559a98207620ac8..0b96d8e98c957163520fd2b3307252d3d8838b82 100644
--- a/src/lib66/svc/svc_unsupervise.c
+++ b/src/lib66/svc/svc_unsupervise.c
@@ -15,54 +15,42 @@
 #include <oblibs/log.h>
 #include <oblibs/sastr.h>
 
-#include <skalibs/genalloc.h>
-
 #include <66/state.h>
 #include <66/sanitize.h>
 #include <66/graph.h>
 #include <66/svc.h>
 #include <66/enum.h>
+#include <66/symlink.h>
+#include <66/constants.h>
 
 static void sanitize_it(resolve_service_t *res)
 {
     log_flow() ;
-    
-    ss_state_t sta = STATE_ZERO ;
 
-    sanitize_fdholder(res, STATE_FLAGS_FALSE) ;
+    ss_state_t sta = STATE_ZERO ;
 
     if (!state_read(&sta, res))
         log_dieu(LOG_EXIT_SYS, "read state file of: ", res->sa.s + res->name) ;
 
+    sanitize_fdholder(res, &sta, STATE_FLAGS_FALSE) ;
+
     state_set_flag(&sta, STATE_FLAGS_TOUNSUPERVISE, STATE_FLAGS_TRUE) ;
     state_set_flag(&sta, STATE_FLAGS_ISUP, STATE_FLAGS_FALSE) ;
 
-    if (!state_write(&sta, res))
-        log_dieu(LOG_EXIT_SYS, "write state file of: ", res->sa.s + res->name) ;
-    
-    sanitize_scandir(res) ;
-    sanitize_livestate(res) ;
+    sanitize_scandir(res, &sta) ;
 
-    log_info("Unsupervised successfully: ", res->sa.s + res->name) ;
-}
-
-static void unsupervise_logger(unsigned int idx, resolve_service_t *ares, unsigned int areslen)
-{
-    log_flow() ;
+    state_set_flag(&sta, STATE_FLAGS_TOUNSUPERVISE, STATE_FLAGS_TRUE) ;
 
-    if (ares[idx].logger.want && ares[idx].type == TYPE_CLASSIC) {
+    sanitize_livestate(res, &sta) ;
 
-        char *name = ares[idx].sa.s + ares[idx].logger.name ;
-        int aresid = service_resolve_array_search(ares, areslen, name) ;
-        if (aresid < 0)
-            log_dieu(LOG_EXIT_SYS,"find ares id of: ", name, " -- please make a bug reports") ;
+    if (!symlink_switch(res, SYMLINK_SOURCE))
+        log_dieusys(LOG_EXIT_SYS, "switch service symlink to source for: ", res->sa.s + res->name) ;
 
-        sanitize_it(&ares[aresid]) ;
-    }
+    log_info("Unsupervised successfully: ", res->sa.s + res->name) ;
 }
 
-/** this function considers that the service is already down */
-void svc_unsupervise(unsigned int *alist, unsigned int alen, graph_t *g, resolve_service_t *ares, unsigned int areslen)
+/** this function considers that the service is already down except for the logger */
+void svc_unsupervise(unsigned int *alist, unsigned int alen, graph_t *g, resolve_service_t *ares, unsigned int areslen, ssexec_t *info)
 {
     log_flow() ;
 
@@ -83,8 +71,6 @@ void svc_unsupervise(unsigned int *alist, unsigned int alen, graph_t *g, resolve
 
         sanitize_it(&ares[aresid]) ;
 
-        unsupervise_logger(aresid, ares, areslen) ;
-
         if ((ares[aresid].type == TYPE_BUNDLE || ares[aresid].type == TYPE_MODULE) && ares[aresid].dependencies.ncontents) {
 
             sa.len = 0, bpos = 0 ;
@@ -102,7 +88,6 @@ void svc_unsupervise(unsigned int *alist, unsigned int alen, graph_t *g, resolve
             }
         }
     }
-
     stralloc_free(&sa) ;
 }