diff --git a/src/orca/default.py b/src/orca/default.py
index 1bbf7c9..bbf9084 100644
--- a/src/orca/default.py
+++ b/src/orca/default.py
@@ -847,6 +847,22 @@ class Script(script.Script):
                 #
                 _("Toggles the silencing of speech."))
 
+        self.inputEventHandlers["speakOrcaFlatReviewKeyBindingsHandler"] = \
+            input_event.InputEventHandler(
+                orca.speakOrcaFlatReviewKeyBindings,
+                # Translators: Orca speaks and outputting braille display its own keyboard shortcuts for flat review.
+                # We call it 'orca flat review key help'.
+                #
+                _("Speaks and output braille display the Orca keyboard shortcuts for flat review."))
+
+        self.inputEventHandlers["speakOrcaGeneralKeyBindingsHandler"] = \
+            input_event.InputEventHandler(
+                orca.speakOrcaGeneralKeyBindings,
+                # Translators: Orca speaks and output braille display its own general keyboard shortcuts.
+                # We call it 'orca general key help'.
+                #
+                _("Speaks and output braille display the Orca general keyboard shortcuts."))
+
         self.inputEventHandlers["listAppsHandler"] = \
             input_event.InputEventHandler(
                 Script.printAppsHandler,
@@ -1844,6 +1860,20 @@ class Script(script.Script):
 
         keyBindings.add(
             keybindings.KeyBinding(
+                "o",
+                settings.defaultModifierMask,
+                settings.ORCA_ALT_MODIFIER_MASK,
+                self.inputEventHandlers["speakOrcaFlatReviewKeyBindingsHandler"]))
+
+        keyBindings.add(
+            keybindings.KeyBinding(
+                "o",
+                settings.defaultModifierMask,
+                settings.ORCA_SHIFT_MODIFIER_MASK,
+                self.inputEventHandlers["speakOrcaGeneralKeyBindingsHandler"]))
+
+        keyBindings.add(
+            keybindings.KeyBinding(
                 "End",
                 settings.defaultModifierMask,
                 settings.ORCA_CTRL_ALT_MODIFIER_MASK,
diff --git a/src/orca/orca.py b/src/orca/orca.py
index d5b1080..a5fc806 100644
--- a/src/orca/orca.py
+++ b/src/orca/orca.py
@@ -1199,6 +1199,85 @@ def helpForOrca(script=None, inputEvent=None):
                  gtk.get_current_event_time())
     return True
 
+def speakOrcaFlatReviewKeyBindings(script=None, inputEvent=None):
+    """Speak Orca Key Bindings for flat review
+
+    Returns True to indicate the input event has been consumed.
+    """
+    # An empty KeyBindings object.
+    kbindings = keybindings.KeyBindings()
+    # Take each keybinding in the active script. 
+    for kb in orca_state.activeScript.keyBindings.keyBindings:
+        # Translators: This word means the flat review search word translation in other languages in Orca keybindings descriptions. Do not use uppercase
+#letters when translating this search word
+        #
+        if (kb.handler.description.find(_("flat review"))<>-1) and (kb.keysymstring) and (not kbindings.hasKeyBinding(kb, "description")):
+            kbindings.add(kb) 
+    n = len(kbindings.keyBindings)
+    message = _("%d Orca flat review keyboard shortcuts are available. They are:") %n
+    speech.speak(message)
+    braille.displayMessage(message)
+    for kb in kbindings.keyBindings:
+        # Translators: this strings replace the original kp_any desktop keybinding string with numpad+key format, for example numpad return string.
+        keysymString = kb.keysymstring.replace("KP_",_("numpad "))
+        clickCount = ""
+        if kb.click_count == 2:
+            # Translators: Orca keybindings support double
+            # and triple "clicks" or key presses, similar to
+            # using a mouse.
+            #
+            clickCount = _("double click")
+        elif kb.click_count == 3:
+            # Translators: Orca keybindings support double
+            # and triple "clicks" or key presses, similar to
+            # using a mouse.
+            #
+            clickCount = _("triple click")
+        message = kb.handler.description + " " + keybindings.getModifierNames(kb.modifiers) + keysymString + clickCount + "\n"
+        speech.speak(message)
+        braille.displayMessage(message)
+    return True
+
+def speakOrcaGeneralKeyBindings(script=None, inputEvent=None):
+    """Speak Orca Key Bindings other than flat review
+
+    Returns True to indicate the input event has been consumed.
+    """
+    # An empty KeyBindings object.
+    kbindings = keybindings.KeyBindings()
+    # Take each keybinding in the active script. 
+    for kb in orca_state.activeScript.keyBindings.keyBindings:
+        # Translators: This word means the flat review search word translation in other languages in Orca keybindings descriptions. Do not use uppercase
+#letters when translating this search word
+        #
+        if (kb.handler.description.find(_("flat review"))==-1) and (kb.keysymstring) and (not kbindings.hasKeyBinding(kb, "description")):
+            kbindings.add(kb)
+
+    n = len(kbindings.keyBindings)
+    message = _("%d Orca general keyboard shortcuts are available. They are:") %n
+    speech.speak(message)
+    braille.displayMessage(message)
+    for kb in kbindings.keyBindings:
+        # Translators: this strings replace the original kp_any desktop keybinding string with numpad+key format, for example numpad return string.
+        keysymString = kb.keysymstring.replace("KP_", _("numpad "))
+        clickCount = ""
+        if kb.click_count == 2:
+            # Translators: Orca keybindings support double
+            # and triple "clicks" or key presses, similar to
+            # using a mouse.
+            #
+            clickCount = _("double click")
+        elif kb.click_count == 3:
+            # Translators: Orca keybindings support double
+            # and triple "clicks" or key presses, similar to
+            # using a mouse.
+            #
+            clickCount = _("triple click")
+        message = kb.handler.description + " " + keybindings.getModifierNames(kb.modifiers) + keysymString + clickCount + "\n"
+        speech.speak(message)
+        braille.displayMessage(message)
+    return True
+
 def quitOrca(script=None, inputEvent=None):
     """Quit Orca. Check if the user wants to confirm this action.
     If so, show the confirmation GUI otherwise just shutdown.
