diff --git a/include/vkcv/ShaderProgram.hpp b/include/vkcv/ShaderProgram.hpp
index 53e75aba696f9da3fd1d60bdd70e657675571427..0a8470a9d13c3531d24887ca4905e795c95de8e6 100644
--- a/include/vkcv/ShaderProgram.hpp
+++ b/include/vkcv/ShaderProgram.hpp
@@ -10,7 +10,7 @@
 #include <iostream>
 #include <filesystem>
 #include <vulkan/vulkan.hpp>
-#include <spirv_glsl.hpp>
+#include <spirv_cross.hpp>
 
 namespace vkcv {
 
diff --git a/projects/first_triangle/src/main.cpp b/projects/first_triangle/src/main.cpp
index 3c3f91de9ac1c4490859559db2bca5bdd089ecfa..84fe7b74c7b231ae3ac7273dbc6e0c6601d3c03f 100644
--- a/projects/first_triangle/src/main.cpp
+++ b/projects/first_triangle/src/main.cpp
@@ -72,6 +72,8 @@ int main(int argc, const char** argv) {
 	vkcv::ShaderProgram triangleShaderProgram{};
 	triangleShaderProgram.addShader(vkcv::ShaderStage::VERTEX, std::filesystem::path("shaders/vert.spv"));
 	triangleShaderProgram.addShader(vkcv::ShaderStage::FRAGMENT, std::filesystem::path("shaders/frag.spv"));
+	triangleShaderProgram.reflectShader(vkcv::ShaderStage::VERTEX);
+    triangleShaderProgram.reflectShader(vkcv::ShaderStage::FRAGMENT);
 
 	const vkcv::PipelineConfig trianglePipelineDefinition(triangleShaderProgram, windowWidth, windowHeight, trianglePass);
 	vkcv::PipelineHandle trianglePipeline = core.createGraphicsPipeline(trianglePipelineDefinition);
diff --git a/src/vkcv/ShaderProgram.cpp b/src/vkcv/ShaderProgram.cpp
index e5569e0024b8735c093a546177a3634ef6d372bc..fce6ea35c4b20b310dd05fd888d38e82c32becb8 100644
--- a/src/vkcv/ShaderProgram.cpp
+++ b/src/vkcv/ShaderProgram.cpp
@@ -62,7 +62,25 @@ namespace vkcv {
 
     void ShaderProgram::reflectShader(ShaderStage shaderStage) const
     {
-        auto shaderCode = m_Shaders.at(shaderStage).shaderCode;
-        //TODO
+        auto shaderCodeChar = m_Shaders.at(shaderStage).shaderCode;
+        std::vector<uint32_t> shaderCode; //convert from char to uint 32. Is this the best way? Prob not.
+
+        for (uint32_t i = 0; i < shaderCodeChar.size(); i++) {
+            shaderCode.push_back((uint32_t) shaderCodeChar[i]);
+        }
+
+        //spirv_cross::Compiler comp(move(shaderCode));
+
+        /*
+        spirv_cross::ShaderResources resources = comp.get_shader_resources();
+
+        //testprint
+        for (auto &u : resources.uniform_buffers)
+        {
+            uint32_t set = comp.get_decoration(u.id, spv::DecorationDescriptorSet);
+            uint32_t binding = comp.get_decoration(u.id, spv::DecorationBinding);
+            std::cout << 'Found UBO ' << &u << ' at set = ' << set << ', binding = ' << binding << std::endl;
+        }
+         */
     }
 }