diff --git a/projects/first_triangle/shaders/shader.frag b/projects/first_triangle/shaders/shader.frag
index 3363876e688e04c0941066b5549ae4fd9b3f507a..d26446a73020111695aa2c86166205796dfa5e44 100644
--- a/projects/first_triangle/shaders/shader.frag
+++ b/projects/first_triangle/shaders/shader.frag
@@ -2,7 +2,6 @@
 #extension GL_ARB_separate_shader_objects : enable
 
 layout(location = 0) in vec3 fragColor;
-
 layout(location = 0) out vec4 outColor;
 
 void main()	{
diff --git a/projects/first_triangle/shaders/shader.vert b/projects/first_triangle/shaders/shader.vert
index 9461e8f207aa283c258adcaff6359655fd62e9bb..246a3661031cc8d4582a12d4c8b91fce4af58cad 100644
--- a/projects/first_triangle/shaders/shader.vert
+++ b/projects/first_triangle/shaders/shader.vert
@@ -2,11 +2,9 @@
 #extension GL_ARB_separate_shader_objects : enable
 
 layout(location = 0) in vec2 inPosition;
-layout(location = 1) in vec3 inColor;
-
 layout(location = 0) out vec3 fragColor;
 
 void main()	{
 	gl_Position = vec4(inPosition, 0.0, 1.0);
-	fragColor = inColor;
+	fragColor = vec3(1);
 }
\ No newline at end of file
diff --git a/projects/first_triangle/shaders/vert.spv b/projects/first_triangle/shaders/vert.spv
index 4e979164bba0448a8d9b7f58356c924163bd6df4..7692f2cf09e53183c613f81db748d798a2e18fab 100644
Binary files a/projects/first_triangle/shaders/vert.spv and b/projects/first_triangle/shaders/vert.spv differ
diff --git a/projects/first_triangle/src/main.cpp b/projects/first_triangle/src/main.cpp
index 5cafedcaf0af5ca82cc10be357b5a8afb9d9d3ed..b1a68c7fabc2519b9533d6d14b1eb9db2c81442c 100644
--- a/projects/first_triangle/src/main.cpp
+++ b/projects/first_triangle/src/main.cpp
@@ -6,11 +6,13 @@
 int main(int argc, const char** argv) {
     const char* applicationName = "First Triangle";
 
+	const int windowWidth = 800;
+	const int windowHeight = 600;
     vkcv::Window window = vkcv::Window::create(
-            applicationName,
-            800,
-            600,
-            false
+		applicationName,
+		windowWidth,
+		windowHeight,
+		false
     );
 
 	vkcv::Core core = vkcv::Core::create(
@@ -56,6 +58,17 @@ int main(int argc, const char** argv) {
 		return EXIT_FAILURE;
 	}
 
+	vkcv::ShaderProgram triangleShaderProgram = vkcv::ShaderProgram::create();
+	triangleShaderProgram.addShader(vkcv::ShaderProgram::ShaderStage::VERTEX, "shaders/vert.spv");
+	triangleShaderProgram.addShader(vkcv::ShaderProgram::ShaderStage::FRAGMENT, "shaders/frag.spv");
+
+	const vkcv::Pipeline trianglePipelineDefinition(triangleShaderProgram, windowWidth, windowHeight, trianglePass);
+	vkcv::PipelineHandle trianglePipeline;
+	if (!core.createGraphicsPipeline(trianglePipelineDefinition, trianglePipeline)) {
+		std::cout << "Error. Could not create graphics pipeline. Exiting." << std::endl;
+		return EXIT_FAILURE;
+	}
+
 	/*
 	 * BufferHandle triangleVertices = core.createBuffer(vertices);
 	 * BufferHandle triangleIndices = core.createBuffer(indices);
diff --git a/src/vkcv/Core.cpp b/src/vkcv/Core.cpp
index c4a473801b2558cb21cc0f958c84746efc145dc2..23afd76937d4a8142bea6906a0792c9f02f87749 100644
--- a/src/vkcv/Core.cpp
+++ b/src/vkcv/Core.cpp
@@ -530,7 +530,7 @@ namespace vkcv
 	}
 
 	bool Core::createGraphicsPipeline(const Pipeline& pipeline, PipelineHandle& handle) {
-
+		
 		// TODO: this search could be avoided if ShaderProgram could be queried for a specific stage
 		const auto shaderStageFlags = pipeline.m_shaderProgram.getShaderStages();
 		const auto shaderCode = pipeline.m_shaderProgram.getShaderCode();
@@ -651,7 +651,7 @@ namespace vkcv
 			{},
 			false,
 			vk::LogicOp::eClear,
-			0,
+			1,	//TODO: hardcoded to one
 			&colorBlendAttachmentState,
 			{ 1.f,1.f,1.f,1.f }
 		);