diff --git a/include/vkcv/Features.hpp b/include/vkcv/Features.hpp
index 3c56eb61d7683c05497a985f86dc47f0a70b8c1a..6ef3fa28be912627b4495c66427336dfaa51beff 100644
--- a/include/vkcv/Features.hpp
+++ b/include/vkcv/Features.hpp
@@ -2,6 +2,7 @@
 
 #include <functional>
 #include <vector>
+#include <initializer_list>
 
 #include "FeatureManager.hpp"
 
@@ -15,8 +16,12 @@ namespace vkcv {
 		
 	public:
 		Features() = default;
+		
+		Features(const std::initializer_list<std::string>& list);
+		
 		Features(const Features& other) = default;
 		Features(Features&& other) = default;
+		
 		~Features() = default;
 		
 		Features& operator=(const Features& other) = default;
diff --git a/projects/first_mesh/src/main.cpp b/projects/first_mesh/src/main.cpp
index f784c13007e59ea2461252b02a24e3d790a58107..8f0e2d1cac253418d278e10382e36e12040cea7f 100644
--- a/projects/first_mesh/src/main.cpp
+++ b/projects/first_mesh/src/main.cpp
@@ -19,15 +19,12 @@ int main(int argc, const char** argv) {
 		true
 	);
 	
-	vkcv::Features features;
-	features.requireExtension(VK_KHR_SWAPCHAIN_EXTENSION_NAME);
-
 	vkcv::Core core = vkcv::Core::create(
 		window,
 		applicationName,
 		VK_MAKE_VERSION(0, 0, 1),
 		{ vk::QueueFlagBits::eGraphics ,vk::QueueFlagBits::eCompute , vk::QueueFlagBits::eTransfer },
-		features
+		{ VK_KHR_SWAPCHAIN_EXTENSION_NAME }
 	);
 
 	vkcv::asset::Scene mesh;
diff --git a/projects/first_scene/src/main.cpp b/projects/first_scene/src/main.cpp
index 6ac367e41906a276e6c739e0242b859eae5b8f15..21f8deacdb3f81fcd29c5f14cbe74485f36d13cd 100644
--- a/projects/first_scene/src/main.cpp
+++ b/projects/first_scene/src/main.cpp
@@ -28,16 +28,13 @@ int main(int argc, const char** argv) {
 	cameraManager.getCamera(camIndex0).setNearFar(0.1f, 30.0f);
 	
 	cameraManager.getCamera(camIndex1).setNearFar(0.1f, 30.0f);
-
-	vkcv::Features features;
-	features.requireExtension(VK_KHR_SWAPCHAIN_EXTENSION_NAME);
 	
 	vkcv::Core core = vkcv::Core::create(
 		window,
 		applicationName,
 		VK_MAKE_VERSION(0, 0, 1),
 		{ vk::QueueFlagBits::eGraphics ,vk::QueueFlagBits::eCompute , vk::QueueFlagBits::eTransfer },
-		features
+		{ VK_KHR_SWAPCHAIN_EXTENSION_NAME }
 	);
 	
 	vkcv::scene::Scene scene = vkcv::scene::Scene::load(core, std::filesystem::path(
diff --git a/projects/first_triangle/src/main.cpp b/projects/first_triangle/src/main.cpp
index de5d345fec7635ea20e7f025f5faed90c35f6cd8..78a7db62f6ffd6d2e3dbd41ea1dace89209315f8 100644
--- a/projects/first_triangle/src/main.cpp
+++ b/projects/first_triangle/src/main.cpp
@@ -17,15 +17,12 @@ int main(int argc, const char** argv) {
 		false
 	);
 	
-	vkcv::Features features;
-	features.requireExtension(VK_KHR_SWAPCHAIN_EXTENSION_NAME);
-
 	vkcv::Core core = vkcv::Core::create(
 		window,
 		applicationName,
 		VK_MAKE_VERSION(0, 0, 1),
 		{ vk::QueueFlagBits::eTransfer,vk::QueueFlagBits::eGraphics, vk::QueueFlagBits::eCompute },
-		features
+		{ VK_KHR_SWAPCHAIN_EXTENSION_NAME }
 	);
 
 	const auto& context = core.getContext();
diff --git a/projects/particle_simulation/src/main.cpp b/projects/particle_simulation/src/main.cpp
index 1aafa57fa343b1c3bcb6571e82bd4b359fd8180e..4de016aefd345a4231ea2dae0818b0839b163729 100644
--- a/projects/particle_simulation/src/main.cpp
+++ b/projects/particle_simulation/src/main.cpp
@@ -23,16 +23,13 @@ int main(int argc, const char **argv) {
     );
 
     vkcv::camera::CameraManager cameraManager(window);
-
-	vkcv::Features features;
-	features.requireExtension(VK_KHR_SWAPCHAIN_EXTENSION_NAME);
 	
     vkcv::Core core = vkcv::Core::create(
             window,
             applicationName,
             VK_MAKE_VERSION(0, 0, 1),
             {vk::QueueFlagBits::eTransfer, vk::QueueFlagBits::eGraphics, vk::QueueFlagBits::eCompute},
-			features
+			{ VK_KHR_SWAPCHAIN_EXTENSION_NAME }
     );
 
     auto particleIndexBuffer = core.createBuffer<uint16_t>(vkcv::BufferType::INDEX, 3,
diff --git a/src/vkcv/Features.cpp b/src/vkcv/Features.cpp
index 636f3f41fd6008a3a33a2212792219dbe39d320f..60616685f67084b6875ce14bf09f524a9127688f 100644
--- a/src/vkcv/Features.cpp
+++ b/src/vkcv/Features.cpp
@@ -3,6 +3,12 @@
 
 namespace vkcv {
 	
+	Features::Features(const std::initializer_list<std::string>& list) : m_features() {
+		for (const auto& extension : list) {
+			requireExtension(extension);
+		}
+	}
+	
 	void Features::requireExtension(const std::string& extension) {
 		m_features.emplace_back([extension](FeatureManager& featureManager) {
 			return featureManager.useExtension(extension, true);