Index: /CKEditor/trunk/_source/core/dom/range.js
===================================================================
--- /CKEditor/trunk/_source/core/dom/range.js	(revision 7559)
+++ /CKEditor/trunk/_source/core/dom/range.js	(revision 7560)
@@ -1844,9 +1844,4 @@
 			}
 
-			// Antecipate the trim() call here, so the walker will not make
-			// changes to the DOM, which would not get reflected into this
-			// range otherwise.
-			this.trim();
-
 			// We need to grab the block element holding the start boundary, so
 			// let's use an element path for it.
@@ -1877,9 +1872,4 @@
 					return false;
 			}
-
-			// Antecipate the trim() call here, so the walker will not make
-			// changes to the DOM, which would not get reflected into this
-			// range otherwise.
-			this.trim();
 
 			// We need to grab the block element holding the start boundary, so
Index: /CKEditor/trunk/_source/plugins/selection/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/selection/plugin.js	(revision 7559)
+++ /CKEditor/trunk/_source/plugins/selection/plugin.js	(revision 7560)
@@ -280,5 +280,5 @@
 						// than firing the selection change event.
 
-						var savedBookmark,
+						var savedRange,
 							saveEnabled,
 							restoreEnabled = 1;
@@ -295,5 +295,7 @@
 
 								// Give the priority to locked selection since it probably
-								// reflects the actual situation. (#6083, #6987)
+								// reflects the actual situation, besides locked selection
+								// could be interfered because of text nodes normalizing.
+								// (#6083, #6987)
 								var lockedSelection = doc.getCustomData( 'cke_locked_selection' );
 								if ( lockedSelection )
@@ -304,11 +306,9 @@
 								// Then check ff we have saved a range, restore it at this
 								// point.
-								else if ( savedBookmark && restoreEnabled )
+								else if ( savedRange && restoreEnabled )
 								{
-									var range = doc.getSelection().getNative().createRange();
-									range.moveToBookmark( savedBookmark );
 									// Well not break because of this.
-									try { range.select(); } catch (e) {}
-									savedBookmark = null;
+									try { savedRange.select(); } catch (e) {}
+									savedRange = null;
 								}
 							});
@@ -540,7 +540,5 @@
 								}
 
-								// Create an IE Range bookmark to defeat possible text node normalization.
-								try { savedBookmark = nativeSel && nativeSel.createRange().getBookmark(); }
-								catch(er){}
+								savedRange = nativeSel && sel.getRanges()[ 0 ];
 
 								checkSelectionChangeTimeout.call( editor );
@@ -1454,6 +1452,4 @@
 					this.reset();
 
-					doc.getBody().focus();
-
 					if ( selectedElement )
 						this.selectElement( selectedElement );
