diff --git a/modules/shader_compiler/config/Shady.cmake b/modules/shader_compiler/config/Shady.cmake
index 92dd334df2367552822fed448528fff98f93a3c3..88e1f7b32de08c233901111fa89b371e86d1f0de 100644
--- a/modules/shader_compiler/config/Shady.cmake
+++ b/modules/shader_compiler/config/Shady.cmake
@@ -7,6 +7,11 @@ if (${shady_status})
 
 	add_subdirectory(${vkcv_shader_compiler_lib}/shady)
 	
-	list(APPEND vkcv_shader_compiler_libraries shady)
+	if (vkcv_build_attribute EQUAL "SHARED")
+		list(APPEND vkcv_shader_compiler_libraries shady runtime)
+	else ()
+		list(APPEND vkcv_shader_compiler_libraries common driver)
+	endif ()
+
 	list(APPEND vkcv_shader_compiler_includes ${vkcv_shader_compiler_lib}/shady/include)
 endif ()
diff --git a/modules/shader_compiler/lib/shady b/modules/shader_compiler/lib/shady
index 2e72e345035166d7fd2a0b94610cfc8fd603155b..0a92cf7ff4081d21db0724a8e66ab868b878df7d 160000
--- a/modules/shader_compiler/lib/shady
+++ b/modules/shader_compiler/lib/shady
@@ -1 +1 @@
-Subproject commit 2e72e345035166d7fd2a0b94610cfc8fd603155b
+Subproject commit 0a92cf7ff4081d21db0724a8e66ab868b878df7d
diff --git a/modules/shader_compiler/src/vkcv/shader/LLVMCompiler.cpp b/modules/shader_compiler/src/vkcv/shader/LLVMCompiler.cpp
index 04435ae6b1580bfb783df67439f2810e9365fa77..c53904d402efd7117b6fc73356284624445c4f5c 100644
--- a/modules/shader_compiler/src/vkcv/shader/LLVMCompiler.cpp
+++ b/modules/shader_compiler/src/vkcv/shader/LLVMCompiler.cpp
@@ -4,7 +4,9 @@
 #include <vkcv/File.hpp>
 #include <vkcv/Logger.hpp>
 
-#include <shady/driver.h>
+extern "C" {
+	#include <shady/driver.h>
+}
 
 namespace vkcv::shader {
 
@@ -87,10 +89,7 @@ namespace vkcv::shader {
 			return false;
 		}
 
-		bool result = shadyCompileModule(module, shaderStage, shaderSource, compiled, includePath);
-
-		destroy_module(module);
-		return result;
+		return shadyCompileModule(module, shaderStage, shaderSource, compiled, includePath);
 	}
 
     bool LLVMCompiler::compileSource(ShaderStage shaderStage,
diff --git a/modules/shader_compiler/src/vkcv/shader/ShadyCompiler.cpp b/modules/shader_compiler/src/vkcv/shader/ShadyCompiler.cpp
index 13319e2282dfd240caee4d3646edc51a15fa4f1f..6168fcfa2baa04b8a7f261db8828bfab8c2ed018 100644
--- a/modules/shader_compiler/src/vkcv/shader/ShadyCompiler.cpp
+++ b/modules/shader_compiler/src/vkcv/shader/ShadyCompiler.cpp
@@ -4,8 +4,6 @@
 #include <vkcv/File.hpp>
 #include <vkcv/Logger.hpp>
 
-#include <shady/driver.h>
-
 namespace vkcv::shader {
 	
 	ShadyCompiler::ShadyCompiler()
diff --git a/modules/shader_compiler/src/vkcv/shader/SlimCompiler.cpp b/modules/shader_compiler/src/vkcv/shader/SlimCompiler.cpp
index 940ae7009d3426dc67a50bace829aad6e256cfcd..475d867b883d82a5c811e7ea1081b8fc45dfa0c6 100644
--- a/modules/shader_compiler/src/vkcv/shader/SlimCompiler.cpp
+++ b/modules/shader_compiler/src/vkcv/shader/SlimCompiler.cpp
@@ -4,7 +4,9 @@
 #include <vkcv/File.hpp>
 #include <vkcv/Logger.hpp>
 
-#include <shady/driver.h>
+extern "C" {
+	#include <shady/driver.h>
+}
 
 namespace vkcv::shader {
 
@@ -87,10 +89,7 @@ namespace vkcv::shader {
 			return false;
 		}
 
-		bool result = shadyCompileModule(module, shaderStage, shaderSource, compiled, includePath);
-
-		destroy_module(module);
-		return result;
+		return shadyCompileModule(module, shaderStage, shaderSource, compiled, includePath);
 	}
 
     bool SlimCompiler::compileSource(ShaderStage shaderStage,
diff --git a/projects/first_triangle/src/main.cpp b/projects/first_triangle/src/main.cpp
index aae046da7f84bcf26017f5fe609732aa2e0e4df7..995c6aa34a359aa83e0f838cdb8e3226a3e80cfd 100644
--- a/projects/first_triangle/src/main.cpp
+++ b/projects/first_triangle/src/main.cpp
@@ -2,6 +2,7 @@
 #include <vkcv/Core.hpp>
 #include <vkcv/Pass.hpp>
 #include <GLFW/glfw3.h>
+#include <vkcv/ShaderProgram.hpp>
 #include <vkcv/camera/CameraManager.hpp>
 #include <vkcv/shader/GLSLCompiler.hpp>
 
@@ -38,7 +39,7 @@ int main(int argc, const char** argv) {
 	vkcv::shader::GLSLCompiler compiler;
 	
 	compiler.compileProgram(triangleShaderProgram, {
-		{vkcv::ShaderStage::VERTEX, "shaders/shader.vert"},
+		{ vkcv::ShaderStage::VERTEX, "shaders/shader.vert" },
 		{ vkcv::ShaderStage::FRAGMENT, "shaders/shader.frag" }
 	}, nullptr);