diff --git a/textLayout/src/flashx/textLayout/elements/ParagraphElement.as b/textLayout/src/flashx/textLayout/elements/ParagraphElement.as
index 0622c84..dbb01b8 100644
--- a/textLayout/src/flashx/textLayout/elements/ParagraphElement.as
+++ b/textLayout/src/flashx/textLayout/elements/ParagraphElement.as
@@ -805,6 +805,9 @@
 		public function findPreviousAtomBoundary(relativePosition:int):int
 		{
 			var tb:TextBlock = getTextBlockAtPosition(relativePosition);
+			if(!tb || !tb.content)
+				return relativePosition-1;
+			
 			var tbStart:int = getTextBlockStart(tb);
 			var textBlockPos:int = relativePosition - tbStart;
             var tl:TextLine = tb.getTextLineAtCharIndex(textBlockPos);
@@ -852,7 +855,11 @@
     				{
     					tl = tl.previousLine;
     					if (!tl)
-    						return -1;
+						{
+							if(tb != _textBlocks[0])
+								return relativePosition-1;
+							return -1;
+						}
     					// need this when 0x2028 line separator in use
     					if (tl.textBlockBeginIndex + tl.rawTextLength == textBlockPos)
     						return tl.textBlockBeginIndex + tl.rawTextLength - 1 + tbStart;
@@ -899,6 +906,8 @@
 		public function findNextAtomBoundary(relativePosition:int):int
 		{
 			var tb:TextBlock = getTextBlockAtPosition(relativePosition);
+			if(!tb || !tb.content)
+				return relativePosition+1;
 			var tbStart:int = getTextBlockStart(tb);
 			var textBlockPos:int = relativePosition - tbStart;
             var tl:TextLine = tb.getTextLineAtCharIndex(textBlockPos);
@@ -941,7 +950,11 @@
     				{
     					tl = tl.nextLine;
     					if (!tl)
-    						return -1;
+						{
+							if(tb != _textBlocks[_textBlocks.length-1])
+								return relativePosition+1;
+							return -1;
+						}
     					return tl.textBlockBeginIndex + tbStart;
     				}
     				while (++textBlockPos)
diff --git a/textLayout/src/flashx/textLayout/utils/NavigationUtil.as b/textLayout/src/flashx/textLayout/utils/NavigationUtil.as
index 091ceda..fea8549 100644
--- a/textLayout/src/flashx/textLayout/utils/NavigationUtil.as
+++ b/textLayout/src/flashx/textLayout/utils/NavigationUtil.as
@@ -25,6 +25,7 @@
 	
 	import flashx.textLayout.compose.IFlowComposer;
 	import flashx.textLayout.compose.TextFlowLine;
+	import flashx.textLayout.compose.TextFlowTableBlock;
 	import flashx.textLayout.container.ContainerController;
 	import flashx.textLayout.container.ScrollPolicy;
 	import flashx.textLayout.elements.FlowLeafElement;
@@ -337,6 +338,7 @@
 		{
 			var endIdx:int;
 			var targetTextLine:TextLine = targetFlowLine.getTextLine(true);
+			var blockOffset:int = targetFlowLine.paragraph.getTextBlockAbsoluteStart(targetTextLine.textBlock);
 			var currentTextLine:TextLine = curTextFlowLine.getTextLine(true);
 			var bidiRightToLeft:Boolean = ((currentTextLine.getAtomBidiLevel(atomIndex) % 2) != 0); 				
 			
@@ -412,7 +414,7 @@
 						paraSelectionIdx = leanRight ? targetTextLine.getAtomTextBlockEndIndex(atomIndex) : targetTextLine.getAtomTextBlockBeginIndex(atomIndex);							
 					}
 				}
-				endIdx = targetFlowLine.paragraph.getAbsoluteStart() + paraSelectionIdx;
+				endIdx = blockOffset + paraSelectionIdx;
 			}
 			return endIdx;
 		}
@@ -447,8 +449,8 @@
 				var lineStart:int = curTextFlowLine.absoluteStart;
 				var lineDelta:int = endIdx - lineStart;
 				var currentTextLine:TextLine = curTextFlowLine.getTextLine(true);
-				var para:ParagraphElement = curTextFlowLine.paragraph;
-				var atomIndex:int = currentTextLine.getAtomIndexAtCharIndex(endIdx - para.getAbsoluteStart());
+				var blockOffset:int = curTextFlowLine.paragraph.getTextBlockAbsoluteStart(currentTextLine.textBlock);
+				var atomIndex:int = currentTextLine.getAtomIndexAtCharIndex(endIdx - blockOffset);
 				var bidiRightToLeft:Boolean = ((currentTextLine.getAtomBidiLevel(atomIndex) % 2) != 0); 
 				var curPosRect:Rectangle = currentTextLine.getAtomBounds(atomIndex);
 				var currentTextLineX:Number = currentTextLine.x;
@@ -483,8 +485,11 @@
 				
 				//at this point, we have the global point of our current position.  Now adjust x or y to the
 				//baseline of the next line.
-				var nextFlowLine:TextFlowLine = textFlow.flowComposer.getLineAt(curLine + 1);
-				if (nextFlowLine.absoluteStart >= limitIdx)
+				var lineInc:int = 1;
+				var nextFlowLine:TextFlowLine = textFlow.flowComposer.getLineAt(curLine + lineInc);
+				while(nextFlowLine is TextFlowTableBlock)
+					nextFlowLine = textFlow.flowComposer.getLineAt(++lineInc + curLine);
+				if (!nextFlowLine || nextFlowLine.absoluteStart >= limitIdx)
 				{
 					if (!extendSelection)
 						range.activePosition = range.anchorPosition = textFlow.textLength - 1;
@@ -567,8 +572,8 @@
 				var lineStart:int = curTextFlowLine.absoluteStart;
 				var lineDelta:int = endIdx - lineStart;
 				var currentTextLine:TextLine = curTextFlowLine.getTextLine(true);
-				var para:ParagraphElement = curTextFlowLine.paragraph;
-				var atomIndex:int = currentTextLine.getAtomIndexAtCharIndex(endIdx - para.getAbsoluteStart());
+				var blockOffset:int = curTextFlowLine.paragraph.getTextBlockAbsoluteStart(currentTextLine.textBlock);
+				var atomIndex:int = currentTextLine.getAtomIndexAtCharIndex(endIdx - blockOffset);
 				var curPosRect:Rectangle = currentTextLine.getAtomBounds(atomIndex);
 				var currentTextLineX:Number = currentTextLine.x;
 				var curPosRectLeft:Number = curPosRect.left;
@@ -602,7 +607,19 @@
 				
 				//at this point, we have the global point of our current position.  Now adjust x or y to the
 				//baseline of the next line.
-				var prevFlowLine:TextFlowLine = textFlow.flowComposer.getLineAt(curLine - 1);
+				var lineInc:int = 1;
+				var prevFlowLine:TextFlowLine = textFlow.flowComposer.getLineAt(curLine - lineInc);
+				while(prevFlowLine is TextFlowTableBlock)
+					prevFlowLine = textFlow.flowComposer.getLineAt(curLine - (++lineInc));
+				if (!prevFlowLine)
+				{
+					if (!extendSelection)
+						range.activePosition = range.anchorPosition = 0;
+					else
+						range.activePosition = 0;
+					return true;
+				}
+
 				// get the last container so that we can make sure the previous line is in view.
 				var controller:ContainerController = textFlow.flowComposer.getControllerAt(textFlow.flowComposer.numControllers-1);
 				var firstPosInContainer:int = controller.absoluteStart;
