diff --git a/src/vkcv/Window.cpp b/src/vkcv/Window.cpp
index 70cfb153833c528be39c5d2c292e0b5da0d04083..d29dd94aed6597c902d26cb0ecdc2191e1872957 100644
--- a/src/vkcv/Window.cpp
+++ b/src/vkcv/Window.cpp
@@ -55,11 +55,12 @@ namespace vkcv {
 
         glfwSetScrollCallback(m_window, Window::onMouseScrollEvent);
 
+        glfwSetJoystickCallback(nullptr);   // use this before to avoid crashing
         glfwSetJoystickUserPointer(GLFW_JOYSTICK_1, this);
     }
 
     void Window::pollEvents() {
-        onGamepadEvent(GLFW_JOYSTICK_1, this);
+        onGamepadEvent(GLFW_JOYSTICK_1);
         glfwPollEvents();
     }
 
@@ -103,7 +104,8 @@ namespace vkcv {
         }
     }
 
-    void Window::onGamepadEvent(int gamepadIndex, Window *window) {
+    void Window::onGamepadEvent(int gamepadIndex) {
+        auto window = static_cast<Window *>(glfwGetJoystickUserPointer(gamepadIndex));
         if (glfwJoystickPresent(gamepadIndex)) {
             window->e_gamepad(gamepadIndex);
         }