diff --git a/src/orca/default.py b/src/orca/default.py
index eb71c7c..6e2823f 100644
--- a/src/orca/default.py
+++ b/src/orca/default.py
@@ -775,6 +775,9 @@ class Script(script.Script):
                 # be what Orca would do if it had a handler for the
                 # particular key combination, or they might just be to
                 # echo the name of the key if Orca doesn't have a handler.
+                # Additionally, pressing 'c' in learn mode creates a list
+                # of Orca shortcuts which user can hear and navigate with
+                # 'Up' and 'Down' keys.
                 #
                 _("Enters learn mode.  Press escape to exit learn mode."))
 
@@ -2436,9 +2439,15 @@ class Script(script.Script):
             # be what Orca would do if it had a handler for the
             # particular key combination, or they might just be to
             # echo the name of the key if Orca doesn't have a handler.
+            # Additionally, pressing 'c' in learn mode creates a list
+            # of Orca shortcuts which user can hear and navigate with
+            # 'Up' and 'Down' keys.
             # This text here is what is spoken to the user.
             #
             _("Entering learn mode.  Press any key to hear its function.  " \
+              "Press 'c' to hear a list of Orca default shortcuts.  "\
+              "Press 'c' twice to hear a list of Orca shortcuts "\
+              "for the application under focus.  "\
               "To exit learn mode, press the escape key."))
 
         # Translators: Orca has a "Learn Mode" that will allow
@@ -2447,10 +2456,14 @@ class Script(script.Script):
         # be what Orca would do if it had a handler for the
         # particular key combination, or they might just be to
         # echo the name of the key if Orca doesn't have a handler.
+        # Additionally, pressing 'c' in learn mode creates a list
+        # of Orca shortcuts which user can hear and navigate with
+        # 'Up' and 'Down' keys.
         # This text here is what is to be presented on the braille
         # display.
         #
-        self.displayBrailleMessage(_("Learn mode.  Press escape to exit."))
+        self.displayBrailleMessage(_("Learn mode.  Press any key to hear its function. "\
+        "Press c to hear list of shortcuts. Press escape to exit."))
         settings.learnModeEnabled = True
         return True
 
diff --git a/src/orca/orca.py b/src/orca/orca.py
index 13e2546..7cbf802 100644
--- a/src/orca/orca.py
+++ b/src/orca/orca.py
@@ -877,7 +877,10 @@ def _processKeyboardEvent(event):
         if orca_state.capturingKeys:
             consumed = _processKeyCaptured(keyboardEvent)
         else:
-            consumed = _keyBindings.consumeKeyboardEvent(None, keyboardEvent)
+            if settings.learnModeEnabled:
+                consumed = listShortcuts(keyboardEvent)
+            if (not consumed):
+                consumed = _keyBindings.consumeKeyboardEvent(None, keyboardEvent)
             if (not consumed) and (_currentPresentationManager >= 0):
                 consumed = _PRESENTATION_MANAGERS[_currentPresentationManager].\
                            processKeyboardEvent(keyboardEvent)
@@ -1199,6 +1202,173 @@ def helpForOrca(script=None, inputEvent=None):
                  gtk.get_current_event_time())
     return True
 
