made sure dependencies of a bundled unit are loaded with the correct classloader
diff --git a/pom.xml b/pom.xml
index ec5993b..aa9a022 100644
--- a/pom.xml
+++ b/pom.xml
@@ -182,6 +182,13 @@
             <scope>provided</scope>
         </dependency>
 
+        <dependency>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.scripting.resolver</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+            <scope>provided</scope>
+        </dependency>
+
         <!-- OSGI -->
         <dependency>
             <groupId>org.osgi</groupId>
diff --git a/src/main/java/org/apache/sling/scripting/sightly/impl/engine/SightlyScriptEngine.java b/src/main/java/org/apache/sling/scripting/sightly/impl/engine/SightlyScriptEngine.java
index 8c5e9ed..f757be5 100644
--- a/src/main/java/org/apache/sling/scripting/sightly/impl/engine/SightlyScriptEngine.java
+++ b/src/main/java/org/apache/sling/scripting/sightly/impl/engine/SightlyScriptEngine.java
@@ -30,13 +30,11 @@
 import javax.script.ScriptEngineFactory;
 import javax.script.ScriptException;
 
-import org.apache.sling.api.SlingHttpServletRequest;
-import org.apache.sling.api.scripting.SlingBindings;
-import org.apache.sling.api.scripting.SlingScriptConstants;
 import org.apache.sling.api.scripting.SlingScriptHelper;
 import org.apache.sling.scripting.api.AbstractSlingScriptEngine;
 import org.apache.sling.scripting.api.ScriptNameAware;
 import org.apache.sling.scripting.api.resource.ScriptingResourceResolverProvider;
+import org.apache.sling.scripting.resolver.BundledRenderUnit;
 import org.apache.sling.scripting.sightly.SightlyException;
 import org.apache.sling.scripting.sightly.compiler.CompilationResult;
 import org.apache.sling.scripting.sightly.compiler.CompilationUnit;
@@ -93,8 +91,14 @@
     public Object eval(Reader reader, ScriptContext scriptContext) throws ScriptException {
         checkArguments(reader, scriptContext);
         try {
-            Object renderUnit = scriptContext.getAttribute("precompiled.unit", SlingScriptConstants.SLING_SCOPE);
             SightlyCompiledScript compiledScript;
+            Bindings bindings = scriptContext.getBindings(ScriptContext.ENGINE_SCOPE);
+            Object bundledRenderUnit = bindings.get(BundledRenderUnit.VARIABLE);
+            Object renderUnit = null;
+            if (bundledRenderUnit instanceof BundledRenderUnit) {
+                renderUnit = ((BundledRenderUnit) bundledRenderUnit).getUnit();
+            }
+
             if (renderUnit instanceof RenderUnit) {
                 compiledScript = new SightlyCompiledScript(this, (RenderUnit) renderUnit);
             } else {
diff --git a/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/JavaUseProvider.java b/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/JavaUseProvider.java
index c0f65ee..8f5aa76 100644
--- a/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/JavaUseProvider.java
+++ b/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/JavaUseProvider.java
@@ -20,7 +20,7 @@
 
 import java.util.HashMap;
 import java.util.Map;
-import java.util.regex.Pattern;
+
 import javax.script.Bindings;
 import javax.servlet.ServletRequest;
 
@@ -29,6 +29,7 @@
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.scripting.SlingScriptHelper;
 import org.apache.sling.commons.classloader.ClassLoaderWriter;
+import org.apache.sling.scripting.resolver.BundledRenderUnit;
 import org.apache.sling.scripting.sightly.impl.engine.SightlyJavaCompilerService;
 import org.apache.sling.scripting.sightly.impl.utils.BindingsUtils;
 import org.apache.sling.scripting.sightly.impl.utils.Patterns;
@@ -37,6 +38,7 @@
 import org.apache.sling.scripting.sightly.use.ProviderOutcome;
 import org.apache.sling.scripting.sightly.use.UseProvider;
 import org.osgi.framework.Constants;
+import org.osgi.framework.wiring.BundleWiring;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Reference;
 import org.osgi.service.metatype.annotations.AttributeDefinition;
@@ -93,18 +95,27 @@
                 return ProviderOutcome.success(result);
             } else {
                 LOG.debug("Attempting to load class {} from the classloader cache.", identifier);
-                ClassLoader classLoader = (ClassLoader) renderContext.getBindings().get("org.apache.sling.scripting.sightly.render_unit.loader");
-                if (classLoader == null) {
+                BundledRenderUnit bundledRenderUnit = null;
+                ClassLoader classLoader;
+                Object bru = globalBindings.get(BundledRenderUnit.VARIABLE);
+                if (bru instanceof BundledRenderUnit) {
+                    bundledRenderUnit = (BundledRenderUnit) bru;
+                    classLoader = bundledRenderUnit.getBundle().adapt(BundleWiring.class).getClassLoader();
+                } else {
                     classLoader = classLoaderWriter.getClassLoader();
                 }
                 Class<?> cls = classLoader.loadClass(identifier);
                 // attempt OSGi service load
-                result = sling.getService(cls);
+                if (bundledRenderUnit != null) {
+                    result = bundledRenderUnit.getService(identifier);
+                } else {
+                    result = sling.getService(cls);
+                }
                 if (result != null) {
                     return ProviderOutcome.success(result);
                 }
                 Object adaptableCandidate = arguments.get(ADAPTABLE);
-                if (adaptableCandidate != null && adaptableCandidate instanceof Adaptable) {
+                if (adaptableCandidate instanceof Adaptable) {
                     Adaptable adaptable = (Adaptable) adaptableCandidate;
                     result = adaptable.adaptTo(cls);
                     if (result != null) {