diff --git a/modules/material/include/vkcv/material/Material.hpp b/modules/material/include/vkcv/material/Material.hpp
index fe7a250aa1e914fe4c675d1b89896f00a412fcb5..00b492072fa4ef8b7b41f70202d515ee4ac828fa 100644
--- a/modules/material/include/vkcv/material/Material.hpp
+++ b/modules/material/include/vkcv/material/Material.hpp
@@ -1,10 +1,14 @@
 #pragma once
+#include <vkcv/Handles.hpp>
 
 namespace vkcv::material {
 
 	class Material {
 	private:
 	public:
+		const DescriptorSetHandle m_DescriptorSetHandle;
+	protected:
+		Material(const DescriptorSetHandle& setHandle); 
 	};
 	
 }
diff --git a/modules/material/include/vkcv/material/pbrMetallicRoughness.hpp b/modules/material/include/vkcv/material/pbrMetallicRoughness.hpp
index 35fb50169c8d4af326747d1d00de4a15645666f6..353143b70aa29b4588799c3f679d7df9a2502b45 100644
--- a/modules/material/include/vkcv/material/pbrMetallicRoughness.hpp
+++ b/modules/material/include/vkcv/material/pbrMetallicRoughness.hpp
@@ -2,7 +2,6 @@
 
 #include <vector>
 
-#include <vkcv/Handles.hpp>
 #include <vkcv/DescriptorConfig.hpp>
 #include <vkcv/Core.hpp>
 
@@ -13,15 +12,17 @@ namespace vkcv::material
 {
     class PBRMaterial : Material
     {
+    private:
+        PBRMaterial(const ImageHandle& colorImg,
+            const SamplerHandle& colorSmp,
+            const ImageHandle& normalImg,
+            const SamplerHandle& normalSmp,
+            const ImageHandle& metRoughImg,
+            const SamplerHandle& metRoughSmp,
+            const DescriptorSetHandle& setHandle) noexcept;
     public:
         PBRMaterial() = delete;
-        PBRMaterial(const ImageHandle           &colorImg,
-                    const SamplerHandle         &colorSmp,
-                    const ImageHandle           &normalImg,
-                    const SamplerHandle         &normalSmp,
-                    const ImageHandle           &metRoughImg,
-                    const SamplerHandle         &metRoughSmp,
-                    const DescriptorSetHandle   &setHandle) noexcept;
+       
 
         const ImageHandle   m_ColorTexture;
         const SamplerHandle m_ColorSampler;
@@ -35,8 +36,6 @@ namespace vkcv::material
         // ImageHandle m_OcclusionTexture;
         // SamplerHandle m_EmissiveTexture;
 
-        const DescriptorSetHandle m_DescriptorSetHandle;
-
         /*
         * Returns the material's necessary descriptor bindings which serves as its descriptor layout
         * The binding is in the following order:
diff --git a/modules/material/src/vkcv/material/Material.cpp b/modules/material/src/vkcv/material/Material.cpp
index 373c46feef1173476b80e3fd2fa916cb76a33623..9168bcfbf924e9868ceaaff74aef5d3c6b99739c 100644
--- a/modules/material/src/vkcv/material/Material.cpp
+++ b/modules/material/src/vkcv/material/Material.cpp
@@ -5,4 +5,8 @@ namespace vkcv::material {
 
 	//TODO
 
+	Material::Material(const DescriptorSetHandle& setHandle) : m_DescriptorSetHandle(setHandle)
+	{
+	}
+
 }
diff --git a/modules/material/src/vkcv/material/pbrMetallicRoughness.cpp b/modules/material/src/vkcv/material/pbrMetallicRoughness.cpp
index 05481b5275f6a6c8e86e1923d01c7999cc004617..034702360db512669254127b4e86fb4730fb24ad 100644
--- a/modules/material/src/vkcv/material/pbrMetallicRoughness.cpp
+++ b/modules/material/src/vkcv/material/pbrMetallicRoughness.cpp
@@ -17,7 +17,7 @@ namespace vkcv::material
         m_NormalSampler(normalSmp),
         m_MetRoughTexture(metRoughImg),
         m_MetRoughSampler(metRoughSmp),
-        m_DescriptorSetHandle(setHandle)
+        Material(setHandle)        
     {
     }