diff --git a/main/java/org/apache/sling/scripting/bundle/tracker/internal/BundledScriptFinder.java b/main/java/org/apache/sling/scripting/bundle/tracker/internal/BundledScriptFinder.java
index e2b28f3..f4f44e2 100644
--- a/main/java/org/apache/sling/scripting/bundle/tracker/internal/BundledScriptFinder.java
+++ b/main/java/org/apache/sling/scripting/bundle/tracker/internal/BundledScriptFinder.java
@@ -44,7 +44,7 @@
     private static final String SLASH = "/";
     private static final String DOT = ".";
 
-    Executable getScript(Set<TypeProvider> providers) {
+    Executable getScript(Set<TypeProvider> providers, Set<TypeProvider> allProviders) {
         for (TypeProvider provider : providers) {
             BundledRenderUnitCapability capability = provider.getBundledRenderUnitCapability();
             for (String match : buildScriptMatches(capability.getResourceTypes(),
@@ -52,7 +52,7 @@
                 String scriptExtension = capability.getScriptExtension();
                 String scriptEngineName = capability.getScriptEngineName();
                 if (StringUtils.isNotEmpty(scriptExtension) && StringUtils.isNotEmpty(scriptEngineName)) {
-                    Executable executable = getExecutable(provider.getBundle(), match, scriptEngineName, scriptExtension, providers);
+                    Executable executable = getExecutable(provider.getBundle(), match, scriptEngineName, scriptExtension, allProviders);
                     if (executable != null) {
                         return executable;
                     }
diff --git a/main/java/org/apache/sling/scripting/bundle/tracker/internal/BundledScriptServlet.java b/main/java/org/apache/sling/scripting/bundle/tracker/internal/BundledScriptServlet.java
index 9628a51..bfdb35e 100644
--- a/main/java/org/apache/sling/scripting/bundle/tracker/internal/BundledScriptServlet.java
+++ b/main/java/org/apache/sling/scripting/bundle/tracker/internal/BundledScriptServlet.java
@@ -85,4 +85,8 @@
             throw new ServletException("Not a Sling HTTP request/response");
         }
     }
+
+    public String toString() {
+        return getClass().getSimpleName() + "(" + executable.getName() + ")";
+    }
 }
diff --git a/main/java/org/apache/sling/scripting/bundle/tracker/internal/BundledScriptTracker.java b/main/java/org/apache/sling/scripting/bundle/tracker/internal/BundledScriptTracker.java
index 5bf7e67..f23c9bd 100644
--- a/main/java/org/apache/sling/scripting/bundle/tracker/internal/BundledScriptTracker.java
+++ b/main/java/org/apache/sling/scripting/bundle/tracker/internal/BundledScriptTracker.java
@@ -172,7 +172,7 @@
                         }
                         Set<TypeProvider> aggregate =
                                 Stream.concat(inheritanceChain.stream(), requiresChain.stream()).collect(Collectors.toCollection(LinkedHashSet::new));
-                        executable = bundledScriptFinder.getScript(aggregate);
+                        executable = bundledScriptFinder.getScript(inheritanceChain, aggregate);
                     } else if (StringUtils.isNotEmpty(bundledRenderUnitCapability.getPath()) && StringUtils.isNotEmpty(
                             bundledRenderUnitCapability.getScriptEngineName())) {
                         Set<TypeProvider> aggregate =
