Index: /CKEditor/trunk/_source/core/dom/element.js
===================================================================
--- /CKEditor/trunk/_source/core/dom/element.js	(revision 3492)
+++ /CKEditor/trunk/_source/core/dom/element.js	(revision 3493)
@@ -242,11 +242,10 @@
 			while ( lastChild && lastChild.type == CKEDITOR.NODE_TEXT && !CKEDITOR.tools.rtrim( lastChild.getText() ) )
 				lastChild = lastChild.getPrevious();
-
-			if ( !lastChild || ( lastChild.is && ( !lastChild.is( 'br' ) || !lastChild.getAttribute( '_cke_bogus' ) ) ) )
+			if ( !lastChild || !lastChild.is || !lastChild.is( 'br' ) )
 			{
 				this.append(
 					CKEDITOR.env.opera ?
 						this.getDocument().createText('') :
-						this.getDocument().createElement( 'br', { attributes : { _cke_bogus : 1 } } ) );
+						this.getDocument().createElement( 'br' ) );
 			}
 		},
Index: /CKEditor/trunk/_source/plugins/enterkey/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/enterkey/plugin.js	(revision 3492)
+++ /CKEditor/trunk/_source/plugins/enterkey/plugin.js	(revision 3493)
@@ -260,10 +260,17 @@
 
 			// A text node is required by Gecko only to make the cursor blink.
+			// We need some text inside of it, so the bogus <br> is properly
+			// created.
 			if ( CKEDITOR.env.gecko )
-				doc.createText( '' ).insertAfter( lineBreak );
+				doc.createText( '\ufeff' ).insertAfter( lineBreak );
 
 			// If we are at the end of a block, we must be sure the bogus node is available in that block.
 			if ( isEndOfBlock && !CKEDITOR.env.ie )
 				lineBreak.getParent().appendBogus();
+
+			// Now we can remove the text node contents, so the caret doesn't
+			// stop on it.
+			if ( CKEDITOR.env.gecko )
+				lineBreak.getNext().$.nodeValue = '';
 
 			// IE has different behavior regarding position.
