diff --git a/library/phx/display/hmd.cpp b/library/phx/display/hmd.cpp
index c43329e2076bf3ad6dca6f6bb04affa19112f743..5b7e39f3135863d35ef256ab3ce89e2ae2f84209 100644
--- a/library/phx/display/hmd.cpp
+++ b/library/phx/display/hmd.cpp
@@ -206,6 +206,7 @@ std::unique_ptr<Material> HMD::GetControllerMaterial(Controller controller) {
   auto material = std::make_unique<phx::Material>();
   material->SetAmbientColor(glm::vec3(0.1, 0.1, 0.1));
   material->SetSpecularColor(glm::vec3(0.3, 0.3, 0.3));
+  material->SetShininess(1.0f);
 
   auto texture = ResourceManager::instance().DeclareResource<Image>(
       {{"TYPE", "openVR"},
@@ -235,9 +236,11 @@ std::unique_ptr<Image> HMD::GetControllerTexture(int id) {
             texture_map->rubTextureMapData + image_data.size(),
             image_data.begin());
   auto image = std::make_unique<phx::Image>(
-      &image_data[0], std::array<std::size_t, 2>{
-                      {static_cast<std::size_t>(texture_map->unWidth),
-                       static_cast<std::size_t>(texture_map->unHeight)}}, 32);
+      &image_data[0],
+      std::array<std::size_t, 2>{
+          {static_cast<std::size_t>(texture_map->unWidth),
+           static_cast<std::size_t>(texture_map->unHeight)}},
+      32);
 
   return image;
 }
diff --git a/library/phx/rendering/components/mesh_render_settings.cpp b/library/phx/rendering/components/mesh_render_settings.cpp
index 97ed8e9d80183b961ae3d3bf96986791ef13ad38..23e920fbe5fadbc1eb9ababd2f65ceff381e29b9 100644
--- a/library/phx/rendering/components/mesh_render_settings.cpp
+++ b/library/phx/rendering/components/mesh_render_settings.cpp
@@ -24,10 +24,16 @@
 
 namespace phx {
 
+MeshRenderSettings MeshRenderSettings::default_settings_;
+
 void MeshRenderSettings::SetWireframeMode(const bool enabled) {
   wireframe_mode_ = enabled;
 }
 
 bool MeshRenderSettings::GetWireframeMode() const { return wireframe_mode_; }
 
+MeshRenderSettings* MeshRenderSettings::GetDefault() {
+  return &default_settings_;
+}
+
 }  // namespace phx
diff --git a/library/phx/rendering/components/mesh_render_settings.hpp b/library/phx/rendering/components/mesh_render_settings.hpp
index 4aec1e994152cb346a5043cf94cc023b603d30e6..bb9fda67138831896974e1280f11af332883736c 100644
--- a/library/phx/rendering/components/mesh_render_settings.hpp
+++ b/library/phx/rendering/components/mesh_render_settings.hpp
@@ -36,8 +36,12 @@ class PHOENIX_EXPORT MeshRenderSettings final : public Component {
   void SetWireframeMode(bool enabled);
   bool GetWireframeMode() const;
 
+  static MeshRenderSettings* GetDefault();
+
  private:
   bool wireframe_mode_ = false;
+
+  static MeshRenderSettings default_settings_;
 };
 }  // namespace phx
 
