Index: /CKEditor/trunk/_samples/replacebyclass.html
===================================================================
--- /CKEditor/trunk/_samples/replacebyclass.html	(revision 7561)
+++ /CKEditor/trunk/_samples/replacebyclass.html	(revision 7562)
@@ -49,5 +49,17 @@
 			<label for="editor1">
 				Editor 1:</label>
-			<textarea class="ckeditor" cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>
+			<textarea class="ckeditor" cols="80" id="editor1" name="editor1" rows="10">
+				<ul>
+					<li>foo
+						<ul>
+							<li>bar</li>
+						</ul>
+					</li>
+					<li>baz</li>
+				</ul>
+				<p>foo</p>
+				<ul><li></li><li>bar</li></ul>
+
+			</textarea>
 		</p>
 		<p>
Index: /CKEditor/trunk/_source/plugins/list/plugin.js
===================================================================
--- /CKEditor/trunk/_source/plugins/list/plugin.js	(revision 7561)
+++ /CKEditor/trunk/_source/plugins/list/plugin.js	(revision 7562)
@@ -973,4 +973,25 @@
 								evt.cancel();
 							}
+							else
+							{
+								var list = path.contains( listNodeNames ), li;
+
+								// Backspace pressed at the start of list. (#9129)
+								if ( list && range.checkBoundaryOfElement( list, CKEDITOR.START ) )
+								{
+									li = path.contains( CKEDITOR.dtd.$listItem );
+
+									// Outdent if inside of empty list item.
+									if ( range.checkBoundaryOfElement( li, CKEDITOR.START ) &&
+									     range.checkBoundaryOfElement( li, CKEDITOR.END ) )
+									{
+										editor.execCommand( 'outdent' );
+										evt.cancel();
+									}
+									// Avoid destroying the list if it gets no contents before.
+									else if ( !list.getPrevious( nonEmpty ) )
+										evt.cancel();
+								}
+							}
 						}
 						else
