diff --git a/include/vkcv/Core.hpp b/include/vkcv/Core.hpp
index e7d098812c1f7397b2bdd9a5d745376a397b415b..3071286eea20b57c0fc909716ed933a968e01197 100644
--- a/include/vkcv/Core.hpp
+++ b/include/vkcv/Core.hpp
@@ -37,6 +37,13 @@ namespace vkcv
 		size_t                              indexCount;
 	};
 
+	struct PushConstantData {
+        inline PushConstantData(void* data, size_t sizePerDrawcall) : data(data), sizePerDrawcall(sizePerDrawcall){}
+
+		void*   data;
+		size_t  sizePerDrawcall;
+	};
+
     // forward declarations
     class PassManager;
     class PipelineManager;
@@ -232,8 +239,7 @@ namespace vkcv
 		void renderMesh(
 			const PassHandle                        renderpassHandle, 
 			const PipelineHandle                    pipelineHandle,
-			const size_t                            pushConstantSize, 
-			const void*                             pushConstantData, 
+			const PushConstantData                  &pushConstantData,
 			const Mesh                              &mesh,
 			const std::vector<DescriptorSetUsage>   &descriptorSets,
 			const std::vector<ImageHandle>	        &renderTargets);
diff --git a/projects/cmd_sync_test/src/main.cpp b/projects/cmd_sync_test/src/main.cpp
index 01eec2fc2bf95e616739e0a84a35add13865cdd4..e1bbdf3bda378119a3d90688a2e6a7786f16acfe 100644
--- a/projects/cmd_sync_test/src/main.cpp
+++ b/projects/cmd_sync_test/src/main.cpp
@@ -164,8 +164,7 @@ int main(int argc, const char** argv) {
 		core.renderMesh(
 			trianglePass,
 			trianglePipeline,
-			sizeof(mvp),
-			&mvp,
+			vkcv::PushConstantData((void*) &mvp, sizeof(mvp)),
 			boxMesh,
 			{ vkcv::DescriptorSetUsage(0, descriptorSet) },
 			{ swapchainInput, depthBuffer });
diff --git a/src/vkcv/Core.cpp b/src/vkcv/Core.cpp
index 472f3766de22edbc96776499566ed5c53c02a41f..96fb0f1e9d1287c0df0b9e63196c516bea716f57 100644
--- a/src/vkcv/Core.cpp
+++ b/src/vkcv/Core.cpp
@@ -144,8 +144,7 @@ namespace vkcv
 	void Core::renderMesh(
 		const PassHandle                        renderpassHandle, 
 		const PipelineHandle                    pipelineHandle, 
-		const size_t                            pushConstantSize, 
-		const void                              *pushConstantData,
+        const PushConstantData                  &pushConstantData,
 		const Mesh                              &mesh,
         const std::vector<DescriptorSetUsage>   &descriptorSets,
 		const std::vector<ImageHandle>          &renderTargets) {
@@ -273,7 +272,14 @@ namespace vkcv
             const vk::Buffer indexBuffer = m_BufferManager->getBuffer(mesh.indexBuffer);
 
             cmdBuffer.bindIndexBuffer(indexBuffer, 0, vk::IndexType::eUint16);	//FIXME: choose proper size
-            cmdBuffer.pushConstants(pipelineLayout, vk::ShaderStageFlagBits::eAll, 0, pushConstantSize, pushConstantData);
+
+            cmdBuffer.pushConstants(
+                pipelineLayout, 
+                vk::ShaderStageFlagBits::eAll, 
+                0, 
+                pushConstantData.sizePerDrawcall, 
+                pushConstantData.data);
+
             cmdBuffer.drawIndexed(mesh.indexCount, 1, 0, 0, {});
             cmdBuffer.endRenderPass();
         };