diff --git a/src/controls/include/controls/cam_control.hpp b/src/controls/include/controls/cam_control.hpp
index c6bca1121334ce8f8812732d93a9746a548e01b7..faa5f23413509063487c5a93f835913f0613fe97 100644
--- a/src/controls/include/controls/cam_control.hpp
+++ b/src/controls/include/controls/cam_control.hpp
@@ -35,7 +35,7 @@ public:
 class OrbitCameraController : public CameraController
 {
     glm::vec3 target = glm::vec3(0.0f, 0.0f, 0.0f);
-    float distance = 5.0f;
+    float zoom = 5.0f;
 
 public:
     using CameraController::CameraController;
diff --git a/src/controls/src/cam_control.cpp b/src/controls/src/cam_control.cpp
index 66e7a7e5d6b7666951370da8fdcda47508a8d4bd..7afb1c671fa3592f0dad151a504808c6ecd60ee5 100644
--- a/src/controls/src/cam_control.cpp
+++ b/src/controls/src/cam_control.cpp
@@ -77,14 +77,17 @@ void OrbitCameraController::keyboardMove(const std::unordered_set<std::string> &
 }
 void OrbitCameraController::mouseMove(const osi::Mouse &mouse, const osi::Window &window, bool &editor_running)
 {
-    if (window.is_minimized())
+    if (window.is_minimized()
+        || !window.is_mouse_in_window())
         return;
+        
+    if (mouse.just_pressed().contains("MouseWheelUp"))
+        zoom = (zoom - 0.5f) < 1.0f ? 1.0f : zoom - 0.5f; 
 
-    float theta = 0.0f; // azimuthal angle
-    float phi = 0.0f;   // polar angle
+    if (mouse.just_pressed().contains("MouseWheelDown"))
+        zoom = (zoom + 0.5f) > 20.0f ? 20.0f : zoom + 0.5f; 
 
-    if (mouse.down().contains("MouseRight")
-        && window.is_mouse_in_window())
+    if (mouse.down().contains("MouseRight"))
     {
         if (!editor_running || (editor_running && window.is_resized()))
         {
@@ -94,12 +97,12 @@ void OrbitCameraController::mouseMove(const osi::Mouse &mouse, const osi::Window
         }
 
         glm::i32vec2 offset = mouse.pos_delta();
-        
-        theta = -static_cast<float>(offset.x) * getSens().x; 
-        phi = -static_cast<float>(-offset.y) * getSens().y;
+        float theta = -static_cast<float>(offset.x) * getSens().x; //azimuth angle
+        float phi = static_cast<float>(offset.y) * getSens().y; // polar angle
 
         turn(theta, phi);
-        auto ahead = -bound_frame->getRotationAxisZ();
-        bound_frame->setPosVec(target - (distance * ahead));
     }
+    
+    auto front_vector = -bound_frame->getRotationAxisZ();
+    bound_frame->setPosVec(target - (zoom * front_vector));
 }
\ No newline at end of file
diff --git a/src/controls/src/control_hub.cpp b/src/controls/src/control_hub.cpp
index a0ff669108173c438e68b8bdf709f0e51ec01e1e..36e44df6dba1d62d21c4b7e7d8a72ffbdb5bfd91 100644
--- a/src/controls/src/control_hub.cpp
+++ b/src/controls/src/control_hub.cpp
@@ -5,7 +5,7 @@ ControlHub::ControlHub()
     auto orbit_cam = std::make_shared<OrbitCameraController>();
     auto free_cam = std::make_shared<FreeFlyCameraController>();
 
-    cam_controls.emplace_back(orbit_cam); // BROKEN
+    cam_controls.emplace_back(orbit_cam);
     cam_controls.emplace_back(free_cam);
 
     obj_controls.emplace_back(std::make_shared<ObjectController>());
diff --git a/src/edit/src/scene.cpp b/src/edit/src/scene.cpp
index 7685e1af05086082910dff89d63c8a43b1678b82..5dcac8a468fd009ea4cb830d9ab65868c3132ef8 100644
--- a/src/edit/src/scene.cpp
+++ b/src/edit/src/scene.cpp
@@ -87,7 +87,7 @@ void Scene::createScene()
     // addMeshNode("./data/models/final_giraffe.obj", glm::vec3(-5, 1, 3));
 
     /* ADD CAMERA */
-    addCameraNode(60.0f, glm::vec3(0.0f, 1.0f, -6.0f), glm::vec3(0.0f, 180.0f, 0.0f));
+    addCameraNode(60.0f, glm::vec3(0.0f, 0.0f, -5.0f), glm::vec3(0.0f, 180.0f, 0.0f));
 }
 
 void Scene::removeActiveCamera(camera_ptr camera) // TO DO: fix
diff --git a/src/osi/src/run.cpp b/src/osi/src/run.cpp
index cd6907bd6cb5de1a80715c91983385e3529db068..830e8da49d6f18283b3ead1abb77523e9f10e209 100644
--- a/src/osi/src/run.cpp
+++ b/src/osi/src/run.cpp
@@ -37,8 +37,8 @@ static std::string to_button_name(std::uint8_t const button_index)
         case SDL_BUTTON_LEFT: return "MouseLeft";
         case SDL_BUTTON_RIGHT: return "MouseRight";
         case SDL_BUTTON_MIDDLE: return "MouseMiddle";
-        case SDL_BUTTON_X1: return "MouseX1";
-        case SDL_BUTTON_X2: return "MouseX2";
+        case SDL_BUTTON_X1: return "MouseWheelUp";
+        case SDL_BUTTON_X2: return "MouseWheelDown";
         default: return "MouseUNKNOWN";
     }
 }
