diff --git a/src/lib66/service/service_frontend_src.c b/src/lib66/service/service_frontend_src.c
index 8f8ecbc11f9c39704b838eb3bb9d0b989f7bd326..c47da701a07e0114b01adb5efdc29ae4c538ed6f 100644
--- a/src/lib66/service/service_frontend_src.c
+++ b/src/lib66/service/service_frontend_src.c
@@ -29,10 +29,10 @@ int service_frontend_src(stralloc *sasrc, char const *name, char const *src)
 {
     log_flow() ;
 
-    int  insta, equal = 0, e = -1, r = 0, found = 0 ;
+    int insta, equal = 0, e = -1, r = 0, found = 0 ;
     stralloc sa = STRALLOC_ZERO ;
-    size_t pos = 0, dpos = 0, pathlen = strlen(src) ;
-
+    size_t pos = 0, dpos = 0, pathlen = strlen(src), namelen = strlen(name) ;
+    char instaname[strlen(name) + 1] ;
     char const *exclude[1] = { 0 } ;
 
     char path[pathlen + 1] ;
@@ -52,6 +52,24 @@ int service_frontend_src(stralloc *sasrc, char const *name, char const *src)
     char tmp[len + 1] ;
     sastr_to_char(tmp, &sa) ;
 
+    insta = instance_check(name) ;
+    if (!insta) {
+        log_warn("invalid instance name: ", name) ;
+        goto err ;
+    }
+
+    sa.len = 0 ;
+
+    if (insta > 0) {
+        /** search for the template name */
+        memcpy(instaname, name, insta + 1) ;
+        instaname[insta + 1] = 0 ;
+
+    } else {
+
+        auto_strings(instaname, name) ;
+    }
+
     for (; pos < len ; pos += strlen(tmp + pos) + 1) {
 
         sa.len = 0 ;
@@ -64,21 +82,15 @@ int service_frontend_src(stralloc *sasrc, char const *name, char const *src)
 
         size_t dnamelen = strlen(dname) ;
         char bname[dnamelen + 1] ;
+        char srcname[dnamelen + 1] ;
 
         if (!ob_basename(bname,dname))
             goto err ;
 
-        equal = strcmp(name, bname) ;
-
-        insta = instance_check(bname) ;
-
-        if (insta > 0) {
+        if (!ob_dirname(srcname, dname))
+            goto err ;
 
-            if (!instance_splitname(&sa, bname, insta, SS_INSTANCE_TEMPLATE))
-                goto err ;
-
-            equal = strcmp(sa.s,bname) ;
-        }
+        equal = strcmp(instaname, bname) ;
 
         if (!equal) {
 
@@ -86,8 +98,12 @@ int service_frontend_src(stralloc *sasrc, char const *name, char const *src)
 
             if (S_ISREG(st.st_mode)) {
 
-                if (sastr_cmp(sasrc, dname) == -1)
-                    if (!sastr_add_string(sasrc, dname))
+                char result[strlen(srcname) + namelen + 1] ;
+
+                auto_strings(result, srcname, name) ;
+
+                if (sastr_cmp(sasrc, result) == -1)
+                    if (!sastr_add_string(sasrc, result))
                         goto err ;
 
                 break ;