diff --git src/orca/Gecko.py src/orca/Gecko.py
index 958d993..434160c 100644
--- src/orca/Gecko.py
+++ src/orca/Gecko.py
@@ -4653,10 +4653,7 @@ class Script(default.Script):
                 if not len(string):
                     continue
 
-                regions = [braille.Region(
-                    string,
-                    focusedCharacterOffset - startOffset,
-                    expandOnCursor=True)]
+                regions = [braille.Text(obj)]
                 if obj.getRole() == pyatspi.ROLE_LINK:
                     link = obj
                 else:
@@ -8229,6 +8226,10 @@ class Script(default.Script):
     #                                                                  #
     ####################################################################
 
+    def setCaretOffset(self, obj, characterOffset):
+        self.setCaretPosition(obj, characterOffset)
+        self.updateBraille(obj)
+
     def setCaretPosition(self, obj, characterOffset):
         """Sets the caret position to the given character offset in the
         given object.
diff --git src/orca/braille.py src/orca/braille.py
index 0900d4f..d22b425 100644
--- src/orca/braille.py
+++ src/orca/braille.py
@@ -467,20 +467,6 @@ class Text(Region):
             [string, self.caretOffset, self.lineOffset] = \
                  orca_state.activeScript.getTextLineAtCaret(self.accessible)
 
-        # Sometimes, gnome-terminal will give us very odd values when
-        # the user is editing using 'vi' and has positioned the caret
-        # at the first character of the first line.  In this case, we
-        # end up getting a very large negative number for the line offset.
-        # So, we just assume the user is at the first character.
-        #
-        if self.lineOffset < 0:
-            self.caretOffset = 0
-            self.lineOffset = 0
-            [string, startOffset, endOffset] = \
-                self.accessible.queryText().getTextAtOffset(
-                    0,
-                    pyatspi.TEXT_BOUNDARY_LINE_START)
-
         cursorOffset = min(self.caretOffset - self.lineOffset, len(string))
 
         self._maxCaretOffset = self.lineOffset + len(string.decode("UTF-8"))
@@ -540,7 +526,8 @@ class Text(Region):
             return
 
         newCaretOffset = min(self.lineOffset + offset, self._maxCaretOffset)
-        self.accessible.queryText().setCaretOffset(newCaretOffset)
+        orca_state.activeScript.setCaretOffset(
+            self.accessible, newCaretOffset)
 
     def getAttributeMask(self):
         """Creates a string which can be used as the attrOr field of brltty's
@@ -571,6 +558,8 @@ class Text(Region):
                 attributes, startOffset, endOffset = \
                             script.getTextAttributes(self.accessible,
                                                      offset, True)
+                if endOffset <= offset:
+                    break
                 mask = settings.TEXT_ATTR_BRAILLE_NONE
                 offset = endOffset
                 for attrib in attributes:
@@ -681,7 +670,7 @@ class ReviewText(Region):
 
         offset = self.displayToBufferOffset(offset)
         newCaretOffset = self.lineOffset + offset
-        self.accessible.queryText().setCaretOffset(newCaretOffset)
+        orca_state.activeScript.setCaretOffset(self.accessible, newCaretOffset)
 
 class Line:
     """A horizontal line on the display.  Each Line is composed of a sequential
diff --git src/orca/default.py src/orca/default.py
index 7bc386b..95ca26c 100644
--- src/orca/default.py
+++ src/orca/default.py
@@ -6739,6 +6739,21 @@ class Script(script.Script):
         """
         print "\a"
 
+    def setCaretOffset(self, obj, offset):
+        """Set the caret offset on a given accessible. Similar to
+        Accessible.setCaretOffset()
+
+        Arguments:
+        - obj: Given accessible object.
+        - offset: Offset to hich to set the caret.
+        """
+        try:
+            texti = obj.queryText()
+        except:
+           return None
+
+        texti.setCaretOffset(offset)
+
     def attribsToDictionary(self, dict_string):
         """Creates a Python dict from a typical attributes list returned from
         different AT-SPI methods.
@@ -6806,7 +6821,7 @@ class Script(script.Script):
         rv.update(self.attribsToDictionary(attrib_str))
 
         return rv, start, end
-
+        
 # Dictionary that defines the state changes we care about for various
 # objects.  The key represents the role and the value represents a list
 # of states that we care about.
diff --git src/orca/scripts/gnome-terminal.py src/orca/scripts/gnome-terminal.py
index 3f256c4..d5a0c68 100644
--- src/orca/scripts/gnome-terminal.py
+++ src/orca/scripts/gnome-terminal.py
@@ -266,3 +266,33 @@ class Script(default.Script):
            and self.isWordDelimiter(text.decode("UTF-8")[-1:]):
             if matchFound:
                 self.echoPreviousWord(event.source)
+
+    def getTextLineAtCaret(self, acc):
+        """Gets the line of text where the caret is.
+
+        Argument:
+        - obj: an Accessible object that implements the AccessibleText
+               interface
+
+        Returns the [string, caretOffset, startOffset] for the line of text
+        where the caret is.
+        """
+        string, caretOffset, lineOffset = \
+                default.Script.getTextLineAtCaret(self, acc)
+
+        # Sometimes, gnome-terminal will give us very odd values when
+        # the user is editing using 'vi' and has positioned the caret
+        # at the first character of the first line.  In this case, we
+        # end up getting a very large negative number for the line offset.
+        # So, we just assume the user is at the first character.
+        #
+        if lineOffset < 0:
+            caretOffset = 0
+            lineOffset = 0
+            texti = acc.queryText()
+            string, startOffset, endOffset = \
+                    texti.getTextAtOffset(0,
+                                          pyatspi.TEXT_BOUNDARY_LINE_START)
+
+        return string, caretOffset, lineOffset
+        
