diff --git a/src/Vulkan/VkCommandBuffer.cpp b/src/Vulkan/VkCommandBuffer.cpp
index 57f9538..0d766a9 100644
--- a/src/Vulkan/VkCommandBuffer.cpp
+++ b/src/Vulkan/VkCommandBuffer.cpp
@@ -353,6 +353,12 @@
 	return VK_SUCCESS;
 }
 
+template<typename T, typename... Args>
+void CommandBuffer::addCommand(Args&&... args)
+{
+	commands->push_back(std::unique_ptr<T>(new T(std::forward<Args>(args)...)));
+}
+
 void CommandBuffer::beginRenderPass(VkRenderPass renderPass, VkFramebuffer framebuffer, VkRect2D renderArea,
                                     uint32_t clearValueCount, const VkClearValue* clearValues, VkSubpassContents contents)
 {
@@ -363,7 +369,7 @@
 		UNIMPLEMENTED();
 	}
 
-	commands->push_back(std::make_unique<BeginRenderPass>(renderPass, framebuffer, renderArea, clearValueCount, clearValues));
+	addCommand<BeginRenderPass>(renderPass, framebuffer, renderArea, clearValueCount, clearValues);
 }
 
 void CommandBuffer::nextSubpass(VkSubpassContents contents)
@@ -373,7 +379,7 @@
 
 void CommandBuffer::endRenderPass()
 {
-	commands->push_back(std::make_unique<EndRenderPass>());
+	addCommand<EndRenderPass>();
 }
 
 void CommandBuffer::executeCommands(uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers)
@@ -398,7 +404,7 @@
                                     uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers,
                                     uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers)
 {
-	commands->push_back(std::make_unique<PipelineBarrier>());
+	addCommand<PipelineBarrier>();
 }
 
 void CommandBuffer::bindPipeline(VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline)
@@ -408,7 +414,7 @@
 		UNIMPLEMENTED();
 	}
 
-	commands->push_back(std::make_unique<PipelineBind>(pipelineBindPoint, pipeline));
+	addCommand<PipelineBind>(pipelineBindPoint, pipeline);
 }
 
 void CommandBuffer::bindVertexBuffers(uint32_t firstBinding, uint32_t bindingCount,
@@ -416,7 +422,7 @@
 {
 	for(uint32_t i = firstBinding; i < (firstBinding + bindingCount); ++i)
 	{
-		commands->push_back(std::make_unique<VertexBufferBind>(i, pBuffers[i], pOffsets[i]));
+		addCommand<VertexBufferBind>(i, pBuffers[i], pOffsets[i]);
 	}
 }
 
@@ -563,7 +569,7 @@
 
 	for(uint32_t i = 0; i < regionCount; i++)
 	{
-		commands->push_back(std::make_unique<BufferToBufferCopy>(srcBuffer, dstBuffer, pRegions[i]));
+		addCommand<BufferToBufferCopy>(srcBuffer, dstBuffer, pRegions[i]);
 	}
 }
 
@@ -578,7 +584,7 @@
 
 	for(uint32_t i = 0; i < regionCount; i++)
 	{
-		commands->push_back(std::make_unique<ImageToImageCopy>(srcImage, dstImage, pRegions[i]));
+		addCommand<ImageToImageCopy>(srcImage, dstImage, pRegions[i]);
 	}
 }
 
@@ -593,7 +599,7 @@
 
 	for(uint32_t i = 0; i < regionCount; i++)
 	{
-		commands->push_back(std::make_unique<BlitImage>(srcImage, dstImage, pRegions[i], filter));
+		addCommand<BlitImage>(srcImage, dstImage, pRegions[i], filter);
 	}
 }
 
@@ -604,7 +610,7 @@
 
 	for(uint32_t i = 0; i < regionCount; i++)
 	{
-		commands->push_back(std::make_unique<BufferToImageCopy>(srcBuffer, dstImage, pRegions[i]));
+		addCommand<BufferToImageCopy>(srcBuffer, dstImage, pRegions[i]);
 	}
 }
 
@@ -616,7 +622,7 @@
 
 	for(uint32_t i = 0; i < regionCount; i++)
 	{
-		commands->push_back(std::make_unique<ImageToBufferCopy>(srcImage, dstBuffer, pRegions[i]));
+		addCommand<ImageToBufferCopy>(srcImage, dstBuffer, pRegions[i]);
 	}
 }
 
@@ -689,7 +695,7 @@
 		UNIMPLEMENTED();
 	}
 
-	commands->push_back(std::make_unique<Draw>(vertexCount));
+	addCommand<Draw>(vertexCount);
 }
 
 void CommandBuffer::drawIndexed(uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance)