@@ -261,6 +261,16 @@ void run(Config const& cfg)
                 if (!ImGui::GetIO().WantCaptureMouse)
                 {
                     // TODO!
+                    if(event.wheel.y > 0) // scroll up
+                    {
+                        std::string const name = to_button_name(SDL_BUTTON_X1);
+                        mouse->m_just_pressed.insert(name);
+                    }
+                    else if(event.wheel.y < 0) // scroll down
+                    {
+                        std::string const name = to_button_name(SDL_BUTTON_X2);
+                        mouse->m_just_pressed.insert(name);
+                    }
                 }
                 break;
             default: break;
diff --git a/src/studio/src/simulator.cpp b/src/studio/src/simulator.cpp
index 36abbe39605e018e351f7867c9caa28bd6be8acd..e89c24646f8462de8a2e3ca19bff53cd42fbad32 100644
--- a/src/studio/src/simulator.cpp
+++ b/src/studio/src/simulator.cpp
@@ -41,11 +41,26 @@ void Simulator::update()
     editor->changeOrthoCamAxes(scene, controls);
     // editor->changeLevel(scene, controls);
 
-    auto cam_frame = scene->getActiveCameras()[0].lock()->getFrame()->getPosition();
-    auto cam_front_vec = controls->getActiveCamCtrl()->getFrontVec();
+    // auto cam_frame = scene->getActiveCameras()[0].lock()->getFrame()->getPosition();
+    // auto cam_front_vec = controls->getActiveCamCtrl()->getFrontVec();
     // std::cout << "Camera coords: X " << cam_frame.x << " | Y " << cam_frame.y << " | Z " << cam_frame.z << std::endl;
     // std::cout << "Camera frontVec: X " << cam_front_vec.x << " | Y " << cam_front_vec.y << " | Z " << cam_front_vec.z << std::endl;
-
+    auto m_pressed = mouse().just_pressed();
+    if (!m_pressed.empty())
+    {
+        std::cout << "pressed: ";
+        for (auto button : m_pressed)
+            std::cout << button << ", ";
+        std::cout << std::endl << "held: ";
+    }
+    auto m_held = mouse().down();
+    if (!m_held.empty())
+    {
+        for (auto button : m_held)
+        std::cout << button << ", ";
+        std::cout << std::endl;
+    }
+    
     /* Rotation around x-axis demo */
     // controls->rotate_obj(glm::vec3(1.0f, 0.0f, 0.0f));
 }