diff --git a/include/vkcv/Core.hpp b/include/vkcv/Core.hpp
index 67973ba18bf11cc53b10b907f2c08bcfc78a5900..81b1defb95b74ae57b86cc5e581087a3407e6f5a 100644
--- a/include/vkcv/Core.hpp
+++ b/include/vkcv/Core.hpp
@@ -218,7 +218,7 @@ namespace vkcv
 		/**
 		 * @brief start recording command buffers and increment frame index
 		*/
-		void beginFrame();
+		void beginFrame(uint32_t& width, uint32_t& height);
 
 		void recordDrawcallsToCmdStream(
             const CommandStreamHandle       cmdStreamHandle,
diff --git a/projects/cmd_sync_test/src/main.cpp b/projects/cmd_sync_test/src/main.cpp
index 55c11577295badb4459a57b47035fbb77379ab05..e3283fb188c2b15fc84cc05dd8a1be41456dd8fb 100644
--- a/projects/cmd_sync_test/src/main.cpp
+++ b/projects/cmd_sync_test/src/main.cpp
@@ -8,8 +8,9 @@
 int main(int argc, const char** argv) {
 	const char* applicationName = "First Mesh";
 
-	const int windowWidth = 800;
-	const int windowHeight = 600;
+	uint32_t windowWidth = 800;
+	uint32_t windowHeight = 600;
+	
 	vkcv::Window window = vkcv::Window::create(
 		applicationName,
 		windowWidth,
@@ -138,10 +139,6 @@ int main(int argc, const char** argv) {
 
 	vkcv::ImageHandle depthBuffer = core.createImage(vk::Format::eD32Sfloat, windowWidth, windowHeight).getHandle();
 
-	window.e_resize.add([&](int width, int height) {
-		depthBuffer = core.createImage(vk::Format::eD32Sfloat, width, height).getHandle();
-	});
-
 	const vkcv::ImageHandle swapchainInput = vkcv::ImageHandle::createSwapchainImageHandle();
 
 	const vkcv::DescriptorSetUsage descriptorUsage(0, core.getDescriptorSet(descriptorSet).vulkanHandle);
@@ -164,8 +161,18 @@ int main(int argc, const char** argv) {
 
 	auto start = std::chrono::system_clock::now();
 	while (window.isWindowOpen()) {
-		window.pollEvents();
-		core.beginFrame();
+		vkcv::Window::pollEvents();
+		
+		uint32_t swapchainWidth, swapchainHeight;
+		core.beginFrame(swapchainWidth, swapchainHeight);
+		
+		if ((swapchainWidth != windowWidth) || ((swapchainHeight != windowHeight))) {
+			depthBuffer = core.createImage(vk::Format::eD32Sfloat, swapchainWidth, swapchainHeight).getHandle();
+			
+			windowWidth = swapchainWidth;
+			windowHeight = swapchainHeight;
+		}
+		
 		auto end = std::chrono::system_clock::now();
 		auto deltatime = end - start;
 		start = end;
diff --git a/projects/first_mesh/src/main.cpp b/projects/first_mesh/src/main.cpp
index 27b255c3a3413d747ea8e351d26eb1671bf9ebef..97e866c3687640e6b6c7b489aedf747d15d8dd2b 100644
--- a/projects/first_mesh/src/main.cpp
+++ b/projects/first_mesh/src/main.cpp
@@ -8,8 +8,8 @@
 int main(int argc, const char** argv) {
 	const char* applicationName = "First Mesh";
 
-	const int windowWidth = 800;
-	const int windowHeight = 600;
+	uint32_t windowWidth = 800;
+	uint32_t windowHeight = 600;
 
 	vkcv::Window window = vkcv::Window::create(
 		applicationName,
@@ -137,10 +137,6 @@ int main(int argc, const char** argv) {
 
 	vkcv::ImageHandle depthBuffer = core.createImage(vk::Format::eD32Sfloat, windowWidth, windowHeight).getHandle();
 
-	window.e_resize.add([&](int width, int height) {
-		depthBuffer = core.createImage(vk::Format::eD32Sfloat, width, height).getHandle();
-	});
-
 	const vkcv::ImageHandle swapchainInput = vkcv::ImageHandle::createSwapchainImageHandle();
 
 	const vkcv::Mesh renderMesh(vertexBufferBindings, indexBuffer.getVulkanHandle(), mesh.vertexGroups[0].numIndices);
@@ -151,11 +147,20 @@ int main(int argc, const char** argv) {
 	auto start = std::chrono::system_clock::now();
 	while (window.isWindowOpen()) {
         vkcv::Window::pollEvents();
-
-        if(window.getHeight() == 0 || window.getWidth() == 0)
-            continue;
-
-		core.beginFrame();
+		
+		if(window.getHeight() == 0 || window.getWidth() == 0)
+			continue;
+		
+		uint32_t swapchainWidth, swapchainHeight;
+		core.beginFrame(swapchainWidth, swapchainHeight);
+		
+		if ((swapchainWidth != windowWidth) || ((swapchainHeight != windowHeight))) {
+			depthBuffer = core.createImage(vk::Format::eD32Sfloat, swapchainWidth, swapchainHeight).getHandle();
+			
+			windowWidth = swapchainWidth;
+			windowHeight = swapchainHeight;
+		}
+  
 		auto end = std::chrono::system_clock::now();
 		auto deltatime = end - start;
 		start = end;
diff --git a/projects/first_triangle/src/main.cpp b/projects/first_triangle/src/main.cpp
index b4a08659a94b2de63e7b47efc07b1cc8ba601b8d..70366d1325bc101d9cfaa82272d70afc5a3865ae 100644
--- a/projects/first_triangle/src/main.cpp
+++ b/projects/first_triangle/src/main.cpp
@@ -142,7 +142,10 @@ int main(int argc, const char** argv) {
 	while (window.isWindowOpen())
 	{
         window.pollEvents();
-        core.beginFrame();
+		
+		uint32_t swapchainWidth, swapchainHeight; // No resizing = No problem
+		core.beginFrame(swapchainWidth, swapchainHeight);
+		
         auto end = std::chrono::system_clock::now();
         auto deltatime = end - start;
         start = end;
diff --git a/src/vkcv/Core.cpp b/src/vkcv/Core.cpp
index c9ac4decbc5ae19d77fa33726566ecb5c8b31d3c..ddcb0086db0053a4c0afdf70b9b95a27f822567e 100644
--- a/src/vkcv/Core.cpp
+++ b/src/vkcv/Core.cpp
@@ -127,7 +127,7 @@ namespace vkcv
 		return Result::SUCCESS;
 	}
 
-	void Core::beginFrame() {
+	void Core::beginFrame(uint32_t& width, uint32_t& height) {
 		if (m_swapchain.shouldUpdateSwapchain()) {
 			m_Context.getDevice().waitIdle();
 			
@@ -149,6 +149,11 @@ namespace vkcv
     	}
 		
 		m_Context.getDevice().waitIdle(); // TODO: this is a sin against graphics programming, but its getting late - Alex
+		
+		const auto& extent = m_swapchain.getExtent();
+		
+		width = extent.width;
+		height = extent.height;
 	}
 
 	void Core::recordDrawcallsToCmdStream(