Index: src/orca/Gecko.py
===================================================================
--- src/orca/Gecko.py	(revision 3505)
+++ src/orca/Gecko.py	(working copy)
@@ -8115,13 +8115,14 @@
                                                                characterOffset)
             if obj and obj.getState().contains(pyatspi.STATE_VISIBLE):
                 break
-        if obj:
-            self.setCaretPosition(obj, characterOffset)
+
+        if not obj:
+            [obj, characterOffset] = self.getBottomOfFile()
         else:
-            self.clearCaretContext()
+            self.speakCharacterAtOffset(obj, characterOffset)
 
+        self.setCaretPosition(obj, characterOffset)
         self.updateBraille(obj)
-        self.speakCharacterAtOffset(obj, characterOffset)
 
     def goPreviousCharacter(self, inputEvent):
         """Positions the caret offset to the previous character or object
@@ -8134,13 +8135,13 @@
             if obj and obj.getState().contains(pyatspi.STATE_VISIBLE):
                 break
 
-        if obj:
-            self.setCaretPosition(obj, characterOffset)
+        if not obj:
+            [obj, characterOffset] = self.getTopOfFile()
         else:
-            self.clearCaretContext()
+            self.speakCharacterAtOffset(obj, characterOffset)
 
+        self.setCaretPosition(obj, characterOffset)
         self.updateBraille(obj)
-        self.speakCharacterAtOffset(obj, characterOffset)
 
     def goPreviousWord(self, inputEvent):
         """Positions the caret offset to beginning of the previous
