Index: /CKEditor/branches/prototype/_source/core/dom/range.js
===================================================================
--- /CKEditor/branches/prototype/_source/core/dom/range.js	(revision 2757)
+++ /CKEditor/branches/prototype/_source/core/dom/range.js	(revision 2758)
@@ -409,9 +409,5 @@
 
 			if ( start.equals( end ) )
-			{
-				if ( start.type == CKEDITOR.NODE_ELEMENT && this.endOffset == this.startOffset + 1 )
-					return start.getChild( this.startOffset );
 				return start;
-			}
 
 			if ( end.type == CKEDITOR.NODE_ELEMENT && end.contains( start ) )
Index: /CKEditor/branches/prototype/_source/plugins/link/dialogs/link.js
===================================================================
--- /CKEditor/branches/prototype/_source/plugins/link/dialogs/link.js	(revision 2757)
+++ /CKEditor/branches/prototype/_source/plugins/link/dialogs/link.js	(revision 2758)
@@ -666,6 +666,14 @@
 			if ( ranges.length == 1 )
 			{
-				var rangeRoot = ranges[0].getCommonAncestor(),
-					element = rangeRoot.getAscendant( 'a', true );
+				ranges[0].enlarge( CKEDITOR.ENLARGE_ELEMENT );
+
+				var rangeRoot = ranges[0].startContainer.getChild( ranges[0].startOffset ), element;
+				if ( ranges[0].startContainer.equals( ranges[0].endContainer )
+						&& ranges[0].startContainer.type == CKEDITOR.NODE_ELEMENT 
+						&& ranges[0].startOffset == ranges[0].endOffset - 1 )
+					rangeRoot = ranges[0].startContainer.getChild( ranges[0].startOffset );
+				else
+					rangeRoot = ranges[0].getCommonAncestor();
+				element = rangeRoot.getAscendant( 'a', true );
 				if ( element && element.getAttribute( 'href' ) )
 				{
