Index: /CKEditor/trunk/CHANGES.html
===================================================================
--- /CKEditor/trunk/CHANGES.html	(revision 5102)
+++ /CKEditor/trunk/CHANGES.html	(revision 5103)
@@ -89,4 +89,5 @@
 		<li><a href="http://dev.fckeditor.net/ticket/4893">#4893</a> : Editor should understand table cell inline styles.</li>
 		<li><a href="http://dev.fckeditor.net/ticket/4611">#4611</a> : Selection around &lt;select&gt; in editor doesn't anymore cause error.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4886">#4886</a> : Extra BR tags where being created in the output HTML.</li>
 		<li>Updated the following language files:<ul>
 			<li><a href="http://dev.fckeditor.net/ticket/5006">#5006</a> : Dutch;</li>
Index: /CKEditor/trunk/_source/core/htmlparser/fragment.js
===================================================================
--- /CKEditor/trunk/_source/core/htmlparser/fragment.js	(revision 5102)
+++ /CKEditor/trunk/_source/core/htmlparser/fragment.js	(revision 5103)
@@ -65,4 +65,5 @@
 			fragment = new CKEDITOR.htmlParser.fragment(),
 			pendingInline = [],
+			pendingBRs = [],
 			currentNode = fragment,
 		    // Indicate we're inside a <pre> element, spaces should be touched differently.
@@ -72,4 +73,6 @@
 		function checkPending( newTagName )
 		{
+			var pendingBRsSent;
+
 			if ( pendingInline.length > 0 )
 			{
@@ -83,4 +86,10 @@
 					if ( ( !currentDtd || currentDtd[ pendingName ] ) && ( !newTagName || !pendingDtd || pendingDtd[ newTagName ] || !CKEDITOR.dtd[ newTagName ] ) )
 					{
+						if ( !pendingBRsSent )
+						{
+							sendPendingBRs();
+							pendingBRsSent = 1;
+						}
+
 						// Get a clone for the pending element.
 						pendingElement = pendingElement.clone();
@@ -98,4 +107,10 @@
 				}
 			}
+		}
+
+		function sendPendingBRs()
+		{
+			while ( pendingBRs.length )
+				currentNode.add( pendingBRs.shift() );
 		}
 
@@ -182,4 +197,10 @@
 			}
 
+			if ( tagName == 'br' )
+			{
+				pendingBRs.push( element );
+				return;
+			}
+
 			var currentName = currentNode.name;
 
@@ -309,6 +330,9 @@
 				currentNode = candidate;
 
-				if( currentNode.name == 'pre' )
+				if ( currentNode.name == 'pre' )
 					inPre = false;
+
+				if ( candidate._.isBlockLike )
+					sendPendingBRs();
 
 				addElement( candidate, candidate.parent );
@@ -322,5 +346,5 @@
 			}
 
-			if( tagName == 'body' )
+			if ( tagName == 'body' )
 				fixForBody = false;
 		};
@@ -337,4 +361,5 @@
 			}
 
+			sendPendingBRs();
 			checkPending();
 
@@ -366,4 +391,6 @@
 		// Parse it.
 		parser.parse( fragmentHtml );
+
+		sendPendingBRs();
 
 		// Close all pending nodes.
