diff --git a/demo/main.cpp b/demo/main.cpp
index f88542897ff80168a37b2f3cef876e9931c4a1ad..263624ae07b76cf94c4c040737c3dac8cc5edf32 100644
--- a/demo/main.cpp
+++ b/demo/main.cpp
@@ -190,6 +190,14 @@ void process_freecam(fggl::gfx::Window& window, fggl::ecs::ECS& ecs, fggl::gfx::
 	camComp->target = pivot;
 }
 
+void loadShader(fggl::gfx::ShaderCache& cache, const char* name, bool hasGeom) {
+	fggl::gfx::ShaderConfig config;
+	config.name = name;
+	config.vertex = config.name + "_vert.glsl";
+	config.fragment = config.name + "_frag.glsl";
+	cache.load(config);
+}
+
 int main(int argc, char* argv[]) {
 	fggl::gfx::Context ctx;
 
@@ -214,27 +222,9 @@ int main(int argc, char* argv[]) {
 	CameraHacks hacks{win, fggl::gfx::Input::instance()};
 
 	fggl::gfx::ShaderCache cache(storage);
-
-	fggl::gfx::ShaderConfig config;
-	config.name = "unlit";
-	config.vertex = "unlit_vert.glsl";
-	config.fragment = "unlit_frag.glsl";
-	auto shader = cache.load(config);
-
-	fggl::gfx::ShaderConfig configPhong;
-	configPhong.name = "phong";
-	configPhong.vertex = configPhong.name + "_vert.glsl";
-	configPhong.fragment = configPhong.name + "_frag.glsl";
-	//	configPhong.fragment = configPhong.name + "_normals_frag.glsl";
-	auto shaderPhong = cache.load(configPhong);
-
-	fggl::gfx::ShaderConfig configNormals;
-	configNormals.name = "normals";
-	configNormals.hasGeom = true;
-	configNormals.vertex = configNormals.name + "_vert.glsl";
-	configNormals.geometry = configNormals.name + "_geom.glsl";
-	configNormals.fragment = configNormals.name + "_frag.glsl";
-	auto shaderNormals = cache.load( configNormals );
+	loadShader(cache, "unlit", false);
+	loadShader(cache, "phong", false);
+	loadShader(cache, "normals", true);
 
 	// create ECS
 	fggl::ecs2::World world;
@@ -288,7 +278,7 @@ int main(int argc, char* argv[]) {
 
 		// upload mesh to GPU and get a rendering token
 		auto token = meshRenderer.upload( mesh );
-		token.pipeline = shaderPhong;
+		token.pipeline = cache.get("phong");
 
 		// add the rendering token to the prototype
 		bunkerPrototype.set<fggl::components::GfxToken>( token );