Index: /CKEditor/trunk/_source/core/dom/element.js
===================================================================
--- /CKEditor/trunk/_source/core/dom/element.js	(revision 3455)
+++ /CKEditor/trunk/_source/core/dom/element.js	(revision 3456)
@@ -1328,4 +1328,32 @@
 			newNode.$._cke_expando = this.$._cke_expando;
 			this.$ = newNode.$;
-		}
+		},
+
+		/**
+		 * Gets a DOM tree descendant under the current node.
+		 * @param {Array|Number} indices The child index or array of child indices under the node.
+		 * @returns {CKEDITOR.dom.node} The specified DOM child under the current node. Null if child does not exist.
+		 * @example
+		 * var strong = p.getChild(0);
+		 */
+		getChild : function( indices )
+		{
+			var rawNode = this.$;
+
+			if ( !indices.slice )
+				rawNode = rawNode.childNodes[ indices ];
+			else
+			{
+				while ( indices.length > 0 && rawNode )
+					rawNode = rawNode.childNodes[ indices.shift() ];
+			}
+
+			return rawNode ? new CKEDITOR.dom.node( rawNode ) : null;
+		},
+
+		getChildCount : function()
+		{
+			return this.$.childNodes.length;
+ 		},
+
 	});
Index: /CKEditor/trunk/_source/core/dom/node.js
===================================================================
--- /CKEditor/trunk/_source/core/dom/node.js	(revision 3455)
+++ /CKEditor/trunk/_source/core/dom/node.js	(revision 3456)
@@ -222,31 +222,4 @@
 
 		/**
-		 * Gets a DOM tree descendant under the current node.
-		 * @param {Array|Number} indices The child index or array of child indices under the node.
-		 * @returns {CKEDITOR.dom.node} The specified DOM child under the current node. Null if child does not exist.
-		 * @example
-		 * var strong = p.getChild(0);
-		 */
-		getChild : function( indices )
-		{
-			var rawNode = this.$;
-
-			if ( !indices.slice )
-				rawNode = rawNode.childNodes[ indices ];
-			else
-			{
-				while ( indices.length > 0 && rawNode )
-					rawNode = rawNode.childNodes[ indices.shift() ];
-			}
-
-			return rawNode ? new CKEDITOR.dom.node( rawNode ) : null;
-		},
-
-		getChildCount : function()
-		{
-			return this.$.childNodes.length;
-		},
-
-		/**
 		 * Gets the document containing this element.
 		 * @returns {CKEDITOR.dom.document} The document.
Index: /CKEditor/trunk/_source/plugins/selection/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/selection/plugin.js	(revision 3455)
+++ /CKEditor/trunk/_source/plugins/selection/plugin.js	(revision 3456)
@@ -625,4 +625,18 @@
 							range.optimize();
 
+							// Decrease the range content to exclude particial
+							// selected node on the start which doesn't have
+							// visual impact. ( #3231 )
+							while( true )
+							{
+								var startContainer = range.startContainer,
+									startOffset = range.startOffset;
+								if ( startOffset == ( startContainer.getChildCount ?
+									startContainer.getChildCount() : startContainer.getLength() ) )
+									range.setStartAfter( startContainer );
+								else break;
+							}
+							do
+
 							node = range.startContainer;
 
