diff --git a/liblava/frame/swapchain.cpp b/liblava/frame/swapchain.cpp
index 53887bf82c02932a250a05b55d0437fde1adc001..48bcbd0de0f869d05c6fb43f93c9cb16d4c24c38 100644
--- a/liblava/frame/swapchain.cpp
+++ b/liblava/frame/swapchain.cpp
@@ -116,9 +116,13 @@ VkPresentModeKHR swapchain::choose_present_mode(VkPresentModeKHRs const& present
     if (v_sync())
         return VK_PRESENT_MODE_FIFO_KHR;
 
-    for (auto const& present_mode : present_modes)
-        if (present_mode == VK_PRESENT_MODE_MAILBOX_KHR)
-            return present_mode;
+    if(std::find(present_modes.begin(), present_modes.end(), VK_PRESENT_MODE_MAILBOX_KHR) != present_modes.end()){
+        return VK_PRESENT_MODE_MAILBOX_KHR;
+    }
+
+    if(std::find(present_modes.begin(), present_modes.end(), VK_PRESENT_MODE_IMMEDIATE_KHR) != present_modes.end()){
+        return VK_PRESENT_MODE_IMMEDIATE_KHR;
+    }
 
     return VK_PRESENT_MODE_FIFO_KHR;
 }