diff --git a/src/cthulhu/cthulhu.py b/src/cthulhu/cthulhu.py
index ed26293..ff3844e 100644
--- a/src/cthulhu/cthulhu.py
+++ b/src/cthulhu/cthulhu.py
@@ -47,11 +47,9 @@ class APIHelper:
         self.app = app
         self._gestureBindings = {}
         
-    def registerGestureByString(self, function, name, gestureString, 
-                                inputEventType='default', normalizer='cthulhu',
-                                learnModeEnabled=True, contextName=None):
+    def registerGestureByString(self, function, name, gestureString, inputEventType='default', normalizer='cthulhu', learnModeEnabled=True, contextName=None):
         """Register a gesture by string.
-        
+    
         Arguments:
         - function: the function to call when the gesture is performed
         - name: a human-readable name for this gesture
@@ -60,23 +58,23 @@ class APIHelper:
         - normalizer: the normalizer to use
         - learnModeEnabled: whether this should be available in learn mode
         - contextName: the context for this gesture (e.g., plugin name)
-        
+    
         Returns the binding ID or None if registration failed
         """
         if not gestureString.startswith("kb:"):
             return None
-            
+        
         # Extract the key portion from the gesture string
         key = gestureString.split(":", 1)[1]
-        
+    
         # Handle Cthulhu modifier specially
         if "cthulhu+" in key.lower():
             from . import keybindings
             key_parts = key.lower().split("+")
-            
+        
             # Determine appropriate modifier mask
             modifiers = keybindings.CTHULHU_MODIFIER_MASK
-            
+        
             # Extract the final key (without modifiers)
             final_key = key_parts[-1]
             
@@ -87,18 +85,23 @@ class APIHelper:
                 modifiers = keybindings.CTHULHU_CTRL_MODIFIER_MASK
             elif "alt" in key_parts:
                 modifiers = keybindings.CTHULHU_ALT_MODIFIER_MASK
-                
+            
             # Create a keybinding handler
             class GestureHandler:
                 def __init__(self, function, description):
                     self.function = function
                     self.description = description
-                
+            
                 def __call__(self, script, inputEvent):
-                    return self.function(script, inputEvent)
-            
+                    try:
+                        return function(script, inputEvent)
+                    except Exception as e:
+                        import logging
+                        logging.getLogger(__name__).error(f"Error in keybinding handler: {e}")
+                        return True
+        
             handler = GestureHandler(function, name)
-            
+        
             # Register the binding with the active script
             from . import cthulhu_state
             if cthulhu_state.activeScript:
@@ -108,20 +111,29 @@ class APIHelper:
                     keybindings.defaultModifierMask,
                     modifiers,
                     handler)
-                bindings.add(binding)
                 
+                # Add the binding to the active script
+                bindings.add(binding)
+            
                 # Store binding for later reference
                 if contextName not in self._gestureBindings:
                     self._gestureBindings[contextName] = []
                 self._gestureBindings[contextName].append(binding)
-                
+            
+                # Register key grab at the system level
+                grab_ids = self.app.addKeyGrab(binding)
+            
+                # For later removal
+                if grab_ids:
+                    binding._grab_ids = grab_ids
+            
                 return binding
-        
+    
         return None
         
     def unregisterShortcut(self, binding, contextName=None):
         """Unregister a previously registered shortcut.
-        
+    
         Arguments:
         - binding: the binding to unregister
         - contextName: the context for this gesture
@@ -131,11 +143,18 @@ class APIHelper:
         if cthulhu_state.activeScript:
             bindings = cthulhu_state.activeScript.getKeyBindings()
             bindings.remove(binding)
+        
+        # Remove key grab at system level
+        if hasattr(binding, '_grab_ids'):
+            for grab_id in binding._grab_ids:
+                self.app.removeKeyGrab(grab_id)
             
-        # Remove from our tracking
+        # Remove from tracking
         if contextName in self._gestureBindings:
             if binding in self._gestureBindings[contextName]:
                 self._gestureBindings[contextName].remove(binding)
+
+
 import gi
 import importlib
 import os
diff --git a/src/cthulhu/cthulhuVersion.py b/src/cthulhu/cthulhuVersion.py
index 83cd4eb..f0a14c3 100644
--- a/src/cthulhu/cthulhuVersion.py
+++ b/src/cthulhu/cthulhuVersion.py
@@ -23,5 +23,5 @@
 # Fork of Orca Screen Reader (GNOME)
 # Original source: https://gitlab.gnome.org/GNOME/orca
 
-version = "2025.04.11"
+version = "2025.04.14"
 codeName = "testing"