Index: /CKEditor/trunk/CHANGES.html
===================================================================
--- /CKEditor/trunk/CHANGES.html	(revision 4662)
+++ /CKEditor/trunk/CHANGES.html	(revision 4663)
@@ -93,4 +93,5 @@
 		<li><a href="http://dev.fckeditor.net/ticket/4733">#4733</a> : Fixed dialog opening sometimes hang up Firefox and Safari.</li>
 		<li><a href="http://dev.fckeditor.net/ticket/4498">#4498</a> : Fixed toolbar collapse button missing tooltip.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4738">#4738</a> : Fixed inserting table inside bold/italic/underline generates error on ENTER_BR mode.</li>
 		<li>Updated the following language files:<ul>
 			<li><a href="http://dev.fckeditor.net/ticket/4346">#4346</a> : Dutch;</li>
Index: /CKEditor/trunk/_source/core/dom/range.js
===================================================================
--- /CKEditor/trunk/_source/core/dom/range.js	(revision 4662)
+++ /CKEditor/trunk/_source/core/dom/range.js	(revision 4663)
@@ -1459,17 +1459,5 @@
 				else
 				{
-					// Extract the contents of the block from the selection point to the end
-					// of its contents.
-					this.setEndAt( startBlock, CKEDITOR.POSITION_BEFORE_END );
-					var documentFragment = this.extractContents();
-
-					// Duplicate the block element after it.
-					endBlock = startBlock.clone( false );
-
-					// Place the extracted contents into the duplicated block.
-					documentFragment.appendTo( endBlock );
-					endBlock.insertAfter( startBlock );
-					this.moveToPosition( startBlock, CKEDITOR.POSITION_AFTER_END );
-
+					this.splitElement( startBlock );
 					// In Gecko, the last child node must be a bogus <br>.
 					// Note: bogus <br> added under <ul> or <ol> would cause
@@ -1487,4 +1475,29 @@
 				elementPath : elementPath
 			};
+		},
+
+		/**
+		 * Branch the specified element from the collapsed range position and
+		 * place the caret between the two result branches.
+		 * Note: The range must be collapsed and been enclosed by this element.
+		 * @param {CKEDITOR.dom.element} element
+		 */
+		splitElement : function( toSplit )
+		{
+			if( !this.collapsed )
+				return;
+
+			// Extract the contents of the block from the selection point to the end
+			// of its contents.
+			this.setEndAt( toSplit, CKEDITOR.POSITION_BEFORE_END );
+			var documentFragment = this.extractContents();
+
+			// Duplicate the element after it.
+			var clone = toSplit.clone( false );
+
+			// Place the extracted contents into the duplicated element.
+			documentFragment.appendTo( clone );
+			clone.insertAfter( toSplit );
+			this.moveToPosition( toSplit, CKEDITOR.POSITION_AFTER_END );
 		},
 
Index: /CKEditor/trunk/_source/plugins/wysiwygarea/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/wysiwygarea/plugin.js	(revision 4662)
+++ /CKEditor/trunk/_source/plugins/wysiwygarea/plugin.js	(revision 4663)
@@ -89,7 +89,10 @@
 							&& !( dtd && dtd [ elementName ] ) )
 					{
+						// Split up inline elements.
+						if( current.getName() in CKEDITOR.dtd.span )
+							range.splitElement( current );
 						// If we're in an empty block which indicate a new paragraph,
 						// simply replace it with the inserting block.(#3664)
-						if ( range.checkStartOfBlock()
+						else if ( range.checkStartOfBlock()
 							 && range.checkEndOfBlock() )
 						{
