diff --git a/modules/camera/include/vkcv/camera/CameraController.hpp b/modules/camera/include/vkcv/camera/CameraController.hpp
index 28dd8436bab07da759cd1a6bf4dba5d7cbd2b46f..620aae69cc70fa969c2325878165245ff4596aab 100644
--- a/modules/camera/include/vkcv/camera/CameraController.hpp
+++ b/modules/camera/include/vkcv/camera/CameraController.hpp
@@ -65,7 +65,7 @@ namespace vkcv::camera {
          * @param gamepadIndex The gamepad index.
          * @param camera The camera object.
          */
-        virtual void gamepadCallback(int gamepadIndex, Camera &camera) = 0;
+        virtual void gamepadCallback(int gamepadIndex, Camera &camera, double frametime) = 0;
     };
 
 }
\ No newline at end of file
diff --git a/modules/camera/include/vkcv/camera/CameraManager.hpp b/modules/camera/include/vkcv/camera/CameraManager.hpp
index b0597da4cab1f553a7bd22da388a66e7fc19de19..409f9196599be02e4215f3924c1102f0b8c72899 100644
--- a/modules/camera/include/vkcv/camera/CameraManager.hpp
+++ b/modules/camera/include/vkcv/camera/CameraManager.hpp
@@ -44,6 +44,7 @@ namespace vkcv::camera {
         double m_lastY;
 
         double m_inputDelayTimer;
+        double m_frameTime;
 
         /**
          * @brief Binds the camera object to the window event handles.
diff --git a/modules/camera/include/vkcv/camera/PilotCameraController.hpp b/modules/camera/include/vkcv/camera/PilotCameraController.hpp
index 2ba358546e9c0ef7927dd9445901d4eaab1b2f36..ab1470c6f816fec97acf54de05224201d4d4c64b 100644
--- a/modules/camera/include/vkcv/camera/PilotCameraController.hpp
+++ b/modules/camera/include/vkcv/camera/PilotCameraController.hpp
@@ -143,7 +143,7 @@ namespace vkcv::camera {
          * @param gamepadIndex The gamepad index.
          * @param camera The camera object.
          */
-        void gamepadCallback(int gamepadIndex, Camera &camera);
+        void gamepadCallback(int gamepadIndex, Camera &camera, double frametime);
     };
 
 }
\ No newline at end of file
diff --git a/modules/camera/include/vkcv/camera/TrackballCameraController.hpp b/modules/camera/include/vkcv/camera/TrackballCameraController.hpp
index 1fbf59e56b3edbc4b7719402fd55a9eaebdf7c94..97839bf1809197588523534fcdc84cac0b56d442 100644
--- a/modules/camera/include/vkcv/camera/TrackballCameraController.hpp
+++ b/modules/camera/include/vkcv/camera/TrackballCameraController.hpp
@@ -100,7 +100,7 @@ namespace vkcv::camera {
          * @param gamepadIndex The gamepad index.
          * @param camera The camera object.
          */
-        void gamepadCallback(int gamepadIndex, Camera &camera);
+        void gamepadCallback(int gamepadIndex, Camera &camera, double frametime);
     };
 
 }
\ No newline at end of file
diff --git a/modules/camera/src/vkcv/camera/CameraManager.cpp b/modules/camera/src/vkcv/camera/CameraManager.cpp
index 40b88528554d52363cf2c6a3d0ebdabb19365b4b..44db9d0ebbfbc8c8c620ba830288276eaad1a878 100644
--- a/modules/camera/src/vkcv/camera/CameraManager.cpp
+++ b/modules/camera/src/vkcv/camera/CameraManager.cpp
@@ -105,7 +105,7 @@ namespace vkcv::camera {
             m_inputDelayTimer = (1-triggered)*m_inputDelayTimer + triggered * time; // Only reset timer, if dpad was pressed - is this cheaper than if-clause?
         }
 
