diff --git a/src/vkcv/Context.cpp b/src/vkcv/Context.cpp
index c83ec0b75cfae17b72291e6ca41f24a6e9f3e7b4..75d409d7ad396206a7b7ad0db0fe775fa82986f3 100644
--- a/src/vkcv/Context.cpp
+++ b/src/vkcv/Context.cpp
@@ -261,6 +261,33 @@ namespace vkcv
 		
 		FeatureManager featureManager (physicalDevice);
 		
+		if (featureManager.useExtension(VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME, false)) {
+			featureManager.useFeatures<vk::PhysicalDeviceShaderFloat16Int8Features>(
+					[](vk::PhysicalDeviceShaderFloat16Int8Features& features) {
+				features.setShaderFloat16(true);
+			}, false);
+		}
+		
+		if (featureManager.useExtension(VK_KHR_16BIT_STORAGE_EXTENSION_NAME, false)) {
+			featureManager.useFeatures<vk::PhysicalDevice16BitStorageFeatures>(
+					[](vk::PhysicalDevice16BitStorageFeatures& features) {
+				features.setStorageBuffer16BitAccess(true);
+			}, false);
+		}
+		
+		featureManager.useFeatures([](vk::PhysicalDeviceFeatures& features) {
+			features.setFragmentStoresAndAtomics(true);
+			features.setGeometryShader(true);
+			features.setDepthClamp(true);
+			features.setShaderInt16(true);
+		});
+		
+		for (const auto& extension : deviceExtensions) {
+			featureManager.useExtension(extension);
+		}
+		
+		const auto& extensions = featureManager.getActiveExtensions();
+		
 		std::vector<vk::DeviceQueueCreateInfo> qCreateInfos;
 		
 		// create required queues
@@ -276,9 +303,9 @@ namespace vkcv
 				qCreateInfos.data(),
 				0,
 				nullptr,
-				deviceExtensions.size(),
-				deviceExtensions.data(),
-				nullptr		// Should our device use some features??? If yes: TODO
+				extensions.size(),
+				extensions.data(),
+				nullptr
 		);
 
 #ifndef NDEBUG
@@ -286,33 +313,14 @@ namespace vkcv
 		deviceCreateInfo.ppEnabledLayerNames = validationLayers.data();
 #endif
 		
-		if (featureManager.useExtension(VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME, false)) {
-			featureManager.useFeatures<vk::PhysicalDeviceShaderFloat16Int8Features>(
-			[](vk::PhysicalDeviceShaderFloat16Int8Features& features) {
-				features.setShaderFloat16(true);
-			}, false);
-		}
-		
-		if (featureManager.useExtension(VK_KHR_16BIT_STORAGE_EXTENSION_NAME, false)) {
-			featureManager.useFeatures<vk::PhysicalDevice16BitStorageFeatures>(
-			[](vk::PhysicalDevice16BitStorageFeatures& features) {
-				features.setStorageBuffer16BitAccess(true);
-			}, false);
-		}
-		
-		featureManager.useFeatures([](vk::PhysicalDeviceFeatures& features) {
-			features.setFragmentStoresAndAtomics(true);
-			features.setGeometryShader(true);
-			features.setDepthClamp(true);
-			features.setShaderInt16(true);
-		});
-		
-		if (featureManager.useExtension(VK_NV_MESH_SHADER_EXTENSION_NAME, false)) {
-			featureManager.useFeatures<vk::PhysicalDeviceMeshShaderFeaturesNV>(
-			[](vk::PhysicalDeviceMeshShaderFeaturesNV& features) {
-				features.setTaskShader(true);
-				features.setMeshShader(true);
-			}, false);
+		for (const auto& extension : deviceExtensions) {
+			if (0 == strcmp(extension, VK_NV_MESH_SHADER_EXTENSION_NAME)) {
+				featureManager.useFeatures<vk::PhysicalDeviceMeshShaderFeaturesNV>(
+						[](vk::PhysicalDeviceMeshShaderFeaturesNV& features) {
+					features.setTaskShader(true);
+					features.setMeshShader(true);
+				});
+			}
 		}
 		
 		deviceCreateInfo.setPNext(&(featureManager.getFeatures()));