diff --git a/src/handlers/button_handler.cpp b/src/handlers/button_handler.cpp
index 1a23c8a6bfba1d1f9c4fc93afcac12b5f0633746..df4837f22521d342ef963d8b48bbe9645942ccb5 100644
--- a/src/handlers/button_handler.cpp
+++ b/src/handlers/button_handler.cpp
@@ -37,7 +37,6 @@ namespace mak {
         // Set object color
         // Figure out a way to change 
         //gfx::object_system()->get_material(object_folder)->set_uniform("color", color);
-        gfx::object_system()->get_uniforms(object_folder)->find<com::FileVec3>("material_ambient_color")->set(color);
     }
 
 }
\ No newline at end of file
diff --git a/src/presenter.cpp b/src/presenter.cpp
index 2094b4eec822c89418090cc41e8fc849763c12c1..8b9d671f8ce9a12fa4a06d0b4d5408d2393bea47 100644
--- a/src/presenter.cpp
+++ b/src/presenter.cpp
@@ -26,6 +26,15 @@ Presenter::Presenter()
 Presenter::~Presenter()
 {}
 
+com::Folder* ambient_light() {
+    static com::Folder *ambient_light = nullptr;
+
+    if (ambient_light == nullptr)
+        ambient_light = gfx::light_system()->insert_light<gfx::AmbientLight>(
+            { gfx::AmbientLight::glsl::u_name(), "ambient" }, nullptr, vec3{ 0.1, 1, 0.5 });
+    return ambient_light;
+}
+
 static const std::string default_vertex_shader = R"(
 #version 330 core
 
@@ -51,7 +60,6 @@ void main()
 }
 )";
 
-
 void Presenter::initialize()
 {
     osi::presenters()->push_back<com::Folder>("maker")->push_back<com::Link>(self_name() + ".link", this);
@@ -60,13 +68,23 @@ void Presenter::initialize()
                                                                                      default_vertex_shader, default_fragment_shader);
 
     Graph* default_shader = dynamic_cast<Graph*>(gfx::shader_system()->default_shader());
-    //auto tex_coords = default_shader->insert<Graph::NodeVaryingTexcoord>();
-    //auto specular = default_shader->insert<Graph::TextureNode>(
-        //com::ContextPath{ "age", "texture", "font", "Consolas_16.png" });
-    //default_shader->connect(specular, Graph::TextureNode::inputs::tex_coord, tex_coords, 0);
+
+    // Create a new shader graph
+    auto shader = gfx::shader_system()->insert_shader<Graph>(
+        { "text_shaders" },
+        "consolas_shader",
+        Graph::UNLIT
+        );
+
+    Graph::TextureNode* textureNode = shader->insert<Graph::TextureNode>(com::ContextPath{"age", "texture", "font", "Consolas_16.png"});
+    Graph::NodeVaryingTexcoord* uvCoordNode = shader->insert<Graph::NodeVaryingTexcoord>();
+
+    shader->connect(textureNode, Graph::TextureNode::inputs::tex_coord, uvCoordNode, 0);
+
+    shader->connect(shader->root(), Graph::MasterNodeUnlit::inputs::color, textureNode, 0);
 
     gfx::Material* tex_material = gfx::material_system()->insert_material("box_material", text_shader, {"materials"});
-    gfx::Material* text_material = gfx::material_system()->insert_material("text_material", default_shader, {"materials"});
+    gfx::Material* consolas_material = gfx::material_system()->insert_material("consolas_material", shader, {"materials"});
 
     gfx::MonoFontProps font_props;
     gfx::load_font_mono_props(std::filesystem::canonical(osi::data()->dir()) / "age"/ "font" / "Consolas_16.txt", font_props);
@@ -81,48 +99,65 @@ void Presenter::initialize()
         );
 
     // --- BEGIN test_box ---
-    //com::Folder* const test_box = gfx::object_system()->insert_object(
-            //{ "maker", "test_box" },
-            //tex_material,
-            //gfx::buffer_generators()->insert_procedural_box_solid({ 0.5f, 0.5f, 0.5f } , "test_box", { "maker" })
-            //);
-    //gfx::object_system()->push_frame_back(
-        //test_box ,
-        //root()->push_back<com::Folder>("test_box")->push_back<com::Frame>()
-        //);
-    //gfx::object_system()->get_uniforms(test_box)->push_back<com::FileVec3>("material_ambient_color", vec3{ 0.75f, 0.75f, 0 });
-
-    //// The second instance
-    //com::Frame* const frame2 = root()->push_back<com::Folder>("test_box_2")->push_back<com::Frame>();
-    //frame2->move_origin({ 0.5f, 0, 1.5f });
-    //gfx::object_system()->push_frame_back(test_box, frame2);
+    com::Folder* const test_box = gfx::object_system()->insert_object(
+            { "maker", "test_box" },
+            tex_material,
+            gfx::buffer_generators()->insert_procedural_box_solid({ 0.5f, 0.5f, 0.5f } , "test_box", { "maker" })
+            );
+    gfx::object_system()->push_frame_back(
+        test_box ,
+        root()->push_back<com::Folder>("test_box")->push_back<com::Frame>()
+        );
+    gfx::object_system()->get_uniforms(test_box)->push_back<com::FileVec3>("material_ambient_color", vec3{ 0.75f, 0.75f, 0 });
+
+    // The second instance
+    com::Frame* const frame2 = root()->push_back<com::Folder>("test_box_2")->push_back<com::Frame>();
+    frame2->move_origin({ 0.5f, 0, 1.5f });
+    gfx::object_system()->push_frame_back(test_box, frame2);
 
     // --- END test_box ---
 
     // UI
     
     // Create gfx/ui/ and maker/ui/ folders
