diff --git a/include/vkcv/ImageManager.hpp b/include/vkcv/ImageManager.hpp
index bb4efef74289fa114f196be303d83580c5631c05..b4fe888e3007d4263030ae0c344bc878e0651c9f 100644
--- a/include/vkcv/ImageManager.hpp
+++ b/include/vkcv/ImageManager.hpp
@@ -31,7 +31,7 @@ namespace vkcv {
 		ImageManager& operator=(ImageManager&& other) = delete;
 		ImageManager& operator=(const ImageManager& other) = delete;
 
-		void copyBufferToImage(vk::Buffer bufffer, vk::Image image, uint32_t width, uint32_t height);
+		void copyBufferToImage(vk::Buffer buffer, vk::Image image, uint32_t width, uint32_t height);
 		void switchImageLayout(uint64_t id, vk::ImageLayout oldLayout, vk::ImageLayout newLayout);
 
 		uint64_t createImage(uint32_t width, uint32_t height);
diff --git a/src/vkcv/ImageManager.cpp b/src/vkcv/ImageManager.cpp
index a77976f548cc54556f0a12695faccb5664fbbb48..46d703b453823c898639ab927c0f0929bbc7a937 100644
--- a/src/vkcv/ImageManager.cpp
+++ b/src/vkcv/ImageManager.cpp
@@ -45,9 +45,24 @@ namespace vkcv {
 		}
 	}
 
-	void ImageManager::copyBufferToImage(vk::Buffer bufffer, vk::Image image, uint32_t width, uint32_t height)
+	void ImageManager::copyBufferToImage(vk::Buffer buffer, vk::Image image, uint32_t width, uint32_t height)
 	{
-		//TODO
+		vk::BufferImageCopy copyRegion(0,width,height); // possibly add offset etc
+
+		SubmitInfo submitInfo;
+		submitInfo.queueType = QueueType::Transfer; //not sure
+		m_core->submitCommands(
+			submitInfo,
+			[buffer, image,copyRegion](const vk::CommandBuffer& commandBuffer) {
+				commandBuffer.copyBufferToImage(
+					buffer,
+					image,vk::ImageLayout::eTransferDstOptimal,
+					copyRegion
+				);
+			},
+			[]() {}
+			);
+
 	}