diff --git a/include/vkcv/Core.hpp b/include/vkcv/Core.hpp
index f3048748bcafdec0758f7022a37c75c67bc8d2fc..f7f725ea3308d4cb63a3355284b34c9e10f90d31 100644
--- a/include/vkcv/Core.hpp
+++ b/include/vkcv/Core.hpp
@@ -230,8 +230,6 @@ namespace vkcv
 		void renderMesh(
 			const PassHandle						renderpassHandle, 
 			const PipelineHandle					pipelineHandle,
-			const uint32_t							width,
-			const uint32_t							height,
 			const size_t							pushConstantSize, 
 			const void*								pushConstantData, 
 			const std::vector<VertexBufferBinding>	&vertexBufferBindings, 
diff --git a/projects/cmd_sync_test/src/main.cpp b/projects/cmd_sync_test/src/main.cpp
index 3f6e2c3fd691744460bb38019b47a16c8b724b75..b70394d91fd9bd7937abc9f5ed873c13283c53ac 100644
--- a/projects/cmd_sync_test/src/main.cpp
+++ b/projects/cmd_sync_test/src/main.cpp
@@ -162,8 +162,6 @@ int main(int argc, const char** argv) {
 		core.renderMesh(
 			trianglePass,
 			trianglePipeline,
-			windowWidth,
-			windowHeight,
 			sizeof(mvp),
 			&mvp,
 			vertexBufferBindings,
diff --git a/src/vkcv/Core.cpp b/src/vkcv/Core.cpp
index c9a43edbda136e0f1ee3f28389811f23e8c4b1a9..b320f5db90e4534e515626f8cb5e7b6a9a264516 100644
--- a/src/vkcv/Core.cpp
+++ b/src/vkcv/Core.cpp
@@ -176,8 +176,6 @@ namespace vkcv
 	void Core::renderMesh(
 		const PassHandle						renderpassHandle, 
 		const PipelineHandle					pipelineHandle, 
-		const uint32_t 							width,
-		const uint32_t							height,
 		const size_t							pushConstantSize, 
 		const void								*pushConstantData,
 		const std::vector<VertexBufferBinding>& vertexBufferBindings, 
@@ -191,6 +189,25 @@ namespace vkcv
 			return;
 		}
 
+		uint32_t width;
+		uint32_t height;
+		if (renderTargets.size() > 0) {
+			const vkcv::ImageHandle firstImage = renderTargets[0];
+			if (firstImage.isSwapchainImage()) {
+				width = m_window.getWidth();
+				height = m_window.getHeight();
+			}
+			else {
+				width = m_ImageManager->getImageWidth(firstImage);
+				height = m_ImageManager->getImageHeight(firstImage);
+			}
+		}
+		else {
+			width = 1;
+			height = 1;
+		}
+		// TODO: validate that width/height match for all attachments
+
 		const vk::RenderPass renderpass = m_PassManager->getVkPass(renderpassHandle);
 		const PassConfig passConfig = m_PassManager->getPassConfig(renderpassHandle);
 
diff --git a/src/vkcv/ImageManager.cpp b/src/vkcv/ImageManager.cpp
index 4b46b5fc422e1666049b22d422a16fec10fe08aa..a3ca22b16b2c96962b188c8a8be51ebb9cd7314d 100644
--- a/src/vkcv/ImageManager.cpp
+++ b/src/vkcv/ImageManager.cpp
@@ -178,6 +178,7 @@ namespace vkcv {
 		const uint64_t id = handle.getId();
 		
 		if (id >= m_images.size()) {
+			std::cerr << "Error: ImageManager::getVulkanImage invalid handle" << std::endl;
 			return nullptr;
 		}
 		
@@ -190,6 +191,7 @@ namespace vkcv {
 		const uint64_t id = handle.getId();
 		
 		if (id >= m_images.size()) {
+			std::cerr << "Error: ImageManager::getVulkanDeviceMemory invalid handle" << std::endl;
 			return nullptr;
 		}
 		
@@ -202,6 +204,7 @@ namespace vkcv {
 		const uint64_t id = handle.getId();
 		
 		if (id >= m_images.size()) {
+			std::cerr << "Error: ImageManager::getVulkanImageView invalid handle" << std::endl;
 			return nullptr;
 		}
 		
@@ -214,6 +217,7 @@ namespace vkcv {
 		const uint64_t id = handle.getId();
 		
 		if (id >= m_images.size()) {
+			std::cerr << "Error: ImageManager::switchImageLayout invalid handle" << std::endl;
 			return;
 		}
 		
@@ -295,6 +299,7 @@ namespace vkcv {
 		const uint64_t id = handle.getId();
 		
 		if (id >= m_images.size()) {
+			std::cerr << "Error: ImageManager::fillImage invalid handle" << std::endl;
 			return;
 		}
 		
@@ -371,6 +376,7 @@ namespace vkcv {
 		const uint64_t id = handle.getId();
 		
 		if (id >= m_images.size()) {
+			std::cerr << "Error: ImageManager::getImageWidth invalid handle" << std::endl;
 			return 0;
 		}
 		
@@ -383,6 +389,7 @@ namespace vkcv {
 		const uint64_t id = handle.getId();
 		
 		if (id >= m_images.size()) {
+			std::cerr << "Error: ImageManager::getImageHeight invalid handle" << std::endl;
 			return 0;
 		}
 		
@@ -395,6 +402,7 @@ namespace vkcv {
 		const uint64_t id = handle.getId();
 		
 		if (id >= m_images.size()) {
+			std::cerr << "Error: ImageManager::getImageDepth invalid handle" << std::endl;
 			return 0;
 		}
 		
@@ -406,6 +414,7 @@ namespace vkcv {
 	void ImageManager::destroyImageById(uint64_t id)
 	{
 		if (id >= m_images.size()) {
+			std::cerr << "Error: ImageManager::destroyImageById invalid handle" << std::endl;
 			return;
 		}