diff --git a/demos/optical_bench/src/laser_menu.cpp b/demos/optical_bench/src/laser_menu.cpp
index b40b7a6d2d02a659d923971616474b75c7c53441..33a8f26eab51ac30ceb73c5b2c72f4fd3029d655 100644
--- a/demos/optical_bench/src/laser_menu.cpp
+++ b/demos/optical_bench/src/laser_menu.cpp
@@ -44,7 +44,7 @@ LaserMenu::LaserMenu(phx::Scene* scene, phx::Engine* engine) {
     }
   }
 
-  MenuHelper::createButtonPairVertical(up_p_, down_p_, text_p_, -0.1f, -0.025f,
+  MenuHelper::createButtonPairVertical(up_p_, down_p_, text_p_, -0.1f, -0.05f,
                                        scene, engine, entity_);
   up_p_->SetOnPress([rayPass, this](phx::Transform*, glm::mat4) {
     rayPass->NextLaserPattern();
@@ -65,11 +65,11 @@ LaserMenu::LaserMenu(phx::Scene* scene, phx::Engine* engine) {
   switch_tir_->GetTransform()->SetParent(
       entity_->GetFirstComponent<phx::Transform>(), false);
   switch_tir_->GetTransform()->SetLocalTranslation(
-      glm::vec3(-0.001f, -0.05f, 0.1f));
+      glm::vec3(0.0f, -0.075f, 0.1f));
 
   auto text_entity = scene->CreateEntity();
   text_entity->AddComponent<phx::Transform>()
-      ->Translate(glm::vec3(-0.001f, -0.025f, 0.1f))
+      ->Translate(glm::vec3(-0.001f, -0.05f, 0.1f))
       .SetLocalRotationEuler(glm::vec3(180, -90, 0))
       .SetParent(entity_->GetFirstComponent<phx::Transform>());
   text_tir_ = text_entity->AddComponent<phx::Text>("", 0.006f);
@@ -86,11 +86,11 @@ LaserMenu::LaserMenu(phx::Scene* scene, phx::Engine* engine) {
   switch_tw_->GetTransform()->SetParent(
       entity_->GetFirstComponent<phx::Transform>(), false);
   switch_tw_->GetTransform()->SetLocalTranslation(
-      glm::vec3(-0.001f, -0.05f, 0.0f));
+      glm::vec3(0.0f, -0.025f, 0.0f));
 
   auto text_entity2 = scene->CreateEntity();
   text_entity2->AddComponent<phx::Transform>()
-      ->Translate(glm::vec3(-0.001f, -0.025f, 0.0f))
+      ->Translate(glm::vec3(-0.001f, -0.05f, 0.0f))
       .SetLocalRotationEuler(glm::vec3(180, -90, 0))
       .SetParent(entity_->GetFirstComponent<phx::Transform>());
   text_tw_ = text_entity2->AddComponent<phx::Text>("", 0.006f);
@@ -102,8 +102,8 @@ LaserMenu::LaserMenu(phx::Scene* scene, phx::Engine* engine) {
   clear_target_->GetTransform()->SetParent(
       entity_->GetFirstComponent<phx::Transform>(), false);
   clear_target_->GetTransform()->SetLocalRotationEuler(glm::vec3(0, -90, 90));
-  clear_target_->GetTransform()->SetLocalScale(glm::vec3(0.03f, 0.01f, 0.03f));
-  clear_target_->GetTransform()->SetLocalTranslation(glm::vec3(0));
+  clear_target_->GetTransform()->SetLocalScale(glm::vec3(0.06f, 0.01f, 0.017f));
+  clear_target_->GetTransform()->SetLocalTranslation(glm::vec3(0.0f,-0.075f,0.0f));
   clear_target_->SetHoldable(false);
   clear_target_->SetOnPress(
       [this, rayPass](phx::Transform*, glm::mat4) { rayPass->clearTargetBuffers(); });
diff --git a/demos/optical_bench/src/menu_button.cpp b/demos/optical_bench/src/menu_button.cpp
index 2391a8c3f8001e1dffaa38a24217cf75b8349701..dc44d1a6afc1bfd86124ca98a998bd6889834d15 100644
--- a/demos/optical_bench/src/menu_button.cpp
+++ b/demos/optical_bench/src/menu_button.cpp
@@ -31,18 +31,16 @@ MenuButton::MenuButton(phx::Engine* engine, phx::Scene* scene, TYPE type) {
   }
 
   phx::MaterialHandle* outer = nullptr;
-  phx::MaterialHandle* face = nullptr;
-
   auto transform = entity_->GetFirstComponent<phx::Transform>();
   for (auto i = 0u; i < transform->GetChildCount(); i++) {
     auto handle = transform->GetChild(i)
                       ->GetEntity()
                       ->GetFirstComponent<phx::MaterialHandle>();
-    if (handle->GetMaterial()->GetName().compare("Base") == 0) {
+    if (handle->GetMaterial()->GetName().compare("ButtonBase") == 0) {
       outer = handle;
     }
     if (handle->GetMaterial()->GetName().compare("Image") == 0) {
-      face = handle;
+		face_ = handle;
     }
   }
 
@@ -53,6 +51,9 @@ MenuButton::MenuButton(phx::Engine* engine, phx::Scene* scene, TYPE type) {
   outer->SetMaterial(MenuHelper::cloneMaterial(
       outer->GetMaterial(),
       std::string("Button_Material_") + std::to_string(id)));
+  face_->SetMaterial(MenuHelper::cloneMaterial(
+	  face_->GetMaterial(),
+	  std::string("Button_Face_Material_") + std::to_string(id)));
 
   outer->GetMaterial()->SetAmbientColor(color_unhovered);
   outer->GetMaterial()->SetDiffuseColor(color_unhovered);
@@ -122,3 +123,7 @@ MenuButton::MenuButton(phx::Engine* engine, phx::Scene* scene, TYPE type) {
 }
 
 MenuButton::~MenuButton() {}
+
+void MenuButton::SetImage(phx::ResourcePointer<phx::Image> image) {
+	face_->GetMaterial()->SetAmbientImage(image);
+}
diff --git a/demos/optical_bench/src/menu_button.hpp b/demos/optical_bench/src/menu_button.hpp
index 9083a6f7417ffe3f3e7fd7f7c595e3bf5ccc9bda..d0e7bbde016102319048a270582c99b091fe91a3 100644
--- a/demos/optical_bench/src/menu_button.hpp
+++ b/demos/optical_bench/src/menu_button.hpp
@@ -11,6 +11,8 @@ SUPPRESS_WARNINGS_END
 #include "phx/core/entity.hpp"
 #include "phx/core/scene.hpp"
 #include "phx/rendering/components/transform.hpp"
+#include "phx/resources/types/image.hpp"
+#include "phx/rendering/components/material_handle.hpp"
 
 class MenuButton {
  public:
@@ -33,6 +35,8 @@ class MenuButton {
 
   void SetHoldable(bool active) { holdable_ = active; };
 
+  void SetImage(phx::ResourcePointer<phx::Image> image);
+
  private:
   phx::Entity* entity_;
   phx::Selector* selector_;
@@ -43,6 +47,7 @@ class MenuButton {
   std::chrono::duration<double> grab_time_;
   bool hold_activated_ = false;
   bool holdable_ = true;
+  phx::MaterialHandle* face_;
 
   std::function<void(phx::Transform*, glm::mat4)> onpress_function_ = nullptr;
 };
diff --git a/demos/optical_bench/src/object_menu.cpp b/demos/optical_bench/src/object_menu.cpp
index 900a494374eac33141b745f2c286d93a6de1f477..716cd0e566769fe8b665a7d4abb0b5e163c0cf47 100644
--- a/demos/optical_bench/src/object_menu.cpp
+++ b/demos/optical_bench/src/object_menu.cpp
@@ -42,24 +42,66 @@ ObjectMenu::ObjectMenu(phx::Scene* scene, phx::Engine* engine) {
 
   auto object_manager = engine->GetSystem<ObjectManager>();
 
-  create_frame_ = new MenuButton(engine, scene, MenuButton::RECTANGULAR);
-  create_frame_->GetTransform()->SetParent(
+  //Frame Buttons
+  create_frame_1_ = new MenuButton(engine, scene, MenuButton::RECTANGULAR);
+  create_frame_1_->GetTransform()->SetParent(
       entity_->GetFirstComponent<phx::Transform>(), false);
-  create_frame_->GetTransform()->SetLocalRotationEuler(glm::vec3(0, -90, 90));
-  create_frame_->GetTransform()->SetLocalScale(glm::vec3(0.03f, 0.01f, 0.03f));
-  create_frame_->GetTransform()->SetLocalTranslation(glm::vec3(0, 0, 0.1f));
-  create_frame_->SetHoldable(false);
-  create_frame_->SetOnPress(
+  create_frame_1_->GetTransform()->SetLocalRotationEuler(glm::vec3(0, -90, 90));
+  create_frame_1_->GetTransform()->SetLocalScale(glm::vec3(0.05f, 0.01f, 0.05f));
+  create_frame_1_->GetTransform()->SetLocalTranslation(glm::vec3(0, 0, -0.1f));
+  create_frame_1_->SetImage(phx::ResourceUtils::LoadResourceFromFile<phx::Image>("laser/target/Checker.png"));
+  create_frame_1_->SetHoldable(false);
+  create_frame_1_->SetOnPress(
       [this, object_manager](phx::Transform* t, glm::mat4) {
         object_manager->CreateTarget(t->GetGlobalTranslation(), "Checker.png");
       });
 
+  create_frame_2_ = new MenuButton(engine, scene, MenuButton::RECTANGULAR);
+  create_frame_2_->GetTransform()->SetParent(
+	  entity_->GetFirstComponent<phx::Transform>(), false);
+  create_frame_2_->GetTransform()->SetLocalRotationEuler(glm::vec3(0, -90, 90));
+  create_frame_2_->GetTransform()->SetLocalScale(glm::vec3(0.05f, 0.01f, 0.05f));
+  create_frame_2_->GetTransform()->SetLocalTranslation(glm::vec3(0, -0.055f, -0.1f));
+  create_frame_2_->SetImage(phx::ResourceUtils::LoadResourceFromFile<phx::Image>("laser/target/CheckerRed.png"));
+  create_frame_2_->SetHoldable(false);
+  create_frame_2_->SetOnPress(
+	  [this, object_manager](phx::Transform* t, glm::mat4) {
+	  object_manager->CreateTarget(t->GetGlobalTranslation(), "CheckerRed.png");
+  });
+
+  create_frame_3_ = new MenuButton(engine, scene, MenuButton::RECTANGULAR);
+  create_frame_3_->GetTransform()->SetParent(
+	  entity_->GetFirstComponent<phx::Transform>(), false);
+  create_frame_3_->GetTransform()->SetLocalRotationEuler(glm::vec3(0, -90, 90));
+  create_frame_3_->GetTransform()->SetLocalScale(glm::vec3(0.05f, 0.01f, 0.05f));
+  create_frame_3_->GetTransform()->SetLocalTranslation(glm::vec3(0, 0, -0.045f));
+  create_frame_3_->SetImage(phx::ResourceUtils::LoadResourceFromFile<phx::Image>("laser/target/CheckerBlue.png"));
+  create_frame_3_->SetHoldable(false);
+  create_frame_3_->SetOnPress(
+	  [this, object_manager](phx::Transform* t, glm::mat4) {
+	  object_manager->CreateTarget(t->GetGlobalTranslation(), "CheckerBlue.png");
+  });
+
+  create_frame_4_ = new MenuButton(engine, scene, MenuButton::RECTANGULAR);
+  create_frame_4_->GetTransform()->SetParent(
+	  entity_->GetFirstComponent<phx::Transform>(), false);
+  create_frame_4_->GetTransform()->SetLocalRotationEuler(glm::vec3(0, -90, 90));
+  create_frame_4_->GetTransform()->SetLocalScale(glm::vec3(0.05f, 0.01f, 0.05f));
+  create_frame_4_->GetTransform()->SetLocalTranslation(glm::vec3(0, -0.055f, -0.045f));
+  create_frame_4_->SetImage(phx::ResourceUtils::LoadResourceFromFile<phx::Image>("laser/target/CheckerGreen.png"));
+  create_frame_4_->SetHoldable(false);
+  create_frame_4_->SetOnPress(
+	  [this, object_manager](phx::Transform* t, glm::mat4) {
+	  object_manager->CreateTarget(t->GetGlobalTranslation(), "CheckerGreen.png");
+  });
+
   create_lens_ = new MenuButton(engine, scene, MenuButton::ROUND);
   create_lens_->GetTransform()->SetParent(
       entity_->GetFirstComponent<phx::Transform>(), false);
   create_lens_->GetTransform()->SetLocalRotationEuler(glm::vec3(0, -90, 90));
-  create_lens_->GetTransform()->SetLocalScale(glm::vec3(0.03f, 0.01f, 0.03f));
-  create_lens_->GetTransform()->SetLocalTranslation(glm::vec3(0, 0, -0.1f));
+  create_lens_->GetTransform()->SetLocalScale(glm::vec3(0.043f, 0.01f, 0.102f));
+  create_lens_->GetTransform()->SetLocalTranslation(glm::vec3(0, -0.025f, 0.075f));
+  create_lens_->SetImage(phx::ResourceUtils::LoadResourceFromFile<phx::Image>("models/opticalBench/menu/lens.png"));
   create_lens_->SetHoldable(false);
   create_lens_->SetOnPress(
       [this, object_manager](phx::Transform* t, glm::mat4) {
@@ -68,6 +110,9 @@ ObjectMenu::ObjectMenu(phx::Scene* scene, phx::Engine* engine) {
 }
 
 ObjectMenu::~ObjectMenu() {
-  delete create_frame_;
+  delete create_frame_1_;
+  delete create_frame_2_;
+  delete create_frame_3_;
+  delete create_frame_4_;
   delete create_lens_;
 }
diff --git a/demos/optical_bench/src/object_menu.hpp b/demos/optical_bench/src/object_menu.hpp
index 21c04d18068368db1207ed112fdac88f1571762f..7d86401ed6ad71cf8d6b052079cb5a2508eba2a6 100644
--- a/demos/optical_bench/src/object_menu.hpp
+++ b/demos/optical_bench/src/object_menu.hpp
@@ -29,5 +29,8 @@ class ObjectMenu {
 
   // pattern
   MenuButton* create_lens_;
-  MenuButton* create_frame_;
+  MenuButton* create_frame_1_;
+  MenuButton* create_frame_2_;
+  MenuButton* create_frame_3_;
+  MenuButton* create_frame_4_;
 };
diff --git a/resources/laser/target/CheckerBlue.png b/resources/laser/target/CheckerBlue.png
new file mode 100644
index 0000000000000000000000000000000000000000..5bfb9235f4971b55b455014e7fc0b6792254ac01
--- /dev/null
+++ b/resources/laser/target/CheckerBlue.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2313b203bcde2062d4862a2fb9ba04895c28e7a3e90c90e4fb9fdc0c6915c5cb
+size 161
diff --git a/resources/laser/target/CheckerGreen.png b/resources/laser/target/CheckerGreen.png
new file mode 100644
index 0000000000000000000000000000000000000000..2171b35c13e614197181405d427a75191f92b598
--- /dev/null
+++ b/resources/laser/target/CheckerGreen.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:60a29d15cd382b6850d4111ef69b2a36563dd46ce608c40535be6021a1572c12
+size 142
diff --git a/resources/laser/target/CheckerRed.png b/resources/laser/target/CheckerRed.png
new file mode 100644
index 0000000000000000000000000000000000000000..4939b2d37437817c55f293a97314da43842853b7
--- /dev/null
+++ b/resources/laser/target/CheckerRed.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1b3679858717cc583eed5734686ed6c6079ca0d2bf586594bebcd4a1405ae9de
+size 142
diff --git a/resources/models/opticalBench/menu/Button_Rectangle.mtl b/resources/models/opticalBench/menu/Button_Rectangle.mtl
index b0c0647ff34f77e98025a9cce4ff9d4ab38c0174..31e5285151bf58d8917d447d319b88ce1e47df88 100644
--- a/resources/models/opticalBench/menu/Button_Rectangle.mtl
+++ b/resources/models/opticalBench/menu/Button_Rectangle.mtl
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:575c3f6c5f82a1ddf7661816c1c7df4e534ab75cd0ae85560311b5c92bb83ba4
-size 448
+oid sha256:91277ec4ca4a6c38d8c34e97aa391da3d27c31bbe247a4ead01828ea7515bc96
+size 434
diff --git a/resources/models/opticalBench/menu/Button_Rectangle.obj b/resources/models/opticalBench/menu/Button_Rectangle.obj
index cb0bf5fef2aceb793f75952e98de0d9a73e43c71..9e268608f25aaaea93dd63fda31e7958bd6e9abe 100644
--- a/resources/models/opticalBench/menu/Button_Rectangle.obj
+++ b/resources/models/opticalBench/menu/Button_Rectangle.obj
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:b3e3745cf412a66481464fa51ebfc0f2c08f14be38c341a626a4de5e7dc87e33
-size 7352
+oid sha256:54a97f2a95e787d4127f837116a613f1cf50472d03605e05f88187cf07581aa4
+size 8594
diff --git a/resources/models/opticalBench/menu/Button_Round.mtl b/resources/models/opticalBench/menu/Button_Round.mtl
index b0c0647ff34f77e98025a9cce4ff9d4ab38c0174..31e5285151bf58d8917d447d319b88ce1e47df88 100644
--- a/resources/models/opticalBench/menu/Button_Round.mtl
+++ b/resources/models/opticalBench/menu/Button_Round.mtl
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:575c3f6c5f82a1ddf7661816c1c7df4e534ab75cd0ae85560311b5c92bb83ba4
-size 448
+oid sha256:91277ec4ca4a6c38d8c34e97aa391da3d27c31bbe247a4ead01828ea7515bc96
+size 434
diff --git a/resources/models/opticalBench/menu/Button_Round.obj b/resources/models/opticalBench/menu/Button_Round.obj
index 154e2dac70a8e60dee11cdcb86c78a34ce08f138..e6d46657e9c45d478e170618accca019f215f86e 100644
--- a/resources/models/opticalBench/menu/Button_Round.obj
+++ b/resources/models/opticalBench/menu/Button_Round.obj
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:14b8b71968af4cea8e0f09ec2de7fbe9263343ee8274c6a88ca0eb29c05b5f97
-size 19163
+oid sha256:cc281059a4111020dced74d4f35497435a2c561fd37e771e72a09e7a0de94a96
+size 23098
diff --git a/resources/models/opticalBench/menu/lens.png b/resources/models/opticalBench/menu/lens.png
new file mode 100644
index 0000000000000000000000000000000000000000..1e22b6980af058a5a84ec082ce80cefdbd3a53c3
--- /dev/null
+++ b/resources/models/opticalBench/menu/lens.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6bd940aa3072db7b694f131e0bd8ac8c96f99d8e120b215ac17d9adb07c9043a
+size 4151
diff --git a/resources/models/opticalBench/menu/menu.blend b/resources/models/opticalBench/menu/menu.blend
index d17002b44cb62a12e36d85f7615e6b60f52179cd..250967e5db22f75173d3a5ff35cd992d4d14c200 100644
Binary files a/resources/models/opticalBench/menu/menu.blend and b/resources/models/opticalBench/menu/menu.blend differ
diff --git a/resources/models/opticalBench/menu/menu.blend1 b/resources/models/opticalBench/menu/menu.blend1
index 4c7b0439862e0bf4bd72fdf5d1cd44248ea89d0b..d17002b44cb62a12e36d85f7615e6b60f52179cd 100644
Binary files a/resources/models/opticalBench/menu/menu.blend1 and b/resources/models/opticalBench/menu/menu.blend1 differ