diff --git a/cpu_ref/rsCpuScriptGroup2.cpp b/cpu_ref/rsCpuScriptGroup2.cpp
index d26c0c4..b145311 100644
--- a/cpu_ref/rsCpuScriptGroup2.cpp
+++ b/cpu_ref/rsCpuScriptGroup2.cpp
@@ -264,7 +264,8 @@
     args->push_back(outputFileName);
 }
 
-void generateSourceSlot(const Closure& closure,
+void generateSourceSlot(RsdCpuReferenceImpl* ctxt,
+                        const Closure& closure,
                         const std::vector<const char*>& inputs,
                         std::stringstream& ss) {
     const IDBase* funcID = (const IDBase*)closure.mFunctionID.get();
@@ -273,7 +274,7 @@
     rsAssert (!script->isIntrinsic());
 
     const RsdCpuScriptImpl *cpuScript =
-            (const RsdCpuScriptImpl*)script->mHal.drv;
+            (const RsdCpuScriptImpl *)ctxt->lookupScript(script);
     const string& bitcodeFilename = cpuScript->getBitcodeFilePath();
 
     const int index = find(inputs.begin(), inputs.end(), bitcodeFilename) -
@@ -306,7 +307,8 @@
         }
 
         const RsdCpuScriptImpl *cpuScript =
-                (const RsdCpuScriptImpl*)script->mHal.drv;
+            (const RsdCpuScriptImpl *)mCpuRefImpl->lookupScript(script);
+
         const char* bitcodeFilename = cpuScript->getBitcodeFilePath();
         inputSet.insert(bitcodeFilename);
     }
@@ -325,11 +327,11 @@
 
         if (!batch->mClosures.front()->mClosure->mIsKernel) {
             rsAssert(batch->size() == 1);
-            generateSourceSlot(*batch->mClosures.front()->mClosure, inputs, ss);
+            generateSourceSlot(mCpuRefImpl, *batch->mClosures.front()->mClosure, inputs, ss);
             invokeBatches.push_back(ss.str());
         } else {
             for (const auto& cpuClosure : batch->mClosures) {
-                generateSourceSlot(*cpuClosure->mClosure, inputs, ss);
+                generateSourceSlot(mCpuRefImpl, *cpuClosure->mClosure, inputs, ss);
             }
             kernelBatches.push_back(ss.str());
         }
@@ -453,8 +455,9 @@
             }
             rsAssert(p.first != nullptr);
             Script* script = p.first->mScript;
+            RsdCpuReferenceImpl* ctxt = mGroup->getCpuRefImpl();
             const RsdCpuScriptImpl *cpuScript =
-                    (const RsdCpuScriptImpl*)script->mHal.drv;
+                    (const RsdCpuScriptImpl *)ctxt->lookupScript(script);
             int slot = p.first->mSlot;
             ScriptExecutable* exec = mGroup->getExecutable();
             if (exec != nullptr) {
