diff --git a/tmk_core/common/action.c b/tmk_core/common/action.c
index f53e3c7084..aae5cbfa5f 100644
--- a/tmk_core/common/action.c
+++ b/tmk_core/common/action.c
@@ -76,6 +76,11 @@ void action_exec(keyevent_t event) {
 #endif
     }
 
+    if (event.pressed) {
+        // clear the potential weak mods left by previously pressed keys
+        clear_weak_mods();
+    }
+
 #ifdef SWAP_HANDS_ENABLE
     if (!IS_NOEVENT(event)) {
         process_hand_swap(&event);
@@ -237,11 +242,6 @@ void process_action(keyrecord_t *record, action_t action) {
     uint8_t tap_count = record->tap.count;
 #endif
 
-    if (event.pressed) {
-        // clear the potential weak mods left by previously pressed keys
-        clear_weak_mods();
-    }
-
 #ifndef NO_ACTION_ONESHOT
     bool do_release_oneshot = false;
     // notice we only clear the one shot layer if the pressed key is not a modifier.