diff --git a/config/Sources.cmake b/config/Sources.cmake
index 46ac4f0096e0584398111ccd15629fbe8a22884d..b51b37b5eb734021663184c813cdb350018999d9 100644
--- a/config/Sources.cmake
+++ b/config/Sources.cmake
@@ -51,14 +51,14 @@ set(vkcv_sources
 		${vkcv_include}/vkcv/ShaderProgram.hpp
 		${vkcv_source}/vkcv/ShaderProgram.cpp
 
-		${vkcv_include}/vkcv/PipelineConfig.hpp
+		${vkcv_include}/vkcv/GraphicsPipelineConfig.hpp
 		${vkcv_include}/vkcv/ComputePipelineConfig.hpp
 
 		${vkcv_source}/vkcv/ComputePipelineManager.hpp
 		${vkcv_source}/vkcv/ComputePipelineManager.cpp
 
-		${vkcv_source}/vkcv/PipelineManager.hpp
-		${vkcv_source}/vkcv/PipelineManager.cpp
+		${vkcv_source}/vkcv/GraphicsPipelineManager.hpp
+		${vkcv_source}/vkcv/GraphicsPipelineManager.cpp
 
         ${vkcv_include}/vkcv/CommandResources.hpp
         ${vkcv_source}/vkcv/CommandResources.cpp
diff --git a/include/vkcv/Core.hpp b/include/vkcv/Core.hpp
index 5ebc6d15e419f0e1eb79c42bdc5857a883594845..b82d2edad914a632c5e2ea1be2d08f56b3a912e4 100644
--- a/include/vkcv/Core.hpp
+++ b/include/vkcv/Core.hpp
@@ -14,7 +14,7 @@
 #include "Handles.hpp"
 #include "Buffer.hpp"
 #include "Image.hpp"
-#include "PipelineConfig.hpp"
+#include "GraphicsPipelineConfig.hpp"
 #include "ComputePipelineConfig.hpp"
 #include "CommandResources.hpp"
 #include "SyncResources.hpp"
@@ -31,7 +31,7 @@ namespace vkcv
 
     // forward declarations
     class PassManager;
-    class PipelineManager;
+    class GraphicsPipelineManager;
     class ComputePipelineManager;
     class DescriptorManager;
     class BufferManager;
@@ -66,14 +66,14 @@ namespace vkcv
         Swapchain                       m_swapchain;
         Window&                   		m_window;
 
-        std::unique_ptr<PassManager>            m_PassManager;
-        std::unique_ptr<PipelineManager>        m_PipelineManager;
-        std::unique_ptr<ComputePipelineManager> m_ComputePipelineManager;
-        std::unique_ptr<DescriptorManager>      m_DescriptorManager;
-        std::unique_ptr<BufferManager>          m_BufferManager;
-        std::unique_ptr<SamplerManager>         m_SamplerManager;
-        std::unique_ptr<ImageManager>           m_ImageManager;
-        std::unique_ptr<CommandStreamManager>   m_CommandStreamManager;
+        std::unique_ptr<PassManager>             m_PassManager;
+        std::unique_ptr<GraphicsPipelineManager> m_PipelineManager;
+        std::unique_ptr<ComputePipelineManager>  m_ComputePipelineManager;
+        std::unique_ptr<DescriptorManager>       m_DescriptorManager;
+        std::unique_ptr<BufferManager>           m_BufferManager;
+        std::unique_ptr<SamplerManager>          m_SamplerManager;
+        std::unique_ptr<ImageManager>            m_ImageManager;
+        std::unique_ptr<CommandStreamManager>    m_CommandStreamManager;
 
 		CommandResources    m_CommandResources;
 		SyncResources       m_SyncResources;
@@ -154,7 +154,7 @@ namespace vkcv
          * @return True if pipeline creation was successful, False if not
          */
         [[nodiscard]]
-        PipelineHandle createGraphicsPipeline(const PipelineConfig &config);
+		GraphicsPipelineHandle createGraphicsPipeline(const GraphicsPipelineConfig &config);
 
         /**
          * Creates a basic vulkan compute pipeline using @p shader program and returns it using the @p handle.
@@ -261,7 +261,7 @@ namespace vkcv
 		void recordDrawcallsToCmdStream(
 			const CommandStreamHandle&      cmdStreamHandle,
 			const PassHandle&               renderpassHandle,
-			const PipelineHandle            pipelineHandle,
+			const GraphicsPipelineHandle    &pipelineHandle,
 			const PushConstants             &pushConstants,
 			const std::vector<DrawcallInfo> &drawcalls,
 			const std::vector<ImageHandle>  &renderTargets);
@@ -269,7 +269,7 @@ namespace vkcv
 		void recordMeshShaderDrawcalls(
 			const CommandStreamHandle&              cmdStreamHandle,
 			const PassHandle&                       renderpassHandle,
-			const PipelineHandle                    pipelineHandle,
+			const GraphicsPipelineHandle            &pipelineHandle,
 			const PushConstants&                    pushConstantData,
             const std::vector<MeshShaderDrawcall>&  drawcalls,
 			const std::vector<ImageHandle>&         renderTargets);
@@ -339,7 +339,8 @@ namespace vkcv
 	
 		void setDebugLabel(const BufferHandle &handle, const std::string &label);
 		void setDebugLabel(const PassHandle &handle, const std::string &label);
-		void setDebugLabel(const PipelineHandle &handle, const std::string &label);
+		void setDebugLabel(const GraphicsPipelineHandle &handle, const std::string &label);
+		void setDebugLabel(const ComputePipelineHandle &handle, const std::string &label);
 		void setDebugLabel(const DescriptorSetHandle &handle, const std::string &label);
 		void setDebugLabel(const SamplerHandle &handle, const std::string &label);
 		void setDebugLabel(const ImageHandle &handle, const std::string &label);
diff --git a/include/vkcv/PipelineConfig.hpp b/include/vkcv/GraphicsPipelineConfig.hpp
similarity index 98%
rename from include/vkcv/PipelineConfig.hpp
rename to include/vkcv/GraphicsPipelineConfig.hpp
index 33a2027bd3ad85c5a8d5058469c5df0d81c184b7..6d466c4aa3893049eb0b3e770c2e4dde6b6199e3 100644
--- a/include/vkcv/PipelineConfig.hpp
+++ b/include/vkcv/GraphicsPipelineConfig.hpp
@@ -22,7 +22,7 @@ namespace vkcv {
     // alternatively we could expose the blend factors directly
     enum class BlendMode{ None, Additive };
 
-    struct PipelineConfig {
+    struct GraphicsPipelineConfig {
         ShaderProgram                         	m_ShaderProgram;
         uint32_t                              	m_Width;
 		uint32_t                              	m_Height;
diff --git a/include/vkcv/Handles.hpp b/include/vkcv/Handles.hpp
index 437a5606b8895c82deb12884a5ca9d0ef1994313..4a1df5852adc0fc8fe924041cb7879ec0e376001 100644
--- a/include/vkcv/Handles.hpp
+++ b/include/vkcv/Handles.hpp
@@ -73,8 +73,8 @@ namespace vkcv
 		using Handle::Handle;
 	};
 	
-	class PipelineHandle : public Handle {
-		friend class PipelineManager;
+	class GraphicsPipelineHandle : public Handle {
+		friend class GraphicsPipelineManager;
 	private:
 		using Handle::Handle;
 	};
diff --git a/modules/scene/include/vkcv/scene/Scene.hpp b/modules/scene/include/vkcv/scene/Scene.hpp
index 429c0bcf729f9afb7dd76cdd58c54931862e1a4a..b0afec4819105e4a27f7e6a635cb9ca70b0db2c5 100644
--- a/modules/scene/include/vkcv/scene/Scene.hpp
+++ b/modules/scene/include/vkcv/scene/Scene.hpp
@@ -58,7 +58,7 @@ namespace vkcv::scene {
 		void recordDrawcalls(CommandStreamHandle       		  &cmdStream,
 							 const camera::Camera			  &camera,
 							 const PassHandle                 &pass,
-							 const PipelineHandle             &pipeline,
+							 const GraphicsPipelineHandle     &pipeline,
 							 size_t							  pushConstantsSizePerDrawcall,
 							 const RecordMeshDrawcallFunction &record,
 							 const std::vector<ImageHandle>   &renderTargets);
diff --git a/modules/scene/src/vkcv/scene/Scene.cpp b/modules/scene/src/vkcv/scene/Scene.cpp
index c0065af5928d9ad2e2c9afd1a1ea44c35d94d799..0cb4efd2c50e6d013f817949241476e848b4a151 100644
--- a/modules/scene/src/vkcv/scene/Scene.cpp
+++ b/modules/scene/src/vkcv/scene/Scene.cpp
@@ -112,7 +112,7 @@ namespace vkcv::scene {
 	void Scene::recordDrawcalls(CommandStreamHandle       		 &cmdStream,
 								const camera::Camera			 &camera,
 								const PassHandle                 &pass,
-								const PipelineHandle             &pipeline,
+								const GraphicsPipelineHandle     &pipeline,
 								size_t							 pushConstantsSizePerDrawcall,
 								const RecordMeshDrawcallFunction &record,
 								const std::vector<ImageHandle>   &renderTargets) {
diff --git a/projects/first_mesh/src/main.cpp b/projects/first_mesh/src/main.cpp
index a87c95447b24d19faff6c00356cdcb57348a257e..c1bce3dbd6315cd7014f4dcfb1df821f871c58f3 100644
--- a/projects/first_mesh/src/main.cpp
+++ b/projects/first_mesh/src/main.cpp
@@ -113,7 +113,7 @@ int main(int argc, const char** argv) {
 
 	vkcv::DescriptorSetHandle descriptorSet = core.createDescriptorSet(setLayoutHandle);
 
-	const vkcv::PipelineConfig firstMeshPipelineConfig {
+	const vkcv::GraphicsPipelineConfig firstMeshPipelineConfig {
         firstMeshProgram,
         UINT32_MAX,
         UINT32_MAX,
@@ -122,7 +122,7 @@ int main(int argc, const char** argv) {
 		{ core.getDescriptorSetLayout(setLayoutHandle).vulkanHandle },
 		true
 	};
-	vkcv::PipelineHandle firstMeshPipeline = core.createGraphicsPipeline(firstMeshPipelineConfig);
+	vkcv::GraphicsPipelineHandle firstMeshPipeline = core.createGraphicsPipeline(firstMeshPipelineConfig);
 	
 	if (!firstMeshPipeline) {
 		std::cerr << "Error. Could not create graphics pipeline. Exiting." << std::endl;
diff --git a/projects/first_scene/src/main.cpp b/projects/first_scene/src/main.cpp
index 37cefd3323c9ef13a4124450d9f08c76c9661836..c7d4fcac5aa1748b9407b003eba3f35f418169f3 100644
--- a/projects/first_scene/src/main.cpp
+++ b/projects/first_scene/src/main.cpp
@@ -81,7 +81,7 @@ int main(int argc, const char** argv) {
 	
 	const auto& material0 = scene.getMaterial(0);
 
-	const vkcv::PipelineConfig scenePipelineDefinition{
+	const vkcv::GraphicsPipelineConfig scenePipelineDefinition{
 		sceneShaderProgram,
 		UINT32_MAX,
 		UINT32_MAX,
@@ -89,7 +89,7 @@ int main(int argc, const char** argv) {
 		{sceneLayout},
 		{ core.getDescriptorSetLayout(material0.getDescriptorSetLayout()).vulkanHandle },
 		true };
-	vkcv::PipelineHandle scenePipeline = core.createGraphicsPipeline(scenePipelineDefinition);
+	vkcv::GraphicsPipelineHandle scenePipeline = core.createGraphicsPipeline(scenePipelineDefinition);
 	
 	if (!scenePipeline) {
 		std::cout << "Error. Could not create graphics pipeline. Exiting." << std::endl;
diff --git a/projects/first_triangle/src/main.cpp b/projects/first_triangle/src/main.cpp
index 1bfb2edca776eafac9a94422f87d0401e698fa82..b083af4a9f4578ea62888d3be9139928204d67ac 100644
--- a/projects/first_triangle/src/main.cpp
+++ b/projects/first_triangle/src/main.cpp
@@ -61,7 +61,7 @@ int main(int argc, const char** argv) {
 	
 	const auto swapchainExtent = core.getSwapchain().getExtent();
 
-	const vkcv::PipelineConfig trianglePipelineDefinition {
+	const vkcv::GraphicsPipelineConfig trianglePipelineDefinition {
 		triangleShaderProgram,
 		swapchainExtent.width,
 		swapchainExtent.height,
@@ -71,7 +71,7 @@ int main(int argc, const char** argv) {
 		false
 	};
 
-	vkcv::PipelineHandle trianglePipeline = core.createGraphicsPipeline(trianglePipelineDefinition);
+	vkcv::GraphicsPipelineHandle trianglePipeline = core.createGraphicsPipeline(trianglePipelineDefinition);
 
 	if (!trianglePipeline)
 	{
diff --git a/projects/indirect_dispatch/src/AppSetup.cpp b/projects/indirect_dispatch/src/AppSetup.cpp
index 00eea0fa34c139e9ecc911c5f6ced05716c9edb9..e1b29ad5990d371535794fa72a1d80e2b653045b 100644
--- a/projects/indirect_dispatch/src/AppSetup.cpp
+++ b/projects/indirect_dispatch/src/AppSetup.cpp
@@ -131,7 +131,7 @@ bool loadGraphicPass(
 	}
 
 
-	vkcv::PipelineConfig pipelineConfig{
+	vkcv::GraphicsPipelineConfig pipelineConfig{
 		shaderProgram,
 		UINT32_MAX,
 		UINT32_MAX,
diff --git a/projects/indirect_dispatch/src/AppSetup.hpp b/projects/indirect_dispatch/src/AppSetup.hpp
index f3839d0893b435694af7d35b0def794484a8b0b9..b0ade4317b125fea581016bf9924cd740a443c35 100644
--- a/projects/indirect_dispatch/src/AppSetup.hpp
+++ b/projects/indirect_dispatch/src/AppSetup.hpp
@@ -8,7 +8,7 @@ struct AppRenderTargets {
 };
 
 struct GraphicPassHandles {
-	vkcv::PipelineHandle                pipeline;
+	vkcv::GraphicsPipelineHandle        pipeline;
 	vkcv::PassHandle                    renderPass;
 	vkcv::DescriptorSetLayoutHandle     descriptorSetLayout;
 	vkcv::DescriptorSetHandle           descriptorSet;
diff --git a/projects/mesh_shader/src/main.cpp b/projects/mesh_shader/src/main.cpp
index c3f9210d371cc56a4220c094186faa51490da678..6c3bc2f40090c87ae967499e4ff53bf0af81b9ff 100644
--- a/projects/mesh_shader/src/main.cpp
+++ b/projects/mesh_shader/src/main.cpp
@@ -208,7 +208,7 @@ int main(int argc, const char** argv) {
 
 	auto swapchainExtent = core.getSwapchain().getExtent();
 	
-	const vkcv::PipelineConfig bunnyPipelineDefinition {
+	const vkcv::GraphicsPipelineConfig bunnyPipelineDefinition {
 			bunnyShaderProgram,
 			swapchainExtent.width,
 			swapchainExtent.height,
@@ -229,7 +229,7 @@ int main(int argc, const char** argv) {
 	vertexShaderDescriptorWrites.storageBufferWrites = { vkcv::BufferDescriptorWrite(0, matrixBuffer.getHandle()) };
 	core.writeDescriptorSet(vertexShaderDescriptorSet, vertexShaderDescriptorWrites);
 
-	vkcv::PipelineHandle bunnyPipeline = core.createGraphicsPipeline(bunnyPipelineDefinition);
+	vkcv::GraphicsPipelineHandle bunnyPipeline = core.createGraphicsPipeline(bunnyPipelineDefinition);
 
 	if (!bunnyPipeline)
 	{
@@ -258,7 +258,7 @@ int main(int argc, const char** argv) {
 	vkcv::DescriptorSetHandle meshShaderDescriptorSet = core.createDescriptorSet(meshShaderDescriptorSetLayout);
 	const vkcv::VertexLayout meshShaderLayout(bindings);
 
-	const vkcv::PipelineConfig meshShaderPipelineDefinition{
+	const vkcv::GraphicsPipelineConfig meshShaderPipelineDefinition{
 		meshShaderProgram,
 		swapchainExtent.width,
 		swapchainExtent.height,
@@ -268,7 +268,7 @@ int main(int argc, const char** argv) {
 		false
 	};
 
-	vkcv::PipelineHandle meshShaderPipeline = core.createGraphicsPipeline(meshShaderPipelineDefinition);
+	vkcv::GraphicsPipelineHandle meshShaderPipeline = core.createGraphicsPipeline(meshShaderPipelineDefinition);
 
 	if (!meshShaderPipeline)
 	{
diff --git a/projects/particle_simulation/src/main.cpp b/projects/particle_simulation/src/main.cpp
index 52356612682111c6e9aab89a04821d0cb73ffe54..ff249e4e8efe2ca60c7773d32a66a05d12f06c3a 100644
--- a/projects/particle_simulation/src/main.cpp
+++ b/projects/particle_simulation/src/main.cpp
@@ -119,7 +119,7 @@ int main(int argc, const char **argv) {
 
     const vkcv::VertexLayout particleLayout(bindings);
 
-    vkcv::PipelineConfig particlePipelineDefinition{
+    vkcv::GraphicsPipelineConfig particlePipelineDefinition{
             particleShaderProgram,
             UINT32_MAX,
             UINT32_MAX,
@@ -135,7 +135,7 @@ int main(int argc, const char **argv) {
 
     vertexBuffer.fill(vertices);
 
-    vkcv::PipelineHandle particlePipeline = core.createGraphicsPipeline(particlePipelineDefinition);
+    vkcv::GraphicsPipelineHandle particlePipeline = core.createGraphicsPipeline(particlePipelineDefinition);
 
     vkcv::ComputePipelineHandle computePipeline = core.createComputePipeline({ computeShaderProgram, {core.getDescriptorSetLayout(computeDescriptorSetLayout).vulkanHandle} });
 
diff --git a/projects/voxelization/src/ShadowMapping.cpp b/projects/voxelization/src/ShadowMapping.cpp
index 3e55f0bb2ca1db9360bb007aa6ad472899d8c0f4..55fb781c52049fd18722f263033d78f7e0e9bebd 100644
--- a/projects/voxelization/src/ShadowMapping.cpp
+++ b/projects/voxelization/src/ShadowMapping.cpp
@@ -166,7 +166,7 @@ ShadowMapping::ShadowMapping(vkcv::Core* corePtr, const vkcv::VertexLayout& vert
 	m_shadowMapPass = corePtr->createPass(shadowPassConfig);
 
 	// pipeline
-	vkcv::PipelineConfig shadowPipeConfig{
+	vkcv::GraphicsPipelineConfig shadowPipeConfig{
 		shadowShader,
 		shadowMapResolution,
 		shadowMapResolution,
diff --git a/projects/voxelization/src/ShadowMapping.hpp b/projects/voxelization/src/ShadowMapping.hpp
index 9543daf61265ceaf0ea0658d6c9225842966af75..3a577a75c6a374fb41bf02056efe64eef331fcdc 100644
--- a/projects/voxelization/src/ShadowMapping.hpp
+++ b/projects/voxelization/src/ShadowMapping.hpp
@@ -43,7 +43,7 @@ private:
 	vkcv::Buffer<LightInfo>             m_lightInfoBuffer;
 
 	vkcv::PassHandle                    m_shadowMapPass;
-	vkcv::PipelineHandle                m_shadowMapPipe;
+	vkcv::GraphicsPipelineHandle        m_shadowMapPipe;
 
 	vkcv::ComputePipelineHandle         m_depthToMomentsPipe;
 	vkcv::DescriptorSetLayoutHandle     m_depthToMomentsDescriptorSetLayout;
diff --git a/projects/voxelization/src/Voxelization.cpp b/projects/voxelization/src/Voxelization.cpp
index 013f8c0e2c91d669eeeb40d1dc6a5acaeb7e9ec5..668dc8596951356e97535f09d9a74d8d15ae2003 100644
--- a/projects/voxelization/src/Voxelization.cpp
+++ b/projects/voxelization/src/Voxelization.cpp
@@ -104,7 +104,7 @@ Voxelization::Voxelization(
 	vkcv::DescriptorSetLayoutHandle dummyPerMeshDescriptorSetLayout = m_corePtr->createDescriptorSetLayout(voxelizationShader.getReflectedDescriptors().at(1));
 	vkcv::DescriptorSetHandle dummyPerMeshDescriptorSet = m_corePtr->createDescriptorSet(dummyPerMeshDescriptorSetLayout);
 
-	const vkcv::PipelineConfig voxelizationPipeConfig{
+	const vkcv::GraphicsPipelineConfig voxelizationPipeConfig{
 		voxelizationShader,
 		voxelResolution,
 		voxelResolution,
@@ -150,7 +150,7 @@ Voxelization::Voxelization(
 	voxelVisualisationPassDefinition.msaa = msaa;
 	m_visualisationPass = m_corePtr->createPass(voxelVisualisationPassDefinition);
 
-	vkcv::PipelineConfig voxelVisualisationPipeConfig{
+	vkcv::GraphicsPipelineConfig voxelVisualisationPipeConfig{
 		voxelVisualisationShader,
 		0,
 		0,
diff --git a/projects/voxelization/src/Voxelization.hpp b/projects/voxelization/src/Voxelization.hpp
index c1724510b01a146d9c01ca41baeb8d20b22117ce..c099581a527045a7cb51e4de144f3c181fee53b1 100644
--- a/projects/voxelization/src/Voxelization.hpp
+++ b/projects/voxelization/src/Voxelization.hpp
@@ -55,7 +55,7 @@ private:
 
 	vkcv::Image                         m_dummyRenderTarget;
 	vkcv::PassHandle                    m_voxelizationPass;
-	vkcv::PipelineHandle                m_voxelizationPipe;
+	vkcv::GraphicsPipelineHandle        m_voxelizationPipe;
 	vkcv::DescriptorSetLayoutHandle     m_voxelizationDescriptorSetLayout;
 	vkcv::DescriptorSetHandle           m_voxelizationDescriptorSet;
 
@@ -68,7 +68,7 @@ private:
 	vkcv::DescriptorSetHandle           m_bufferToImageDescriptorSet;
 
 	vkcv::PassHandle                    m_visualisationPass;
-	vkcv::PipelineHandle                m_visualisationPipe;
+	vkcv::GraphicsPipelineHandle        m_visualisationPipe;
 
 	vkcv::ComputePipelineHandle         m_secondaryBouncePipe;
 	vkcv::DescriptorSetLayoutHandle     m_secondaryBounceDescriptorSetLayout;
diff --git a/projects/voxelization/src/main.cpp b/projects/voxelization/src/main.cpp
index 58bde04fc6f07e5903e2d955c691c2ec8263a9a8..795acb1795e7d9242fe9e9c4969a8833cb8c1175 100644
--- a/projects/voxelization/src/main.cpp
+++ b/projects/voxelization/src/main.cpp
@@ -303,7 +303,7 @@ int main(int argc, const char** argv) {
 
 	auto swapchainExtent = core.getSwapchain().getExtent();
 	
-	vkcv::PipelineConfig prepassPipelineConfig{
+	vkcv::GraphicsPipelineConfig prepassPipelineConfig{
 		depthPrepassShader,
 		swapchainExtent.width,
 		swapchainExtent.height,
@@ -318,10 +318,10 @@ int main(int argc, const char** argv) {
 	prepassPipelineConfig.m_depthTest       = vkcv::DepthTest::LessEqual;
 	prepassPipelineConfig.m_alphaToCoverage = true;
 
-	vkcv::PipelineHandle prepassPipeline = core.createGraphicsPipeline(prepassPipelineConfig);
+	vkcv::GraphicsPipelineHandle prepassPipeline = core.createGraphicsPipeline(prepassPipelineConfig);
 
 	// forward pipeline
-	vkcv::PipelineConfig forwardPipelineConfig {
+	vkcv::GraphicsPipelineConfig forwardPipelineConfig {
 		forwardProgram,
 		swapchainExtent.width,
 		swapchainExtent.height,
@@ -337,7 +337,7 @@ int main(int argc, const char** argv) {
 	forwardPipelineConfig.m_depthTest       = vkcv::DepthTest::Equal;
 	forwardPipelineConfig.m_depthWrite      = false;
 	
-	vkcv::PipelineHandle forwardPipeline = core.createGraphicsPipeline(forwardPipelineConfig);
+	vkcv::GraphicsPipelineHandle forwardPipeline = core.createGraphicsPipeline(forwardPipelineConfig);
 	
 	if (!forwardPipeline) {
 		std::cout << "Error. Could not create graphics pipeline. Exiting." << std::endl;
@@ -376,7 +376,7 @@ int main(int argc, const char** argv) {
 		skyShader.addShader(shaderStage, path);
 	});
 
-	vkcv::PipelineConfig skyPipeConfig;
+	vkcv::GraphicsPipelineConfig skyPipeConfig;
 	skyPipeConfig.m_ShaderProgram       = skyShader;
 	skyPipeConfig.m_Width               = swapchainExtent.width;
 	skyPipeConfig.m_Height              = swapchainExtent.height;
@@ -387,7 +387,7 @@ int main(int argc, const char** argv) {
 	skyPipeConfig.m_multisampling       = msaa;
 	skyPipeConfig.m_depthWrite          = false;
 
-	vkcv::PipelineHandle skyPipe = core.createGraphicsPipeline(skyPipeConfig);
+	vkcv::GraphicsPipelineHandle skyPipe = core.createGraphicsPipeline(skyPipeConfig);
 
 	// render targets
 	vkcv::ImageHandle depthBuffer           = core.createImage(
@@ -961,7 +961,7 @@ int main(int argc, const char** argv) {
 					newForwardProgram.addShader(shaderStage, path);
 				});
 				forwardPipelineConfig.m_ShaderProgram = newForwardProgram;
-				vkcv::PipelineHandle newPipeline = core.createGraphicsPipeline(forwardPipelineConfig);
+				vkcv::GraphicsPipelineHandle newPipeline = core.createGraphicsPipeline(forwardPipelineConfig);
 
 				if (newPipeline) {
 					forwardPipeline = newPipeline;
diff --git a/src/vkcv/Core.cpp b/src/vkcv/Core.cpp
index 47be399a0578478367348fc4b91d01618535b886..e55fb9cb53a001f71e756e0f2d04195e9e237f6d 100644
--- a/src/vkcv/Core.cpp
+++ b/src/vkcv/Core.cpp
@@ -8,7 +8,7 @@
 
 #include "vkcv/Core.hpp"
 #include "PassManager.hpp"
-#include "PipelineManager.hpp"
+#include "GraphicsPipelineManager.hpp"
 #include "ComputePipelineManager.hpp"
 #include "vkcv/BufferManager.hpp"
 #include "SamplerManager.hpp"
@@ -94,7 +94,7 @@ namespace vkcv
 			m_swapchain(swapChain),
             m_window(window),
             m_PassManager{std::make_unique<PassManager>(m_Context.m_Device)},
-            m_PipelineManager{std::make_unique<PipelineManager>(m_Context.m_Device)},
+            m_PipelineManager{std::make_unique<GraphicsPipelineManager>(m_Context.m_Device)},
             m_ComputePipelineManager{std::make_unique<ComputePipelineManager>(m_Context.m_Device)},
             m_DescriptorManager(std::make_unique<DescriptorManager>(m_Context.m_Device)),
             m_BufferManager{std::unique_ptr<BufferManager>(new BufferManager())},
@@ -135,8 +135,8 @@ namespace vkcv
 		m_Context.m_Device.destroySwapchainKHR(m_swapchain.getSwapchain());
 		m_Context.m_Instance.destroySurfaceKHR(m_swapchain.getSurface());
 	}
-
-    PipelineHandle Core::createGraphicsPipeline(const PipelineConfig &config)
+	
+	GraphicsPipelineHandle Core::createGraphicsPipeline(const GraphicsPipelineConfig &config)
     {
         return m_PipelineManager->createPipeline(config, *m_PassManager);
     }
@@ -331,7 +331,7 @@ namespace vkcv
 	void Core::recordDrawcallsToCmdStream(
 		const CommandStreamHandle&      cmdStreamHandle,
 		const PassHandle&               renderpassHandle,
-		const PipelineHandle            pipelineHandle, 
+		const GraphicsPipelineHandle    &pipelineHandle,
         const PushConstants             &pushConstantData,
         const std::vector<DrawcallInfo> &drawcalls,
 		const std::vector<ImageHandle>  &renderTargets) {
@@ -373,7 +373,7 @@ namespace vkcv
 
 			cmdBuffer.bindPipeline(vk::PipelineBindPoint::eGraphics, pipeline, {});
 
-			const PipelineConfig &pipeConfig = m_PipelineManager->getPipelineConfig(pipelineHandle);
+			const GraphicsPipelineConfig &pipeConfig = m_PipelineManager->getPipelineConfig(pipelineHandle);
 			if (pipeConfig.m_UseDynamicViewport) {
 				recordDynamicViewport(cmdBuffer, width, height);
 			}
@@ -396,7 +396,7 @@ namespace vkcv
 	void Core::recordMeshShaderDrawcalls(
 		const CommandStreamHandle&                          cmdStreamHandle,
 		const PassHandle&                                   renderpassHandle,
-		const PipelineHandle                                pipelineHandle,
+		const GraphicsPipelineHandle                        &pipelineHandle,
 		const PushConstants&                                pushConstantData,
 		const std::vector<MeshShaderDrawcall>&              drawcalls,
 		const std::vector<ImageHandle>&                     renderTargets) {
@@ -438,7 +438,7 @@ namespace vkcv
 
 			cmdBuffer.bindPipeline(vk::PipelineBindPoint::eGraphics, pipeline, {});
 
-			const PipelineConfig& pipeConfig = m_PipelineManager->getPipelineConfig(pipelineHandle);
+			const GraphicsPipelineConfig& pipeConfig = m_PipelineManager->getPipelineConfig(pipelineHandle);
 			if (pipeConfig.m_UseDynamicViewport) {
 				recordDynamicViewport(cmdBuffer, width, height);
 			}
@@ -924,7 +924,7 @@ namespace vkcv
 		);
 	}
 	
-	void Core::setDebugLabel(const PipelineHandle &handle, const std::string &label) {
+	void Core::setDebugLabel(const GraphicsPipelineHandle &handle, const std::string &label) {
 		if (!handle) {
 			vkcv_log(LogLevel::WARNING, "Can't set debug label to invalid handle");
 			return;
@@ -940,6 +940,22 @@ namespace vkcv
 		);
 	}
 	
+	void Core::setDebugLabel(const ComputePipelineHandle &handle, const std::string &label) {
+		if (!handle) {
+			vkcv_log(LogLevel::WARNING, "Can't set debug label to invalid handle");
+			return;
+		}
+		
+		setDebugObjectLabel(
+				m_Context.getDevice(),
+				vk::ObjectType::ePipeline,
+				uint64_t(static_cast<VkPipeline>(
+								 m_ComputePipelineManager->getVkPipeline(handle)
+						 )),
+				label
+		);
+	}
+	
 	void Core::setDebugLabel(const DescriptorSetHandle &handle, const std::string &label) {
 		if (!handle) {
 			vkcv_log(LogLevel::WARNING, "Can't set debug label to invalid handle");
diff --git a/src/vkcv/PipelineManager.cpp b/src/vkcv/GraphicsPipelineManager.cpp
similarity index 92%
rename from src/vkcv/PipelineManager.cpp
rename to src/vkcv/GraphicsPipelineManager.cpp
index 7705c7c4d614b1ea245607c196637fe9f466c083..cb7dd31dddd3a5c0742f95e8429175724aa26454 100644
--- a/src/vkcv/PipelineManager.cpp
+++ b/src/vkcv/GraphicsPipelineManager.cpp
@@ -1,16 +1,16 @@
-#include "PipelineManager.hpp"
+#include "GraphicsPipelineManager.hpp"
 #include "vkcv/Image.hpp"
 #include "vkcv/Logger.hpp"
 
 namespace vkcv
 {
-
-    PipelineManager::PipelineManager(vk::Device device) noexcept :
+	
+	GraphicsPipelineManager::GraphicsPipelineManager(vk::Device device) noexcept :
             m_Device{device},
             m_Pipelines{}
     {}
-
-    PipelineManager::~PipelineManager() noexcept
+	
+	GraphicsPipelineManager::~GraphicsPipelineManager() noexcept
     {
         for (uint64_t id = 0; id < m_Pipelines.size(); id++) {
             destroyPipelineById(id);
@@ -135,7 +135,7 @@ namespace vkcv
 			std::vector<vk::VertexInputAttributeDescription> &vertexAttributeDescriptions,
 			std::vector<vk::VertexInputBindingDescription>   &vertexBindingDescriptions,
 			const bool existsVertexShader,
-			const PipelineConfig &config) {
+			const GraphicsPipelineConfig &config) {
 		
 		if (existsVertexShader) {
 			const VertexLayout& layout = config.m_VertexLayout;
@@ -184,7 +184,7 @@ namespace vkcv
 	 * @param config provides data for primitive topology.
 	 * @return Pipeline Input Assembly State Create Info Struct
 	 */
-	vk::PipelineInputAssemblyStateCreateInfo createPipelineInputAssemblyStateCreateInfo(const PipelineConfig &config) {
+	vk::PipelineInputAssemblyStateCreateInfo createPipelineInputAssemblyStateCreateInfo(const GraphicsPipelineConfig &config) {
 		vk::PipelineInputAssemblyStateCreateInfo pipelineInputAssemblyStateCreateInfo(
 				{},
 				primitiveTopologyToVulkanPrimitiveTopology(config.m_PrimitiveTopology),
@@ -199,7 +199,7 @@ namespace vkcv
 	 * @param config provides with and height of the output window
 	 * @return Pipeline Viewport State Create Info Struct
 	 */
-	vk::PipelineViewportStateCreateInfo createPipelineViewportStateCreateInfo(const PipelineConfig &config) {
+	vk::PipelineViewportStateCreateInfo createPipelineViewportStateCreateInfo(const GraphicsPipelineConfig &config) {
 		static vk::Viewport viewport;
 		static vk::Rect2D scissor;
 		
@@ -237,7 +237,7 @@ namespace vkcv
 	 * @param config sets Depth Clamping and Culling Mode
 	 * @return Pipeline Rasterization State Create Info Struct
 	 */
-	vk::PipelineRasterizationStateCreateInfo createPipelineRasterizationStateCreateInfo(const PipelineConfig &config) {
+	vk::PipelineRasterizationStateCreateInfo createPipelineRasterizationStateCreateInfo(const GraphicsPipelineConfig &config) {
 		vk::CullModeFlags cullMode;
 		switch (config.m_culling) {
 			case CullMode::None:
@@ -288,7 +288,7 @@ namespace vkcv
 	 * @param config set MSAA Sample Count Flag
 	 * @return Pipeline Multisample State Create Info Struct
 	 */
-	vk::PipelineMultisampleStateCreateInfo createPipelineMultisampleStateCreateInfo(const PipelineConfig &config) {
+	vk::PipelineMultisampleStateCreateInfo createPipelineMultisampleStateCreateInfo(const GraphicsPipelineConfig &config) {
 		vk::PipelineMultisampleStateCreateInfo pipelineMultisampleStateCreateInfo(
 				{},
 				msaaToVkSampleCountFlag(config.m_multisampling),
@@ -308,7 +308,7 @@ namespace vkcv
 	 * @param config sets blend mode
 	 * @return
 	 */
-	vk::PipelineColorBlendStateCreateInfo createPipelineColorBlendStateCreateInfo(const PipelineConfig &config) {
+	vk::PipelineColorBlendStateCreateInfo createPipelineColorBlendStateCreateInfo(const GraphicsPipelineConfig &config) {
 		// currently set to additive, if not disabled
 		// BlendFactors must be set as soon as additional BlendModes are added
 		static vk::PipelineColorBlendAttachmentState colorBlendAttachmentState (
@@ -344,7 +344,7 @@ namespace vkcv
 	 * @param config sets Push Constant Size and Descriptor Layouts.
 	 * @return Pipeline Layout Create Info Struct
 	 */
-	vk::PipelineLayoutCreateInfo createPipelineLayoutCreateInfo(const PipelineConfig &config) {
+	vk::PipelineLayoutCreateInfo createPipelineLayoutCreateInfo(const GraphicsPipelineConfig &config) {
 		static vk::PushConstantRange pushConstantRange;
 		
 		const size_t pushConstantSize = config.m_ShaderProgram.getPushConstantSize();
@@ -370,7 +370,7 @@ namespace vkcv
 	 * @param config sets if depth test in enabled or not.
 	 * @return Pipeline Layout Create Info Struct
 	 */
-	vk::PipelineDepthStencilStateCreateInfo createPipelineDepthStencilStateCreateInfo(const PipelineConfig &config) {
+	vk::PipelineDepthStencilStateCreateInfo createPipelineDepthStencilStateCreateInfo(const GraphicsPipelineConfig &config) {
 		const vk::PipelineDepthStencilStateCreateInfo pipelineDepthStencilCreateInfo(
 				vk::PipelineDepthStencilStateCreateFlags(),
 				config.m_depthTest != DepthTest::None,
@@ -392,7 +392,7 @@ namespace vkcv
 	 * @param config sets whenever a dynamic viewport is used or not.
 	 * @return Pipeline Dynamic State Create Info Struct
 	 */
-	vk::PipelineDynamicStateCreateInfo createPipelineDynamicStateCreateInfo(const PipelineConfig &config) {
+	vk::PipelineDynamicStateCreateInfo createPipelineDynamicStateCreateInfo(const GraphicsPipelineConfig &config) {
 		static std::vector<vk::DynamicState> dynamicStates;
 		dynamicStates.clear();
 		
@@ -410,7 +410,7 @@ namespace vkcv
 		return dynamicStateCreateInfo;
 	}
 
-    PipelineHandle PipelineManager::createPipeline(const PipelineConfig &config, PassManager& passManager) {
+    GraphicsPipelineHandle GraphicsPipelineManager::createPipeline(const GraphicsPipelineConfig &config, PassManager& passManager) {
         const vk::RenderPass &pass = passManager.getVkPass(config.m_PassHandle);
 
         const bool existsTaskShader     = config.m_ShaderProgram.existsShader(ShaderStage::TASK);
@@ -423,12 +423,12 @@ namespace vkcv
         if (!validGeometryStages)
         {
             vkcv_log(LogLevel::ERROR, "Requires vertex or task and mesh shader");
-            return PipelineHandle();
+            return GraphicsPipelineHandle();
         }
 
         if (!existsFragmentShader) {
             vkcv_log(LogLevel::ERROR, "Requires fragment shader code");
-            return PipelineHandle();
+            return GraphicsPipelineHandle();
         }
 
         std::vector<vk::PipelineShaderStageCreateInfo> shaderStages;
@@ -452,7 +452,7 @@ namespace vkcv
             }
             else {
                 destroyShaderModules();
-                return PipelineHandle();
+                return GraphicsPipelineHandle();
             }
         }
 
@@ -469,7 +469,7 @@ namespace vkcv
             }
             else {
                 destroyShaderModules();
-                return PipelineHandle();
+                return GraphicsPipelineHandle();
             }
         }
 
@@ -486,7 +486,7 @@ namespace vkcv
             }
             else {
                 destroyShaderModules();
-                return PipelineHandle();
+                return GraphicsPipelineHandle();
             }
         }
 
@@ -503,7 +503,7 @@ namespace vkcv
             }
             else {
                 destroyShaderModules();
-                return PipelineHandle();
+                return GraphicsPipelineHandle();
             }
         }
 
@@ -520,7 +520,7 @@ namespace vkcv
             }
             else {
                 destroyShaderModules();
-                return PipelineHandle();
+                return GraphicsPipelineHandle();
             }
         }
 
@@ -566,7 +566,7 @@ namespace vkcv
         vk::PipelineLayout vkPipelineLayout{};
         if (m_Device.createPipelineLayout(&pipelineLayoutCreateInfo, nullptr, &vkPipelineLayout) != vk::Result::eSuccess) {
             destroyShaderModules();
-            return PipelineHandle();
+            return GraphicsPipelineHandle();
         }
 
         // Depth Stencil
@@ -610,7 +610,7 @@ namespace vkcv
             // Catch runtime error if the creation of the pipeline fails.
             // Destroy everything to keep the memory clean.
             destroyShaderModules();
-            return PipelineHandle();
+            return GraphicsPipelineHandle();
         }
 
         // Clean Up
@@ -619,10 +619,10 @@ namespace vkcv
         // Hand over Handler to main Application
         const uint64_t id = m_Pipelines.size();
         m_Pipelines.push_back({ vkPipeline, vkPipelineLayout, config });
-        return PipelineHandle(id, [&](uint64_t id) { destroyPipelineById(id); });
+        return GraphicsPipelineHandle(id, [&](uint64_t id) { destroyPipelineById(id); });
     }
 
-    vk::Pipeline PipelineManager::getVkPipeline(const PipelineHandle &handle) const
+    vk::Pipeline GraphicsPipelineManager::getVkPipeline(const GraphicsPipelineHandle &handle) const
     {
         const uint64_t id = handle.getId();
 
@@ -635,7 +635,7 @@ namespace vkcv
         return pipeline.m_handle;
     }
 
-    vk::PipelineLayout PipelineManager::getVkPipelineLayout(const PipelineHandle &handle) const
+    vk::PipelineLayout GraphicsPipelineManager::getVkPipelineLayout(const GraphicsPipelineHandle &handle) const
     {
         const uint64_t id = handle.getId();
 
@@ -648,7 +648,7 @@ namespace vkcv
         return pipeline.m_layout;
     }
 
-    void PipelineManager::destroyPipelineById(uint64_t id) {
+    void GraphicsPipelineManager::destroyPipelineById(uint64_t id) {
         if (id >= m_Pipelines.size()) {
             return;
         }
@@ -666,12 +666,12 @@ namespace vkcv
         }
     }
 
-    const PipelineConfig& PipelineManager::getPipelineConfig(const PipelineHandle &handle) const
+    const GraphicsPipelineConfig& GraphicsPipelineManager::getPipelineConfig(const GraphicsPipelineHandle &handle) const
     {
         const uint64_t id = handle.getId();
 
         if (id >= m_Pipelines.size()) {
-            static PipelineConfig dummyConfig;
+            static GraphicsPipelineConfig dummyConfig;
             vkcv_log(LogLevel::ERROR, "Invalid handle");
             return dummyConfig;
         }
diff --git a/src/vkcv/PipelineManager.hpp b/src/vkcv/GraphicsPipelineManager.hpp
similarity index 62%
rename from src/vkcv/PipelineManager.hpp
rename to src/vkcv/GraphicsPipelineManager.hpp
index c71cb034a7eb7c7a71d4df3941d481d03db9ae95..a08e64939dc967511095f22862c52de05148d7e9 100644
--- a/src/vkcv/PipelineManager.hpp
+++ b/src/vkcv/GraphicsPipelineManager.hpp
@@ -11,23 +11,23 @@
 #include <vulkan/vulkan.hpp>
 #include <vector>
 #include "vkcv/Handles.hpp"
-#include "vkcv/PipelineConfig.hpp"
+#include "vkcv/GraphicsPipelineConfig.hpp"
 #include "PassManager.hpp"
 
 namespace vkcv
 {
-    class PipelineManager
+    class GraphicsPipelineManager
     {
     public:
-        PipelineManager() = delete; // no default ctor
-        explicit PipelineManager(vk::Device device) noexcept; // ctor
-        ~PipelineManager() noexcept; // dtor
-
-        PipelineManager(const PipelineManager &other) = delete; // copy-ctor
-        PipelineManager(PipelineManager &&other) = delete; // move-ctor;
-
-        PipelineManager & operator=(const PipelineManager &other) = delete; // copy-assign op
-        PipelineManager & operator=(PipelineManager &&other) = delete; // move-assign op
+		GraphicsPipelineManager() = delete; // no default ctor
+        explicit GraphicsPipelineManager(vk::Device device) noexcept; // ctor
+        ~GraphicsPipelineManager() noexcept; // dtor
+	
+		GraphicsPipelineManager(const GraphicsPipelineManager &other) = delete; // copy-ctor
+		GraphicsPipelineManager(GraphicsPipelineManager &&other) = delete; // move-ctor;
+	
+		GraphicsPipelineManager & operator=(const GraphicsPipelineManager &other) = delete; // copy-assign op
+		GraphicsPipelineManager & operator=(GraphicsPipelineManager &&other) = delete; // move-assign op
 
         /**
          * Creates a Graphics Pipeline based on the set shader stages in the Config Struct.
@@ -38,7 +38,7 @@ namespace vkcv
          * @param passManager Hands over the corresponding render pass.
          * @return A Handler to the created Graphics Pipeline Object.
          */
-        PipelineHandle createPipeline(const PipelineConfig &config, PassManager& passManager);
+		GraphicsPipelineHandle createPipeline(const GraphicsPipelineConfig &config, PassManager& passManager);
 
         /**
          * Returns a vk::Pipeline object by handle.
@@ -46,7 +46,7 @@ namespace vkcv
          * @return vk::Pipeline.
          */
         [[nodiscard]]
-        vk::Pipeline getVkPipeline(const PipelineHandle &handle) const;
+        vk::Pipeline getVkPipeline(const GraphicsPipelineHandle &handle) const;
 
         /**
          * Returns a vk::PipelineLayout object by handle.
@@ -54,7 +54,7 @@ namespace vkcv
          * @return vk::PipelineLayout.
          */
         [[nodiscard]]
-        vk::PipelineLayout getVkPipelineLayout(const PipelineHandle &handle) const;
+        vk::PipelineLayout getVkPipelineLayout(const GraphicsPipelineHandle &handle) const;
 
         /**
          * Returns the corresponding Pipeline Config Struct of a pipeline object directed by the given Handler.
@@ -62,17 +62,17 @@ namespace vkcv
          * @return Pipeline Config Struct
          */
         [[nodiscard]]
-        const PipelineConfig &getPipelineConfig(const PipelineHandle &handle) const;
+        const GraphicsPipelineConfig &getPipelineConfig(const GraphicsPipelineHandle &handle) const;
 
     private:
-        struct Pipeline {
+        struct GraphicsPipeline {
             vk::Pipeline m_handle;
             vk::PipelineLayout m_layout;
-            PipelineConfig m_config;
+			GraphicsPipelineConfig m_config;
         };
 
         vk::Device m_Device;
-        std::vector<Pipeline> m_Pipelines;
+        std::vector<GraphicsPipeline> m_Pipelines;
 
         void destroyPipelineById(uint64_t id);