diff --git a/Include/NRI.h b/Include/NRI.h
index 93d74a25..d6e8a0df 100644
--- a/Include/NRI.h
+++ b/Include/NRI.h
@@ -24,8 +24,8 @@ Non-goals:
 #pragma once
 
 #define NRI_VERSION_MAJOR 1
-#define NRI_VERSION_MINOR 154
-#define NRI_VERSION_DATE "5 November 2024"
+#define NRI_VERSION_MINOR 155
+#define NRI_VERSION_DATE "19 December 2024"
 
 #include "NRIDescs.h"
 
@@ -161,9 +161,9 @@ NriStruct(CoreInterface) {
         void                (NRI_CALL *CmdClearStorageTexture)      (NriRef(CommandBuffer) commandBuffer, const NriRef(ClearStorageTextureDesc) clearDesc); // potentially slow clear
 
         // Query
-        void                (NRI_CALL *CmdResetQueries)             (NriRef(CommandBuffer) commandBuffer, const NriRef(QueryPool) queryPool, uint32_t offset, uint32_t num);
-        void                (NRI_CALL *CmdBeginQuery)               (NriRef(CommandBuffer) commandBuffer, const NriRef(QueryPool) queryPool, uint32_t offset);
-        void                (NRI_CALL *CmdEndQuery)                 (NriRef(CommandBuffer) commandBuffer, const NriRef(QueryPool) queryPool, uint32_t offset);
+        void                (NRI_CALL *CmdResetQueries)             (NriRef(CommandBuffer) commandBuffer, NriRef(QueryPool) queryPool, uint32_t offset, uint32_t num);
+        void                (NRI_CALL *CmdBeginQuery)               (NriRef(CommandBuffer) commandBuffer, NriRef(QueryPool) queryPool, uint32_t offset);
+        void                (NRI_CALL *CmdEndQuery)                 (NriRef(CommandBuffer) commandBuffer, NriRef(QueryPool) queryPool, uint32_t offset);
         void                (NRI_CALL *CmdCopyQueries)              (NriRef(CommandBuffer) commandBuffer, const NriRef(QueryPool) queryPool, uint32_t offset, uint32_t num, NriRef(Buffer) dstBuffer, uint64_t dstOffset);
 
         // Annotation
diff --git a/Resources/Version.h b/Resources/Version.h
index 6d673ed1..2d6b74b4 100644
--- a/Resources/Version.h
+++ b/Resources/Version.h
@@ -4,7 +4,7 @@
 #define STR(x) STR_HELPER(x)
 
 #define VERSION_MAJOR                   1
-#define VERSION_MINOR                   154
+#define VERSION_MINOR                   155
 #define VERSION_BUILD                   0
 #define VERSION_REVISION                0
 
diff --git a/Source/D3D11/CommandBufferD3D11.h b/Source/D3D11/CommandBufferD3D11.h
index 04bc29e4..9c4bc4fb 100644
--- a/Source/D3D11/CommandBufferD3D11.h
+++ b/Source/D3D11/CommandBufferD3D11.h
@@ -80,8 +80,8 @@ struct CommandBufferD3D11 final : public CommandBufferHelper {
     void Dispatch(const DispatchDesc& dispatchDesc);
     void DispatchIndirect(const Buffer& buffer, uint64_t offset);
     void Barrier(const BarrierGroupDesc& barrierGroupDesc);
-    void BeginQuery(const QueryPool& queryPool, uint32_t offset);
-    void EndQuery(const QueryPool& queryPool, uint32_t offset);
+    void BeginQuery(QueryPool& queryPool, uint32_t offset);
+    void EndQuery(QueryPool& queryPool, uint32_t offset);
     void CopyQueries(const QueryPool& queryPool, uint32_t offset, uint32_t num, Buffer& dstBuffer, uint64_t dstOffset);
     void BeginAnnotation(const char* name);
     void EndAnnotation();
diff --git a/Source/D3D11/CommandBufferD3D11.hpp b/Source/D3D11/CommandBufferD3D11.hpp
index ba26a24e..8020c52a 100644
--- a/Source/D3D11/CommandBufferD3D11.hpp
+++ b/Source/D3D11/CommandBufferD3D11.hpp
@@ -558,11 +558,11 @@ NRI_INLINE void CommandBufferD3D11::Barrier(const BarrierGroupDesc& barrierGroup
 #endif
 }
 
-NRI_INLINE void CommandBufferD3D11::BeginQuery(const QueryPool& queryPool, uint32_t offset) {
+NRI_INLINE void CommandBufferD3D11::BeginQuery(QueryPool& queryPool, uint32_t offset) {
     ((QueryPoolD3D11&)queryPool).BeginQuery(m_DeferredContext, offset);
 }
 
-NRI_INLINE void CommandBufferD3D11::EndQuery(const QueryPool& queryPool, uint32_t offset) {
+NRI_INLINE void CommandBufferD3D11::EndQuery(QueryPool& queryPool, uint32_t offset) {
     ((QueryPoolD3D11&)queryPool).EndQuery(m_DeferredContext, offset);
 }
 
diff --git a/Source/D3D11/CommandBufferEmuD3D11.h b/Source/D3D11/CommandBufferEmuD3D11.h
index 705847ee..87b8a0fb 100644
--- a/Source/D3D11/CommandBufferEmuD3D11.h
+++ b/Source/D3D11/CommandBufferEmuD3D11.h
@@ -71,8 +71,8 @@ struct CommandBufferEmuD3D11 final : public CommandBufferHelper {
     void Dispatch(const DispatchDesc& dispatchDesc);
     void DispatchIndirect(const Buffer& buffer, uint64_t offset);
     void Barrier(const BarrierGroupDesc& barrierGroupDesc);
-    void BeginQuery(const QueryPool& queryPool, uint32_t offset);
-    void EndQuery(const QueryPool& queryPool, uint32_t offset);
+    void BeginQuery(QueryPool& queryPool, uint32_t offset);
+    void EndQuery(QueryPool& queryPool, uint32_t offset);
     void CopyQueries(const QueryPool& queryPool, uint32_t offset, uint32_t num, Buffer& dstBuffer, uint64_t dstOffset);
     void BeginAnnotation(const char* name);
     void EndAnnotation();
diff --git a/Source/D3D11/CommandBufferEmuD3D11.hpp b/Source/D3D11/CommandBufferEmuD3D11.hpp
index 65255a3c..8fcdd29f 100644
--- a/Source/D3D11/CommandBufferEmuD3D11.hpp
+++ b/Source/D3D11/CommandBufferEmuD3D11.hpp
@@ -696,13 +696,13 @@ NRI_INLINE void CommandBufferEmuD3D11::Barrier(const BarrierGroupDesc& barrierGr
     Push(m_PushBuffer, barrierGroupDesc.textures, barrierGroupDesc.textureNum);
 }
 
-NRI_INLINE void CommandBufferEmuD3D11::BeginQuery(const QueryPool& queryPool, uint32_t offset) {
+NRI_INLINE void CommandBufferEmuD3D11::BeginQuery(QueryPool& queryPool, uint32_t offset) {
     Push(m_PushBuffer, BEGIN_QUERY);
     Push(m_PushBuffer, &queryPool);
     Push(m_PushBuffer, offset);
 }
 
-NRI_INLINE void CommandBufferEmuD3D11::EndQuery(const QueryPool& queryPool, uint32_t offset) {
+NRI_INLINE void CommandBufferEmuD3D11::EndQuery(QueryPool& queryPool, uint32_t offset) {
     Push(m_PushBuffer, END_QUERY);
     Push(m_PushBuffer, &queryPool);
     Push(m_PushBuffer, offset);
diff --git a/Source/D3D11/ImplD3D11.cpp b/Source/D3D11/ImplD3D11.cpp
index d7987da9..660ed191 100644
--- a/Source/D3D11/ImplD3D11.cpp
+++ b/Source/D3D11/ImplD3D11.cpp
@@ -407,11 +407,11 @@ static void NRI_CALL CmdDispatchIndirect(CommandBuffer& commandBuffer, const Buf
     ((CommandBufferD3D11&)commandBuffer).DispatchIndirect(buffer, offset);
 }
 
-static void NRI_CALL CmdBeginQuery(CommandBuffer& commandBuffer, const QueryPool& queryPool, uint32_t offset) {
+static void NRI_CALL CmdBeginQuery(CommandBuffer& commandBuffer, QueryPool& queryPool, uint32_t offset) {
     ((CommandBufferD3D11&)commandBuffer).BeginQuery(queryPool, offset);
 }
 
-static void NRI_CALL CmdEndQuery(CommandBuffer& commandBuffer, const QueryPool& queryPool, uint32_t offset) {
+static void NRI_CALL CmdEndQuery(CommandBuffer& commandBuffer, QueryPool& queryPool, uint32_t offset) {
     ((CommandBufferD3D11&)commandBuffer).EndQuery(queryPool, offset);
 }
 
@@ -455,7 +455,7 @@ static void NRI_CALL CmdCopyQueries(CommandBuffer& commandBuffer, const QueryPoo
     ((CommandBufferD3D11&)commandBuffer).CopyQueries(queryPool, offset, num, dstBuffer, dstOffset);
 }
 
-static void NRI_CALL CmdResetQueries(CommandBuffer&, const QueryPool&, uint32_t, uint32_t) {
+static void NRI_CALL CmdResetQueries(CommandBuffer&, QueryPool&, uint32_t, uint32_t) {
 }
 
 static void* NRI_CALL GetCommandBufferNativeObject(const CommandBuffer& commandBuffer) {
@@ -581,11 +581,11 @@ static void NRI_CALL EmuCmdDispatchIndirect(CommandBuffer& commandBuffer, const
     ((CommandBufferEmuD3D11&)commandBuffer).DispatchIndirect(buffer, offset);
 }
 
-static void NRI_CALL EmuCmdBeginQuery(CommandBuffer& commandBuffer, const QueryPool& queryPool, uint32_t offset) {
+static void NRI_CALL EmuCmdBeginQuery(CommandBuffer& commandBuffer, QueryPool& queryPool, uint32_t offset) {
     ((CommandBufferEmuD3D11&)commandBuffer).BeginQuery(queryPool, offset);
 }
 
-static void NRI_CALL EmuCmdEndQuery(CommandBuffer& commandBuffer, const QueryPool& queryPool, uint32_t offset) {
+static void NRI_CALL EmuCmdEndQuery(CommandBuffer& commandBuffer, QueryPool& queryPool, uint32_t offset) {
     ((CommandBufferEmuD3D11&)commandBuffer).EndQuery(queryPool, offset);
 }
 
@@ -629,7 +629,7 @@ static void NRI_CALL EmuCmdCopyQueries(CommandBuffer& commandBuffer, const Query
     ((CommandBufferEmuD3D11&)commandBuffer).CopyQueries(queryPool, offset, num, dstBuffer, dstOffset);
 }
 
-static void NRI_CALL EmuCmdResetQueries(CommandBuffer&, const QueryPool&, uint32_t, uint32_t) {
+static void NRI_CALL EmuCmdResetQueries(CommandBuffer&, QueryPool&, uint32_t, uint32_t) {
 }
 
 static void* NRI_CALL EmuGetCommandBufferNativeObject(const CommandBuffer& commandBuffer) {
diff --git a/Source/D3D12/CommandBufferD3D12.h b/Source/D3D12/CommandBufferD3D12.h
index 1ed60e2e..3aaf5caa 100644
--- a/Source/D3D12/CommandBufferD3D12.h
+++ b/Source/D3D12/CommandBufferD3D12.h
@@ -90,8 +90,8 @@ struct CommandBufferD3D12 {
     void Dispatch(const DispatchDesc& dispatchDesc);
     void DispatchIndirect(const Buffer& buffer, uint64_t offset);
     void Barrier(const BarrierGroupDesc& barrierGroupDesc);
-    void BeginQuery(const QueryPool& queryPool, uint32_t offset);
-    void EndQuery(const QueryPool& queryPool, uint32_t offset);
+    void BeginQuery(QueryPool& queryPool, uint32_t offset);
+    void EndQuery(QueryPool& queryPool, uint32_t offset);
     void CopyQueries(const QueryPool& queryPool, uint32_t offset, uint32_t num, Buffer& buffer, uint64_t alignedBufferOffset);
     void BeginAnnotation(const char* name);
     void EndAnnotation();
diff --git a/Source/D3D12/CommandBufferD3D12.hpp b/Source/D3D12/CommandBufferD3D12.hpp
index 642a20c3..31c6e204 100644
--- a/Source/D3D12/CommandBufferD3D12.hpp
+++ b/Source/D3D12/CommandBufferD3D12.hpp
@@ -908,13 +908,13 @@ NRI_INLINE void CommandBufferD3D12::Barrier(const BarrierGroupDesc& barrierGroup
     }
 }
 
-NRI_INLINE void CommandBufferD3D12::BeginQuery(const QueryPool& queryPool, uint32_t offset) {
-    const QueryPoolD3D12& queryPoolD3D12 = (QueryPoolD3D12&)queryPool;
+NRI_INLINE void CommandBufferD3D12::BeginQuery(QueryPool& queryPool, uint32_t offset) {
+    QueryPoolD3D12& queryPoolD3D12 = (QueryPoolD3D12&)queryPool;
     m_GraphicsCommandList->BeginQuery(queryPoolD3D12, queryPoolD3D12.GetType(), offset);
 }
 
-NRI_INLINE void CommandBufferD3D12::EndQuery(const QueryPool& queryPool, uint32_t offset) {
-    const QueryPoolD3D12& queryPoolD3D12 = (QueryPoolD3D12&)queryPool;
+NRI_INLINE void CommandBufferD3D12::EndQuery(QueryPool& queryPool, uint32_t offset) {
+    QueryPoolD3D12& queryPoolD3D12 = (QueryPoolD3D12&)queryPool;
     m_GraphicsCommandList->EndQuery(queryPoolD3D12, queryPoolD3D12.GetType(), offset);
 }
 
diff --git a/Source/D3D12/ImplD3D12.cpp b/Source/D3D12/ImplD3D12.cpp
index 4115452b..f1c65034 100644
--- a/Source/D3D12/ImplD3D12.cpp
+++ b/Source/D3D12/ImplD3D12.cpp
@@ -243,11 +243,11 @@ static void NRI_CALL CmdDispatchIndirect(CommandBuffer& commandBuffer, const Buf
     ((CommandBufferD3D12&)commandBuffer).DispatchIndirect(buffer, offset);
 }
 
-static void NRI_CALL CmdBeginQuery(CommandBuffer& commandBuffer, const QueryPool& queryPool, uint32_t offset) {
+static void NRI_CALL CmdBeginQuery(CommandBuffer& commandBuffer, QueryPool& queryPool, uint32_t offset) {
     ((CommandBufferD3D12&)commandBuffer).BeginQuery(queryPool, offset);
 }
 
-static void NRI_CALL CmdEndQuery(CommandBuffer& commandBuffer, const QueryPool& queryPool, uint32_t offset) {
+static void NRI_CALL CmdEndQuery(CommandBuffer& commandBuffer, QueryPool& queryPool, uint32_t offset) {
     ((CommandBufferD3D12&)commandBuffer).EndQuery(queryPool, offset);
 }
 
@@ -291,7 +291,7 @@ static void NRI_CALL CmdCopyQueries(CommandBuffer& commandBuffer, const QueryPoo
     ((CommandBufferD3D12&)commandBuffer).CopyQueries(queryPool, offset, num, dstBuffer, dstOffset);
 }
 
-static void NRI_CALL CmdResetQueries(CommandBuffer&, const QueryPool&, uint32_t, uint32_t) {
+static void NRI_CALL CmdResetQueries(CommandBuffer&, QueryPool&, uint32_t, uint32_t) {
 }
 
 static void* NRI_CALL GetCommandBufferNativeObject(const CommandBuffer& commandBuffer) {
diff --git a/Source/NONE/ImplNONE.cpp b/Source/NONE/ImplNONE.cpp
index b239e67e..1f1e1bbd 100644
--- a/Source/NONE/ImplNONE.cpp
+++ b/Source/NONE/ImplNONE.cpp
@@ -500,13 +500,13 @@ static void NRI_CALL CmdClearStorageTexture(CommandBuffer&, const ClearStorageTe
 static void NRI_CALL CmdResolveTexture(CommandBuffer&, Texture&, const TextureRegionDesc*, const Texture&, const TextureRegionDesc*) {
 }
 
-static void NRI_CALL CmdResetQueries(CommandBuffer&, const QueryPool&, uint32_t, uint32_t) {
+static void NRI_CALL CmdResetQueries(CommandBuffer&, QueryPool&, uint32_t, uint32_t) {
 }
 
-static void NRI_CALL CmdBeginQuery(CommandBuffer&, const QueryPool&, uint32_t) {
+static void NRI_CALL CmdBeginQuery(CommandBuffer&, QueryPool&, uint32_t) {
 }
 
-static void NRI_CALL CmdEndQuery(CommandBuffer&, const QueryPool&, uint32_t) {
+static void NRI_CALL CmdEndQuery(CommandBuffer&, QueryPool&, uint32_t) {
 }
 
 static void NRI_CALL CmdCopyQueries(CommandBuffer&, const QueryPool&, uint32_t, uint32_t, Buffer&, uint64_t) {
diff --git a/Source/VK/CommandBufferVK.h b/Source/VK/CommandBufferVK.h
index 2a4767e8..cef2151f 100644
--- a/Source/VK/CommandBufferVK.h
+++ b/Source/VK/CommandBufferVK.h
@@ -61,8 +61,8 @@ struct CommandBufferVK {
     void DrawIndexedIndirect(const Buffer& buffer, uint64_t offset, uint32_t drawNum, uint32_t stride, const Buffer* countBuffer, uint64_t countBufferOffset);
     void Dispatch(const DispatchDesc& dispatchDesc);
     void DispatchIndirect(const Buffer& buffer, uint64_t offset);
-    void BeginQuery(const QueryPool& queryPool, uint32_t offset);
-    void EndQuery(const QueryPool& queryPool, uint32_t offset);
+    void BeginQuery(QueryPool& queryPool, uint32_t offset);
+    void EndQuery(QueryPool& queryPool, uint32_t offset);
     void BeginAnnotation(const char* name);
     void EndAnnotation();
     void ClearStorageBuffer(const ClearStorageBufferDesc& clearDesc);
@@ -73,7 +73,7 @@ struct CommandBufferVK {
     void UploadBufferToTexture(Texture& dstTexture, const TextureRegionDesc& dstRegionDesc, const Buffer& srcBuffer, const TextureDataLayoutDesc& srcDataLayoutDesc);
     void ReadbackTextureToBuffer(Buffer& dstBuffer, const TextureDataLayoutDesc& dstDataLayoutDesc, const Texture& srcTexture, const TextureRegionDesc& srcRegionDesc);
     void CopyQueries(const QueryPool& queryPool, uint32_t offset, uint32_t num, Buffer& dstBuffer, uint64_t dstOffset);
-    void ResetQueries(const QueryPool& queryPool, uint32_t offset, uint32_t num);
+    void ResetQueries(QueryPool& queryPool, uint32_t offset, uint32_t num);
     void BuildTopLevelAccelerationStructure(uint32_t instanceNum, const Buffer& buffer, uint64_t bufferOffset, AccelerationStructureBuildBits flags, AccelerationStructure& dst, Buffer& scratch, uint64_t scratchOffset);
     void BuildBottomLevelAccelerationStructure(uint32_t geometryObjectNum, const GeometryObject* geometryObjects, AccelerationStructureBuildBits flags, AccelerationStructure& dst, Buffer& scratch, uint64_t scratchOffset);
     void UpdateTopLevelAccelerationStructure(uint32_t instanceNum, const Buffer& buffer, uint64_t bufferOffset, AccelerationStructureBuildBits flags, AccelerationStructure& dst, const AccelerationStructure& src, Buffer& scratch, uint64_t scratchOffset);
diff --git a/Source/VK/CommandBufferVK.hpp b/Source/VK/CommandBufferVK.hpp
index a1f0a795..f19d75e1 100644
--- a/Source/VK/CommandBufferVK.hpp
+++ b/Source/VK/CommandBufferVK.hpp
@@ -798,14 +798,14 @@ NRI_INLINE void CommandBufferVK::Barrier(const BarrierGroupDesc& barrierGroupDes
     vk.CmdPipelineBarrier2(m_Handle, &dependencyInfo);
 }
 
-NRI_INLINE void CommandBufferVK::BeginQuery(const QueryPool& queryPool, uint32_t offset) {
-    const QueryPoolVK& queryPoolImpl = (const QueryPoolVK&)queryPool;
+NRI_INLINE void CommandBufferVK::BeginQuery(QueryPool& queryPool, uint32_t offset) {
+    QueryPoolVK& queryPoolImpl = (QueryPoolVK&)queryPool;
     const auto& vk = m_Device.GetDispatchTable();
     vk.CmdBeginQuery(m_Handle, queryPoolImpl.GetHandle(), offset, (VkQueryControlFlagBits)0);
 }
 
-NRI_INLINE void CommandBufferVK::EndQuery(const QueryPool& queryPool, uint32_t offset) {
-    const QueryPoolVK& queryPoolImpl = (const QueryPoolVK&)queryPool;
+NRI_INLINE void CommandBufferVK::EndQuery(QueryPool& queryPool, uint32_t offset) {
+    QueryPoolVK& queryPoolImpl = (QueryPoolVK&)queryPool;
     const auto& vk = m_Device.GetDispatchTable();
 
     if (queryPoolImpl.GetType() == VK_QUERY_TYPE_TIMESTAMP)
@@ -825,8 +825,8 @@ NRI_INLINE void CommandBufferVK::CopyQueries(const QueryPool& queryPool, uint32_
     vk.CmdCopyQueryPoolResults(m_Handle, queryPoolImpl.GetHandle(), offset, num, bufferImpl.GetHandle(), dstOffset, queryPoolImpl.GetQuerySize(), flags);
 }
 
-NRI_INLINE void CommandBufferVK::ResetQueries(const QueryPool& queryPool, uint32_t offset, uint32_t num) {
-    const QueryPoolVK& queryPoolImpl = (const QueryPoolVK&)queryPool;
+NRI_INLINE void CommandBufferVK::ResetQueries(QueryPool& queryPool, uint32_t offset, uint32_t num) {
+    QueryPoolVK& queryPoolImpl = (QueryPoolVK&)queryPool;
 
     const auto& vk = m_Device.GetDispatchTable();
     vk.CmdResetQueryPool(m_Handle, queryPoolImpl.GetHandle(), offset, num);
diff --git a/Source/VK/ImplVK.cpp b/Source/VK/ImplVK.cpp
index 9e1672bb..fccee4ad 100644
--- a/Source/VK/ImplVK.cpp
+++ b/Source/VK/ImplVK.cpp
@@ -222,11 +222,11 @@ static void NRI_CALL CmdDispatchIndirect(CommandBuffer& commandBuffer, const Buf
     ((CommandBufferVK&)commandBuffer).DispatchIndirect(buffer, offset);
 }
 
-static void NRI_CALL CmdBeginQuery(CommandBuffer& commandBuffer, const QueryPool& queryPool, uint32_t offset) {
+static void NRI_CALL CmdBeginQuery(CommandBuffer& commandBuffer, QueryPool& queryPool, uint32_t offset) {
     ((CommandBufferVK&)commandBuffer).BeginQuery(queryPool, offset);
 }
 
-static void NRI_CALL CmdEndQuery(CommandBuffer& commandBuffer, const QueryPool& queryPool, uint32_t offset) {
+static void NRI_CALL CmdEndQuery(CommandBuffer& commandBuffer, QueryPool& queryPool, uint32_t offset) {
     ((CommandBufferVK&)commandBuffer).EndQuery(queryPool, offset);
 }
 
@@ -271,7 +271,7 @@ static void NRI_CALL CmdCopyQueries(CommandBuffer& commandBuffer, const QueryPoo
     ((CommandBufferVK&)commandBuffer).CopyQueries(queryPool, offset, num, dstBuffer, dstOffset);
 }
 
-static void NRI_CALL CmdResetQueries(CommandBuffer& commandBuffer, const QueryPool& queryPool, uint32_t offset, uint32_t num) {
+static void NRI_CALL CmdResetQueries(CommandBuffer& commandBuffer, QueryPool& queryPool, uint32_t offset, uint32_t num) {
     ((CommandBufferVK&)commandBuffer).ResetQueries(queryPool, offset, num);
 }
 
diff --git a/Source/Validation/CommandBufferVal.h b/Source/Validation/CommandBufferVal.h
index e8dc8866..dc5017f3 100644
--- a/Source/Validation/CommandBufferVal.h
+++ b/Source/Validation/CommandBufferVal.h
@@ -72,10 +72,10 @@ struct CommandBufferVal : public DeviceObjectVal<CommandBuffer> {
     void Dispatch(const DispatchDesc& dispatchDesc);
     void DispatchIndirect(const Buffer& buffer, uint64_t offset);
     void Barrier(const BarrierGroupDesc& barrierGroupDesc);
-    void BeginQuery(const QueryPool& queryPool, uint32_t offset);
-    void EndQuery(const QueryPool& queryPool, uint32_t offset);
+    void BeginQuery(QueryPool& queryPool, uint32_t offset);
+    void EndQuery(QueryPool& queryPool, uint32_t offset);
     void CopyQueries(const QueryPool& queryPool, uint32_t offset, uint32_t num, Buffer& dstBuffer, uint64_t dstOffset);
-    void ResetQueries(const QueryPool& queryPool, uint32_t offset, uint32_t num);
+    void ResetQueries(QueryPool& queryPool, uint32_t offset, uint32_t num);
     void BeginAnnotation(const char* name);
     void EndAnnotation();
     void BuildTopLevelAccelerationStructure(uint32_t instanceNum, const Buffer& buffer, uint64_t bufferOffset, AccelerationStructureBuildBits flags, AccelerationStructure& dst, Buffer& scratch, uint64_t scratchOffset);
diff --git a/Source/Validation/CommandBufferVal.hpp b/Source/Validation/CommandBufferVal.hpp
index 86ab98b4..6398878c 100644
--- a/Source/Validation/CommandBufferVal.hpp
+++ b/Source/Validation/CommandBufferVal.hpp
@@ -456,8 +456,8 @@ NRI_INLINE void CommandBufferVal::Barrier(const BarrierGroupDesc& barrierGroupDe
     GetCoreInterface().CmdBarrier(*GetImpl(), barrierGroupDescImpl);
 }
 
-NRI_INLINE void CommandBufferVal::BeginQuery(const QueryPool& queryPool, uint32_t offset) {
-    const QueryPoolVal& queryPoolVal = (const QueryPoolVal&)queryPool;
+NRI_INLINE void CommandBufferVal::BeginQuery(QueryPool& queryPool, uint32_t offset) {
+    QueryPoolVal& queryPoolVal = (QueryPoolVal&)queryPool;
 
     RETURN_ON_FAILURE(&m_Device, m_IsRecordingStarted, ReturnVoid(), "the command buffer must be in the recording state");
     RETURN_ON_FAILURE(&m_Device, queryPoolVal.GetQueryType() != QueryType::TIMESTAMP, ReturnVoid(), "'BeginQuery' is not supported for timestamp queries");
@@ -476,8 +476,8 @@ NRI_INLINE void CommandBufferVal::BeginQuery(const QueryPool& queryPool, uint32_
     GetCoreInterface().CmdBeginQuery(*GetImpl(), *queryPoolImpl, offset);
 }
 
-NRI_INLINE void CommandBufferVal::EndQuery(const QueryPool& queryPool, uint32_t offset) {
-    const QueryPoolVal& queryPoolVal = (const QueryPoolVal&)queryPool;
+NRI_INLINE void CommandBufferVal::EndQuery(QueryPool& queryPool, uint32_t offset) {
+    QueryPoolVal& queryPoolVal = (QueryPoolVal&)queryPool;
 
     RETURN_ON_FAILURE(&m_Device, m_IsRecordingStarted, ReturnVoid(), "the command buffer must be in the recording state");
 
@@ -509,11 +509,11 @@ NRI_INLINE void CommandBufferVal::CopyQueries(const QueryPool& queryPool, uint32
     GetCoreInterface().CmdCopyQueries(*GetImpl(), *queryPoolImpl, offset, num, *dstBufferImpl, dstOffset);
 }
 
-NRI_INLINE void CommandBufferVal::ResetQueries(const QueryPool& queryPool, uint32_t offset, uint32_t num) {
+NRI_INLINE void CommandBufferVal::ResetQueries(QueryPool& queryPool, uint32_t offset, uint32_t num) {
     RETURN_ON_FAILURE(&m_Device, m_IsRecordingStarted, ReturnVoid(), "the command buffer must be in the recording state");
     RETURN_ON_FAILURE(&m_Device, !m_IsRenderPass, ReturnVoid(), "must be called outside of 'CmdBeginRendering/CmdEndRendering'");
 
-    const QueryPoolVal& queryPoolVal = (const QueryPoolVal&)queryPool;
+    QueryPoolVal& queryPoolVal = (QueryPoolVal&)queryPool;
     if (!queryPoolVal.IsImported()) {
         RETURN_ON_FAILURE(&m_Device, offset + num <= queryPoolVal.GetQueryNum(), ReturnVoid(), "'offset + num = %u' is out of range", offset + num);
 
diff --git a/Source/Validation/ImplVal.cpp b/Source/Validation/ImplVal.cpp
index fa9c27e2..cbfdc3e6 100644
--- a/Source/Validation/ImplVal.cpp
+++ b/Source/Validation/ImplVal.cpp
@@ -202,11 +202,11 @@ static void NRI_CALL CmdDispatchIndirect(CommandBuffer& commandBuffer, const Buf
     ((CommandBufferVal&)commandBuffer).DispatchIndirect(buffer, offset);
 }
 
-static void NRI_CALL CmdBeginQuery(CommandBuffer& commandBuffer, const QueryPool& queryPool, uint32_t offset) {
+static void NRI_CALL CmdBeginQuery(CommandBuffer& commandBuffer, QueryPool& queryPool, uint32_t offset) {
     ((CommandBufferVal&)commandBuffer).BeginQuery(queryPool, offset);
 }
 
-static void NRI_CALL CmdEndQuery(CommandBuffer& commandBuffer, const QueryPool& queryPool, uint32_t offset) {
+static void NRI_CALL CmdEndQuery(CommandBuffer& commandBuffer, QueryPool& queryPool, uint32_t offset) {
     ((CommandBufferVal&)commandBuffer).EndQuery(queryPool, offset);
 }
 
@@ -250,7 +250,7 @@ static void NRI_CALL CmdCopyQueries(CommandBuffer& commandBuffer, const QueryPoo
     ((CommandBufferVal&)commandBuffer).CopyQueries(queryPool, offset, num, dstBuffer, dstOffset);
 }
 
-static void NRI_CALL CmdResetQueries(CommandBuffer& commandBuffer, const QueryPool& queryPool, uint32_t offset, uint32_t num) {
+static void NRI_CALL CmdResetQueries(CommandBuffer& commandBuffer, QueryPool& queryPool, uint32_t offset, uint32_t num) {
     ((CommandBufferVal&)commandBuffer).ResetQueries(queryPool, offset, num);
 }