Index: /CKEditor/trunk/CHANGES.html
===================================================================
--- /CKEditor/trunk/CHANGES.html	(revision 5491)
+++ /CKEditor/trunk/CHANGES.html	(revision 5492)
@@ -92,4 +92,5 @@
 		<li><a href="http://dev.fckeditor.net/ticket/5676">#5676</a> : Make color buttons use RRGGBB instead of RGB for better compatibility with IE.</li>
 		<li><a href="http://dev.fckeditor.net/ticket/4948">#4948</a> : [Safari] Select the first/last cell of table to open context menu may lead to undetected table.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5591">#5591</a> : [Firefox] Select a list item makes selected element broken.</li>
 		<li>Updated the following language files:<ul>
 			<li><a href="http://dev.fckeditor.net/ticket/5432">#5432</a> : Dutch;</li>
Index: /CKEditor/trunk/_source/plugins/selection/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/selection/plugin.js	(revision 5491)
+++ /CKEditor/trunk/_source/plugins/selection/plugin.js	(revision 5492)
@@ -754,14 +754,19 @@
 				function()
 				{
-					var range  = self.getRanges()[ 0 ];
-					range.shrink( CKEDITOR.SHRINK_ELEMENT );
-
-					var enclosed;
-					if ( range.startContainer.equals( range.endContainer )
-						&& ( range.endOffset - range.startOffset ) == 1
-						&& styleObjectElements[ ( enclosed = range.startContainer.getChild( range.startOffset ) ).getName() ] )
-					{
-						return enclosed.$;
+					var range  = self.getRanges()[ 0 ],
+						enclosed,
+						selected;
+					
+					// Check first any enclosed element, e.g. <ul>[<li><a href="#">item</a></li>]</ul>
+					for ( var i = 2; i && !( ( enclosed = range.getEnclosedNode() )
+						&& ( enclosed.type == CKEDITOR.NODE_ELEMENT )
+						&& styleObjectElements[ enclosed.getName() ]
+						&& ( selected = enclosed ) ); i-- )
+					{
+						// Then check any deep wrapped element, e.g. [<b><i><img /></i></b>] 
+						range.shrink( CKEDITOR.SHRINK_ELEMENT );
 					}
+					
+					return  selected.$;
 				});
 
