Index: /CKEditor/trunk/CHANGES.html
===================================================================
--- /CKEditor/trunk/CHANGES.html	(revision 7414)
+++ /CKEditor/trunk/CHANGES.html	(revision 7415)
@@ -80,4 +80,5 @@
 		<li><a href="http://dev.ckeditor.com/ticket/8774">#8774</a> : Fix entities plugin to allow it to be configured to only output XML entities.</li>
 		<li><a href="http://dev.ckeditor.com/ticket/8602">#8602</a> : Image src is now properly hidden when running data through the data processor.</li>
+		<li><a href="http://dev.ckeditor.com/ticket/8812">#8812</a> : Resolved issues on the IE native range translation with comments in the DOM.</li>
 	</ul>
 	<h3>
Index: /CKEditor/trunk/_source/plugins/selection/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/selection/plugin.js	(revision 7414)
+++ /CKEditor/trunk/_source/plugins/selection/plugin.js	(revision 7415)
@@ -846,5 +846,6 @@
 							index = -1,
 							position,
-							distance;
+							distance,
+							container;
 
 						// Binary search over all element childs to test the range to see whether
@@ -897,5 +898,5 @@
 								child = siblings[ siblings.length - 1 ];
 
-								if ( child.nodeType == CKEDITOR.NODE_ELEMENT )
+								if ( child.nodeType != CKEDITOR.NODE_TEXT )
 									return { container : parent, offset : siblings.length };
 								else
@@ -905,8 +906,15 @@
 							// Start the measuring until distance overflows, meanwhile count the text nodes.
 							var i = siblings.length;
-							while ( distance > 0 )
-								distance -= siblings[ --i ].nodeValue.length;
-
-							return  { container : siblings[ i ], offset : -distance };
+							while ( distance > 0 && i > 0 )
+							{
+								sibling = siblings[ --i ];
+								if ( sibling.nodeType == CKEDITOR.NODE_TEXT )
+								{
+									container = sibling;
+									distance -= sibling.nodeValue.length;
+								}
+							}
+
+							return  { container : container, offset : -distance };
 						}
 						// Test range was one offset beyond OR behind the anchored text node.
@@ -933,5 +941,9 @@
 								{
 									sibling = child[ position > 0 ? 'previousSibling' : 'nextSibling' ];
-									distance -= sibling.nodeValue.length;
+									if ( sibling.nodeType == CKEDITOR.NODE_TEXT )
+									{
+										distance -= sibling.nodeValue.length;
+										container = sibling;
+									}
 									child = sibling;
 								}
@@ -943,5 +955,5 @@
 							}
 
-							return { container : child, offset : position > 0 ? -distance : child.nodeValue.length + distance };
+							return { container : container, offset : position > 0 ? -distance : container.nodeValue.length + distance };
 						}
 					};
