diff --git a/src/main/java/org/apache/sling/servlets/resolver/bundle/tracker/BundledRenderUnit.java b/src/main/java/org/apache/sling/servlets/resolver/bundle/tracker/BundledRenderUnit.java
index 14aba65..238ebcd 100644
--- a/src/main/java/org/apache/sling/servlets/resolver/bundle/tracker/BundledRenderUnit.java
+++ b/src/main/java/org/apache/sling/servlets/resolver/bundle/tracker/BundledRenderUnit.java
@@ -28,6 +28,7 @@
 import org.jetbrains.annotations.Nullable;
 import org.osgi.annotation.versioning.ConsumerType;
 import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
 
 /**
  * <p>
@@ -78,6 +79,12 @@
     @NotNull Bundle getBundle();
 
     /**
+     * Returns the {@link BundleContext} to use for this script or precompiled script. This method can be useful for getting an
+     * instance of the publishing bundle's context, when needed to load dependencies at run time.
+     */
+    @NotNull BundleContext getBundleContext();
+
+    /**
      * Returns the {@code Set} of {@link TypeProvider}s which are related to this unit.
      *
      * @return the set of providers; if the unit doesn't have any inheritance chains, then the set will contain only one {@link
diff --git a/src/main/java/org/apache/sling/servlets/resolver/bundle/tracker/BundledRenderUnitFinder.java b/src/main/java/org/apache/sling/servlets/resolver/bundle/tracker/BundledRenderUnitFinder.java
index 22bd437..66a2fb6 100644
--- a/src/main/java/org/apache/sling/servlets/resolver/bundle/tracker/BundledRenderUnitFinder.java
+++ b/src/main/java/org/apache/sling/servlets/resolver/bundle/tracker/BundledRenderUnitFinder.java
@@ -25,6 +25,7 @@
 import org.osgi.annotation.versioning.ConsumerType;
 import org.osgi.annotation.versioning.ProviderType;
 import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
 
 /**
  * The {@code BundledScriptFinder} finds the {@link BundledRenderUnit} corresponding to a certain chain of {@link TypeProvider}s or
@@ -37,6 +38,7 @@
      * Retrieves the best matching {@link BundledRenderUnit} for the provided {@code inheritanceChain}, by scanning all {@link TypeProvider}
      * bundles for the class or script capable of providing a rendering for resource type chain.
      *
+     * @param context             the bundle context to use.
      * @param inheritanceChain    the resource type chain; the set is ordered from the most specific resource type to the most generic one
      * @param allRelatedProviders this is a super set, containing both the {@code inheritanceChain} but also all the required providers; a
      *                            required provider is a provider that's needed by a {@link ResourceType} in order to delegate rendering to
@@ -44,11 +46,12 @@
      * @return a {@link BundledRenderUnit} if one was found, {@code null} otherwise
      */
     @Nullable
-    BundledRenderUnit findUnit(@NotNull Set<TypeProvider> inheritanceChain, @NotNull Set<TypeProvider> allRelatedProviders);
+    BundledRenderUnit findUnit(@NotNull BundleContext context, @NotNull Set<TypeProvider> inheritanceChain, @NotNull Set<TypeProvider> allRelatedProviders);
 
     /**
      * Retrieves a path-based {@link BundledRenderUnit} from the passed {@code provider}.
      *
+     * @param context             the bundle context to use.
      * @param provider            the provider from which to retrieve the unit
      * @param allRelatedProviders this is a super set, containing both the providers connected through an inheritance relationship but also
      *                            all the required providers; a required provider is a provider that's needed by a {@link ResourceType} in
@@ -57,5 +60,5 @@
      * @see BundledRenderUnitCapability#getPath()
      */
     @Nullable
-    BundledRenderUnit findUnit(@NotNull TypeProvider provider, @NotNull Set<TypeProvider> allRelatedProviders);
+    BundledRenderUnit findUnit(@NotNull BundleContext context, @NotNull TypeProvider provider, @NotNull Set<TypeProvider> allRelatedProviders);
 }
diff --git a/src/main/java/org/apache/sling/servlets/resolver/bundle/tracker/internal/BundledScriptTracker.java b/src/main/java/org/apache/sling/servlets/resolver/bundle/tracker/internal/BundledScriptTracker.java
index 1954eef..a68f857 100644
--- a/src/main/java/org/apache/sling/servlets/resolver/bundle/tracker/internal/BundledScriptTracker.java
+++ b/src/main/java/org/apache/sling/servlets/resolver/bundle/tracker/internal/BundledScriptTracker.java
@@ -176,12 +176,12 @@
                         }
                         Set<TypeProvider> aggregate =
                                 Stream.concat(inheritanceChain.stream(), requiresChain.stream()).collect(Collectors.toCollection(LinkedHashSet::new));
-                        executable = bundledRenderUnitFinder.findUnit(inheritanceChain, aggregate);
+                        executable = bundledRenderUnitFinder.findUnit(bundle.getBundleContext(), inheritanceChain, aggregate);
                     } else if (StringUtils.isNotEmpty(bundledRenderUnitCapability.getPath()) && StringUtils.isNotEmpty(
                             bundledRenderUnitCapability.getScriptEngineName())) {
                         Set<TypeProvider> aggregate =
                                 Stream.concat(inheritanceChain.stream(), requiresChain.stream()).collect(Collectors.toCollection(LinkedHashSet::new));
-                        executable = bundledRenderUnitFinder.findUnit(baseTypeProvider, aggregate);
+                        executable = bundledRenderUnitFinder.findUnit(bundle.getBundleContext(), baseTypeProvider, aggregate);
                     }
                     List<ServiceRegistration<Servlet>> regs = new ArrayList<>();
 