diff --git a/library/phx/rendering/render_passes/geometry_pass.hpp b/library/phx/rendering/render_passes/geometry_pass.hpp
index 378d7ec0689657432000cd292a1bdc1e9da61ad4..6e19b2dced1f36fe07fed6b8ebd9d5e412c233c3 100644
--- a/library/phx/rendering/render_passes/geometry_pass.hpp
+++ b/library/phx/rendering/render_passes/geometry_pass.hpp
@@ -65,7 +65,7 @@ class PHOENIX_EXPORT GeometryPass : public RenderPass {
     Mesh* mesh = nullptr;
     Material* material = nullptr;
     Transform* transform = nullptr;
-    MeshRenderSettings* mesh_render_settings = nullptr;
+    MeshRenderSettings* mesh_render_settings = MeshRenderSettings::GetDefault();
   };
   struct RenderOffset {
     std::size_t vertex_offset;
diff --git a/library/phx/rendering/rendering_system.cpp b/library/phx/rendering/rendering_system.cpp
index 6883604509c6d014109730ec4d174457d4518bf8..781dfb22b9e5bd7a8f48db8f538dd2223afe07ee 100644
--- a/library/phx/rendering/rendering_system.cpp
+++ b/library/phx/rendering/rendering_system.cpp
@@ -70,9 +70,6 @@ void RenderingSystem::Update(const FrameTimer::TimeInfo&) {
     return;
   }
 
-  Material default_material;
-  MeshRenderSettings default_mesh_render_settings;
-
   for (auto& entity : GetEngine()->GetEntities()) {
     auto mesh_handle = entity->GetFirstComponent<MeshHandle>();
     auto light = entity->GetFirstComponent<Light>();
@@ -85,11 +82,11 @@ void RenderingSystem::Update(const FrameTimer::TimeInfo&) {
         rendering_instances.push_back(
             {mesh_handle->GetMesh().Get(),
              (material_handle != nullptr ? material_handle->GetMaterial().Get()
-                                         : &default_material),
+                                         : Material::GetDefault()),
              transform,
              (mesh_render_settings != nullptr
                   ? mesh_render_settings
-                  : &default_mesh_render_settings)});
+                  : MeshRenderSettings::GetDefault())});
       } else if (light != nullptr) {
         light_transform_pairs.push_back(
             std::pair<Light*, Transform*>(light, transform));
diff --git a/library/phx/rendering/rendering_system.hpp b/library/phx/rendering/rendering_system.hpp
index 6d56ee71d065e304d9482dc023b099d30a87a77a..1641f2604e92f4f691d40f848d01d68c84cb334d 100644
--- a/library/phx/rendering/rendering_system.hpp
+++ b/library/phx/rendering/rendering_system.hpp
@@ -32,10 +32,10 @@
 #include "phx/core/scene.hpp"
 #include "phx/core/system.hpp"
 #include "phx/display/display_system.hpp"
+#include "phx/export.hpp"
 #include "phx/rendering/backend/render_target.hpp"
-#include "phx/rendering/render_passes/geometry_pass.hpp"
 #include "phx/rendering/frame_graph.hpp"
-#include "phx/export.hpp"
+#include "phx/rendering/render_passes/geometry_pass.hpp"
 
 namespace phx {
 
diff --git a/library/phx/resources/types/material.cpp b/library/phx/resources/types/material.cpp
index f79e5d332942b63f933ddc00235cb201fe4e8d06..d8ab57d8337430dc32cff13da0723b9f2891d552 100644
--- a/library/phx/resources/types/material.cpp
+++ b/library/phx/resources/types/material.cpp
@@ -32,6 +32,7 @@
 namespace phx {
 
 const char Material::UNNAMED[] = "UnnamedMaterial";
+Material Material::default_material_;
 
 glm::vec3 Material::GetDiffuseColor() const { return diffuse_color_; }
 void Material::SetDiffuseColor(glm::vec3 color) { diffuse_color_ = color; }
@@ -93,6 +94,8 @@ void Material::SetShininess(float shininess) {
   }
 }
 
+Material* Material::GetDefault() { return &default_material_; }
+
 void Material::SetTexture(ResourcePointer<Image> image,
                           std::shared_ptr<gl::texture_2d>* texture) {
   if (image == nullptr) return;
diff --git a/library/phx/resources/types/material.hpp b/library/phx/resources/types/material.hpp
index 1ed4376247e01c85f281582ca8554eeaa7e255ca..19565287ba3d72ec6240292708ba3fa43af00df4 100644
--- a/library/phx/resources/types/material.hpp
+++ b/library/phx/resources/types/material.hpp
@@ -84,6 +84,8 @@ class PHOENIX_EXPORT Material : public Resource, public Nameable {
   float GetShininess() const;
   void SetShininess(float shininess);
 
+  static Material* GetDefault();
+
  private:
   void SetTexture(ResourcePointer<Image> image,
                   std::shared_ptr<gl::texture_2d>* texture);
@@ -98,6 +100,8 @@ class PHOENIX_EXPORT Material : public Resource, public Nameable {
   glm::vec3 diffuse_color_ = glm::vec3(1, 0, 0);
   glm::vec3 specular_color_ = glm::vec3(1, 1, 1);
   float shininess_ = 64.0f;
+
+  static Material default_material_;
 };
 
 }  // namespace phx
diff --git a/tests/src/test_material.cpp b/tests/src/test_material.cpp
index 34f0552562a062641b060f9d222b54c5058fecda..843bd61e2fde6e39861566ecc0735b02ce29e633 100644
--- a/tests/src/test_material.cpp
+++ b/tests/src/test_material.cpp
@@ -42,7 +42,7 @@ SCENARIO("The material component keeps track of its attributes",
       REQUIRE(material.GetAmbientColor() == glm::vec3(0, 0, 0));
       REQUIRE(material.GetSpecularColor() == glm::vec3(1, 1, 1));
       REQUIRE(material.GetDiffuseColor() == glm::vec3(1, 0, 0));
-      REQUIRE(material.GetShininess() == 1.0f);
+      REQUIRE(material.GetShininess() == 64.0f);
     }
     WHEN("we assign it to be some other material") {
       glm::vec3 blue(0, 0, 1), white(1, 1, 1), green(0, 1, 0);