Index: /CKEditor/trunk/CHANGES.html
===================================================================
--- /CKEditor/trunk/CHANGES.html	(revision 6320)
+++ /CKEditor/trunk/CHANGES.html	(revision 6321)
@@ -93,4 +93,5 @@
 		<li><a href="http://dev.ckeditor.com/ticket/6909">#6909</a> :  [IE] GIF icons of toolbar button from custom plugins are not diplayed in zoom level 100%.</li>
 		<li><a href="http://dev.ckeditor.com/ticket/6860">#6860</a> :  [FF] double click on placeholder to open dialog throws JavaScript error.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/6630">#6630</a> :  Empty pre output variants among browsers.</li>
 	</ul>
 	<h3>
Index: /CKEditor/trunk/_source/core/dom/element.js
===================================================================
--- /CKEditor/trunk/_source/core/dom/element.js	(revision 6320)
+++ /CKEditor/trunk/_source/core/dom/element.js	(revision 6321)
@@ -255,4 +255,26 @@
 
 		/**
+		* Retrieve block element's filler node if existed.
+		*/
+	   getBogus : function()
+	   {
+		   if ( !this.isBlockBoundary() )
+			   return;
+
+		   var lastChild = this.getLast() ;
+
+		   // Ignore empty/spaces text.
+		   while ( lastChild && lastChild.type == CKEDITOR.NODE_TEXT && !CKEDITOR.tools.rtrim( lastChild.getText() ) )
+			   lastChild = lastChild.getPrevious();
+
+		   if ( lastChild &&
+			   ( CKEDITOR.env.ie && lastChild.type == CKEDITOR.NODE_TEXT && CKEDITOR.tools.trim( lastChild.getText() ).match( /^(?:&nbsp;|\xa0)$/ )
+			   ||	CKEDITOR.env.gecko && CKEDITOR.env.webkit && lastChild.is( 'br' ) ) )
+		   {
+			   return lastChild;
+		   }
+	   },
+
+		/**
 		 * Breaks one of the ancestor element in the element position, moving
 		 * this element between the broken parts.
Index: /CKEditor/trunk/_source/plugins/htmldataprocessor/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/htmldataprocessor/plugin.js	(revision 6320)
+++ /CKEditor/trunk/_source/plugins/htmldataprocessor/plugin.js	(revision 6321)
@@ -200,4 +200,7 @@
 						delete element.name;
 				},
+
+				// Empty <pre> in IE is reported with filler node (&nbsp;).
+				pre : function( element ) { CKEDITOR.env.ie && trimFillers( element ); },
 
 				html : function( element )
Index: /CKEditor/trunk/_source/plugins/styles/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/styles/plugin.js	(revision 6320)
+++ /CKEditor/trunk/_source/plugins/styles/plugin.js	(revision 6321)
@@ -1026,4 +1026,7 @@
 	function toPre( block, newBlock )
 	{
+		var bogus = block.getBogus();
+		bogus && bogus.remove();
+
 		// First trim the block content.
 		var preHtml = block.getHtml();
