diff --git a/src/orca/default.py b/src/orca/default.py
index 33cbb3d..e2aa31c 100644
--- a/src/orca/default.py
+++ b/src/orca/default.py
@@ -3166,7 +3166,7 @@ class Script(script.Script):
         utterances.extend(self.tutorialGenerator.getTutorial(obj, True))
         speech.speak(utterances)
 
-    def updateBraille(self, obj, extraRegion=None):
+    def updateBraille(self, obj, extraRegion=None, targetCursorCell=0):
         """Updates the braille display to show the give object.
 
         Arguments:
@@ -3202,7 +3202,7 @@ class Script(script.Script):
         else:
             braille.setFocus(result[1])
 
-        braille.refresh(True)
+        braille.refresh(True, targetCursorCell=targetCursorCell)
 
     ########################################################################
     #                                                                      #
@@ -3375,7 +3375,10 @@ class Script(script.Script):
 
         return selSpoken
 
-    def _presentTextAtNewCaretPosition(self, event, otherObj=None):
+    def _presentTextAtNewCaretPosition(self,
+                                       event,
+                                       otherObj=None,
+                                       noSpeech=False):
         """Updates braille, magnification, and outputs speech for the
         event.source or the otherObj."""
 
@@ -3394,12 +3397,26 @@ class Script(script.Script):
             if isinstance(region, braille.Text) \
                and (region.accessible == obj):
                 if region.repositionCursor():
+                    print "REFRESH", obj, text.getText(0, -1), braille.cursorCell
                     braille.refresh(True)
                     brailleNeedsRepainting = False
                 break
 
+        if event and (event.type.startswith("object:text-changed:insert") \
+                      or event.type.startswith("object:text-changed:delete")):
+            if not brailleNeedsRepainting:
+                print "OOPS - changed my mind.  Also need to UPDATE."
+            brailleNeedsRepainting = True
+            targetCursorCell = braille.cursorCell
+        elif brailleNeedsRepainting:
+            targetCursorCell = 0
+
         if brailleNeedsRepainting:
-            self.updateBraille(obj)
+            print "UPDATE", obj, text.getText(0, -1), targetCursorCell
+            self.updateBraille(obj, targetCursorCell=targetCursorCell)
+
+        if noSpeech:
+            return
 
         if not orca_state.lastInputEvent:
             return
@@ -3601,7 +3618,10 @@ class Script(script.Script):
         # they see will not be the same as what the user normally
         # experiences.]]]
 
-        self.updateBraille(event.source)
+        if self.isTextArea(event.source):
+            self._presentTextAtNewCaretPosition(event, noSpeech=True)
+        else:
+            self.updateBraille(event.source)
 
         # The any_data member of the event object has the deleted text in
         # it - If the last key pressed was a backspace or delete key,
@@ -3699,7 +3719,10 @@ class Script(script.Script):
         if event.source.getRole() == pyatspi.ROLE_SLIDER:
             return
 
-        self.updateBraille(event.source)
+        if self.isTextArea(event.source):
+            self._presentTextAtNewCaretPosition(event, noSpeech=True)
+        else:
+            self.updateBraille(event.source)
 
         text = event.any_data
 
diff --git a/src/orca/scripts/apps/gnome-terminal.py b/src/orca/scripts/apps/gnome-terminal.py
index 2e09762..d461594 100644
--- a/src/orca/scripts/apps/gnome-terminal.py
+++ b/src/orca/scripts/apps/gnome-terminal.py
@@ -150,7 +150,9 @@ class Script(default.Script):
             and (event.source.parent != orca_state.locusOfFocus):
             return
 
-        self.updateBraille(event.source)
+        # Refresh braille
+        #
+        self._presentTextAtNewCaretPosition(event, noSpeech=True)
 
         # Speak the character that has just been deleted.
         #
@@ -186,7 +188,9 @@ class Script(default.Script):
             and (event.source.parent != orca_state.locusOfFocus):
             return
 
-        self.updateBraille(event.source)
+        # Refresh braille
+        #
+        self._presentTextAtNewCaretPosition(event, noSpeech=True)
 
         text = event.any_data
 
