Index: src/orca/default.py
===================================================================
--- src/orca/default.py	(revision 2928)
+++ src/orca/default.py	(working copy)
@@ -4757,7 +4757,8 @@
             unicodeText = displayedText.decode("UTF-8")
             if unicodeText \
                and (len(unicodeText) == 1) \
-               and (unicodeText[0] == self.EMBEDDED_OBJECT_CHARACTER):
+               and (unicodeText[0] == self.EMBEDDED_OBJECT_CHARACTER) \
+               and obj.childCount > 0:
                 try:
                     displayedText = self.getDisplayedText(obj.child(0))
                 except:
Index: src/orca/Gecko.py
===================================================================
--- src/orca/Gecko.py	(revision 2928)
+++ src/orca/Gecko.py	(working copy)
@@ -5880,6 +5880,8 @@
                                      characterOffset,
                                      characterOffset + 1).decode("UTF-8")
             if character == self.EMBEDDED_OBJECT_CHARACTER:
+                if obj.childCount <= 0:
+                    return [obj,  characterOffset + 1]
                 try:
                     childIndex = self.getChildIndex(obj, characterOffset)
                     return self.findFirstCaretContext(obj.child(childIndex), 0)
@@ -5931,7 +5933,7 @@
         if obj.text and obj.text.characterCount:
             unicodeText = self.getUnicodeText(obj)
             nextOffset = startOffset + 1
-            if nextOffset < len(unicodeText):
+            while nextOffset < len(unicodeText):
                 if unicodeText[nextOffset] != self.EMBEDDED_OBJECT_CHARACTER:
                     return [obj, nextOffset]
                 elif obj.childCount:
@@ -5939,7 +5941,12 @@
                     if child:
                         return self.findNextCaretInOrder(child,
                                                          -1,
-                                                         includeNonText)
+                                                       includeNonText)
+                    else:
+                        nextOffset += 1
+                else:
+                    nextOffset += 1
+
         elif obj.childCount and obj.child(0):
             try:
                 return self.findNextCaretInOrder(obj.child(0),
@@ -6009,15 +6016,20 @@
             if startOffset == -1:
                 startOffset = len(unicodeText)
             previousOffset = startOffset - 1
-            if previousOffset >= 0:
+            while previousOffset >= 0:
                 if unicodeText[previousOffset] \
                     != self.EMBEDDED_OBJECT_CHARACTER:
                     return [obj, previousOffset]
+                elif obj.childCount:
+                    child = obj.child(self.getChildIndex(obj, previousOffset))
+                    if child:
+                        return self.findPreviousCaretInOrder(child,
+                                                             -1,
+                                                             includeNonText)
+                    else:
+                        previousOffset -= 1
                 else:
-                    return self.findPreviousCaretInOrder(
-                        obj.child(self.getChildIndex(obj, previousOffset)),
-                        -1,
-                        includeNonText)
+                    previousOffset -= 1
         elif obj.childCount and obj.child(obj.childCount - 1):
             try:
                 return self.findPreviousCaretInOrder(
@@ -6049,6 +6061,8 @@
                 index = obj.index - 1
                 if index >= 0:
                     try:
+                        if obj.parent.childCount <= 0:
+                            [None, -1]
                         return self.findPreviousCaretInOrder(
                             obj.parent.child(index),
                             -1,
