diff --git a/liblava/app/gui.cpp b/liblava/app/gui.cpp
index 93cb9e1e27756dd8cd5aa9e0edca3ea3e4148021..cd548395ba910508c03ca91f1882b990f60cfbeb 100644
--- a/liblava/app/gui.cpp
+++ b/liblava/app/gui.cpp
@@ -447,6 +447,8 @@ namespace lava {
         index_buffers.clear();
 
         descriptor->free(descriptor_set, descriptor_pool->get());
+        descriptor_set = VK_NULL_HANDLE;
+
         descriptor_pool->destroy();
         descriptor->destroy();
         descriptor = nullptr;
diff --git a/liblava/app/gui.hpp b/liblava/app/gui.hpp
index 2e6f6d47f2fdd492a0516d62c6d1637636c1cdcc..51a2ac01ba45814349e6c98ecb2f780b26246dc2 100644
--- a/liblava/app/gui.hpp
+++ b/liblava/app/gui.hpp
@@ -125,7 +125,7 @@ namespace lava {
 
         lava::descriptor::ptr descriptor;
         lava::descriptor::pool::ptr descriptor_pool;
-        VkDescriptorSet descriptor_set = 0;
+        VkDescriptorSet descriptor_set = VK_NULL_HANDLE;
 
         GLFWwindow* window = nullptr;
 
diff --git a/liblava/base/instance.cpp b/liblava/base/instance.cpp
index 2c18fd4f9a4557f6956aea1cd38651d9d5ebea15..0cdeea9197a4d573713e33e0cb62be5d57c01cc2 100644
--- a/liblava/base/instance.cpp
+++ b/liblava/base/instance.cpp
@@ -160,7 +160,7 @@ namespace lava {
 
         vkDestroyDebugUtilsMessengerEXT(vk_instance, debug_messenger, memory::alloc());
 
-        debug_messenger = 0;
+        debug_messenger = VK_NULL_HANDLE;
     }
 
     VkLayerPropertiesList instance::enumerate_layer_properties() {
diff --git a/liblava/base/instance.hpp b/liblava/base/instance.hpp
index 4c45b9d1eb964096d6365f4cb748979b74b8d82b..22de058ec613b58b947ee90f0fe34e1efe4e7684 100644
--- a/liblava/base/instance.hpp
+++ b/liblava/base/instance.hpp
@@ -90,7 +90,7 @@ namespace lava {
         debug_config debug;
         app_info info;
 
-        VkDebugUtilsMessengerEXT debug_messenger = 0;
+        VkDebugUtilsMessengerEXT debug_messenger = VK_NULL_HANDLE;
     };
 
     bool check(instance::create_param::ref param);
diff --git a/liblava/block/descriptor.cpp b/liblava/block/descriptor.cpp
index 26d000b955b12e626fc31c8ddbbf6c5dd3893497..26174057685b92b2d17fad424fd3c33b99712482 100644
--- a/liblava/block/descriptor.cpp
+++ b/liblava/block/descriptor.cpp
@@ -35,7 +35,7 @@ namespace lava {
 
     void descriptor::pool::destroy() {
         device->call().vkDestroyDescriptorPool(device->get(), vk_pool, memory::alloc());
-        vk_pool = 0;
+        vk_pool = VK_NULL_HANDLE;
 
         device = nullptr;
         sizes.clear();
@@ -64,7 +64,7 @@ namespace lava {
             return;
 
         device->call().vkDestroyDescriptorSetLayout(device->get(), layout, memory::alloc());
-        layout = 0;
+        layout = VK_NULL_HANDLE;
 
         // keep device for descriptors
     }
@@ -79,7 +79,7 @@ namespace lava {
     }
 
     VkDescriptorSet descriptor::allocate_set(VkDescriptorPool pool) {
-        VkDescriptorSet descriptor_set = 0;
+        VkDescriptorSet descriptor_set = VK_NULL_HANDLE;
 
         VkDescriptorSetAllocateInfo const alloc_info{
             .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO,
diff --git a/liblava/block/descriptor.hpp b/liblava/block/descriptor.hpp
index 59f111a123b0953d5b0215e6c8691f50486ae40d..d3959e53e9ed6966e6bf4a78598a4395e97a76bf 100644
--- a/liblava/block/descriptor.hpp
+++ b/liblava/block/descriptor.hpp
@@ -66,7 +66,7 @@ namespace lava {
         private:
             device_ptr device = nullptr;
 
-            VkDescriptorPool vk_pool = 0;
+            VkDescriptorPool vk_pool = VK_NULL_HANDLE;
 
             VkDescriptorPoolSizes sizes;
             ui32 max = 0;
@@ -118,7 +118,7 @@ namespace lava {
     private:
         device_ptr device = nullptr;
 
-        VkDescriptorSetLayout layout = 0;
+        VkDescriptorSetLayout layout = VK_NULL_HANDLE;
         binding::list bindings;
     };
 
diff --git a/liblava/block/pipeline.cpp b/liblava/block/pipeline.cpp
index 368e34aa84b0ef26b01cbfb463c36021641fd5d5..449d899077d58d0d193762e21324feea4436d939 100644
--- a/liblava/block/pipeline.cpp
+++ b/liblava/block/pipeline.cpp
@@ -29,7 +29,7 @@ namespace lava {
             return;
 
         device->call().vkDestroyPipelineLayout(device->get(), layout, memory::alloc());
-        layout = 0;
+        layout = VK_NULL_HANDLE;
     }
 
     void pipeline_layout::bind_descriptor_set(VkCommandBuffer cmd_buf, VkDescriptorSet descriptor_set, offset_list offsets, VkPipelineBindPoint bind_point) {
@@ -42,7 +42,7 @@ namespace lava {
     : device(device_), pipeline_cache(pipeline_cache) {}
 
     pipeline::~pipeline() {
-        pipeline_cache = 0;
+        pipeline_cache = VK_NULL_HANDLE;
         layout = nullptr;
     }
 
@@ -55,7 +55,7 @@ namespace lava {
 
         if (vk_pipeline) {
             device->call().vkDestroyPipeline(device->get(), vk_pipeline, memory::alloc());
-            vk_pipeline = 0;
+            vk_pipeline = VK_NULL_HANDLE;
         }
 
         layout = nullptr;
@@ -66,7 +66,7 @@ namespace lava {
         create_info.pNext = nullptr;
         create_info.flags = 0;
         create_info.stage = VK_SHADER_STAGE_FLAG_BITS_MAX_ENUM;
-        create_info.module = 0;
+        create_info.module = VK_NULL_HANDLE;
         create_info.pName = _main_;
         create_info.pSpecializationInfo = &specialization_info;
 
@@ -100,7 +100,7 @@ namespace lava {
 
         create_info.module = create_shader_module(device, shader_data);
 
-        return create_info.module != 0;
+        return create_info.module != VK_NULL_HANDLE;
     }
 
     void pipeline::shader_stage::destroy() {
@@ -109,7 +109,7 @@ namespace lava {
 
         device->call().vkDestroyShaderModule(device->get(), create_info.module, memory::alloc());
 
-        create_info.module = 0;
+        create_info.module = VK_NULL_HANDLE;
         device = nullptr;
     }
 
diff --git a/liblava/block/pipeline.hpp b/liblava/block/pipeline.hpp
index 9cb956f4aad513b76ccaca23ce9cb29fc5e330e5..ef4184cae2efde1f55f3c4f793b930be4bf043e2 100644
--- a/liblava/block/pipeline.hpp
+++ b/liblava/block/pipeline.hpp
@@ -53,7 +53,7 @@ namespace lava {
     private:
         device_ptr device = nullptr;
 
-        VkPipelineLayout layout = 0;
+        VkPipelineLayout layout = VK_NULL_HANDLE;
 
         descriptor::list descriptors;
         VkPushConstantRanges push_constant_ranges;
@@ -99,7 +99,7 @@ namespace lava {
         }
 
         bool ready() const {
-            return vk_pipeline != 0;
+            return vk_pipeline != VK_NULL_HANDLE;
         }
 
         VkPipeline get() const {
@@ -151,9 +151,9 @@ namespace lava {
         virtual void destroy_internal() = 0;
 
         device_ptr device = nullptr;
-        VkPipeline vk_pipeline = 0;
+        VkPipeline vk_pipeline = VK_NULL_HANDLE;
 
-        VkPipelineCache pipeline_cache = 0;
+        VkPipelineCache pipeline_cache = VK_NULL_HANDLE;
         pipeline_layout::ptr layout;
 
     private:
@@ -307,7 +307,7 @@ namespace lava {
         bool create_internal() override;
         void destroy_internal() override;
 
-        VkRenderPass render_pass = 0;
+        VkRenderPass render_pass = VK_NULL_HANDLE;
         index subpass = 0;
 
         create_info info;
diff --git a/liblava/block/render_pass.cpp b/liblava/block/render_pass.cpp
index d3eaef40940f220ddda1e372b1f10bbd09f989f6..631df9c6e801731f78d3695acafe3b99f45679e0 100644
--- a/liblava/block/render_pass.cpp
+++ b/liblava/block/render_pass.cpp
@@ -59,7 +59,7 @@ namespace lava {
 
         if (vk_render_pass) {
             device->call().vkDestroyRenderPass(device->get(), vk_render_pass, memory::alloc());
-            vk_render_pass = 0;
+            vk_render_pass = VK_NULL_HANDLE;
         }
 
         device = nullptr;
@@ -160,7 +160,7 @@ namespace lava {
                 continue;
 
             device->call().vkDestroyFramebuffer(device->get(), framebuffer, memory::alloc());
-            framebuffer = 0;
+            framebuffer = VK_NULL_HANDLE;
         }
 
         framebuffers.clear();
diff --git a/liblava/block/render_pass.hpp b/liblava/block/render_pass.hpp
index 0ddbfb0ed7ea50b3ea6ea884ca1ebb54d8e8e592..b7c825db40532df160301242632287087ec453cb 100644
--- a/liblava/block/render_pass.hpp
+++ b/liblava/block/render_pass.hpp
@@ -75,7 +75,7 @@ namespace lava {
     private:
         device_ptr device = nullptr;
 
-        VkRenderPass vk_render_pass = 0;
+        VkRenderPass vk_render_pass = VK_NULL_HANDLE;
         VkFramebuffers framebuffers = {};
 
         attachment::list attachments;
diff --git a/liblava/frame/swapchain.cpp b/liblava/frame/swapchain.cpp
index 16b80e855c210b44678c9cb9afdfda3529b44a94..df4e2637cba830e5e3bf907d94708f03c8e16281 100644
--- a/liblava/frame/swapchain.cpp
+++ b/liblava/frame/swapchain.cpp
@@ -25,7 +25,7 @@ namespace lava {
         destroy_internal();
 
         vkDestroySurfaceKHR(instance::get(), surface, memory::alloc());
-        surface = 0;
+        surface = VK_NULL_HANDLE;
     }
 
     bool swapchain::resize(uv2 new_size) {
@@ -208,7 +208,7 @@ namespace lava {
             return;
 
         device->vkDestroySwapchainKHR(vk_swapchain);
-        vk_swapchain = 0;
+        vk_swapchain = VK_NULL_HANDLE;
     }
 
     void swapchain::destroy_backbuffer_views() {
diff --git a/liblava/frame/swapchain.hpp b/liblava/frame/swapchain.hpp
index 8b2abcd6cb8f5105433dd87f7c81cc59d82ff03d..2b6506c3bfaaba60d875e08106a178cfb0313797 100644
--- a/liblava/frame/swapchain.hpp
+++ b/liblava/frame/swapchain.hpp
@@ -75,9 +75,9 @@ namespace lava {
 
         device_ptr device = nullptr;
 
-        VkSurfaceKHR surface = 0;
+        VkSurfaceKHR surface = VK_NULL_HANDLE;
         VkSurfaceFormatKHR format = {};
-        VkSwapchainKHR vk_swapchain = 0;
+        VkSwapchainKHR vk_swapchain = VK_NULL_HANDLE;
 
         image::list backbuffers;
 
diff --git a/liblava/frame/window.cpp b/liblava/frame/window.cpp
index 1aaa4423b01a1f9d0e1a89d20fe9bba94721ffb9..c218a964dd97eb00be407a07b186fd2a7589e547 100644
--- a/liblava/frame/window.cpp
+++ b/liblava/frame/window.cpp
@@ -407,7 +407,7 @@ namespace lava {
 } // namespace lava
 
 VkSurfaceKHR lava::create_surface(GLFWwindow* window) {
-    VkSurfaceKHR surface = 0;
+    VkSurfaceKHR surface = VK_NULL_HANDLE;
     if (failed(glfwCreateWindowSurface(instance::get(), window, memory::alloc(), &surface)))
         return 0;
 
diff --git a/liblava/resource/buffer.cpp b/liblava/resource/buffer.cpp
index 44974b7abdb01ccc1a15728a8e003f0f209f8159..2855b3ad8c7c2ca79d5137d45578eef5a5af1119 100644
--- a/liblava/resource/buffer.cpp
+++ b/liblava/resource/buffer.cpp
@@ -99,7 +99,7 @@ namespace lava {
             return;
 
         vmaDestroyBuffer(device->alloc(), vk_buffer, allocation);
-        vk_buffer = 0;
+        vk_buffer = VK_NULL_HANDLE;
         allocation = nullptr;
 
         device = nullptr;
diff --git a/liblava/resource/buffer.hpp b/liblava/resource/buffer.hpp
index e86af790fd6bebe9e3c6945625cbfd67cf5e9f2c..7d74d8cd26541c637b8dbe71c23d93d46c506f21 100644
--- a/liblava/resource/buffer.hpp
+++ b/liblava/resource/buffer.hpp
@@ -32,7 +32,7 @@ namespace lava {
         }
 
         bool valid() const {
-            return vk_buffer != 0;
+            return vk_buffer != VK_NULL_HANDLE;
         }
 
         VkBuffer get() const {
@@ -68,7 +68,7 @@ namespace lava {
     private:
         device_ptr device = nullptr;
 
-        VkBuffer vk_buffer = 0;
+        VkBuffer vk_buffer = VK_NULL_HANDLE;
         VmaAllocation allocation = nullptr;
 
         VmaAllocationInfo allocation_info = {};
diff --git a/liblava/resource/image.hpp b/liblava/resource/image.hpp
index 01eee9d7d71ba836314f619a2dc94b6166b94d31..98308ff264ab3dbe3639690b5e350fd3944b0550 100644
--- a/liblava/resource/image.hpp
+++ b/liblava/resource/image.hpp
@@ -88,12 +88,12 @@ namespace lava {
     private:
         device_ptr device = nullptr;
 
-        VkImage vk_image = 0;
+        VkImage vk_image = VK_NULL_HANDLE;
         VkImageCreateInfo info;
 
         VmaAllocation allocation = nullptr;
 
-        VkImageView view = 0;
+        VkImageView view = VK_NULL_HANDLE;
 
         VkImageViewCreateInfo view_info;
         VkImageSubresourceRange subresource_range;
diff --git a/liblava/resource/texture.cpp b/liblava/resource/texture.cpp
index d30de388b5ba98b7b289db4c2fd6fba1338344d4..61e347fb6726678c4ab2010ed846711f5ccb45b2 100644
--- a/liblava/resource/texture.cpp
+++ b/liblava/resource/texture.cpp
@@ -85,7 +85,7 @@ namespace lava {
                 if (auto device = img->get_device())
                     device->vkDestroySampler(sampler);
 
-            sampler = 0;
+            sampler = VK_NULL_HANDLE;
         }
 
         if (img) {