diff --git a/src/lib66/resolve/resolve_read_g.c b/src/lib66/resolve/resolve_read_g.c
index 7999d4a32fc0fe1f3405bc48428d7a43fdc6a8fb..6cc93e1346ef1d327b9f6256fceec2df69ef71be 100644
--- a/src/lib66/resolve/resolve_read_g.c
+++ b/src/lib66/resolve/resolve_read_g.c
@@ -16,6 +16,7 @@
 
 #include <oblibs/log.h>
 #include <oblibs/string.h>
+#include <oblibs/types.h>
 
 #include <66/resolve.h>
 
@@ -29,12 +30,15 @@ int resolve_read_g(resolve_wrapper_t *wres, char const *src, char const *name)
     char tmp[srclen + SS_RESOLVE_LEN + 1 + namelen + 1] ;
     auto_strings(tmp,src,SS_RESOLVE,"/",name) ;
 
-    r = scan_mode(tmp,S_IFREG) ;
-    if (r <= 0)
-        log_warnusys_return(LOG_EXIT_ZERO,"found resolve file: ", tmp) ;
+    int r = scan_mode(tmp,S_IFREG) ;
+    if (r < 0)
+        return -1 ;
 
-    if (!resolve_read_cdb(wres,tmp))
+    if (!r)
         return 0 ;
 
+    if (!resolve_read_cdb(wres,tmp))
+        return -1 ;
+
     return 1 ;
 }
diff --git a/src/lib66/service/service_isenabled.c b/src/lib66/service/service_isenabled.c
index 46a8d4899b51f7967ee3481fa2c173dbc9a7d600..0b8c793122d6f057da3fb3199dc2b2698083e956 100644
--- a/src/lib66/service/service_isenabled.c
+++ b/src/lib66/service/service_isenabled.c
@@ -39,7 +39,7 @@ int service_isenabled(char const *sv)
     resolve_service_t res = RESOLVE_SERVICE_ZERO ;
     resolve_wrapper_t_ref wres = resolve_set_struct(DATA_SERVICE, &res) ;
     size_t newlen = 0, pos = 0 ;
-    int e = -1 ;
+    int e = -1, r ;
     char const *exclude[3] = { SS_BACKUP + 1, SS_RESOLVE + 1, 0 } ;
 
     if (!set_ownersysdir(&sa, getuid())) {
@@ -74,13 +74,15 @@ int service_isenabled(char const *sv)
         char trees[newlen + strlen(treename) + SS_SVDIRS_LEN + 1] ;
         auto_strings(trees, tmp, treename, SS_SVDIRS) ;
 
-        if (resolve_check(trees, sv)) {
+        r = resolve_read_g(wres, trees, sv) ;
 
-            if (!resolve_read(wres, trees, sv)) {
+        if (r < 0) {
 
-                log_warnu("read resolve file: ", trees, "/", sv) ;
-                goto freed ;
-            }
+            log_warnu("read resolve file: ", trees, "/", sv) ;
+            e = -1 ;
+            goto freed ;
+
+        } else if (r) {
 
             if (res.disen) {
 
@@ -91,6 +93,7 @@ int service_isenabled(char const *sv)
 
             } else {
 
+                log_trace(sv, " disabled at tree: ", treename) ;
                 e = 2 ;
                 goto freed ;
             }
diff --git a/src/lib66/service/service_isenabledat.c b/src/lib66/service/service_isenabledat.c
index 57d4428146ed8698f59158495836dd0fc19478c4..582a54aa955a9278c2681993c0bffee14231e61c 100644
--- a/src/lib66/service/service_isenabledat.c
+++ b/src/lib66/service/service_isenabledat.c
@@ -39,7 +39,7 @@ int service_isenabledat(stralloc *tree, char const *sv)
     resolve_service_t res = RESOLVE_SERVICE_ZERO ;
     resolve_wrapper_t_ref wres = resolve_set_struct(DATA_SERVICE, &res) ;
     size_t newlen = 0, pos = 0 ;
-    int e = -1 ;
+    int e = -1, r ;
     char const *exclude[3] = { SS_BACKUP + 1, SS_RESOLVE + 1, 0 } ;
 
     if (!set_ownersysdir(&sa, getuid())) {
@@ -74,13 +74,16 @@ int service_isenabledat(stralloc *tree, char const *sv)
         char trees[newlen + strlen(treename) + SS_SVDIRS_LEN + 1] ;
         auto_strings(trees, tmp, treename, SS_SVDIRS) ;
 
-        if (resolve_check(trees, sv)) {
 
-            if (!resolve_read(wres, trees, sv)) {
+        r = resolve_read_g(wres, trees, sv) ;
 
-                log_warnu("read resolve file: ", trees, "/", sv) ;
-                goto freed ;
-            }
+        if (r < 0) {
+
+            log_warnu("read resolve file: ", trees, "/", sv) ;
+            e = -1 ;
+            goto freed ;
+
+        } else if (r) {
 
             if (res.disen) {