diff --git a/automation_tests/src/UnitTest/Tests/KeyboardGestureTest.as b/automation_tests/src/UnitTest/Tests/KeyboardGestureTest.as
index 79a4334..2861a1a 100644
--- a/automation_tests/src/UnitTest/Tests/KeyboardGestureTest.as
+++ b/automation_tests/src/UnitTest/Tests/KeyboardGestureTest.as
@@ -2808,13 +2808,13 @@
 
             SelManager.selectRange(6067, 6067);
             sendKeyboardGesture(PG_UP);
-            assertTrue("PgUp failed to select 7/8 page up",
+            assertTrue("PgUp failed to select 7/8 page up. Expected 3332,3332 but got " + SelManager.activePosition + "," + SelManager.anchorPosition + " instead.",
                     SelManager.activePosition == 3332 &&
                     SelManager.anchorPosition == 3332);
 
             SelManager.selectRange(1314, 1314);
             sendKeyboardGesture(PG_UP);
-            assertTrue("PgUp failed to select to top line",
+            assertTrue("PgUp failed to select to top line Expected 72,72 but got " + SelManager.activePosition + "," + SelManager.anchorPosition + " instead.",
                     SelManager.activePosition == 72 &&
                     SelManager.anchorPosition == 72);
         }
@@ -2844,7 +2844,7 @@
 
             SelManager.selectRange(608, 608);
             sendKeyboardGesture(PG_UP);
-            assertTrue("PageUp failed to move up from image sandwich",
+            assertTrue("PageUp failed to move up from image sandwich. Expected 460,460 but got " + SelManager.activePosition + "," + SelManager.anchorPosition + " instead.",
                     SelManager.activePosition == 460 &&
                     SelManager.anchorPosition == 460);
 
@@ -2897,7 +2897,7 @@
             SelManager.selectRange(261, 261);
             sendKeyboardGesture(PG_UP);
 
-            assertTrue("PageUp changed movement behavior within right to left text",
+            assertTrue("PageUp changed movement behavior within right to left text. Expected 12,12 but got " + SelManager.activePosition + "," + SelManager.anchorPosition + " instead.",
                     SelManager.activePosition == 12 &&
                     SelManager.anchorPosition == 12);
 
@@ -2937,7 +2937,7 @@
 
             SelManager.selectRange(6067, 6067);
             sendKeyboardGesture(SHIFT_PG_UP);
-            assertTrue("Shift-PageUp failed to select 7/8 page up",
+            assertTrue("Shift-PageUp failed to select 7/8 page up. Expected 3332,6067 but got " + SelManager.activePosition + "," + SelManager.anchorPosition + " instead.",
                     SelManager.activePosition == 3332 &&
                     SelManager.anchorPosition == 6067);
 
@@ -2973,7 +2973,7 @@
 
             SelManager.selectRange(608, 608);
             sendKeyboardGesture(SHIFT_PG_UP);
-            assertTrue("Shift-PageUp failed to move up from image sandwich",
+            assertTrue("Shift-PageUp failed to move up from image sandwich. Expected 460,608 but got " + SelManager.activePosition + "," + SelManager.anchorPosition + " instead.",
                     SelManager.activePosition == 460 &&
                     SelManager.anchorPosition == 608);
 
@@ -3026,7 +3026,7 @@
             SelManager.selectRange(261, 261);
             sendKeyboardGesture(SHIFT_PG_UP);
 
-            assertTrue("Shift-PageUp changed movement behavior within right to left text",
+            assertTrue("Shift-PageUp changed movement behavior within right to left text. Expected 12,261 but got " + SelManager.activePosition + "," + SelManager.anchorPosition + " instead.",
                     SelManager.activePosition == 12 &&
                     SelManager.anchorPosition == 261);
 
diff --git a/textLayout/src/flashx/textLayout/elements/ParagraphElement.as b/textLayout/src/flashx/textLayout/elements/ParagraphElement.as
index dbb01b8..ab92d83 100644
--- a/textLayout/src/flashx/textLayout/elements/ParagraphElement.as
+++ b/textLayout/src/flashx/textLayout/elements/ParagraphElement.as
@@ -81,7 +81,6 @@
 	public final class ParagraphElement extends ParagraphFormattedElement
 	{
 		//private var _textBlock:TextBlock;
-		private var _textBlockChildren:Dictionary;
 		private var _terminatorSpan:SpanElement;
 		
 		private var _interactiveChildrenCount:int;
@@ -97,7 +96,6 @@
 			super();
 			_terminatorSpan = null;
 			_interactiveChildrenCount = 0 ;
-			_textBlockChildren = new Dictionary();
 		}
 		tlf_internal function get interactiveChildrenCount():int
 		{
@@ -142,7 +140,7 @@
 				updateTextBlock(tb);
 			}
 		}
-		private function updateTextBlockDict():void
+		private function updateTextBlockRefs():void
 		{
 			var tbs:Vector.<TextBlock> = getTextBlocks();
 			if(tbs.length == 0)
@@ -156,14 +154,22 @@
 				child = getChildAt(i);
 				if(child is TableElement)
 				{
-					_textBlockChildren[tb] = items;
-					tb = tbs[++tbIdx];
+					tb.userData = items;
+					if(++tbIdx == tbs.length)
+						return;
+					tb = tbs[tbIdx];
+					tb.userData = null;
+
+					//Advance to the next one.
+					if(++tbIdx == tbs.length)
+						return;
+					tb = tbs[tbIdx];
 					items = [];
 					continue;
 				}
 				items.push(child);
 			}
-			_textBlockChildren[tb] = items;
+			tb.userData = items;
 		}
 		private function removeTextBlock(tb:TextBlock):void
 		{
@@ -174,7 +180,6 @@
 				if(idx > -1)
 				{
 					tbs.splice(idx,1);
-					delete _textBlockChildren[tb];
 				}
 			}
 		}
@@ -201,21 +206,24 @@
 				CONFIG::debug { Debugging.traceFTECall(null,tb,"releaseLines",tb.firstLine, tb.lastLine); }				
 				tb.releaseLines(tb.firstLine, tb.lastLine);	
 			}	
-			var items:Array = _textBlockChildren[tb];
-			var len:int = items.length;
-			for (var i:int = 0; i < len; i++)
+			var items:Array = tb.userData;
+			if(items)
 			{
-				var child:FlowElement = items[i];
-				child.releaseContentElement();
+				var len:int = items.length;
+				for (var i:int = 0; i < len; i++)
+				{
+					var child:FlowElement = items[i];
+					child.releaseContentElement();
+				}
+				items.length = 0;
 			}
-			items.length = 0;
 			tb.content = null;
 			removeTextBlock(tb);
 		}
 		/** @private */
 		tlf_internal function releaseTextBlock(tb:TextBlock=null):void
 		{
-			updateTextBlockDict();
+			updateTextBlockRefs();
 			if(tb)
 			{
 				releaseTextBlockInternal(tb);
