Index: src/Perks/BasicMagPerk.py
===================================================================
--- src/Perks/BasicMagPerk.py	(revision 549)
+++ src/Perks/BasicMagPerk.py	(working copy)
@@ -341,7 +341,7 @@
     else:
       return  roi
   
-  def getDesiredFocalPoint(self, por, x_padding=5):
+  def getDesiredFocalPoint(self, por, trackmouse=True, x_padding=5):
     '''
     Calculates the desired focal point for a specific POR.
     And retuns current focal point, and desired focal point.
@@ -354,7 +354,7 @@
     width, height = self.getAccVisualExtents(por)
     pos_x, pos_y = self.getAccPosition()
     m_x, m_y = self.perk.mousepos
-    end_x, end_y = self.getAccVisualPoint(por)
+    end_x, end_y = self.getAccVisualPoint(por=por)
     
     # calculate start_pos
     roi_x1, roi_y1, roi_x2, roi_y2 = self.perk.getPos()
@@ -365,7 +365,8 @@
     x_offset = width/2 - roi_width + x_padding
     # if mouse is within control
     if (m_x >= pos_x-self.FUDGE) and (m_x <= (pos_x+width+self.FUDGE)) and \
-             (m_y >= pos_y-self.FUDGE) and (m_y <= (pos_y+height+self.FUDGE)):
+             (m_y >= pos_y-self.FUDGE) and (m_y <= (pos_y+height+self.FUDGE)) \
+             and trackmouse:
       end_x = m_x
       end_y = m_y
     else:
@@ -464,5 +465,7 @@
     if self.perk.getState().MagReview:
       result = self.getTempVal('review')
       if result in (AEConstants.REVIEW_OK, AEConstants.REVIEW_WRAP):
-        start_pos, end_pos = self.perk.getDesiredFocalPoint(self.task_por)
+        
+        start_pos, end_pos = self.perk.getDesiredFocalPoint(self.task_por ,\
+                                                            trackmouse=False)
         self.perk.goTo(end_pos, start_pos)
Index: src/Task/Tools/View.py
===================================================================
--- src/Task/Tools/View.py	(revision 549)
+++ src/Task/Tools/View.py	(working copy)
@@ -524,6 +524,7 @@
     except LookupError:
       raise PORError
     except NotImplementedError:
+      print "not implemented for ", por
       return None
    
   def getAccPosition(self, por=None):
Index: src/Adapters/ATSPI/DefaultInfo.py
===================================================================
--- src/Adapters/ATSPI/DefaultInfo.py	(revision 549)
+++ src/Adapters/ATSPI/DefaultInfo.py	(working copy)
@@ -263,9 +263,18 @@
     @raise NotImplementedError: When this accessible does not support the
       Component interface
     '''
-    c = Interfaces.IComponent(self.accessible)
-    bb = c.getExtents(Constants.DESKTOP_COORDS)
-    return bb.x+bb.width/2, bb.y+bb.height/2
+    text = Interfaces.IText(self.accessible)
+    if text and self.char_offset != 0:
+      if self.item_offset is not None:
+        off = self.item_offset + self.char_offset
+      else:
+        off = self.char_offset
+      x, y, w, h = text.getCharacterExtents(off, Constants.DESKTOP_COORDS)
+      return x, y
+    else:  
+      c = Interfaces.IComponent(self.accessible)
+      bb = c.getExtents(Constants.DESKTOP_COORDS)
+      return bb.x+bb.width/2, bb.y+bb.height/2
   
   @pyLinAcc.errorToLookupError
   def getAccPosition(self):
Index: src/Adapters/ATSPI/ContainerAdapter.py
===================================================================
--- src/Adapters/ATSPI/ContainerAdapter.py	(revision 549)
+++ src/Adapters/ATSPI/ContainerAdapter.py	(working copy)
@@ -364,6 +364,9 @@
       return super(ContainerAccInfoAdapter, self).getAccVisualExtents()
     try:
       c = self.accessible.getChildAtIndex(self.item_offset)
+      comp = Interfaces.IComponent(c)
+      bb = comp.getExtents(Constants.DESKTOP_COORDS)
+      return bb.width, bb.height
     except AttributeError:
       raise IndexError
     return IAccessibleInfo(POR(c)).getAccVisualExtents()
@@ -382,6 +385,13 @@
       return super(ContainerAccInfoAdapter, self).getAccVisualPoint()
     try:
       c = self.accessible.getChildAtIndex(self.item_offset)
+      text = Interfaces.IText(c)
+      if text:
+        x, y, w, h = text.getCharacterExtents(self.char_offset, \
+                                            Constants.DESKTOP_COORDS)
+        return x, y
+      else:
+        return IAccessibleInfo(POR(c)).getAccVisualPoint() 
     except AttributeError:
       raise IndexError
     return IAccessibleInfo(POR(c)).getAccVisualPoint()
