diff --git a/modules/rtx/src/vkcv/rtx/RTX.cpp b/modules/rtx/src/vkcv/rtx/RTX.cpp
index 309a7155d226f9081e3c086b5eec08b76dd14881..56178d1b6efff4a3ecb2fcf0c34ff3a5820c4945 100644
--- a/modules/rtx/src/vkcv/rtx/RTX.cpp
+++ b/modules/rtx/src/vkcv/rtx/RTX.cpp
@@ -80,7 +80,7 @@ namespace vkcv::rtx {
         vk::WriteDescriptorSet tlasWrite2;
         tlasWrite2.setPNext(&AccelerationDescriptor);
         tlasWrite2.setDstSet(m_core->getDescriptorSet(descriptorSetHandles[2]).vulkanHandle);
-        tlasWrite2.setDstBinding(1);
+        tlasWrite2.setDstBinding(5);
         tlasWrite2.setDstArrayElement(0);
         tlasWrite2.setDescriptorCount(1);
         tlasWrite2.setDescriptorType(vk::DescriptorType::eAccelerationStructureKHR);
diff --git a/projects/rtx/resources/shaders/raytrace.rgen b/projects/rtx/resources/shaders/raytrace.rgen
index f1ccbfc429c410e833c7e7aa5c764ee4f1901753..f2dfc052fdb0741c5a7d3db71c0a466c23b4c73d 100644
--- a/projects/rtx/resources/shaders/raytrace.rgen
+++ b/projects/rtx/resources/shaders/raytrace.rgen
@@ -5,10 +5,10 @@
 // A location for a ray payload (we can have multiple of these)
 //layout(location = 0) rayPayloadEXT RayPayload pay;
 
-layout(binding = 0, set = 0, rgba32f) uniform image2D outImg;           // the output image -> maybe use 16 bit values?
+layout(binding = 0, set = 0, rgba16) uniform image2D outImg;           // the output image -> maybe use 16 bit values?
 layout(binding = 1, set = 0) uniform accelerationStructureEXT tlas;     // top level acceleration structure (for the noobs here (you!))
-/*
-layout( push_constant ) uniform constants {     // TODO: add push_constants in main.cpp!
+
+layout( push_constant ) uniform constants {
     vec4 camera_position;   // as origin for ray generation
     vec4 camera_right;      // for computing ray direction
     vec4 camera_up;         // for computing ray direction
@@ -16,9 +16,11 @@ layout( push_constant ) uniform constants {     // TODO: add push_constants in m
 
     uint frameCount;        // what is this? the actual frame?
 };
-*/
 
-void main() {
-    // TODO
-    int a = 42;
-}
\ No newline at end of file
+void main(){
+    int i = 42;
+
+    vec3 color = vec3(1,0,0);
+    ivec2 coord = ivec2(1,1);
+    imageStore(outImg, coord, vec4(color, 1));
+}
diff --git a/projects/rtx/resources/shaders/raytrace.rmiss b/projects/rtx/resources/shaders/raytrace.rmiss
index 02bffd442417ea025d9086b6d1503ee2d4e10f73..c4848df9e119c6c399649e9c9519600d327ebf23 100644
--- a/projects/rtx/resources/shaders/raytrace.rmiss
+++ b/projects/rtx/resources/shaders/raytrace.rmiss
@@ -1,7 +1,7 @@
 #version 460
 #extension GL_EXT_ray_tracing : require
 
-layout(binding = 1, set = 0) uniform accelerationStructureEXT tlas; 
+layout(binding = 5, set = 0) uniform accelerationStructureEXT tlas; 
 
 void main() {
     int c = 42;
diff --git a/src/vkcv/Core.cpp b/src/vkcv/Core.cpp
index 7e071bd14fa931e482279f71e50df4f34241d52c..7db67a0c1ec50699e73872a6e7c07459200e5aea 100644
--- a/src/vkcv/Core.cpp
+++ b/src/vkcv/Core.cpp
@@ -441,24 +441,30 @@ namespace vkcv
 			vk::DeviceSize closestHitOffset = 2 * shaderGroupBaseAlignment;
 			vk::DeviceSize shaderBindingTableSize = shaderGroupBaseAlignment * 3; //3 hardcoded to rtx-shader count
 
+			auto m_rtxDispatcher = vk::DispatchLoaderDynamic((PFN_vkGetInstanceProcAddr)m_Context.getInstance().getProcAddr("vkGetInstanceProcAddr"));
+			m_rtxDispatcher.init(m_Context.getInstance());
+
 			vk::StridedDeviceAddressRegionKHR rgenRegion;
 			vk::BufferDeviceAddressInfoKHR shaderBindingTableAddressInfo(shaderBindingTable);
-			rgenRegion.deviceAddress = m_Context.getDevice().getBufferAddressKHR(shaderBindingTableAddressInfo) + rayGenOffset;
+			rgenRegion.deviceAddress = m_Context.getDevice().getBufferAddressKHR(shaderBindingTableAddressInfo, m_rtxDispatcher) + rayGenOffset;
 			rgenRegion.setStride(shaderBindingTableSize);
 			rgenRegion.setSize(shaderBindingTableSize);
 			vk::StridedDeviceAddressRegionKHR rmissRegion;
-			rmissRegion.deviceAddress = m_Context.getDevice().getBufferAddressKHR(shaderBindingTableAddressInfo) + missOffset;
+			rmissRegion.deviceAddress = m_Context.getDevice().getBufferAddressKHR(shaderBindingTableAddressInfo, m_rtxDispatcher) + missOffset;
 			rmissRegion.setStride(shaderBindingTableSize);
 			rmissRegion.setSize(shaderBindingTableSize);
 			vk::StridedDeviceAddressRegionKHR rchitRegion;
-			rchitRegion.deviceAddress = m_Context.getDevice().getBufferAddressKHR(shaderBindingTableAddressInfo) + closestHitOffset;
+			rchitRegion.deviceAddress = m_Context.getDevice().getBufferAddressKHR(shaderBindingTableAddressInfo, m_rtxDispatcher) + closestHitOffset;
 			rchitRegion.setStride(shaderBindingTableSize);
 			rchitRegion.setSize(shaderBindingTableSize);
 			vk::StridedDeviceAddressRegionKHR rcallRegion = {};
 
+
 			cmdBuffer.traceRaysKHR(&rgenRegion,&rmissRegion,&rchitRegion,&rcallRegion,
-									getWindow(windowHandle).getWidth(), getWindow(windowHandle).getHeight(),1);
+									getWindow(windowHandle).getWidth(), getWindow(windowHandle).getHeight(),1, m_rtxDispatcher);
+
 		};
+		recordCommandsToStream(cmdStreamHandle, submitFunction, nullptr);
     }
 
 	void Core::recordComputeDispatchToCmdStream(