diff --git a/projects/rtx_ambient_occlusion/src/main.cpp b/projects/rtx_ambient_occlusion/src/main.cpp
index 3136e92c54dc109c29b192aed60329b1e478932c..0992d457a294b48590280d06ad8c7321a73f2ee4 100644
--- a/projects/rtx_ambient_occlusion/src/main.cpp
+++ b/projects/rtx_ambient_occlusion/src/main.cpp
@@ -12,17 +12,9 @@ int main(int argc, const char** argv) {
 	const std::string applicationName = "RTX Ambient Occlusion";
 	
 	vkcv::Features features;
-	features.requireExtension(VK_KHR_MAINTENANCE3_EXTENSION_NAME);
 	features.requireExtension(VK_KHR_DEFERRED_HOST_OPERATIONS_EXTENSION_NAME);
-	features.requireExtension(VK_KHR_SPIRV_1_4_EXTENSION_NAME);
-	features.requireExtension(VK_KHR_PIPELINE_LIBRARY_EXTENSION_NAME);
 	features.requireExtension(VK_KHR_SWAPCHAIN_EXTENSION_NAME);
 	
-	features.requireExtensionFeature<vk::PhysicalDeviceDescriptorIndexingFeatures>(
-			VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME,
-			[](vk::PhysicalDeviceDescriptorIndexingFeatures& features) {}
-	);
-	
 	features.requireExtensionFeature<vk::PhysicalDeviceBufferDeviceAddressFeatures>(
 			VK_KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME,
 			[](vk::PhysicalDeviceBufferDeviceAddressFeatures& features) {
@@ -54,8 +46,7 @@ int main(int argc, const char** argv) {
 			applicationName,
 			VK_MAKE_VERSION(0, 0, 1),
 			{ vk::QueueFlagBits::eGraphics ,vk::QueueFlagBits::eCompute , vk::QueueFlagBits::eTransfer },
-			features,
-			{ VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME }
+			features
 	);
 
 	vkcv::rtx::ASManager asManager(&core);
diff --git a/src/vkcv/Context.cpp b/src/vkcv/Context.cpp
index 43bf5de20c7db7e4a666efcb968cf9667af41a1f..9a3ef1ffe3df2e094fab4dc4e2d2bee9036b439f 100644
--- a/src/vkcv/Context.cpp
+++ b/src/vkcv/Context.cpp
@@ -465,13 +465,23 @@ namespace vkcv {
 					return features.deviceCoherentMemory;
 				}
 		);
+		
+		const bool bufferDeviceAddress = featureManager.checkFeatures<vk::PhysicalDeviceBufferDeviceAddressFeatures>(
+				vk::StructureType::ePhysicalDeviceBufferDeviceAddressFeatures,
+				[](const vk::PhysicalDeviceBufferDeviceAddressFeatures &features) {
+					return features.bufferDeviceAddress;
+				}
+		);
 
 		vma::AllocatorCreateFlags vmaFlags;
+		
 		if (coherentDeviceMemory) {
 			vmaFlags |= vma::AllocatorCreateFlagBits::eAmdDeviceCoherentMemory;
 		}
 		
-		vmaFlags |= vma::AllocatorCreateFlagBits::eBufferDeviceAddress;
+		if (bufferDeviceAddress) {
+			vmaFlags |= vma::AllocatorCreateFlagBits::eBufferDeviceAddress;
+		}
 		
 		const vma::AllocatorCreateInfo allocatorCreateInfo(
 				vmaFlags,