Index: /CKEditor/trunk/_source/core/dom/element.js
===================================================================
--- /CKEditor/trunk/_source/core/dom/element.js	(revision 7248)
+++ /CKEditor/trunk/_source/core/dom/element.js	(revision 7249)
@@ -720,18 +720,29 @@
 		},
 
-		isEditable : function()
-		{
-			if ( this.isReadOnly() || !this.isVisible() )
+		/**
+		 * Decide whether one element is able to receive cursor.
+		 * @param {Boolean} [textCursor=true] Only consider element that could receive text child.
+		 */
+		isEditable : function( textCursor )
+		{
+			var name = this.getName();
+
+			if ( this.isReadOnly()
+					|| this.getComputedStyle( 'display' ) == 'none'
+					|| this.getComputedStyle( 'visibility' ) == 'hidden'
+					|| CKEDITOR.dtd.$nonEditable[ name ] )
+			{
 				return false;
-
-			// Get the element name.
-			var name = this.getName();
-
-			// Get the element DTD (defaults to span for unknown elements).
-			var dtd = !CKEDITOR.dtd.$nonEditable[ name ]
-						&& ( CKEDITOR.dtd[ name ] || CKEDITOR.dtd.span );
-
-			// In the DTD # == text node.
-			return ( dtd && dtd['#'] );
+			}
+
+			if ( textCursor !== false )
+			{
+				// Get the element DTD (defaults to span for unknown elements).
+				var dtd = CKEDITOR.dtd[ name ] || CKEDITOR.dtd.span;
+				// In the DTD # == text node.
+				return ( dtd && dtd[ '#'] );
+			}
+
+			return true;
 		},
 
Index: /CKEditor/trunk/_source/core/dom/range.js
===================================================================
--- /CKEditor/trunk/_source/core/dom/range.js	(revision 7248)
+++ /CKEditor/trunk/_source/core/dom/range.js	(revision 7249)
@@ -1926,6 +1926,5 @@
 
 				if ( node.type == CKEDITOR.NODE_ELEMENT
-						&& !node.isReadOnly()
-						&& node.isVisible()
+						&& node.isEditable( false )
 						&& !CKEDITOR.dtd.$nonEditable[ node.getName() ] )
 				{
