Index: src/orca/orca.py
===================================================================
--- src/orca/orca.py	(revision 2337)
+++ src/orca/orca.py	(working copy)
@@ -667,13 +667,29 @@
 
     keyboardEvent = KeyboardEvent(event)
 
-    # See if this is one of our special Orca modifiers (e.g., "Insert")
+    # See if this is one of our special Orca modifiers (e.g.,
+    # "Insert") We do a compare for both keysym and keycode here.  The
+    # reason we look at keysyms is that that is what is used to
+    # specify the Orca modifier (see settings.orcaModifierKeys).
+    # However, we can run into situations where there is a different
+    # keysym emitted for the modifier (e.g., KP_Insert ad KP_0 are
+    # bound to the same key), so we also check for keycode.
     #
+    # [[[TODO: Note that just looking at the keycode should suffice,
+    # but there is a "feature" in the Java Access Bridge where it
+    # chooses to emit Java platform-independent keycodes instead of
+    # the keycodes for the base platform:
+    #
+    # http://bugzilla.gnome.org/show_bug.cgi?id=106004
+    # http://bugzilla.gnome.org/show_bug.cgi?id=318615
+    # ]]]
+    #
     orcaModifierKeys = settings.orcaModifierKeys
     orcaModifierKeycodes = []
     for keysym in orcaModifierKeys:
         orcaModifierKeycodes.append(keybindings.getKeycode(keysym))
-    isOrcaModifier = orcaModifierKeycodes.count(keyboardEvent.hw_code) > 0
+    isOrcaModifier = (orcaModifierKeys.count(keyboardEvent.event_string) \
+                      or orcaModifierKeycodes.count(keyboardEvent.hw_code)) > 0
 
     if event.type == atspi.Accessibility.KEY_PRESSED_EVENT:
         # Key presses always interrupt speech.
