diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp
index f5b3e34ba..cb2faf110 100644
--- a/src/managers/KeybindManager.cpp
+++ b/src/managers/KeybindManager.cpp
@@ -287,6 +287,14 @@ void CKeybindManager::onSwitchEvent(const std::string& switchName) {
     handleKeybinds(0, "switch:" + switchName, 0, 0, true, 0);
 }
 
+void CKeybindManager::onSwitchOnEvent(const std::string& switchName) {
+    handleKeybinds(0, "switch:on:" + switchName, 0, 0, true, 0);
+}
+
+void CKeybindManager::onSwitchOffEvent(const std::string& switchName) {
+    handleKeybinds(0, "switch:off:" + switchName, 0, 0, true, 0);
+}
+
 int repeatKeyHandler(void* data) {
     SKeybind** ppActiveKeybind = (SKeybind**)data;
 
diff --git a/src/managers/KeybindManager.hpp b/src/managers/KeybindManager.hpp
index 3923d5717..b29b48b0b 100644
--- a/src/managers/KeybindManager.hpp
+++ b/src/managers/KeybindManager.hpp
@@ -40,6 +40,8 @@ class CKeybindManager {
     bool                                                              onAxisEvent(wlr_pointer_axis_event*);
     bool                                                              onMouseEvent(wlr_pointer_button_event*);
     void                                                              onSwitchEvent(const std::string&);
+    void                                                              onSwitchOnEvent(const std::string&);
+    void                                                              onSwitchOffEvent(const std::string&);
 
     void                                                              addKeybind(SKeybind);
     void                                                              removeKeybind(uint32_t, const std::string&);
diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp
index c67bcba32..a5ff20f75 100644
--- a/src/managers/input/InputManager.cpp
+++ b/src/managers/input/InputManager.cpp
@@ -1,5 +1,6 @@
 #include "InputManager.hpp"
 #include "../../Compositor.hpp"
+#include "wlr/types/wlr_switch.h"
 
 void CInputManager::onMouseMoved(wlr_pointer_motion_event* e) {
     static auto* const PSENS      = &g_pConfigManager->getConfigValuePtr("general:sensitivity")->floatValue;
@@ -1215,6 +1216,18 @@ void CInputManager::newSwitch(wlr_input_device* pDevice) {
             Debug::log(LOG, "Switch %s fired, triggering binds.", NAME.c_str());
 
             g_pKeybindManager->onSwitchEvent(NAME);
+
+            const auto event_data = (wlr_switch_toggle_event*)data;
+            switch (event_data->switch_state) {
+                case WLR_SWITCH_STATE_ON:
+                    Debug::log(LOG, "Switch %s turn on, triggering binds.", NAME.c_str());
+                    g_pKeybindManager->onSwitchOnEvent(NAME);
+                    break;
+                case WLR_SWITCH_STATE_OFF:
+                    Debug::log(LOG, "Switch %s turn off, triggering binds.", NAME.c_str());
+                    g_pKeybindManager->onSwitchOffEvent(NAME);
+                    break;
+            }
         },
         PNEWDEV, "SwitchDevice");
 }