Index: src/Adapters/ATSPI/HypertextAdapter.py
===================================================================
--- src/Adapters/ATSPI/HypertextAdapter.py	(revision 460)
+++ src/Adapters/ATSPI/HypertextAdapter.py	(working copy)
@@ -145,7 +145,7 @@
     if char >= count:
       # if it does not exist, raise IndexError
       raise IndexError
-    elif text.getCharacterAtOffset(char-1) != EMBED_VAL:
+    elif char != 0 and text.getCharacterAtOffset(char-1) != EMBED_VAL:
       # if we're currently on text, not an item, find the next embed
       char = _getNextEmbedCharOffset(acc, char-1)
       # continue with the remaining if statements using the new char
Index: src/Adapters/ATSPI/TreeAdapter.py
===================================================================
--- src/Adapters/ATSPI/TreeAdapter.py	(revision 460)
+++ src/Adapters/ATSPI/TreeAdapter.py	(working copy)
@@ -134,13 +134,13 @@
     acc = self.accessible
     if only_visible:
       comp = Interfaces.IComponent(acc)
-      e = comp.getExtents(Constants.WINDOW_COORDS)
+      e = comp.getExtents(Constants.DESKTOP_COORDS)
       # get the first item
       x, y = e.x+FUDGE_PX, e.y+FUDGE_PX
-      first = comp.getAccessibleAtPoint(x, y, Constants.WINDOW_COORDS)
+      first = comp.getAccessibleAtPoint(x, y, Constants.DESKTOP_COORDS)
       # get the last item
       x, y = e.x+e.width-FUDGE_PX, e.y+e.height-FUDGE_PX
-      last = comp.getAccessibleAtPoint(x, y, Constants.WINDOW_COORDS)
+      last = comp.getAccessibleAtPoint(x, y, Constants.DESKTOP_COORDS)
     else:
       first = None
       last = None
Index: src/Adapters/ATSPI/TextAdapter.py
===================================================================
--- src/Adapters/ATSPI/TextAdapter.py	(revision 460)
+++ src/Adapters/ATSPI/TextAdapter.py	(working copy)
@@ -196,17 +196,16 @@
     comp = Interfaces.IComponent(acc)
     text = Interfaces.IText(acc)
     if only_visible:
-      e = comp.getExtents(Constants.WINDOW_COORDS)
+      e = comp.getExtents(Constants.DESKTOP_COORDS)
       # get the first item
-      x, y = e.x-FUDGE_PX, e.y-FUDGE_PX
-      first = text.getOffsetAtPoint(x, y, Constants.WINDOW_COORDS)
+      first = text.getOffsetAtPoint(e.x, e.y, Constants.DESKTOP_COORDS)
       # get the last item
-      x, y = e.x+e.width+FUDGE_PX, e.y+e.height+FUDGE_PX
-      last = text.getOffsetAtPoint(x, y, Constants.WINDOW_COORDS)
+      last = text.getOffsetAtPoint(e.x+e.width, e.y+e.height, \
+                                   Constants.DESKTOP_COORDS)
     else:
       first = 0
       last = text.characterCount-1
-    if first == last:
+    if first == last or first == -1 or last == -1:
       # nit: protection against bad bounds reporting
       first = 0
       last = text.characterCount-1
