Index: /CKEditor/trunk/CHANGES.html
===================================================================
--- /CKEditor/trunk/CHANGES.html	(revision 5283)
+++ /CKEditor/trunk/CHANGES.html	(revision 5284)
@@ -96,4 +96,5 @@
 		<li><a href="http://dev.fckeditor.net/ticket/5082">#5082</a> : Ctrl key should be described as Cmd key on Mac.</li>
 		<li><a href="http://dev.fckeditor.net/ticket/5182">#5182</a> : Context menu is not been announced correctly by ATs.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4898">#4898</a> : Can't navigate outside table inside the last paragraph of document.</li>
 	</ul>
 	<h3>
Index: /CKEditor/trunk/_source/plugins/wysiwygarea/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/wysiwygarea/plugin.js	(revision 5283)
+++ /CKEditor/trunk/_source/plugins/wysiwygarea/plugin.js	(revision 5284)
@@ -171,4 +171,6 @@
 	}
 
+	var isNotWhitespace = CKEDITOR.dom.walker.whitespaces( true );
+
 	/**
 	 *  Auto-fixing block-less content by wrapping paragraph (#3190), prevent
@@ -212,5 +214,4 @@
 					nextElement = fixedBlock.getNext( isNotWhitespace );
 
-
 				if ( previousElement && previousElement.getName
 					 && !( previousElement.getName() in nonExitableElementNames )
@@ -223,9 +224,4 @@
 				}
 			}
-
-			range.select();
-			// Notify non-IE that selection has changed.
-			if ( !CKEDITOR.env.ie )
-				editor.selectionChange();
 		}
 
@@ -233,15 +229,33 @@
 		// blocks (e.g. table, list, pre) at the end of document, make this happen by
 		// place a bogus node there, which would be later removed by dataprocessor.
-		var lastNode = body.getLast( CKEDITOR.dom.walker.whitespaces( true ) );
-		if ( lastNode && lastNode.getName && ( lastNode.getName() in nonExitableElementNames ) )
+		var walkerRange = new CKEDITOR.dom.range( editor.document ),
+			walker = new CKEDITOR.dom.walker( walkerRange );
+		walkerRange.selectNodeContents( body );
+		walker.evaluator = function( node )
+		{
+			return node.type == CKEDITOR.NODE_ELEMENT && ( node.getName() in nonExitableElementNames );
+		};
+		walker.guard = function( node, isMoveout )
+		{
+			return !( ( node.type == CKEDITOR.NODE_TEXT && isNotWhitespace( node ) ) || isMoveout );
+		};
+
+		if ( walker.previous() )
 		{
 			restoreDirty( editor );
 			CKEDITOR.env.ie && restoreSelection( selection );
 
+			var paddingBlock;
+			if ( enterMode != CKEDITOR.ENTER_BR )
+				paddingBlock = body.append( new CKEDITOR.dom.element( enterMode == CKEDITOR.ENTER_P ? 'p' : 'div' ) );
+			else
+				paddingBlock = body;
+
 			if ( !CKEDITOR.env.ie )
-				body.appendBogus();
-			else
-				body.append( editor.document.createText( '\xa0' ) );
+				paddingBlock.appendBogus();
 		}
+		
+		range.select();
+		editor.selectionChange();
 	}
 
