Index: /CKEditor/tests/dt/core/dom/range.html
===================================================================
--- /CKEditor/tests/dt/core/dom/range.html	(revision 5557)
+++ /CKEditor/tests/dt/core/dom/range.html	(revision 5558)
@@ -2315,4 +2315,37 @@
 			assert.areSame( 2, range.endOffset, 'range.endOffset' );
 			assert.isFalse( range.collapsed, 'range.collapsed' );
+		},
+
+		// Test enclosed node doesn't exist.
+		test_enclosed_node : function()
+		{
+			var range = new CKEDITOR.dom.range( doc );
+			range.setStart( doc.getById( '_enclosed' ), 1 );
+			range.setEnd( doc.getById( '_enclosed_i' ), 1 );
+			// <p> Test [<i>enclosed]</i> node.</p>
+
+			assert.isNull( range.getEnclosedNode() );
+		},
+
+		// Test enclosed node doesn't exist.
+		test_enclosed_node2 : function()
+		{
+			var range = new CKEDITOR.dom.range( doc );
+			range.setStart( doc.getById( '_enclosed' ).getLast(), 1 );
+			range.setEnd( doc.getById( '_enclosed' ).getLast(), 5 );
+			// <p> Test <i>enclosed</i> [node].</p>
+
+			assert.isNull( range.getEnclosedNode() );
+		},
+
+		// Test enclosed node exist.
+		test_enclosed_node3 : function()
+		{
+			var range = new CKEDITOR.dom.range( doc );
+			range.setStart( doc.getById( '_enclosed' ).getFirst(), 6 );
+			range.setEnd( doc.getById( '_enclosed' ).getLast(), 0 );
+			// <p> Test [<i>enclosed</i>] node.</p>
+
+			assert.isTrue( doc.getById( '_enclosed_i' ).equals( range.getEnclosedNode() ) );
 		},
 
@@ -2476,4 +2509,5 @@
 		<p id="_ShrinkP3"> Test shrink <b id="_ShrinkB3"><i id="_ShrinkI3"><img /></i></b>element.</p>
 		<p id="_ShrinkP4"> Test <b id="_ShrinkB4">shrink <i id="_ShrinkI4"><img /></i>element</b>.</p>
+		<p id="_enclosed"> Test <i id="_enclosed_i">enclosed</i> node.</p>
 	</div>
 	<script type="text/javascript">
Index: /CKEditor/trunk/CHANGES.html
===================================================================
--- /CKEditor/trunk/CHANGES.html	(revision 5557)
+++ /CKEditor/trunk/CHANGES.html	(revision 5558)
@@ -45,4 +45,5 @@
 			Fixed issues:</p>
 	<ul>
+		<li><a href="http://dev.fckeditor.net/ticket/5780">#5780</a> : Text selection lost when open some of the dialogs.</li>
 		<li><a href="http://dev.fckeditor.net/ticket/5787">#5787</a> : Liststyle plugin wasn't packaged into the core (CKEDITOR.resourceManager.load exception).</li>
 		<li><a href="http://dev.fckeditor.net/ticket/5637">#5637</a> : Fix wrong nesting that generated "&lt;head&gt; must be a child of &lt;html&gt;" warning in Webkit.</li>
Index: /CKEditor/trunk/_source/core/dom/range.js
===================================================================
--- /CKEditor/trunk/_source/core/dom/range.js	(revision 5557)
+++ /CKEditor/trunk/_source/core/dom/range.js	(revision 5558)
@@ -1790,6 +1790,13 @@
 		getEnclosedNode : function()
 		{
-			var walkerRange = this.clone(),
-				walker = new CKEDITOR.dom.walker( walkerRange ),
+			var walkerRange = this.clone();
+
+			// Optimize and analyze the range to avoid DOM destructive nature of walker. (#
+			walkerRange.optimize();
+			if ( walkerRange.startContainer.type != CKEDITOR.NODE_ELEMENT
+					|| walkerRange.endContainer.type != CKEDITOR.NODE_ELEMENT )
+				return null;
+
+			var walker = new CKEDITOR.dom.walker( walkerRange ),
 				isNotBookmarks = CKEDITOR.dom.walker.bookmark( true ),
 				isNotWhitespaces = CKEDITOR.dom.walker.whitespaces( true ),
