Index: /CKEditor/trunk/_source/plugins/selection/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/selection/plugin.js	(revision 6617)
+++ /CKEditor/trunk/_source/plugins/selection/plugin.js	(revision 6618)
@@ -70,4 +70,23 @@
 
 	// #### checkSelectionChange : END
+
+	function rangeRequiresFix( range )
+	{
+		function isInlineCt( node )
+		{
+			return node && node.type == CKEDITOR.NODE_ELEMENT
+					&& node.getName() in CKEDITOR.dtd.$removeEmpty;
+		}
+
+		var start = range.startContainer,
+			offset = range.startOffset;
+
+		if ( start.type == CKEDITOR.NODE_TEXT )
+			return false;
+
+		// 1. Empty inline element. <span>^</span>
+		// 2. Adjoin to inline element. <p><strong>text</strong>^</p>
+		return !CKEDITOR.tools.trim( start.getHtml() ) ? isInlineCt( start ) : isInlineCt( start.getChild( offset - 1 ) ) || isInlineCt( start.getChild( offset ) )
+	}
 
 	var selectAllCmd =
@@ -159,4 +178,6 @@
 						switch ( e.data.keyCode )
 						{
+							case 13 :	// ENTER
+							case CKEDITOR.SHIFT + 13 :	// SHIFT-ENTER
 							case 37 :	// LEFT-ARROW
 							case 39 :	// RIGHT-ARROW
@@ -164,5 +185,5 @@
 								removeFillingChar( editor.document );
 						}
-					});
+					}, null, null, 10 );
 
 				var fillingCharBefore;
@@ -1257,5 +1278,7 @@
 					}
 
-					if ( range.collapsed && CKEDITOR.env.webkit )
+					if ( range.collapsed
+							&& CKEDITOR.env.webkit
+							&& rangeRequiresFix( range ) )
 					{
 						// Append a zero-width space so WebKit will not try to