-        getActiveController().gamepadCallback(gamepadIndex, getActiveCamera());     // handle camera rotation, translation
+        getActiveController().gamepadCallback(gamepadIndex, getActiveCamera(), m_frameTime);     // handle camera rotation, translation
     }
 
     CameraController& CameraManager::getActiveController() {
@@ -184,6 +184,7 @@ namespace vkcv::camera {
     }
 
     void CameraManager::update(double deltaTime) {
+        m_frameTime = deltaTime;
         if (glfwGetWindowAttrib(m_window.getWindow(), GLFW_FOCUSED) == GLFW_TRUE) {
             getActiveController().updateCamera(deltaTime, getActiveCamera());
         }
diff --git a/modules/camera/src/vkcv/camera/PilotCameraController.cpp b/modules/camera/src/vkcv/camera/PilotCameraController.cpp
index 39796f028e7bafb8e0ed0908226c0ed824f237a4..c2086cf02f979c76c6993baefc11fc3fd10f705a 100644
--- a/modules/camera/src/vkcv/camera/PilotCameraController.cpp
+++ b/modules/camera/src/vkcv/camera/PilotCameraController.cpp
@@ -130,11 +130,11 @@ namespace vkcv::camera {
         }
     }
 
-    void PilotCameraController::gamepadCallback(int gamepadIndex, Camera &camera) {
+    void PilotCameraController::gamepadCallback(int gamepadIndex, Camera &camera, double frametime) {
         GLFWgamepadstate gamepadState;
         glfwGetGamepadState(gamepadIndex, &gamepadState);
 
-        float sensitivity = 0.05f;
+        float sensitivity = 100.0f;
         double threshold = 0.1;    // todo: needs further investigation!
 
         // handle rotations
@@ -142,9 +142,9 @@ namespace vkcv::camera {
         double stickRightY = static_cast<double>(gamepadState.axes[GLFW_GAMEPAD_AXIS_RIGHT_Y]);
 
         double rightXVal = glm::clamp(std::abs(stickRightX) - threshold, 0.0, 1.0)
-                * copysign(1.0, stickRightX) * sensitivity;
+                * copysign(1.0, stickRightX) * sensitivity * frametime;
         double rightYVal = glm::clamp(std::abs(stickRightY) - threshold, 0.0, 1.0)
-                * copysign(1.0, stickRightY) * sensitivity;
+                * copysign(1.0, stickRightY) * sensitivity * frametime;
         panView(rightXVal, rightYVal, camera);
 
         // handle zooming
diff --git a/modules/camera/src/vkcv/camera/TrackballCameraController.cpp b/modules/camera/src/vkcv/camera/TrackballCameraController.cpp
index 278feb761fbd674571dcf7dc438f11c1a6958257..a1500d93ccb992e78c9e2dbca583c92b0e9c75be 100644
--- a/modules/camera/src/vkcv/camera/TrackballCameraController.cpp
+++ b/modules/camera/src/vkcv/camera/TrackballCameraController.cpp
@@ -98,11 +98,11 @@ namespace vkcv::camera {
         }
     }
 
-    void TrackballCameraController::gamepadCallback(int gamepadIndex, Camera &camera) {
+    void TrackballCameraController::gamepadCallback(int gamepadIndex, Camera &camera, double frametime) {
         GLFWgamepadstate gamepadState;
         glfwGetGamepadState(gamepadIndex, &gamepadState);
 
-        float sensitivity = 0.025f;
+        float sensitivity = 100.0f;
         double threshold = 0.1;    // todo: needs further investigation!
 
         // handle rotations
@@ -111,7 +111,7 @@ namespace vkcv::camera {
         
         double rightXVal = glm::clamp((abs(stickRightX)-threshold), 0.0, 1.0) * std::copysign(1.0, stickRightX);
         double rightYVal = glm::clamp((abs(stickRightY)-threshold), 0.0, 1.0) * std::copysign(1.0, stickRightY);
-        panView(rightXVal * sensitivity, rightYVal * sensitivity, camera);
+        panView(rightXVal * sensitivity, rightYVal * sensitivity * frametime, camera);
 
         // handle translation
         double stickLeftY = static_cast<double>(gamepadState.axes[GLFW_GAMEPAD_AXIS_LEFT_Y]);