Index: src/orca/Gecko.py
===================================================================
--- src/orca/Gecko.py	(revision 2322)
+++ src/orca/Gecko.py	(working copy)
@@ -62,6 +62,11 @@
 #
 arrowToLineBeginning = True
 
+# Whether or not to use the structrual navigation commands (e.g. H
+# for heading, T for table, and so on).
+#
+structuralNavigationEnabled = True
+
 # Whether or not to speak the cell's coordinates when navigating
 # from cell to cell in HTML tables.
 #
@@ -1278,6 +1283,18 @@
                 #
                 _("Switches between Gecko native and Orca caret navigation."))
 
+        self.inputEventHandlers["toggleStructuralNavigationHandler"] = \
+            input_event.InputEventHandler(
+                Script.toggleStructuralNavigation,
+                # Translators: the structural navigation keys are designed
+                # to move the caret around the HTML content by object type.
+                # Thus H moves you to the next heading, Shift H to the
+                # previous heading, T to the next table, and so on. Some
+                # users prefer to turn this off to use Firefox's search
+                # when typing feature.
+                #
+                _("Toggles structural navigation keys."))
+
         self.inputEventHandlers["sayAllHandler"] = \
             input_event.InputEventHandler(
                 Script.sayAll,
@@ -1717,6 +1734,13 @@
                 1 << settings.MODIFIER_ORCA,
                 self.inputEventHandlers["toggleCaretNavigationHandler"]))
 
+        keyBindings.add(
+            keybindings.KeyBinding(
+                "z",
+                1 << settings.MODIFIER_ORCA,
+                1 << settings.MODIFIER_ORCA,
+                self.inputEventHandlers["toggleStructuralNavigationHandler"]))
+
         if controlCaretNavigation:
             for keyBinding in self.__getArrowBindings().keyBindings:
                 keyBindings.add(keyBinding)
@@ -2923,9 +2947,12 @@
                             rolenames.ROLE_TEXT,
                             rolenames.ROLE_PASSWORD_TEXT]
 
+        if not structuralNavigationEnabled:
+            return False
+
         # If the Orca_Modifier key was pressed, we're handling it.
         #
-        if isinstance(orca_state.lastInputEvent, input_event.KeyboardEvent):
+        elif isinstance(orca_state.lastInputEvent, input_event.KeyboardEvent):
             mods = orca_state.lastInputEvent.modifiers
             isOrcaKey = mods & (1 << settings.MODIFIER_ORCA)
             if isOrcaKey:
@@ -5554,3 +5581,33 @@
         debug.println(debug.LEVEL_CONFIGURATION, string)
         speech.speak(string)
         braille.displayMessage(string)
+
+    def toggleStructuralNavigation(self, inputEvent):
+        """Toggles structural navigation keys."""
+
+        global structuralNavigationEnabled
+
+        structuralNavigationEnabled = not structuralNavigationEnabled
+
+        if structuralNavigationEnabled:
+                # Translators: the structural navigation keys are designed
+                # to move the caret around the HTML content by object type.
+                # Thus H moves you to the next heading, Shift H to the
+                # previous heading, T to the next table, and so on. Some
+                # users prefer to turn this off to use Firefox's search
+                # when typing feature.
+                #
+            string = _("Structural navigation keys on.")
+        else:
+                # Translators: the structural navigation keys are designed
+                # to move the caret around the HTML content by object type.
+                # Thus H moves you to the next heading, Shift H to the
+                # previous heading, T to the next table, and so on. Some
+                # users prefer to turn this off to use Firefox's search
+                # when typing feature.
+                #
+            string = _("Structural navigation keys off.")
+
+        debug.println(debug.LEVEL_CONFIGURATION, string)
+        speech.speak(string)
+        braille.displayMessage(string)