+def listShortcuts(event):
+    """When learn mode is enabled, this function enables user to list
+    Orca shortcuts. If 'c' is pressed, it creates a list of Orca default
+    shortcuts. In case of 'c double click' it creates a list of Orca shortcuts
+    (if any) which are specific to the focussed application. When a list is
+    created, user can either navigate the list using 'Up' and 'Down' keys or 
+    exit the list by pressing the 'Escape' key. Other learn mode functionality
+    is disabled until user exits the shortcuts list. 
+
+    Arguments:
+    - event: an AT-SPI DeviceEvent
+
+    Returns True if the event is consumed (and False if not).
+    """
+    numShortcuts = len(orca_state.listOfShortcuts)
+    consumed = False
+    clickCount = 0
+    message = ""
+    if event.type == pyatspi.KEY_PRESSED_EVENT:
+        clickCount = orca_state.activeScript.getClickCount()
+        if (event.event_string.lower() == "c") and (clickCount == 1):
+            if (numShortcuts == 0) or (orca_state.typeOfShortcuts != \
+            'orcaDefault'):
+                orca_state.listOfShortcuts = getListOfShortcuts("orcaDefault")
+                orca_state.typeOfShortcuts = 'orcaDefault'
+                numShortcuts = len(orca_state.listOfShortcuts)
+            orca_state.ptrToShortcut = 0
+            message = _("%d Orca default shortcuts are listed. Use Up & Down "
+            "keys to navigate the list; or press Escape to exit.") %numShortcuts
+            speech.speak(message)
+            braille.displayMessage(message, -1, -1) 
+            message = orca_state.listOfShortcuts[orca_state.ptrToShortcut][0]+\
+            "\t" + orca_state.listOfShortcuts[orca_state.ptrToShortcut][1]
+            speech.speak(message)
+            braille.displayMessage(message, -1, -1)
+            consumed = True
+        elif (event.event_string.lower() == "c") and (clickCount >= 2):
+            if (numShortcuts==0) or (orca_state.typeOfShortcuts!='orcaAppln'):
+                orca_state.listOfShortcuts = getListOfShortcuts("orcaAppln")
+                orca_state.typeOfShortcuts = 'orcaAppln'  
+                numShortcuts = len(orca_state.listOfShortcuts)
+            if numShortcuts > 0: 
+                orca_state.ptrToShortcut = 0
+                message = _("%d Orca %s shortcuts are listed. Use Up & Down "
+                "keys to navigate the list; or press Escape to exit.") % \
+                (numShortcuts, orca_state.activeScript.app.name)
+                speech.speak(message)
+                braille.displayMessage(message, -1, -1)
+                message = orca_state.listOfShortcuts[orca_state.ptrToShortcut]\
+                [0] + "\t" + orca_state.listOfShortcuts[orca_state.\
+                ptrToShortcut][1]
+                speech.speak(message)
+                braille.displayMessage(message, -1, -1)
+            else:
+                message = _("There are no Orca shortcuts, for the application "
+                "under focus.")
+                speech.speak(message)
+                braille.displayMessage(message, -1, -1)
+            consumed = True
+        elif (numShortcuts > 0) and (event.event_string == "Up"):
+            if orca_state.ptrToShortcut > 0: 
+                orca_state.ptrToShortcut = orca_state.ptrToShortcut-1
+            else:
+                orca_state.ptrToShortcut = numShortcuts-1 
+                message = _("Wrapping down to end of list.")
+                speech.speak(message)
+                braille.displayMessage(message, -1, -1)
+            message = orca_state.listOfShortcuts[orca_state.ptrToShortcut][0] \
+            + "\t" + orca_state.listOfShortcuts[orca_state.ptrToShortcut][1]
+            speech.speak(message)
+            braille.displayMessage(message, -1, -1)
+            consumed = True
+        elif (numShortcuts > 0) and (event.event_string == "Down"):
+            if orca_state.ptrToShortcut < numShortcuts-1: 
+                orca_state.ptrToShortcut = orca_state.ptrToShortcut+1
+            else:
+                orca_state.ptrToShortcut = 0 
+                message = _('Wrapping up to beginning of list.')
+                speech.speak(message)
+                braille.displayMessage(message, -1, -1)
+            message = orca_state.listOfShortcuts[orca_state.ptrToShortcut][0] \
+            + "\t" + orca_state.listOfShortcuts[orca_state.ptrToShortcut][1]
+            speech.speak(message)
+            braille.displayMessage(message, -1, -1)
+            consumed = True
+        elif (numShortcuts > 0) and (event.event_string != "Escape"):
+            message = _("%d Orca shortcuts are listed. Use Up & Down keys "
+            "to navigate the list; or press Escape to exit.") % numShortcuts
+            speech.speak(message)
+            braille.displayMessage(message, -1, -1)
+            consumed = True
+    elif (event.type == pyatspi.KEY_RELEASED_EVENT) and (event.event_string == \
+    "Escape") and (numShortcuts > 0):
+        orca_state.listOfShortcuts = []
+        orca_state.typeOfShortcuts = ''
+        numShortcuts = len(orca_state.listOfShortcuts)
+        orca_state.ptrToShortcut = -1
+        message = _('Leaving list of shortcuts.')	
+        speech.speak(message)
+        braille.displayMessage(message, -1, -1)
+        consumed = True
+    return consumed
+
+import default    # for the default keyBindings, brailleBindings
+def getListOfShortcuts(typeOfShortcuts):
+    """This function returns a list of Orca default shortcuts if the argument is
+    "orcaDefault". It returns a list of Orca shortcuts which are specific to the 
+    application under focus, if the argument is "orcaAppln". Orca default shortcuts
+    are those found in the default script. Application specific shortcuts are those
+    which are present in the active script, but not in the default script. Only one
+    shortcut per handler is listed. The list is sorted on shortcuts.    
+
+    Arguments:
+    - typeOfShortcuts: a string specifying the desired type of shortcuts.
+
+    Returns a list of shortcuts; depending on the value of argument.
+    """
+    numShortcuts = len(orca_state.listOfShortcuts)
+    shortcuts = []
+    shortcut = ""
+    clickCount = ""
+    brlKeyName = ""     
+    brlHandler = None
+    defScript = default.Script(None)
+    defKeyBindings = defScript.getKeyBindings()
+    defBrlBindings = defScript.getBrailleBindings()
+    kbindings = keybindings.KeyBindings()
+    if typeOfShortcuts == "orcaDefault":
+        for kb in defKeyBindings.keyBindings:
+            if kb.keysymstring:
+                if not kbindings.hasKeyBinding(kb,"description"):
+                    kbindings.add(kb)
+    elif typeOfShortcuts == "orcaAppln":
+        for kb in orca_state.activeScript.keyBindings.keyBindings:
+            if kb.keysymstring:
+                if not (defKeyBindings.hasKeyBinding(kb,"description") or \
+                kbindings.hasKeyBinding(kb,"description")):
+                    kbindings.add(kb)
+
+    for kb in kbindings.keyBindings:
+        keysymString = kb.keysymstring.replace("KP_",_("KEYPAD "))
+        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")
+        shortcut = (kb.handler.description, keybindings.getModifierNames\
+        (kb.modifiers) + keysymString.upper() + " " + clickCount)
+        shortcuts.append(shortcut)
+        shortcuts = sorted(shortcuts, key=lambda shortcut: shortcut[1])
+
+    if typeOfShortcuts == "orcaDefault":
+        for bb in defBrlBindings.keys():
+            brlKeyName = braille.command_name[bb]
+            brlHandler = defBrlBindings[bb]
+            shortcut = (brlHandler.description, brlKeyName)
+            shortcuts.append(shortcut) 
+    return shortcuts
+
 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.
diff --git a/src/orca/orca_state.py b/src/orca/orca_state.py
index ab4d68f..677d9c7 100644
--- a/src/orca/orca_state.py
+++ b/src/orca/orca_state.py
@@ -95,6 +95,11 @@ lastWordCheckedForSpelling = ""
 #
 searchQuery = None
 
+# Assists in speaking list of keyboard shortcuts 
+listOfShortcuts = []
+typeOfShortcuts = ''
+ptrToShortcut = -1
+
 # Whether we should use the pronunciation dictionary to help speak 
 # certain words. This will be True everywhere except when focus is 
 # in the Pronunciation Dictionary in the Orca Preferences dialog.
