diff --git a/src/lib66/state/state_write.c b/src/lib66/state/state_write.c
index 30f37be381352b4e95075a847b905a6f1eac335f..894946c58b73e134029edc06f7584ad6c295ce22 100644
--- a/src/lib66/state/state_write.c
+++ b/src/lib66/state/state_write.c
@@ -29,27 +29,22 @@ int state_write(ss_state_t *sta, resolve_service_t *res)
 {
     log_flow() ;
 
-    size_t len = strlen(res->sa.s + res->path.servicedir) ;
-
-    char target[len + SS_STATE_LEN + 1 + SS_STATUS_LEN + 1] ;
+    size_t len = strlen(res->sa.s + res->path.home) + SS_SYSTEM_LEN + SS_SERVICE_LEN + SS_SVC_LEN + 1 + strlen(res->sa.s + res->name) ;
+    char pack[STATE_STATE_SIZE] ;
+    char dir[len + SS_STATE_LEN + 1] ;
 
-    auto_strings(target, res->sa.s + res->path.servicedir, SS_STATE) ;
+    auto_strings(dir, res->sa.s + res->path.home, SS_SYSTEM, SS_SERVICE, SS_SVC, "/", res->sa.s + res->name, SS_STATE) ;
 
-    if (access(target, F_OK) < 0) {
-        log_trace("create directory: ", target) ;
-        if (!dir_create_parent(target, 0755))
-            log_warnusys_return(LOG_EXIT_ZERO, "create directory: ", target) ;
+    if (access(dir, F_OK) < 0) {
+        log_trace("create directory: ", dir) ;
+        if (!dir_create_parent(dir, 0755))
+            log_warnusys_return(LOG_EXIT_ZERO, "create directory: ", dir) ;
     }
 
-    auto_strings(target + len + SS_STATE_LEN, "/", SS_STATUS) ;
-
-    char pack[STATE_STATE_SIZE] ;
-
     state_pack(pack, sta) ;
 
-    log_trace("write status file at: ", target) ;
-
-    if (!openwritenclose_unsafe(target, pack, STATE_STATE_SIZE))
+    log_trace("write status file at: ", res->sa.s + res->path.status) ;
+    if (!openwritenclose_unsafe(res->sa.s + res->path.status, pack, STATE_STATE_SIZE))
         return 0 ;
 
     return 1 ;