diff --git a/include/vkcv/Window.hpp b/include/vkcv/Window.hpp
index 7dc6c1b7dc8fef4d5de7de5b0a9976bf714e6ac2..f3b3a8fe88ae6e8791d7d92361ad5b6bf2447dcb 100644
--- a/include/vkcv/Window.hpp
+++ b/include/vkcv/Window.hpp
@@ -157,6 +157,13 @@ namespace vkcv {
          * Destructor of #Window, terminates GLFW
          */
         virtual ~Window();
+        
+        /**
+         * gets the windows framebuffer size
+         * @param width
+         * @param height
+         */
+        void getFramebufferSize(int& width, int& height) const;
     };
 
 }
diff --git a/projects/voxelization/src/main.cpp b/projects/voxelization/src/main.cpp
index edc50c554b6c73bd2f06914eba6dd7adf9e43483..0270dd917ecc98a6a777d6f636a4a64e4885a978 100644
--- a/projects/voxelization/src/main.cpp
+++ b/projects/voxelization/src/main.cpp
@@ -550,6 +550,14 @@ int main(int argc, const char** argv) {
 		if (!core.beginFrame(swapchainWidth, swapchainHeight)) {
 			continue;
 		}
+		
+		if ((swapchainWidth < 2) || (swapchainHeight < 2)) {
+			std::cerr << "A" << std::endl;
+		}
+		
+		if ((windowWidth < 2) || (windowHeight < 2)) {
+			std::cerr << "B" << std::endl;
+		}
 
 		if ((swapchainWidth != windowWidth) || ((swapchainHeight != windowHeight))) {
 			depthBuffer         = core.createImage(depthBufferFormat, swapchainWidth, swapchainHeight, 1, false, false, false, msaa).getHandle();
@@ -567,6 +575,14 @@ int main(int argc, const char** argv) {
 
 			bloomFlares.updateImageDimensions(windowWidth, windowHeight);
 		}
+		
+		if ((swapchainWidth < 2) || (swapchainHeight < 2)) {
+			std::cerr << "C" << std::endl;
+		}
+		
+		if ((windowWidth < 2) || (windowHeight < 2)) {
+			std::cerr << "D" << std::endl;
+		}
 
 		auto end = std::chrono::system_clock::now();
 		auto deltatime = std::chrono::duration_cast<std::chrono::microseconds>(end - start);
diff --git a/src/vkcv/Core.cpp b/src/vkcv/Core.cpp
index ad89d0fa8251721700ccd0d94be56803d269eea7..df306be5610f6a190d48cdbb9a512a4dc19855af 100644
--- a/src/vkcv/Core.cpp
+++ b/src/vkcv/Core.cpp
@@ -160,8 +160,24 @@ namespace vkcv
 			m_swapchain.updateSwapchain(m_Context, m_window);
 			const auto swapchainViews = createSwapchainImageViews(m_Context, m_swapchain);
 			const auto swapchainImages = m_Context.getDevice().getSwapchainImagesKHR(m_swapchain.getSwapchain());
-
-			m_ImageManager->setSwapchainImages(swapchainImages, swapchainViews, width, height, m_swapchain.getFormat());
+			
+			const auto& extent = m_swapchain.getExtent();
+
+			m_ImageManager->setSwapchainImages(
+					swapchainImages,
+					swapchainViews,
+					extent.width, extent.height,
+					m_swapchain.getFormat()
+			);
+		}
+		
+		const auto& extent = m_swapchain.getExtent();
+		
+		width = extent.width;
+		height = extent.height;
+		
+		if ((width < 2) || (height < 2)) {
+			return false;
 		}
 		
     	if (acquireSwapchainImage() != Result::SUCCESS) {
@@ -172,11 +188,6 @@ 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;
-		
 		m_ImageManager->setCurrentSwapchainImageIndex(m_currentSwapchainImageIndex);
 
 		return (m_currentSwapchainImageIndex != std::numeric_limits<uint32_t>::max());
diff --git a/src/vkcv/Swapchain.cpp b/src/vkcv/Swapchain.cpp
index 2c5b3530c396bc3532aa94cb59a120e3555291bf..4ca8056b525d0215587f466cb3ea273d6d95f571 100644
--- a/src/vkcv/Swapchain.cpp
+++ b/src/vkcv/Swapchain.cpp
@@ -78,10 +78,13 @@ namespace vkcv
         if(physicalDevice.getSurfaceCapabilitiesKHR(surface,&surfaceCapabilities) != vk::Result::eSuccess){
             throw std::runtime_error("cannot get surface capabilities. There is an issue with the surface.");
         }
-
+        
+        int fb_width, fb_height;
+        window.getFramebufferSize(fb_width, fb_height);
+        
         VkExtent2D extent2D = {
-                static_cast<uint32_t>(window.getWidth()),
-                static_cast<uint32_t>(window.getHeight())
+                static_cast<uint32_t>(fb_width),
+                static_cast<uint32_t>(fb_height)
         };
         
         extent2D.width = std::max(surfaceCapabilities.minImageExtent.width, std::min(surfaceCapabilities.maxImageExtent.width, extent2D.width));
diff --git a/src/vkcv/Window.cpp b/src/vkcv/Window.cpp
index 03a58a23b994209c7a0ee195732dc98543f0eddc..ea72582d67d5350e5fbf3f3c0fa2aae2ba407b0e 100644
--- a/src/vkcv/Window.cpp
+++ b/src/vkcv/Window.cpp
@@ -181,4 +181,9 @@ namespace vkcv {
     GLFWwindow *Window::getWindow() const {
         return m_window;
     }
+    
+    void Window::getFramebufferSize(int &width, int &height) const {
+		glfwGetFramebufferSize(m_window, &width, &height);
+    }
+    
 }