-    gfx::UiElement* ui_elem1 = gfx::ui_system()->insert_element("ui_elem1");
-    gfx::UiElement* ui_elem2 = gfx::ui_system()->insert_element("ui_elem2");
+    gfx::Button* ui_elem1 = gfx::ui_generators()->create_ui_button("ui_elem1", {});
+    gfx::Button* ui_elem2 = gfx::ui_generators()->create_ui_button("ui_elem2", {});
     com::Folder* ui_elem_folder1 = root()->push_back<com::Folder>(ui_elem1->name());
     com::Folder* ui_elem_folder2 = root()->push_back<com::Folder>(ui_elem2->name());
     gfx::ui_system()->set_parent(ui_elem1, camera_frame());
     gfx::ui_system()->set_parent(ui_elem2, camera_frame());
 
-    // Create buffer
-    gfx::Buffer* ui_buffer = gfx::buffer_generators()->insert_procedural_rectangle({ 1.0f, 1.0f }, "ui_buffer", { "ui" });
-    gfx::Buffer* ui_text_buffer = gfx::buffer_generators()->insert_procedural_text_rectangle("01234", font_props, 10000.0f);
-
     // Set variables
-    gfx::ui_system()->get_transform(ui_elem1)->set_position(vec2{ 0.03f, 0.02f});
-    gfx::ui_system()->get_transform(ui_elem1)->set_scale(vec2{ 0.01f, 0.005f});
+    gfx::ui_system()->get_transform(ui_elem1)->set_position(vec2{ 5.0f, 5.0f });
+    gfx::ui_system()->get_transform(ui_elem1)->set_scale(vec2{ 0.25f, 0.35f});
 
     gfx::ui_system()->get_transform(ui_elem2)->set_position(vec2{ -0.03f, 0.04f});
-    gfx::ui_system()->get_transform(ui_elem2)->set_scale(vec2{ 0.01f, 0.005f});
+    gfx::ui_system()->get_transform(ui_elem2)->set_scale(vec2{ 0.01f, 0.05f});
+
+    // Create buffer
+    gfx::Buffer* ui_buffer = gfx::buffer_generators()->insert_procedural_rectangle({ 1.0f, 1.0f }, "ui_buffer", { "ui" });
+    gfx::Buffer* ui_text_buffer1 = gfx::buffer_generators()->insert_procedural_text_rectangle(
+        "01234",
+        font_props,
+        gfx::ui_system()->get_transform(ui_elem1)->get_aabb().hi.x - gfx::ui_system()->get_transform(ui_elem1)->get_aabb().lo.x,
+        255U,
+        true,
+        true,
+        "button_1_text"
+    );
+    gfx::Buffer* ui_text_buffer2 = gfx::buffer_generators()->insert_procedural_text_rectangle(
+        "01234",
+        font_props,
+        gfx::ui_system()->get_transform(ui_elem2)->get_aabb().hi.x - gfx::ui_system()->get_transform(ui_elem2)->get_aabb().lo.x,
+        255U,
+        true,
+        true,
+        "button_2_text"
+    );
 
     // Insert UI elements into object system
-    gfx::ui_system()->insert_object(ui_elem1, ui_elem_folder1, text_material, ui_buffer);
-    gfx::ui_system()->insert_object(ui_elem2, ui_elem_folder2, text_material, ui_buffer);
+    auto ui_elem_object1 = gfx::ui_system()->insert_object(ui_elem1, ui_elem_folder1, consolas_material, ui_text_buffer1);
+    auto ui_elem_object2 = gfx::ui_system()->insert_object(ui_elem2, ui_elem_folder2, consolas_material, ui_text_buffer2);
 
     // --- BEGIN directional light ---
 
@@ -132,6 +167,11 @@ void Presenter::initialize()
             frame_light,
             vec4{ 0.75f, 0.75f, 0.75f, 1 }
             );
+    com::Folder* const ambient_light = gfx::light_system()->insert_light<gfx::AmbientLight>(
+            { "global", "ambient" },
+            frame_light,
+            vec4{ 1.0f, 1.0f, 1.0f, 1 }
+            );
 
     // --- END directional light ---
 
@@ -142,8 +182,9 @@ void Presenter::initialize()
 
     // END handlers
 
-    //gfx::object_system()->insert_light(test_box, dir_light);
-    //gfx::light_system()->insert_shadow_caster(dir_light, test_box);
+    gfx::object_system()->insert_light(test_box, dir_light);
+    gfx::object_system()->insert_light(test_box, ambient_light);
+    gfx::light_system()->insert_shadow_caster(dir_light, test_box);
     print_tree(*gfx::root(), std::cout);
     print_tree(*mak::root(), std::cout);