diff --git a/src/quick3d/qquick3dscenerenderer.cpp b/src/quick3d/qquick3dscenerenderer.cpp
index 8995ffd7fa742535881fd55292bc7d1be8d1bb02..e1706d21ca7588ff6a1c8e3e2b833b8d3770b01c 100644
--- a/src/quick3d/qquick3dscenerenderer.cpp
+++ b/src/quick3d/qquick3dscenerenderer.cpp
@@ -396,7 +396,10 @@ QSSGRenderPickResult QQuick3DSceneRenderer::pick(const QPointF &pos)
 
 QSSGRenderPickResult QQuick3DSceneRenderer::syncPick(const QPointF &pos)
 {
-    return m_sgContext->renderer()->syncPick(*m_layer, QVector2D(m_surfaceSize.width(), m_surfaceSize.height()), QVector2D(float(pos.x()), float(pos.y())));
+    return m_sgContext->renderer()->syncPick(*m_layer,
+                                             m_sgContext->bufferManager(),
+                                             QVector2D(m_surfaceSize.width(), m_surfaceSize.height()),
+                                             QVector2D(float(pos.x()), float(pos.y())));
 }
 
 QQuick3DRenderStats *QQuick3DSceneRenderer::renderStats()
diff --git a/src/runtimerender/qssgrenderer_p.h b/src/runtimerender/qssgrenderer_p.h
index 07d34598b25a85cfd7372573d637298bd249e512..291f2d5f504291bb0dee8b8538cc44d6d131b332 100644
--- a/src/runtimerender/qssgrenderer_p.h
+++ b/src/runtimerender/qssgrenderer_p.h
@@ -137,6 +137,7 @@ public:
                                         bool inPickSiblings = true,
                                         bool inPickEverything = false) = 0;
     virtual QSSGRenderPickResult syncPick(const QSSGRenderLayer &inLayer,
+                                          const QSSGRef<QSSGBufferManager> &bufferManager,
                                           const QVector2D &inViewportDimensions,
                                           const QVector2D &inMouseCoords) = 0;
 
diff --git a/src/runtimerender/rendererimpl/qssgrendererimpl.cpp b/src/runtimerender/rendererimpl/qssgrendererimpl.cpp
index 24c3ec447eed11c2978e684e873ef383371fdc2d..a7bf8f56fda5beb5f473a0c3f35eab7d622f9455 100644
--- a/src/runtimerender/rendererimpl/qssgrendererimpl.cpp
+++ b/src/runtimerender/rendererimpl/qssgrendererimpl.cpp
@@ -464,7 +464,10 @@ QSSGRenderPickResult QSSGRendererImpl::pick(QSSGRenderLayer &inLayer,
     return QSSGRenderPickResult();
 }
 
-QSSGRenderPickResult QSSGRendererImpl::syncPick(const QSSGRenderLayer &layer, const QVector2D &inViewportDimensions, const QVector2D &inMouseCoords)
+QSSGRenderPickResult QSSGRendererImpl::syncPick(const QSSGRenderLayer &layer,
+                                                const QSSGRef<QSSGBufferManager> &bufferManager,
+                                                const QVector2D &inViewportDimensions,
+                                                const QVector2D &inMouseCoords)
 {
     using PickResultList = QVarLengthArray<QSSGRenderPickResult, 20>; // Lets assume most items are filtered out already
     static const auto processResults = [](PickResultList &pickResults) {
@@ -479,7 +482,7 @@ QSSGRenderPickResult QSSGRendererImpl::syncPick(const QSSGRenderLayer &layer, co
 
     PickResultList pickResults;
     if (layer.flags.testFlag(QSSGRenderLayer::Flag::Active)) {
-        getLayerHitObjectList(layer, inViewportDimensions, inMouseCoords, false, pickResults);
+        getLayerHitObjectList(layer, bufferManager, inViewportDimensions, inMouseCoords, false, pickResults);
         QSSGPickResultProcessResult retval = processResults(pickResults);
         if (retval.m_wasPickConsumed)
             return retval;
@@ -833,6 +836,7 @@ static void dfs(const QSSGRenderNode &node, RenderableList &renderables)
 }
 
 void QSSGRendererImpl::getLayerHitObjectList(const QSSGRenderLayer &layer,
+                                             const QSSGRef<QSSGBufferManager> &bufferManager,
                                              const QVector2D &inViewportDimensions,
                                              const QVector2D &inPresCoords,
                                              bool inPickEverything,
@@ -853,7 +857,6 @@ void QSSGRendererImpl::getLayerHitObjectList(const QSSGRenderLayer &layer,
             for (QSSGRenderNode *childNode = layer.firstChild; childNode; childNode = childNode->nextSibling)
                 dfs(*childNode, renderables);
 
-            const auto &bufferManager = contextInterface()->bufferManager();
             for (int idx = renderables.size(), end = 0; idx > end; --idx) {
                 const auto &pickableObject = renderables.at(idx - 1);
                 if (inPickEverything || pickableObject->flags.testFlag(QSSGRenderNode::Flag::LocallyPickable))
diff --git a/src/runtimerender/rendererimpl/qssgrendererimpl_p.h b/src/runtimerender/rendererimpl/qssgrendererimpl_p.h
index 61d72cc84abafc4932f79d592282d85a001feafd..57637a94d0996f912b995b13ff554827695950b3 100644
--- a/src/runtimerender/rendererimpl/qssgrendererimpl_p.h
+++ b/src/runtimerender/rendererimpl/qssgrendererimpl_p.h
@@ -203,6 +203,7 @@ public:
                                 bool inPickSiblings,
                                 bool inPickEverything) override;
     QSSGRenderPickResult syncPick(const QSSGRenderLayer &layer,
+                                  const QSSGRef<QSSGBufferManager> &bufferManager,
                                   const QVector2D &inViewportDimensions,
                                   const QVector2D &inMouseCoords) override;
 
@@ -332,11 +333,12 @@ protected:
                                const QVector2D &inMouseCoords,
                                bool inPickEverything,
                                TPickResultArray &outIntersectionResult);
-    void getLayerHitObjectList(const QSSGRenderLayer &layer,
-                                const QVector2D &inViewportDimensions,
-                                const QVector2D &inMouseCoords,
-                                bool inPickEverything,
-                                PickResultList &outIntersectionResult);
+    static void getLayerHitObjectList(const QSSGRenderLayer &layer,
+                                      const QSSGRef<QSSGBufferManager> &bufferManager,
+                                      const QVector2D &inViewportDimensions,
+                                      const QVector2D &inMouseCoords,
+                                      bool inPickEverything,
+                                      PickResultList &outIntersectionResult);
     static void intersectRayWithSubsetRenderable(const QSSGRef<QSSGBufferManager> &bufferManager,
                                                  const QSSGRenderRay &inRay,
                                                  const QSSGRenderNode &node,